From 001e27671af42d07b797aa173c205e9972a255b0 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 31 May 2026 03:38:20 +0000 Subject: [PATCH 01/68] Automatic changelog compile [ci skip] --- html/changelogs/MapFixFromTGW.yml | 6 -- html/changelogs/archive/2026-05.yml | 7 +++ .../kano-dot-cryo-outpost-repath-fix.yml | 6 -- html/changelogs/wezzy-sounds-joneses.yml | 58 ------------------- 4 files changed, 7 insertions(+), 70 deletions(-) delete mode 100644 html/changelogs/MapFixFromTGW.yml delete mode 100644 html/changelogs/kano-dot-cryo-outpost-repath-fix.yml delete mode 100644 html/changelogs/wezzy-sounds-joneses.yml diff --git a/html/changelogs/MapFixFromTGW.yml b/html/changelogs/MapFixFromTGW.yml deleted file mode 100644 index 5ef1eb1d4e7..00000000000 --- a/html/changelogs/MapFixFromTGW.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: TheGreyWolf - -delete-after: True - -changes: - - bugfix: "Gives the role merchant a EFTPOS." diff --git a/html/changelogs/archive/2026-05.yml b/html/changelogs/archive/2026-05.yml index 4b942c96eb6..70a8e829538 100644 --- a/html/changelogs/archive/2026-05.yml +++ b/html/changelogs/archive/2026-05.yml @@ -413,3 +413,10 @@ kermit: - rscadd: Adds 3x PsiProtect Broad Use pill bottles to the Pharmacy retail shelf for prescription refills (and investigation). +2026-05-31: + Kano: + - bugfix: Fixed the machinery repath in cryo outpost Odyssey map. + TheGreyWolf: + - bugfix: Gives the role merchant a EFTPOS. + Wowzewow (Wezzy): + - soundadd: Adds a whole lot more of pick up, drop, and handling sounds. diff --git a/html/changelogs/kano-dot-cryo-outpost-repath-fix.yml b/html/changelogs/kano-dot-cryo-outpost-repath-fix.yml deleted file mode 100644 index dbeaf7999ae..00000000000 --- a/html/changelogs/kano-dot-cryo-outpost-repath-fix.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Kano - -delete-after: True - -changes: - - bugfix: "Fixed the machinery repath in cryo outpost Odyssey map." diff --git a/html/changelogs/wezzy-sounds-joneses.yml b/html/changelogs/wezzy-sounds-joneses.yml deleted file mode 100644 index 310242698f6..00000000000 --- a/html/changelogs/wezzy-sounds-joneses.yml +++ /dev/null @@ -1,58 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# - (fixes bugs) -# wip -# - (work in progress) -# qol -# - (quality of life) -# soundadd -# - (adds a sound) -# sounddel -# - (removes a sound) -# rscadd -# - (adds a feature) -# rscdel -# - (removes a feature) -# imageadd -# - (adds an image or sprite) -# imagedel -# - (removes an image or sprite) -# spellcheck -# - (fixes spelling or grammar) -# experiment -# - (experimental change) -# balance -# - (balance changes) -# code_imp -# - (misc internal code change) -# refactor -# - (refactors code) -# config -# - (makes a change to the config files) -# admin -# - (makes changes to administrator tools) -# server -# - (miscellaneous changes to server) -################################# - -# Your name. -author: Wowzewow (Wezzy) - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - soundadd: "Adds a whole lot more of pick up, drop, and handling sounds." From 483674ac59a47c4a29b3f7e003fed20458d7c315 Mon Sep 17 00:00:00 2001 From: lew <82828093+Llywelwyn@users.noreply.github.com> Date: Mon, 1 Jun 2026 01:10:15 +0100 Subject: [PATCH 02/68] Animates the disappearance of the lower half of the body when north-side leaning (#22568) fixes #22249 - bugfix: "Leaning on the north side of a wall now correctly hides your lower body behind the wall instead of drawing you on top of it." - code_imp: "Adds a COMSIG_MOB_LYING_DOWN signal, sent when a mob transitions into lying down." Cutout was previously only cutting out the base because KEEP_TOGETHER wasn't being applied. Adds the flag on lean, removes it on stop_lean. Animated the cutout while here. Applies a mask to the whole sprite, then animates it upwards in step with the lean itself, so the feet progressively disappear as they should. https://github.com/user-attachments/assets/fec0a852-247a-4570-a6d1-60dda6fe6a3c --- .../__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm | 3 +++ code/datums/components/leanable.dm | 8 ++++++-- code/modules/mob/mob.dm | 2 ++ html/changelogs/llywelwyn-lean-layering.yml | 5 +++++ 4 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/llywelwyn-lean-layering.yml diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm index e3f7e76ecf7..e692d92b97f 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_main.dm @@ -46,6 +46,9 @@ /// Sent when a mob rests. #define COMSIG_MOB_RESTED "mob_rested" +/// Sent from /mob/proc/update_canmove() when the mob transitions into lying down. +#define COMSIG_MOB_LYING_DOWN "mob_lying_down" + /// From /obj/item/organ/external/take_damage. Updates the limb's colour matrix. Very laggy, so we do it on reaction to stuff. #define COMSIG_UPDATE_LIMB_IMAGE "update_limb_image" diff --git a/code/datums/components/leanable.dm b/code/datums/components/leanable.dm index 96edea51472..55b590793b9 100644 --- a/code/datums/components/leanable.dm +++ b/code/datums/components/leanable.dm @@ -95,7 +95,9 @@ shift_pixel_x = 10 animate(src, pixel_x = shift_pixel_x, pixel_y = shift_pixel_y, time = 1) if(direction == NORTH) - src.add_filter("cutout", 1, alpha_mask_filter(icon = icon('icons/effects/effects.dmi', "cutout"))) + src.appearance_flags |= KEEP_TOGETHER + src.add_filter("cutout", 1, alpha_mask_filter(y = 0, icon = icon('icons/effects/effects.dmi', "white"))) + animate(src.get_filter("cutout"), y = 10, time = 1, flags = ANIMATION_PARALLEL) if(direction == SOUTH) src.layer = ABOVE_DOOR_LAYER set_density(FALSE) @@ -105,7 +107,7 @@ SPAN_NOTICE("[src] leans against [lean_target]."), SPAN_NOTICE("You lean against [lean_target]."), ) - RegisterSignals(src, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_RESISTED), PROC_REF(stop_leaning), src) + RegisterSignals(src, list(COMSIG_MOVABLE_MOVED, COMSIG_MOB_RESISTED, COMSIG_MOB_LYING_DOWN), PROC_REF(stop_leaning), src) /mob/living/proc/stop_leaning() SIGNAL_HANDLER @@ -116,11 +118,13 @@ UnregisterSignal(src, list( COMSIG_MOVABLE_MOVED, COMSIG_MOB_RESISTED, + COMSIG_MOB_LYING_DOWN, )) SEND_SIGNAL(src, COMSIG_LIVING_STOPPED_LEANING) to_chat(src, SPAN_NOTICE("You stop leaning on the wall.")) REMOVE_TRAIT(src, TRAIT_UNDENSE, TRAIT_SOURCE_WALL_LEANING) REMOVE_TRAIT(src, TRAIT_LEANING, TRAIT_SOURCE_WALL_LEANING) + appearance_flags &= ~KEEP_TOGETHER remove_filter("cutout") /datum/component/leanable/proc/stopped_leaning(datum/source) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d2810c76e82..4c0106f602b 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -916,6 +916,8 @@ if( lying != lying_prev ) update_icon() + if(lying) + SEND_SIGNAL(src, COMSIG_MOB_LYING_DOWN) return canmove diff --git a/html/changelogs/llywelwyn-lean-layering.yml b/html/changelogs/llywelwyn-lean-layering.yml new file mode 100644 index 00000000000..422052afa82 --- /dev/null +++ b/html/changelogs/llywelwyn-lean-layering.yml @@ -0,0 +1,5 @@ +author: Llywelwyn +delete-after: True +changes: + - bugfix: "Leaning on the north side of a wall now correctly hides your lower body behind the wall instead of drawing you on top of it." + - code_imp: "Adds a COMSIG_MOB_LYING_DOWN signal, sent when a mob transitions into lying down." From cc6da2fd6a94fd5ad84feb0f96bb00593ff8bee5 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 1 Jun 2026 03:53:33 +0000 Subject: [PATCH 03/68] Automatic changelog compile [ci skip] --- html/changelogs/archive/2026-06.yml | 6 ++++++ html/changelogs/llywelwyn-lean-layering.yml | 5 ----- 2 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 html/changelogs/archive/2026-06.yml delete mode 100644 html/changelogs/llywelwyn-lean-layering.yml diff --git a/html/changelogs/archive/2026-06.yml b/html/changelogs/archive/2026-06.yml new file mode 100644 index 00000000000..598ab535592 --- /dev/null +++ b/html/changelogs/archive/2026-06.yml @@ -0,0 +1,6 @@ +2026-06-01: + Llywelwyn: + - bugfix: Leaning on the north side of a wall now correctly hides your lower body + behind the wall instead of drawing you on top of it. + - code_imp: Adds a COMSIG_MOB_LYING_DOWN signal, sent when a mob transitions into + lying down. diff --git a/html/changelogs/llywelwyn-lean-layering.yml b/html/changelogs/llywelwyn-lean-layering.yml deleted file mode 100644 index 422052afa82..00000000000 --- a/html/changelogs/llywelwyn-lean-layering.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Llywelwyn -delete-after: True -changes: - - bugfix: "Leaning on the north side of a wall now correctly hides your lower body behind the wall instead of drawing you on top of it." - - code_imp: "Adds a COMSIG_MOB_LYING_DOWN signal, sent when a mob transitions into lying down." From 68c5b95f8bfde77519fd13738b5959b9145a263a Mon Sep 17 00:00:00 2001 From: lew <82828093+Llywelwyn@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:32:05 +0100 Subject: [PATCH 04/68] Fixes modular guns not self-recharging until first shot is fired (#22567) fixes #22025 - bugfix: "Modular energy guns with a reactor now self-recharge from assembly, instead of only starting after the first shot is fired." try_recharge is currently only triggered on fire and loops until charge is full. this triggers it when a modular gun is completed to initiate the recharging --- code/modules/projectiles/modular/laser_base.dm | 1 + html/changelogs/llywelwyn-self-recharge-modular.yml | 6 ++++++ 2 files changed, 7 insertions(+) create mode 100644 html/changelogs/llywelwyn-self-recharge-modular.yml diff --git a/code/modules/projectiles/modular/laser_base.dm b/code/modules/projectiles/modular/laser_base.dm index 971e88cc41e..ac7f1810f8e 100644 --- a/code/modules/projectiles/modular/laser_base.dm +++ b/code/modules/projectiles/modular/laser_base.dm @@ -413,6 +413,7 @@ A.forceMove(an) an.item = A A.updatetype() + A.try_recharge() A.pin = null gun_mods = null focusing_lens = null diff --git a/html/changelogs/llywelwyn-self-recharge-modular.yml b/html/changelogs/llywelwyn-self-recharge-modular.yml new file mode 100644 index 00000000000..0ca2ce76226 --- /dev/null +++ b/html/changelogs/llywelwyn-self-recharge-modular.yml @@ -0,0 +1,6 @@ +author: llywelwyn + +delete-after: True + +changes: + - bugfix: "Modular energy guns with a reactor now self-recharge from assembly, instead of only starting after the first shot is fired." From 4e2a68bdefc2a744e3f63e178d5a2a5f5d7357df Mon Sep 17 00:00:00 2001 From: lew <82828093+Llywelwyn@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:32:10 +0100 Subject: [PATCH 05/68] Fixes an unguarded nullref in Fake Crew Arrival Announcement service (#22565) fixes #22334 - bugfix: "Fake Crew Arrival Announcement uplink service now works even with an invalid employer faction." --- code/datums/uplink/announcements.dm | 2 +- html/changelogs/llywelwyn-crewarrival.yml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/llywelwyn-crewarrival.yml diff --git a/code/datums/uplink/announcements.dm b/code/datums/uplink/announcements.dm index 70a5a081736..9b39dacc46c 100644 --- a/code/datums/uplink/announcements.dm +++ b/code/datums/uplink/announcements.dm @@ -54,7 +54,7 @@ record.sex = I.sex record.employer = I.employer_faction var/datum/faction/id_faction = SSjobs.name_factions[I.employer_faction] - var/faction_abbreviation = id_faction.title_suffix + var/faction_abbreviation = id_faction?.title_suffix var/assignment = "[I.assignment][ faction_abbreviation ? " ([faction_abbreviation])" : ""]" record.rank = assignment record.real_rank = assignment diff --git a/html/changelogs/llywelwyn-crewarrival.yml b/html/changelogs/llywelwyn-crewarrival.yml new file mode 100644 index 00000000000..348d8a48c3a --- /dev/null +++ b/html/changelogs/llywelwyn-crewarrival.yml @@ -0,0 +1,4 @@ +author: Llywelwyn +delete-after: True +changes: + - bugfix: "Fake Crew Arrival Announcement uplink service now works even with an invalid employer faction." From 7978efa75f2952f68467df01fc39612b532100cf Mon Sep 17 00:00:00 2001 From: Matt Atlas Date: Mon, 1 Jun 2026 12:32:39 +0200 Subject: [PATCH 06/68] A lot of IPC rework bugfixes. (#22561) - bugfix: "Synthetic external armour now deteriorates with the actual damage taken. Previously, the calculation led to the armour instead taking less damage the less it was blocked." - bugfix: "Fixing the synthetic endoskeleton now fixes the permanent paincrit effect on IPCs. This was caused by the self preservation status being toggled when the endoskeleton was destroyed, but it was never reset when the endoskeleton was fixed." - bugfix: "Species components are now added and removed properly, meaning you can switch from IPC to human and back and forth as a mercenary once more." - bugfix: "The Bishop internal PDA now uses your actual ID on your person as its own ID." - bugfix: "Fixed the endoskeleton welder repair surgery. You can do this surgery by using a welder while aiming chest and after having opened the chest fully." - bugfix: "The endoskeleton now takes damage from EMPs as well. This should make them A LOT more effective against IPCs." - qol: "The posibrain will now show up in diagnostics." - rscadd: "Posibrains can now be destroyed by hitting them. This will completely kill the IPC's consciousness!" Co-authored-by: Matt Atlas --- code/__DEFINES/organs.dm | 4 +- .../components/armor/synthetic_armor.dm | 2 +- .../synthetic_endoskeleton.dm | 3 +- code/modules/mob/living/carbon/brain/MMI.dm | 1 + .../mob/living/carbon/brain/posibrain.dm | 14 +++- .../living/carbon/human/species/species.dm | 13 +++- .../carbon/human/species/station/ipc/ipc.dm | 3 +- .../internal/species/machine/_generic.dm | 15 ++++- .../internal/species/machine/posibrain.dm | 11 +++- .../species/machine/wireless_access.dm | 5 ++ code/modules/organs/organ_external.dm | 2 +- code/modules/surgery/robotics.dm | 2 +- html/changelogs/mattatlas-ipcreworkfixes.yml | 65 +++++++++++++++++++ 13 files changed, 126 insertions(+), 14 deletions(-) create mode 100644 html/changelogs/mattatlas-ipcreworkfixes.yml diff --git a/code/__DEFINES/organs.dm b/code/__DEFINES/organs.dm index 7aaf62e4086..33aecdde263 100644 --- a/code/__DEFINES/organs.dm +++ b/code/__DEFINES/organs.dm @@ -49,8 +49,8 @@ */ #define COMSIG_GRAVITY_WEAKNESS_EVENT "gravity_weakness_event" -/// Raised external organ (a limb) takes damage. Used for the synthetic endoskeleton at the moment. Must supply damage. -#define COMSIG_EXTERNAL_ORGAN_DAMAGE "machine_internal_damage" +/// This is raised when you want to send damage to the synthetic endoskeleton. Must supply a damage number. +#define COMSIG_DAMAGE_TO_ENDOSKELETON "machine_internal_damage" /// Sent when the burst damage is cleared by the posibrain. #define COMSIG_SYNTH_EMP_DAMAGE_CLEARED "emp_damage_cleared" diff --git a/code/datums/components/armor/synthetic_armor.dm b/code/datums/components/armor/synthetic_armor.dm index f7b24768494..79d01d71ed6 100644 --- a/code/datums/components/armor/synthetic_armor.dm +++ b/code/datums/components/armor/synthetic_armor.dm @@ -23,7 +23,7 @@ var/key = get_armor_key(damage_type, damage_flags) var/damage_taken if(blocked) - damage_taken = round(damage * blocked) + damage_taken = damage * (1 - blocked) else damage_taken = damage var/new_armor = max(0, get_value(key) - armor_degradation_coef * damage_taken) diff --git a/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm b/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm index b7415dd7cd9..ad8bd423cf8 100644 --- a/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm +++ b/code/datums/components/synthetic_endoskeleton/synthetic_endoskeleton.dm @@ -23,7 +23,7 @@ log_debug("Synthetic endoskeleton component spawned on non-IPC. Deleting.") qdel_self() - RegisterSignal(owner, COMSIG_EXTERNAL_ORGAN_DAMAGE, PROC_REF(receive_damage)) + RegisterSignal(owner, COMSIG_DAMAGE_TO_ENDOSKELETON, PROC_REF(receive_damage)) RegisterSignal(owner, COMSIG_SYNTH_ENDOSKELETON_REPAIR, PROC_REF(heal_damage)) RegisterSignal(owner, COMSIG_SYNTH_ENDOSKELETON_FULL_REPAIR, PROC_REF(full_repair)) @@ -55,6 +55,7 @@ owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/endoskeleton, multiplicative_slowdown = 1) if(0.75 to 1) owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/endoskeleton, multiplicative_slowdown = 1.5) + SEND_SIGNAL(owner, COMSIG_SYNTH_SET_SELF_PRESERVATION, FALSE) if(!damage) STOP_PROCESSING(SSprocessing, src) diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 0cfb28f2fe0..7cd76b21f25 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -144,6 +144,7 @@ new /obj/effect/decal/cleanable/blood/gibs(get_turf(src)) set_cradle_state(STATE_EMPTY) update_name() + return ..() /obj/item/mmi/attack_self(mob/user) if(cradle_state == STATE_BRAIN) diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 1e11b4f98eb..de5fa482c8c 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -7,6 +7,10 @@ origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4) req_access = list(ACCESS_ROBOTICS) can_be_ipc = TRUE + + should_use_health = TRUE + maxhealth = OBJECT_HEALTH_MEDIUM + var/searching = FALSE /obj/item/mmi/digital/posibrain/Initialize() @@ -15,6 +19,13 @@ brainmob.name = L.get_random_name() brainmob.real_name = brainmob.name +/obj/item/mmi/digital/posibrain/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon) + playsound(src, SFX_BREAK_GLASS, 100, 1) + visible_message(SPAN_DANGER("\The [src] shatters spectacularly into a million pieces!")) + to_chat(brainmob, SPAN_DANGER("Your vision goes dark as your posibrain is destroyed, and your consciousness ceases to be.")) + new /obj/effect/decal/cleanable/blood/gibs/robot(get_turf(src)) + . = ..() + /obj/item/mmi/digital/posibrain/update_icon() if(brainmob.ckey) icon_state = "[initial(icon_state)]-occupied" @@ -23,9 +34,6 @@ else icon_state = initial(icon_state) -/obj/item/mmi/digital/posibrain/attackby(obj/item/attacking_item, mob/user) - return - /obj/item/mmi/digital/posibrain/attack_self(mob/user) if(brainmob.ckey) to_chat(user, SPAN_WARNING("\The [src] already has an active occupant!")) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 7c3d6f250a5..6301f9c2334 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -471,6 +471,9 @@ /// Controls whether this species spawns with a Morale Component. var/has_morale = TRUE + /// A list of species components that should only EVER apply to this species. This is because some components must be removed if the species changes (imagine changing from IPC to human as a merc). + var/list/species_components + /datum/species/proc/get_eyes(var/mob/living/carbon/human/H) return @@ -625,7 +628,11 @@ for(var/spell/spell in H.spell_list) if(istype(spell, spell_path)) H.remove_spell(spell) - return + + if(length(species_components)) + for(var/comp_type in species_components) + for(var/datum/component/comp in H.GetComponents(comp_type)) + qdel(comp) /datum/species/proc/add_inherent_verbs(var/mob/living/carbon/human/H) if(inherent_verbs) @@ -660,6 +667,10 @@ if(has_psionics) H.set_psi_rank(has_psionics) + if(length(species_components)) + for(var/comp_type in species_components) + H.AddComponent(comp_type) + /datum/species/proc/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0) //Handles any species-specific death events (such as dionaea nymph spawns). return diff --git a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm index 0c5dccdfe32..7930b942fcf 100644 --- a/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm +++ b/code/modules/mob/living/carbon/human/species/station/ipc/ipc.dm @@ -163,6 +163,8 @@ melee = ARMOR_MELEE_KNIVES ) + species_components = list(/datum/component/synthetic_endoskeleton) + // Special snowflake machine vars. var/sprint_temperature_factor = 1.05 /// Species-based multiplier to movement power costs in the power core. @@ -217,7 +219,6 @@ /datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H) . = ..() - H.AddComponent(/datum/component/synthetic_endoskeleton) check_tag(H, H.client) var/obj/item/organ/internal/machine/power_core/C = H.internal_organs_by_name[BP_CELL] if(C) diff --git a/code/modules/organs/internal/species/machine/_generic.dm b/code/modules/organs/internal/species/machine/_generic.dm index 00e5c71a49e..bb6e4df0934 100644 --- a/code/modules/organs/internal/species/machine/_generic.dm +++ b/code/modules/organs/internal/species/machine/_generic.dm @@ -62,6 +62,11 @@ electronics.heal_damage(electronics.max_integrity) integrity_event_cooldown = initial(integrity_event_cooldown) +/obj/item/organ/internal/machine/heal_damage(amount) + . = ..() + if(initial(diagnostics_suite_visible) && !diagnostics_suite_visible) + diagnostics_suite_visible = TRUE + /obj/item/organ/internal/machine/process(seconds_per_tick) ..() if(!owner) @@ -107,11 +112,17 @@ /obj/item/organ/internal/machine/emp_act(severity) . = ..() + var/damage_taken switch(severity) if(EMP_HEAVY) - take_internal_damage(4 * emp_coeff) + damage_taken = 15 * emp_coeff + take_internal_damage(damage_taken) if(EMP_LIGHT) - take_internal_damage(2 * emp_coeff) + damage_taken = 10 * emp_coeff + take_internal_damage(damage_taken) + + if(damage_taken) + SEND_SIGNAL(owner, COMSIG_DAMAGE_TO_ENDOSKELETON, damage_taken) /** * Called when prefs are synced to the organ to set the proper synthetic organ preset. Turns the pref into a preset singleton. diff --git a/code/modules/organs/internal/species/machine/posibrain.dm b/code/modules/organs/internal/species/machine/posibrain.dm index 58d4b6897be..bf1e8f715a0 100644 --- a/code/modules/organs/internal/species/machine/posibrain.dm +++ b/code/modules/organs/internal/species/machine/posibrain.dm @@ -7,7 +7,6 @@ parent_organ = BP_HEAD vital = TRUE robotic_sprite = FALSE - diagnostics_suite_visible = FALSE emp_coeff = 0.5 @@ -15,6 +14,9 @@ relative_size = 85 + maxhealth = OBJECT_HEALTH_MEDIUM + should_use_health = TRUE + /// The type of 'robotic brain'. Must be a subtype of /obj/item/mmi/digital. var/robotic_brain_type = /obj/item/mmi/digital/posibrain /// The stored MMI object. @@ -61,6 +63,13 @@ QDEL_NULL(sizzle) return ..() +/obj/item/organ/internal/machine/posibrain/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon) + playsound(src, SFX_BREAK_GLASS, 100, 1) + visible_message(SPAN_DANGER("\The [src] shatters spectacularly into a million pieces!")) + to_chat(owner, SPAN_DANGER("Your vision goes dark as your posibrain is destroyed, and your consciousness ceases to be.")) + new /obj/effect/decal/cleanable/blood/gibs/robot(get_turf(src)) + . = ..() + /obj/item/organ/internal/machine/posibrain/rejuvenate() . = ..() SEND_SIGNAL(owner, COMSIG_SYNTH_ENDOSKELETON_FULL_REPAIR) diff --git a/code/modules/organs/internal/species/machine/wireless_access.dm b/code/modules/organs/internal/species/machine/wireless_access.dm index 39ee7808597..373eab72814 100644 --- a/code/modules/organs/internal/species/machine/wireless_access.dm +++ b/code/modules/organs/internal/species/machine/wireless_access.dm @@ -75,6 +75,11 @@ else crash_with("Something terrible happened in synthetic internal PDA init! Loc: [loc]") +/obj/item/modular_computer/handheld/pda/synthetic_internal/GetID() + var/obj/item/organ/internal/machine/wireless_access/access_point = loc + if(access_point.owner) + return access_point.owner.GetIdCard() + /obj/item/modular_computer/handheld/pda/synthetic_internal/Destroy() if(access_point) access_point.internal_pda = null diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 1f8acb92216..e75fbc3331c 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -505,7 +505,7 @@ add_pain(0.6 * burn + 0.4 * brute) if(owner) - SEND_SIGNAL(owner, COMSIG_EXTERNAL_ORGAN_DAMAGE, burn + brute) + SEND_SIGNAL(owner, COMSIG_DAMAGE_TO_ENDOSKELETON, burn + brute) //If there are still hurties to dispense if (spillover) diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm index 258a519542d..23edf40dea0 100644 --- a/code/modules/surgery/robotics.dm +++ b/code/modules/surgery/robotics.dm @@ -776,7 +776,7 @@ if(!istype(endoskeleton)) return FALSE - return affected && affected.open == ORGAN_ENCASED_RETRACTED && affected.organ_tag == BP_CHEST && target_zone != BP_MOUTH && endoskeleton.damage > 0 + return affected && affected.open == ORGAN_ENCASED_RETRACTED && affected.limb_name == BP_CHEST && target_zone != BP_MOUTH && endoskeleton.damage > 0 /singleton/surgery_step/robotics/repair_endoskeleton/begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool) user.visible_message("[user] begins to repair the support structures of [target]'s endoskeleton with \the [tool]." , \ diff --git a/html/changelogs/mattatlas-ipcreworkfixes.yml b/html/changelogs/mattatlas-ipcreworkfixes.yml new file mode 100644 index 00000000000..fd0a6f31a46 --- /dev/null +++ b/html/changelogs/mattatlas-ipcreworkfixes.yml @@ -0,0 +1,65 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: MattAtlas + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Synthetic external armour now deteriorates with the actual damage taken. Previously, the calculation led to the armour instead taking less damage the less it was blocked." + - bugfix: "Fixing the synthetic endoskeleton now fixes the permanent paincrit effect on IPCs. This was caused by the self preservation status being toggled when the endoskeleton was destroyed, but it was never reset when the endoskeleton was fixed." + - bugfix: "Species components are now added and removed properly, meaning you can switch from IPC to human and back and forth as a mercenary once more." + - bugfix: "The Bishop internal PDA now uses your actual ID on your person as its own ID." + - bugfix: "Fixed the endoskeleton welder repair surgery. You can do this surgery by using a welder while aiming chest and after having opened the chest fully." + - bugfix: "The endoskeleton now takes damage from EMPs as well. This should make them A LOT more effective against IPCs." + - qol: "The posibrain will now show up in diagnostics." + - rscadd: "Posibrains can now be destroyed by hitting them. This will completely kill the IPC's consciousness!" From b07b1a5c853668c5eb7e2510f002fdc62663d64f Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 12:32:49 +0200 Subject: [PATCH 07/68] Fix: Prevent addtimer with qdeleted object in MouseEntered (#22557) * Please describe the intent of your changes in a clear fashion. This PR addresses an error where `addtimer` was called with a callback assigned to a `qdeleted` object, specifically observed when `MouseEntered` was triggered on items that self-delete, such as the robotic combitool when dropped. The root cause was that the `QDELETED(src)` check in `/obj/item/MouseEntered` was performed *after* the `addtimer` call. This allowed a timer to be registered for an object that was already marked for deletion. The fix involves moving the `if(QDELETED(src)) return` statement to occur *before* any `addtimer` calls within the `MouseEntered` proc. This ensures that if an item is already deleted, the function returns immediately, preventing the creation of timers bound to invalid objects. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-4F --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- code/game/objects/items.dm | 4 ++-- html/changelogs/hellfirejag-combitool-timer-runtime.yml | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/hellfirejag-combitool-timer-runtime.yml diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 361339ec34b..a98d7e1950c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1328,10 +1328,10 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. . = ..() if(in_inventory || in_storage) var/mob/user = usr - if(!(user.client.prefs.toggles_secondary & HIDE_ITEM_TOOLTIPS)) - tip_timer = addtimer(CALLBACK(src, PROC_REF(openTip), location, control, params, user), 8, TIMER_STOPPABLE) if(QDELETED(src)) return + if(!(user.client.prefs.toggles_secondary & HIDE_ITEM_TOOLTIPS)) + tip_timer = addtimer(CALLBACK(src, PROC_REF(openTip), location, control, params, user), 8, TIMER_STOPPABLE) if(!(user.client.prefs.toggles_secondary & SEE_ITEM_OUTLINES)) return var/mob/living/L = user diff --git a/html/changelogs/hellfirejag-combitool-timer-runtime.yml b/html/changelogs/hellfirejag-combitool-timer-runtime.yml new file mode 100644 index 00000000000..8fbb59129e9 --- /dev/null +++ b/html/changelogs/hellfirejag-combitool-timer-runtime.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a runtime error on objects caused by timers being created on objects that are already being qdel'ed." From d82b463acaebc11f13910ee1c01abfbb77afbf44 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:32:55 +0000 Subject: [PATCH 08/68] Fix rdconsole Protolathe menu null.mat_efficiency (#22555) * Please describe the intent of your changes in a clear fashion. This PR fixes a runtime error (`Cannot read null.mat_efficiency`) occurring in the R&D console's Protolathe menu (`/obj/structure/machinery/computer/rdconsole/attack_hand`). The root cause was a copy-paste error in `code/modules/research/rdconsole.dm`. Specifically, lines 719 and 721 within the `if(3.1)` block (Protolathe menu rendering) were incorrectly referencing `linked_imprinter.mat_efficiency` instead of `linked_lathe.mat_efficiency`. When a robotics R&D console was linked to a protolathe but not a circuit imprinter, `linked_imprinter` would be null, causing the error when attempting to display material costs for designs. The fix replaces `linked_imprinter.mat_efficiency` with `linked_lathe.mat_efficiency` at these two lines, ensuring the Protolathe menu correctly uses the linked protolathe's material efficiency. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-39 --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- code/modules/research/rdconsole.dm | 4 ++-- html/changelogs/hellfirejag-protolathe-fixes.yml | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/hellfirejag-protolathe-fixes.yml diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index b07a7d4dc5b..6c872ca91ac 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -716,9 +716,9 @@ won't update every console in existence) but it's more of a hassle to do. Also, dat += "
  • [last_category]

    " var/temp_dat for(var/M in D.materials) - temp_dat += ", [D.materials[M]*linked_imprinter.mat_efficiency] [CallMaterialName(M)]" + temp_dat += ", [D.materials[M]*linked_lathe.mat_efficiency] [CallMaterialName(M)]" for(var/T in D.chemicals) - temp_dat += ", [D.chemicals[T]*linked_imprinter.mat_efficiency] [CallReagentName(T)]" + temp_dat += ", [D.chemicals[T]*linked_lathe.mat_efficiency] [CallReagentName(T)]" if(temp_dat) temp_dat = " \[[copytext(temp_dat, 3)]\]" if(linked_lathe.canBuild(D)) diff --git a/html/changelogs/hellfirejag-protolathe-fixes.yml b/html/changelogs/hellfirejag-protolathe-fixes.yml new file mode 100644 index 00000000000..8b0fe0bdb6b --- /dev/null +++ b/html/changelogs/hellfirejag-protolathe-fixes.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a runtime error caused by robotics consoles using a protolathe when no circuit imprinter is connected." From 643c692784ac41016d505a4829df6220f06c64d8 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:33:15 +0000 Subject: [PATCH 09/68] Fix: Universal access port TOCTOU race and disconnect issues (#22554) * Please describe the intent of your changes in a clear fashion. This PR addresses two related bugs concerning the universal access port and cable: **1. TOCTOU Race Condition Leading to Crash (SERVER-PROD-X9)** * **Root Cause:** When inserting a universal access cable into an IPC's access port, a check for `access_port.internal_port` occupancy occurs before a `do_mob` delay (which can include a consent dialog and a 2-second wait). If another action or player inserts something into the port during this delay, the subsequent call to `insert_item()` would find `internal_port` already occupied and trigger a `crash_with()`, leading to a server crash. * **Fix:** * A re-check for `access_port.internal_port` occupancy and the continued existence of the `access_port` itself has been added immediately after the `do_mob` delay in `access_cable/attack()`. If the port is now occupied or no longer exists, the insertion attempt is gracefully aborted with a user message. * The `crash_with()` call in `insert_item()` has been replaced with a `log_debug()` and an early return, ensuring that any future unexpected state in `internal_port` leads to graceful degradation rather than a server crash. **2. Stale `internal_port` on Cable Disconnect** * **Root Cause:** The `access_port` did not override the generic `remove_cable()` proc. When a cable was retracted or removed, `access_port.internal_port` was not explicitly cleared, causing the port to appear permanently occupied even after the cable was gone. * **Fix:** * An override for `remove_cable()` has been added to `/obj/item/organ/internal/machine/access_port`. This ensures that `clear_port()` is called, properly nulling `internal_port` when the cable is removed. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-X9 --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- .../internal/species/machine/access_port.dm | 20 ++++++++++++++++++- .../hellfirejag-ipc-cable-fixes.yml | 4 ++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/hellfirejag-ipc-cable-fixes.yml diff --git a/code/modules/organs/internal/species/machine/access_port.dm b/code/modules/organs/internal/species/machine/access_port.dm index 62001dfa307..303da885afe 100644 --- a/code/modules/organs/internal/species/machine/access_port.dm +++ b/code/modules/organs/internal/species/machine/access_port.dm @@ -77,11 +77,13 @@ SIGNAL_HANDLER if(internal_port) crash_with("Insert_item with [jack] on access port called with [internal_port] of [owner] already present!") + return FALSE internal_port = jack jack.forceMove(src) RegisterSignal(internal_port, COMSIG_QDELETING, PROC_REF(clear_port)) to_chat(owner, SPAN_MACHINE_WARNING("Internal firewall notice: [internal_port] inserted into [src].")) + return TRUE /** * This proc is called whenever the access cable is, for some reason, qdeleted (like with an explosion). @@ -111,9 +113,16 @@ /obj/item/organ/internal/machine/access_port/insert_cable(obj/item/access_cable/cable, mob/user) . = ..() - insert_item(cable) + if (!insert_item(cable)) + return + cable.create_cable(owner) +/obj/item/organ/internal/machine/access_port/remove_cable(obj/item/access_cable/cable) + . = ..() + if(internal_port == cable) + clear_port() + /obj/item/organ/internal/machine/access_port/cable_interact(obj/item/access_cable/cable, mob/user) var/obj/item/organ/internal/machine/internal_diagnostics/diagnostics_unit = owner.internal_organs_by_name[BP_DIAGNOSTICS_SUITE] if(!diagnostics_unit) @@ -277,6 +286,15 @@ user.visible_message(SPAN_WARNING("[user] tries to jack \the [src] into [human]'s access port...")) if(!do_mob(user, human, 2 SECONDS)) return + // Re-check after the delay: port state may have changed during consent/wait window + var/obj/item/organ/internal/machine/access_port/fresh_port = human.internal_organs_by_name[BP_ACCESS_PORT] + if(!fresh_port) + to_chat(user, SPAN_WARNING("[human] no longer has an access port!")) + return + if(fresh_port.internal_port) + to_chat(user, SPAN_WARNING("The access port is now occupied by [fresh_port.internal_port]!")) + return + access_port = fresh_port user.visible_message(SPAN_WARNING("[user] jacks \the [src] into [human]'s access port!")) else diff --git a/html/changelogs/hellfirejag-ipc-cable-fixes.yml b/html/changelogs/hellfirejag-ipc-cable-fixes.yml new file mode 100644 index 00000000000..4b87bbc629d --- /dev/null +++ b/html/changelogs/hellfirejag-ipc-cable-fixes.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed some situations where an IPC datacable can get 'stuck'." From 5a6fd095498e9ed1ddde75a0435e7c91da6fec83 Mon Sep 17 00:00:00 2001 From: hazelrat <83198434+hazelrat@users.noreply.github.com> Date: Mon, 1 Jun 2026 11:34:20 +0100 Subject: [PATCH 10/68] The Great Nitpicking: lighting maintenance & maintenance tweaks (#22543) This is mostly a maintenance overhaul, intended to establish a more universal style for our maintenance. Grates as walkways are now almost universal, more decals are used, fewer window panes are used, and there is slightly less obvious damage. The Horizon is still quite a young ship, it follows that its maintenance should be a little neater than on your average SS13 map. This also replaces the old red bulbs in maintenance with standard small light bulbs, which can be manipulated with the new randomized area lighting. For now, they're running on engineering lighting. This also fills in a few dark spots on the map which became very obvious after the recent lighting changes, and makes a few other small changes which I've been meaning to make such as adding tiles to EVA airlocks, full tiles under airlocks, and catwalks to substations. Remaps the scuttling device chamber to play nice with the nuke's funny turf-related code.
    image image image image image image image image image
    --- .../structures/machinery/portable_turret.dm | 4 +- code/unit_tests/zas_tests.dm | 1 - html/changelogs/hazelmouse-nitpicks.yml | 62 + .../areas/horizon_areas_engineering.dm | 2 +- .../areas/horizon_areas_service.dm | 1 + maps/sccv_horizon/sccv_horizon.dmm | 7195 +++++++++++------ 6 files changed, 4571 insertions(+), 2694 deletions(-) create mode 100644 html/changelogs/hazelmouse-nitpicks.yml diff --git a/code/game/objects/structures/machinery/portable_turret.dm b/code/game/objects/structures/machinery/portable_turret.dm index ed3072241a1..567db53276d 100644 --- a/code/game/objects/structures/machinery/portable_turret.dm +++ b/code/game/objects/structures/machinery/portable_turret.dm @@ -26,8 +26,8 @@ req_one_access = list(ACCESS_SECURITY, ACCESS_HEADS) - light_range = 3 - light_power = 2 + light_range = 2 + light_power = 1 armor = list( MELEE = ARMOR_MELEE_KEVLAR, diff --git a/code/unit_tests/zas_tests.dm b/code/unit_tests/zas_tests.dm index b2b730a1e02..e9b77caa54d 100644 --- a/code/unit_tests/zas_tests.dm +++ b/code/unit_tests/zas_tests.dm @@ -124,7 +124,6 @@ GLOBAL_LIST_EMPTY(turfs_to_map_type) /datum/unit_test/zas_area_test/ai_chamber name = "ZAS: AI Chamber" area_path = /area/horizon/ai/chamber - expectation = UT_NORMAL_COOL /datum/unit_test/zas_area_test/xenobio name = "ZAS: Xenobiology" diff --git a/html/changelogs/hazelmouse-nitpicks.yml b/html/changelogs/hazelmouse-nitpicks.yml new file mode 100644 index 00000000000..7f982167cb8 --- /dev/null +++ b/html/changelogs/hazelmouse-nitpicks.yml @@ -0,0 +1,62 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: hazelmouse + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Implemented a large revision of maintenance, in the hope of establishing a more coherent style to be followed into the future. Expect slightly brighter lighting and a more consistent use of decals." + - rscadd: "Turrets now produce less light." + - rscadd: "Telecommunications is no longer lit with blue lighting." + - rscadd: "Several dark spots on the map are now better lit, including medical's GTR and the INDRA chamber in engineering." + - rscadd: "Implemented a few very ancillary changes to the Horizon's mapping outside of maintenance, including adding tiles to all airlocks." diff --git a/maps/sccv_horizon/areas/horizon_areas_engineering.dm b/maps/sccv_horizon/areas/horizon_areas_engineering.dm index bca3d252a25..f9d33b332fe 100644 --- a/maps/sccv_horizon/areas/horizon_areas_engineering.dm +++ b/maps/sccv_horizon/areas/horizon_areas_engineering.dm @@ -230,7 +230,7 @@ /// TCOMMS_AREAS /area/horizon/tcommsat ambience = AMBIENCE_ENGINEERING - area_lighting = LIGHT_HIGHSEC_COLORS + area_lighting = LIGHT_CLINICAL_COLORS no_light_control = 1 station_area = TRUE holomap_color = HOLOMAP_AREACOLOR_ENGINEERING diff --git a/maps/sccv_horizon/areas/horizon_areas_service.dm b/maps/sccv_horizon/areas/horizon_areas_service.dm index 68907ad0069..54cc7e45448 100644 --- a/maps/sccv_horizon/areas/horizon_areas_service.dm +++ b/maps/sccv_horizon/areas/horizon_areas_service.dm @@ -116,6 +116,7 @@ name = "Chapel" icon_state = "chapel" area_blurb = "An impressive, spacious compartment nonetheless kept somewhat bland to accommodate the many disparate faiths whose practice may be attended here." + lightswitch = TRUE /area/horizon/service/chapel/office name = "Chapel Office" diff --git a/maps/sccv_horizon/sccv_horizon.dmm b/maps/sccv_horizon/sccv_horizon.dmm index f8ad5f51eed..7b790f1d712 100644 --- a/maps/sccv_horizon/sccv_horizon.dmm +++ b/maps/sccv_horizon/sccv_horizon.dmm @@ -178,7 +178,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/cable/green{ icon_state = "4-8" }, @@ -360,6 +360,9 @@ dir = 1; icon_state = "pipe-c" }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/horizon/service/custodial) "act" = ( @@ -518,7 +521,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard/far) "adm" = ( /obj/effect/floor_decal/corner/paleblue/diagonal, @@ -644,7 +647,8 @@ /obj/structure/platform{ dir = 4 }, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "aec" = ( /obj/structure/cable/green{ @@ -882,7 +886,8 @@ }, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "aeL" = ( /obj/structure/platform_deco, @@ -908,6 +913,10 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/security) "aeU" = ( @@ -931,14 +940,15 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "afe" = ( /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "afi" = ( /obj/effect/floor_decal/spline/plain/mauve{ @@ -1039,7 +1049,7 @@ /obj/structure/railing/mapped, /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -1319,6 +1329,12 @@ /obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/hangar/intrepid) +"agT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port) "agU" = ( /obj/structure/machinery/smartfridge/tradeshelf/clothing, /obj/structure/machinery/firealarm/west, @@ -1398,6 +1414,7 @@ /obj/structure/machinery/atmospherics/unary/freezer{ icon_state = "freezer" }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "ahs" = ( @@ -1471,7 +1488,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "ahI" = ( /obj/effect/floor_decal/corner/brown{ @@ -1663,13 +1680,13 @@ dir = 1; icon_state = "pipe-c" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "aiR" = ( /obj/effect/floor_decal/corner/green/diagonal, @@ -1734,7 +1751,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/machinery/light/small/emergency, /obj/structure/lattice/catwalk/indoor/grate/damaged{ color = "#4c535b" }, @@ -1749,7 +1765,7 @@ /obj/random/tool, /obj/random/tool, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/auxatmos) "ajD" = ( /obj/structure/cable/green{ @@ -1812,6 +1828,7 @@ master_tag = "airlock_horizon_deck_2_port_1"; name = "airlock_horizon_deck_2_port_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "ajY" = ( @@ -1904,8 +1921,7 @@ /obj/structure/machinery/alarm/east{ req_one_access = list(24,11,48) }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "akl" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden{ @@ -1916,26 +1932,30 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_3"; name = "airlock_horizon_dock_deck_3_starboard_3" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard/docks) "aky" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /obj/structure/cable/green{ icon_state = "1-8" }, /obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /obj/effect/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 8 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "akz" = ( /obj/effect/floor_decal/corner/red/diagonal, @@ -1955,14 +1975,14 @@ master_tag = "airlock_horizon_deck_2_port_1"; name = "airlock_horizon_deck_2_port_1" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "akD" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 }, /obj/structure/reagent_dispensers/extinguisher, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/teleporter) "akE" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -2030,7 +2050,7 @@ /turf/simulated/floor/plating, /area/horizon/engineering/storage_hard/lower) "akY" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/table/rack, @@ -2297,8 +2317,9 @@ /turf/simulated/floor/wood, /area/merchant_station) "amR" = ( +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/main/port) +/area/horizon/maintenance/deck_2/wing/port/far) "amS" = ( /obj/effect/floor_decal/industrial/warning{ dir = 5 @@ -2368,7 +2389,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "anu" = ( /obj/structure/sign/radiation{ @@ -2411,7 +2432,10 @@ dir = 1 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "anF" = ( /obj/effect/decal{ @@ -3019,9 +3043,11 @@ /turf/simulated/wall/shuttle/scc, /area/horizon/shuttle/intrepid/flight_deck) "ata" = ( -/obj/effect/decal/cleanable/blood/oil, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/aft) +/area/horizon/maintenance/deck_2/wing/port) "atd" = ( /obj/structure/ladder{ pixel_y = 8 @@ -3105,7 +3131,7 @@ name = "airlock_horizon_deck_1_aft_propulsion_2" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/propulsion) "atv" = ( /obj/structure/disposalpipe/segment{ @@ -3398,19 +3424,12 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos/air) "auD" = ( -/obj/structure/machinery/light/small/emergency{ - dir = 1 +/obj/structure/machinery/porta_turret/stationary, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/sign/nosmoking_1{ + pixel_y = 32 }, -/obj/effect/floor_decal/corner_wide/blue{ - dir = 10 - }, -/obj/effect/floor_decal/corner_wide/yellow{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "auK" = ( /obj/effect/floor_decal/industrial/warning{ @@ -3548,7 +3567,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "ave" = ( /obj/effect/floor_decal/industrial/hatch_door/red, @@ -3677,7 +3696,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "avJ" = ( @@ -3686,14 +3705,10 @@ /turf/unsimulated/floor, /area/antag/raider) "avK" = ( -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/random/dirt_75, /obj/structure/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/auxatmos) "avV" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -3766,7 +3781,7 @@ dir = 4; req_one_access = list(5,10,12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "awq" = ( /obj/structure/railing/mapped{ @@ -3865,6 +3880,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_2"; name = "airlock_horizon_dock_deck_3_starboard_2" }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/hallway/primary/deck_3/starboard/docks) "axi" = ( @@ -3941,6 +3957,10 @@ "axx" = ( /obj/structure/machinery/alarm/north, /obj/random/dirt_75, +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "axy" = ( @@ -4229,7 +4249,7 @@ pixel_y = 20 }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/aft_airlock) "azy" = ( /turf/simulated/floor/holofloor/beach/sand{ @@ -4347,7 +4367,7 @@ req_access = list(23) }, /obj/effect/floor_decal/industrial/hatch_door/engineering, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/storage/tech) "aAg" = ( /obj/structure/machinery/light/small{ @@ -4363,6 +4383,9 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "aAq" = ( @@ -4385,8 +4408,11 @@ /turf/simulated/floor/tiled/dark, /area/horizon/security/evidence_storage) "aAu" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/near) "aAD" = ( @@ -4399,7 +4425,7 @@ dir = 4; req_access = list(12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "aAE" = ( /obj/structure/closet/crate/secure/legion, @@ -4516,9 +4542,15 @@ /turf/simulated/floor/tiled, /area/merchant_station/warehouse) "aBI" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/light/small/emergency, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/platform_deco{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "aBJ" = ( /obj/structure/machinery/atmospherics/pipe/manifold/visible, @@ -4723,6 +4755,11 @@ }, /turf/simulated/floor/tiled/dark, /area/horizon/command/bridge/aibunker) +"aCR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/operations/starboard) "aCV" = ( /obj/effect/floor_decal/corner_wide/orange{ dir = 5 @@ -4731,9 +4768,8 @@ /area/horizon/medical/pharmacy) "aCW" = ( /obj/structure/platform, -/obj/effect/floor_decal/industrial/warning, /obj/structure/railing/mapped, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "aDa" = ( /obj/structure/machinery/atmospherics/portables_connector{ @@ -4773,7 +4809,7 @@ c_tag = "Bridge - CIC Foyer"; dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "aDv" = ( /obj/structure/bed/stool/chair/sofa/right/brown{ @@ -5041,14 +5077,12 @@ /turf/simulated/floor/tiled, /area/horizon/operations/office) "aFT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, /obj/structure/cable/green{ icon_state = "1-2" }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "aFX" = ( @@ -5521,7 +5555,10 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "aIH" = ( /obj/structure/table/standard, @@ -5592,8 +5629,8 @@ /obj/structure/cable/green{ icon_state = "1-8" }, -/obj/random/dirt_75, /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "aIU" = ( @@ -5603,6 +5640,9 @@ /area/horizon/maintenance/deck_2/aft) "aIW" = ( /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "aIZ" = ( @@ -5689,12 +5729,13 @@ }, /area/centcom/specops) "aJz" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/cobweb2, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "aJB" = ( /obj/effect/floor_decal/spline/plain/mauve{ @@ -5805,6 +5846,7 @@ master_tag = "airlock_horizon_deck_2_port_1"; name = "airlock_horizon_deck_2_port_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "aKt" = ( @@ -5918,7 +5960,6 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 4 }, -/obj/effect/floor_decal/corner, /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/xenoarchaeology) "aKL" = ( @@ -5962,7 +6003,7 @@ dir = 8 }, /obj/structure/trash_pile, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/holodeck) "aKV" = ( /obj/structure/machinery/vending/assist/synd, @@ -6387,6 +6428,7 @@ "aNW" = ( /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard) "aNY" = ( @@ -6397,10 +6439,7 @@ /area/horizon/command/heads/captain) "aOa" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/glasses/sunglasses, -/obj/item/screwdriver, /obj/structure/platform, -/obj/structure/table/reinforced, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "aOd" = ( @@ -6409,7 +6448,8 @@ /area/horizon/service/cafeteria) "aOe" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "aOf" = ( @@ -6604,22 +6644,12 @@ /turf/simulated/floor/tiled, /area/horizon/operations/loading) "aPd" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ - dir = 1 +/obj/effect/floor_decal/industrial/warning{ + dir = 10 }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/far) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/near) "aPe" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume, @@ -6656,7 +6686,7 @@ /area/centcom/specops) "aPh" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -6684,7 +6714,7 @@ dir = 4; req_access = list(12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard) "aPs" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, @@ -6769,18 +6799,9 @@ /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos/propulsion) "aPJ" = ( -/obj/structure/machinery/door/firedoor{ - req_one_access = list(24,11,67,73); - dir = 4 - }, -/obj/structure/machinery/door/airlock/maintenance_hatch{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/hatch_door/yellow{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/teleporter) +/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux, +/turf/simulated/floor/redgrid, +/area/horizon/command/bridge/selfdestruct) "aPM" = ( /obj/effect/floor_decal/corner/dark_green{ dir = 9 @@ -6837,6 +6858,9 @@ /area/horizon/engineering/atmos/storage) "aQd" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "aQe" = ( @@ -7024,7 +7048,7 @@ /turf/simulated/floor/holofloor/tiled, /area/horizon/holodeck/source_gym) "aSk" = ( -/obj/random/dirt_75, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "aSv" = ( @@ -7082,6 +7106,16 @@ /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/port) +"aSC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/main/starboard) "aSE" = ( /obj/structure/table/reinforced/steel, /obj/item/magnetic_lock, @@ -7119,6 +7153,9 @@ req_access = list(56) }, /mob/living/simple_animal/carp/fluff/ginny, +/obj/structure/machinery/light{ + dir = 1 + }, /turf/simulated/floor/carpet, /area/horizon/command/heads/chief) "aSZ" = ( @@ -7265,6 +7302,7 @@ name_tag = "Deck 2 and 3 Security Subgrid" }, /obj/structure/machinery/power/apc/low/south, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/security) "aTL" = ( @@ -7296,6 +7334,7 @@ /turf/simulated/floor/plating, /area/horizon/rnd/xenoarch/atrium) "aTV" = ( +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/storage_maintenance) "aTY" = ( @@ -7403,7 +7442,8 @@ dir = 8; must_start_working = 1 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/operations) "aUP" = ( /obj/structure/platform, @@ -7466,7 +7506,10 @@ dir = 1 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "aUX" = ( /obj/structure/railing/mapped, @@ -8008,7 +8051,7 @@ /area/horizon/engineering/bluespace_drive) "aYO" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden, -/obj/random/dirt_75, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "aYQ" = ( @@ -8040,7 +8083,10 @@ /obj/effect/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "aZb" = ( /obj/structure/machinery/door/airlock/hatch{ @@ -8369,6 +8415,9 @@ "bbr" = ( /obj/structure/table/rack, /obj/random/junk, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "bbs" = ( @@ -8457,16 +8506,13 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/xenobiology/xenoflora) "bcf" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/near) +/area/horizon/maintenance/deck_2/wing/port/far) "bci" = ( /obj/effect/floor_decal/corner/red/diagonal, /obj/random/junk, @@ -8518,7 +8564,8 @@ pixel_x = 1; pixel_y = 5 }, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "bcA" = ( /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{ @@ -8529,7 +8576,8 @@ master_tag = "airlock_horizon_dock_deck_3_port_4"; name = "airlock_horizon_dock_deck_3_port_4" }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor, /area/horizon/hallway/primary/deck_3/port/docks) "bcB" = ( /obj/effect/floor_decal/industrial/warning{ @@ -8549,9 +8597,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, -/obj/structure/railing/mapped{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, +/obj/structure/table/rack, +/obj/random/med_stack, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "bcK" = ( @@ -8650,7 +8700,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/amidships) "bdm" = ( /turf/simulated/floor/holofloor/grass{ @@ -8661,11 +8711,12 @@ }, /area/horizon/holodeck/source_konyang) "bdp" = ( -/obj/effect/floor_decal/corner/red/full{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light/small{ + dir = 4 }, -/turf/space, -/area/centcom/control) +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/central_ring) "bdr" = ( /obj/structure/table/stone/marble, /obj/structure/machinery/door/firedoor, @@ -8683,6 +8734,7 @@ /turf/simulated/floor/holofloor/wood, /area/horizon/holodeck/source_theatre) "bdv" = ( +/obj/structure/platform, /turf/simulated/floor/tiled/ramp/bottom{ dir = 4 }, @@ -8701,6 +8753,14 @@ }, /turf/unsimulated/floor/wood, /area/centcom/evac) +"bdz" = ( +/obj/random/dirt_75, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/auxatmos) "bdD" = ( /obj/effect/floor_decal/spline/fancy/wood, /obj/structure/bed/stool/chair/wood{ @@ -9105,10 +9165,7 @@ /obj/item/modular_computer/console/preset/ai{ dir = 8 }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 - }, +/turf/simulated/floor, /area/horizon/ai/chamber) "bgu" = ( /obj/structure/cable/green{ @@ -9154,7 +9211,9 @@ /turf/unsimulated/floor, /area/centcom/ferry) "bgD" = ( -/turf/simulated/wall/r_wall, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port) "bgG" = ( /obj/effect/floor_decal/corner/dark_blue/full{ @@ -9710,15 +9769,12 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "bjl" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 10 +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, -/obj/structure/machinery/atmospherics/unary/vent_pump/on{ - dir = 1; - level = 2 - }, -/turf/simulated/floor/tiled, -/area/horizon/rnd/hallway) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/nacelle) "bjs" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -9825,7 +9881,10 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "bjL" = ( /obj/structure/shuttle_part/ert{ @@ -9912,7 +9971,7 @@ "bkN" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -9947,7 +10006,7 @@ /area/antag/raider) "bkY" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -10060,10 +10119,10 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "blJ" = ( /obj/structure/railing/mapped{ @@ -10078,7 +10137,7 @@ /turf/simulated/floor/tiled/dark, /area/horizon/hangar/intrepid) "blK" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -10212,7 +10271,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "bmS" = ( /obj/effect/map_effect/door_helper/unres, @@ -10254,12 +10313,12 @@ /area/horizon/engineering/reactor/supermatter/mainchamber) "bni" = ( /obj/random/dirt_75, -/obj/random/dirt_75, /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/machinery/alarm/north, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port/shortcut) "bnj" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -10446,7 +10505,7 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "boh" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/table/rack, /obj/item/mecha_equipment/sleeper, /obj/item/mecha_equipment/sleeper, @@ -10492,7 +10551,7 @@ }, /obj/effect/floor_decal/industrial/hatch_door/yellow, /obj/structure/curtain/black, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "bon" = ( /obj/random/pottedplant, @@ -10625,6 +10684,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/floor_decal/sign/cmo, /turf/simulated/floor/tiled/white, /area/horizon/medical/hallway/upper) "boS" = ( @@ -10750,6 +10810,9 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/operations) "bpu" = ( @@ -10774,6 +10837,10 @@ name = "Powernet Sensor - Deck 2 Engineering Subgrid"; name_tag = "Deck 2 Engineering Subgrid" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering) "bpB" = ( @@ -10830,7 +10897,9 @@ pixel_y = 13 }, /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning/cee, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "bpT" = ( @@ -10860,7 +10929,7 @@ /turf/simulated/floor/wood, /area/horizon/service/cafeteria) "bqi" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/machinery/embedded_controller/radio/airlock/airlock_controller{ @@ -10876,7 +10945,7 @@ master_tag = "airlock_horizon_deck_1_aft_propulsion_2"; name = "airlock_horizon_deck_1_aft_propulsion_2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/propulsion) "bqj" = ( /obj/effect/floor_decal/corner_wide/blue/full{ @@ -11088,7 +11157,6 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/machinery/light/small, /obj/structure/cable{ icon_state = "4-8" }, @@ -11156,7 +11224,9 @@ /obj/structure/machinery/atmospherics/portables_connector{ dir = 1 }, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "bsh" = ( /turf/simulated/wall/shuttle/unique/ccia{ @@ -11177,6 +11247,7 @@ /obj/structure/machinery/embedded_controller/radio/airlock/airlock_controller{ pixel_y = 23 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/ai/upload_foyer) "bsv" = ( @@ -11213,6 +11284,12 @@ /area/horizon/service/chapel/main) "bsJ" = ( /obj/random/junk, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "bsO" = ( @@ -11379,15 +11456,8 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/starboard) "btW" = ( -/obj/structure/table/steel, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/item/stack/material/steel/full{ - pixel_x = -6; - pixel_y = 9 - }, -/turf/simulated/floor/tiled, +/obj/structure/machinery/light/small/floor, +/turf/simulated/floor/wood, /area/horizon/maintenance/deck_2/wing/starboard) "bud" = ( /obj/structure/machinery/camera/network/crescent{ @@ -11559,6 +11629,8 @@ icon_state = "0-2" }, /obj/structure/machinery/power/apc/north, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "bvt" = ( @@ -11612,12 +11684,25 @@ /obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_starboard) +"bvM" = ( +/obj/structure/machinery/porta_turret, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/machinery/alarm/west, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/ai/upload) "bvV" = ( /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "bvX" = ( /obj/structure/coatrack{ @@ -11798,6 +11883,9 @@ /area/horizon/engineering/lobby) "bxt" = ( /obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/horizon/medical/reception) "bxA" = ( @@ -11809,6 +11897,7 @@ /obj/effect/floor_decal/corner/lime{ dir = 5 }, +/obj/structure/sign/poster/civilian/bay_55, /turf/simulated/floor/tiled/white{ name = "cooled white floor"; temperature = 278.15 @@ -11820,7 +11909,10 @@ /obj/random/tech_supply{ pixel_y = 2 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "bxJ" = ( /obj/structure/table/rack, @@ -11865,6 +11957,13 @@ }, /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_2/fore) +"bxY" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/structure/machinery/light/small, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/main/port) "bya" = ( /obj/structure/stairs_railing{ dir = 4; @@ -11897,7 +11996,7 @@ /area/horizon/rnd/hallway) "byl" = ( /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "byn" = ( /obj/structure/machinery/power/apc/low/north, @@ -11931,7 +12030,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_1"; name = "airlock_horizon_dock_deck_3_starboard_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "byt" = ( /obj/structure/machinery/atmospherics/binary/pump/fuel{ @@ -11972,8 +12071,6 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/security/evidence_storage) "byC" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, /obj/item/weldingtool/largetank{ pixel_y = 8; pixel_x = 1 @@ -11982,6 +12079,7 @@ pixel_x = -8; pixel_y = 6 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "byG" = ( @@ -12127,6 +12225,15 @@ }, /turf/simulated/floor/tiled, /area/horizon/operations/loading) +"bzM" = ( +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/starboard/near) "bzZ" = ( /obj/structure/machinery/button/remote/airlock{ dir = 8; @@ -12772,6 +12879,12 @@ }, /turf/simulated/floor/tiled/full, /area/horizon/engineering/locker_room) +"bEr" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port) "bEu" = ( /obj/structure/machinery/meter, /obj/effect/floor_decal/corner/yellow{ @@ -12790,7 +12903,7 @@ master_tag = "airlock_horizon_deck_1_aft_port_1"; name = "airlock_horizon_deck_1_aft_port_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "bEA" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -12914,7 +13027,7 @@ "bFt" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/disposalpipe/segment, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -12992,10 +13105,13 @@ /area/horizon/hallway/primary/deck_3/central) "bGo" = ( /obj/random/junk, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port/shortcut) "bGp" = ( /obj/structure/disposalpipe/segment{ @@ -13007,6 +13123,7 @@ /obj/random/junk, /obj/random/dirt_75, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "bGE" = ( @@ -13017,7 +13134,7 @@ /turf/simulated/floor/tiled/dark, /area/horizon/shuttle/quark/cargo_hold) "bGJ" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -13040,6 +13157,9 @@ /obj/effect/floor_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_port) "bGS" = ( @@ -13083,6 +13203,7 @@ /obj/structure/cable{ icon_state = "0-2" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering) "bHv" = ( @@ -13115,7 +13236,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/starboard) "bHA" = ( /obj/effect/floor_decal/corner/dark_blue{ @@ -13290,7 +13411,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard/far) "bJc" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -13305,9 +13426,11 @@ /turf/simulated/floor/tiled/dark, /area/horizon/storage/eva) "bJf" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/near) "bJk" = ( /obj/structure/cable{ @@ -13349,7 +13472,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/machinery/vending/snack{ name = "Jacked Getmore Chocolate Corp"; prices = list(); @@ -13776,7 +13899,7 @@ }, /obj/structure/table/rack, /obj/random/loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/holodeck) "bMo" = ( /obj/structure/stairs/north, @@ -13892,9 +14015,9 @@ /turf/simulated/open, /area/horizon/maintenance/deck_2/wing/port/far) "bMO" = ( -/obj/random/dirt_75, /obj/structure/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "bMX" = ( /obj/structure/machinery/portable_atmospherics/canister/empty/air, @@ -13967,6 +14090,7 @@ icon_state = "2-8" }, /obj/structure/machinery/alarm/east, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/civ_d2) "bNG" = ( @@ -14013,8 +14137,8 @@ "bOg" = ( /obj/structure/machinery/porta_turret, /obj/effect/floor_decal/industrial/warning/full, -/obj/structure/machinery/alarm/cold/west, -/turf/simulated/floor/tiled/dark/cooled, +/obj/structure/machinery/alarm/west, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/upload) "bOl" = ( /obj/structure/shuttle_part/scc_space_ship{ @@ -14030,7 +14154,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor, @@ -14145,7 +14269,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/research) "bOZ" = ( /obj/structure/machinery/light, @@ -14445,7 +14569,7 @@ /obj/structure/machinery/door/airlock/maintenance_hatch{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard) "bQN" = ( /obj/effect/decal/cleanable/dirt, @@ -14453,7 +14577,6 @@ /turf/unsimulated/floor/monotile, /area/antag/raider) "bQO" = ( -/obj/effect/floor_decal/sign/cmo, /obj/structure/cable/green{ icon_state = "2-8" }, @@ -14692,6 +14815,15 @@ }, /turf/simulated/floor/marble/dark, /area/horizon/command/bridge/minibar) +"bSs" = ( +/obj/effect/floor_decal/corner/dark_green{ + dir = 6 + }, +/obj/structure/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/horizon/hangar/auxiliary) "bSu" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/plating, @@ -14795,7 +14927,8 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/bed/stool/bar/padded/red, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "bTf" = ( /obj/structure/machinery/door/airlock/centcom{ @@ -14824,7 +14957,7 @@ dir = 4 }, /obj/structure/machinery/alarm/west, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port) "bTD" = ( /obj/item/deck/cards, @@ -15015,11 +15148,9 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/far) "bVg" = ( -/obj/effect/landmark{ - name = "Revenant" - }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/obj/structure/closet, +/obj/random/loot, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "bVi" = ( /obj/structure/machinery/disposal/small/east{ @@ -15153,6 +15284,9 @@ /area/horizon/command/bridge/controlroom) "bVV" = ( /obj/structure/machinery/alarm/south, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "bVZ" = ( @@ -15272,6 +15406,13 @@ }, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/turbine) +"bWK" = ( +/obj/effect/floor_decal/corner_wide/yellow{ + dir = 10 + }, +/obj/structure/machinery/light/floor, +/turf/simulated/floor/tiled, +/area/horizon/engineering/hallway/fore) "bWM" = ( /obj/item/paicard, /obj/item/paicard, @@ -15294,7 +15435,8 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_1"; name = "airlock_horizon_dock_deck_3_starboard_1" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard/docks) "bWV" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/green{ @@ -15398,7 +15540,6 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "bXG" = ( @@ -15423,6 +15564,9 @@ }, /obj/random/dirt_75, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "bXS" = ( @@ -15439,7 +15583,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos) "bXZ" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/unsimulated/floor, @@ -15496,6 +15640,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 5 }, +/obj/structure/machinery/light/small/floor, /turf/simulated/floor/wood, /area/horizon/service/cafeteria) "bYO" = ( @@ -15513,6 +15658,9 @@ dir = 8; icon_state = "pipe-c" }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "bYQ" = ( @@ -15669,7 +15817,8 @@ master_tag = "airlock_horizon_dock_deck_3_port_5"; name = "airlock_horizon_dock_deck_3_port_5" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/port/docks) "cah" = ( /turf/simulated/floor/grass/no_edge, @@ -15688,7 +15837,7 @@ /area/horizon/engineering/hallway/fore) "cav" = ( /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "caw" = ( /obj/structure/table/wood, @@ -15914,7 +16063,7 @@ }, /obj/structure/machinery/power/apc/west, /obj/structure/cable/green, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "cbU" = ( /turf/unsimulated/floor/plating, @@ -16078,6 +16227,7 @@ master_tag = "airlock_horizon_deck_1_aft_port_1"; name = "airlock_horizon_deck_1_aft_port_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "ccS" = ( @@ -16094,7 +16244,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_3"; name = "airlock_horizon_dock_deck_3_starboard_3" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "ccY" = ( /obj/structure/bed/stool/chair/office/dark{ @@ -16357,7 +16507,9 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 10 }, -/obj/structure/machinery/firealarm/east, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/engineering/storage/lower) "cfg" = ( @@ -16470,6 +16622,9 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow, /turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard) +"cfP" = ( +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/starboard) "cfT" = ( /obj/effect/floor_decal/corner/green/diagonal, /obj/effect/floor_decal/spline/fancy, @@ -16572,7 +16727,11 @@ "cgw" = ( /obj/structure/cable, /obj/structure/machinery/power/apc/west, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "cgH" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16599,9 +16758,6 @@ /obj/random/loot, /obj/random/junk, /obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "cgR" = ( @@ -16840,6 +16996,9 @@ pixel_x = -6; pixel_y = 3 }, +/obj/structure/machinery/light{ + dir = 8 + }, /turf/simulated/floor/wood, /area/horizon/rnd/xenoarch/presentation) "ciH" = ( @@ -16947,6 +17106,9 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/machinery/light/floor{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/hangar/auxiliary) "cji" = ( @@ -17181,6 +17343,9 @@ /obj/structure/engineer_maintenance/pipe{ dir = 1 }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/shields) "clb" = ( @@ -17189,10 +17354,14 @@ }, /turf/simulated/floor/plating, /area/turbolift/research/deck_1) +"clc" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port) "cld" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/machinery/pipedispenser, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -17264,6 +17433,7 @@ /obj/structure/cable/green{ icon_state = "1-8" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/operations) "cmj" = ( @@ -17301,9 +17471,6 @@ /turf/unsimulated/floor/plating, /area/centcom/distress_prep) "cmx" = ( -/obj/structure/machinery/light/small/emergency{ - dir = 1 - }, /obj/item/circuitboard/ghettosmes{ pixel_x = -4; pixel_y = 3 @@ -17316,6 +17483,10 @@ /obj/structure/cable/green{ icon_state = "4-8" }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_starboard) "cmF" = ( @@ -17439,7 +17610,7 @@ /obj/random/dirt_75, /obj/structure/reagent_dispensers/fueltank, /obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/operations) "cnw" = ( /obj/effect/floor_decal/corner/mauve/diagonal, @@ -17482,7 +17653,7 @@ /turf/simulated/floor/tiled, /area/horizon/medical/paramedic) "cnN" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -17517,9 +17688,6 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 1; @@ -17531,7 +17699,9 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "coi" = ( @@ -17609,7 +17779,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/bluespace_drive/monitoring) "coJ" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -17656,10 +17826,9 @@ /turf/simulated/floor/tiled, /area/horizon/security/hallway) "coT" = ( -/obj/structure/machinery/alarm/east, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/cryo) +/obj/effect/floor_decal/industrial/warning/cee, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/main/starboard) "coX" = ( /obj/structure/sink{ dir = 8; @@ -17689,7 +17858,10 @@ /obj/structure/machinery/light/small, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "cpn" = ( /obj/structure/machinery/atmospherics/unary/engine/scc_ship_engine, @@ -17843,6 +18015,10 @@ name = "airlock_horizon_deck_1_fore_1" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/starboard) "cqt" = ( @@ -17881,6 +18057,9 @@ /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "cqB" = ( +/obj/structure/platform{ + dir = 1 + }, /turf/simulated/floor/tiled/ramp/bottom{ dir = 8 }, @@ -17914,9 +18093,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "crp" = ( /obj/effect/floor_decal/corner/yellow{ @@ -17960,6 +18139,9 @@ /area/horizon/engineering/atmos/propulsion/starboard) "crw" = ( /obj/structure/grille/broken, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/operations/machinist) "crz" = ( @@ -18136,7 +18318,7 @@ /turf/unsimulated/floor, /area/centcom/holding) "csu" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/table/rack, @@ -18971,6 +19153,9 @@ /obj/random/dirt_75, /obj/random/dirt_75, /obj/structure/machinery/floodlight/randomcharge, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "cxm" = ( @@ -19050,7 +19235,7 @@ dir = 4; req_one_access = list(12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/port/far) "cxJ" = ( /obj/structure/cable{ @@ -19082,6 +19267,16 @@ }, /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard) +"cxP" = ( +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/command/bridge/selfdestruct) "cxQ" = ( /obj/structure/machinery/light, /obj/structure/machinery/computer/bluespacedrivecontrol{ @@ -19262,9 +19457,6 @@ /obj/item/stock_parts/console_screen, /obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random, -/obj/structure/machinery/light/small/emergency{ - dir = 4 - }, /turf/simulated/floor/carpet/rubber, /area/horizon/maintenance/deck_1/workshop) "cyU" = ( @@ -19417,11 +19609,12 @@ /turf/simulated/floor/bluegrid/server, /area/horizon/rnd/server) "czN" = ( -/obj/structure/railing/mapped, -/obj/structure/lattice/catwalk/indoor, -/obj/random/dirt_75, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/research) +/obj/effect/floor_decal/corner/white{ + dir = 5 + }, +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/horizon/rnd/hallway) "czO" = ( /obj/effect/floor_decal/corner/dark_blue{ dir = 6 @@ -19477,6 +19670,7 @@ dir = 8; icon_state = "pipe-c" }, +/obj/structure/lattice/catwalk/indoor/grate/dark/damaged, /turf/simulated/floor, /area/horizon/maintenance/deck_3/cafe) "cAb" = ( @@ -19651,14 +19845,16 @@ /obj/structure/cable/green{ icon_state = "2-8" }, +/obj/structure/machinery/light/floor, /turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/intrepid/main_compartment) "cBy" = ( +/obj/random/maintenance_junk_or_loot, /obj/effect/floor_decal/industrial/warning{ - dir = 4 + dir = 8 }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/main/interstitial) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "cBz" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -19681,7 +19877,7 @@ master_tag = "airlock_horizon_deck_3_aft_1"; name = "airlock_horizon_deck_3_aft_1" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "cBJ" = ( /obj/effect/floor_decal/corner/brown{ @@ -19842,10 +20038,11 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_2"; name = "airlock_horizon_dock_deck_3_starboard_2" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard/docks) "cCU" = ( /obj/effect/floor_decal/spline/plain/cee{ @@ -19877,7 +20074,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "cDb" = ( @@ -20123,9 +20320,10 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/conference) "cFn" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "cFq" = ( /obj/effect/floor_decal/corner/dark_green{ @@ -20139,26 +20337,23 @@ /area/horizon/crew/fitness/changing) "cFr" = ( /obj/structure/machinery/portable_atmospherics/canister/air, -/obj/structure/window/reinforced{ +/obj/structure/machinery/light/small{ dir = 8 }, -/obj/structure/machinery/light/small/emergency{ - dir = 8 - }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/nacelle) "cFs" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, /obj/structure/cable/green{ icon_state = "1-2" }, /obj/effect/floor_decal/industrial/hatch/red, -/obj/effect/floor_decal/industrial/warning/corner{ +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "cFC" = ( /obj/structure/filingcabinet{ @@ -20370,9 +20565,6 @@ /obj/effect/floor_decal/corner/dark_green{ dir = 9 }, -/obj/structure/machinery/light{ - dir = 8 - }, /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_1/central) "cHk" = ( @@ -20556,7 +20748,7 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/conference) "cII" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/effect/floor_decal/corner/black/diagonal, /turf/simulated/floor/tiled/dark, /area/shuttle/burglar) @@ -20666,9 +20858,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ icon_state = "pipe-c" @@ -20802,13 +20991,9 @@ /turf/unsimulated/floor/plating, /area/shuttle/syndicate_elite) "cJN" = ( -/obj/structure/platform_stairs/south_north_solo{ - dir = 1 - }, -/obj/structure/platform{ - dir = 8 - }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "cJO" = ( /obj/structure/machinery/door/firedoor, @@ -20908,7 +21093,7 @@ name = "airlock_horizon_deck_1_aft_propulsion_1" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/propulsion/starboard) "cKs" = ( /obj/effect/floor_decal/industrial/outline/security, @@ -21027,7 +21212,8 @@ /area/horizon/engineering/atmos/air) "cLM" = ( /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "cLT" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -21044,6 +21230,7 @@ "cLU" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/platform_deco, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) "cLX" = ( @@ -21120,6 +21307,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/engineering/storage/lower) "cMK" = ( @@ -21392,6 +21582,9 @@ "cOz" = ( /obj/structure/table/rack, /obj/random/contraband, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/far) "cOB" = ( @@ -21458,7 +21651,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "cOY" = ( /obj/structure/table/wood, @@ -21490,11 +21683,10 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_1/central) "cPd" = ( -/obj/random/dirt_75, -/obj/structure/cable, -/obj/structure/machinery/power/apc/low/south, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_1/main/port/shortcut) +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/starboard) "cPq" = ( /obj/effect/shuttle_landmark/horizon/exterior/deck_1/starboard_propulsion, /turf/template_noop, @@ -21877,11 +22069,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/obj/structure/machinery/light/small{ - dir = 4 - }, /obj/random/junk, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "cRW" = ( /obj/structure/machinery/light/small{ @@ -22011,6 +22200,7 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering) "cSA" = ( @@ -22122,6 +22312,9 @@ /area/horizon/medical/ward) "cTn" = ( /obj/structure/bed/stool, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "cTp" = ( @@ -22462,6 +22655,11 @@ }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) +"cVh" = ( +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "cVl" = ( /obj/structure/machinery/door/airlock/centcom{ name = "Arrival Hangar Maintenance"; @@ -22744,7 +22942,7 @@ cycle_to_external_air = 1 }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/quark/cargo_hold) "cWP" = ( /obj/effect/floor_decal/corner/red/diagonal, @@ -22809,7 +23007,10 @@ /area/centcom/legion) "cXF" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/brown{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "cXG" = ( /obj/effect/floor_decal/industrial/hatch/yellow, @@ -22963,7 +23164,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/security/evidence_storage) "cYv" = ( /obj/structure/machinery/door/airlock/glass_security{ @@ -23184,6 +23385,7 @@ master_tag = "airlock_horizon_deck_1_fore_1"; name = "airlock_horizon_deck_1_fore_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/starboard) "cZT" = ( @@ -23246,6 +23448,9 @@ dir = 9 }, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/shields) "cZY" = ( @@ -23255,10 +23460,10 @@ dir = 4; pixel_y = 3 }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 +/obj/effect/floor_decal/corner/dark_blue{ + dir = 9 }, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/chamber) "dab" = ( /obj/effect/floor_decal/corner/white/diagonal, @@ -23285,7 +23490,7 @@ name = "Security Maintenance"; req_one_access = list(12,47) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/research) "dad" = ( /obj/structure/shuttle_part/mercenary/small{ @@ -23901,7 +24106,7 @@ /obj/item/material/shard{ icon_state = "small" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "deZ" = ( /obj/structure/table/reinforced/glass, @@ -24104,6 +24309,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/indra/mainchamber) "dfN" = ( @@ -24143,6 +24351,7 @@ name = "Powernet Sensor - Deck 1 Engineering Subgrid"; name_tag = "Deck 1 Engineering Subgrid" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering/lower) "dgo" = ( @@ -24243,9 +24452,6 @@ "dgT" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/atmospherics/pipe/manifold/hidden, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, /obj/structure/cable/green{ icon_state = "2-4" }, @@ -24255,6 +24461,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "dhd" = ( @@ -24290,7 +24497,7 @@ /obj/structure/table/rack, /obj/random/loot, /obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor, @@ -24316,6 +24523,10 @@ /obj/structure/cable/green{ icon_state = "0-4" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/medical) "dhr" = ( @@ -24339,6 +24550,9 @@ dir = 4; icon_state = "pipe-j2" }, +/obj/effect/floor_decal/corner_wide/green{ + dir = 8 + }, /turf/simulated/floor/tiled/white, /area/horizon/medical/hallway/upper) "dhv" = ( @@ -24484,7 +24698,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -24650,6 +24864,7 @@ master_tag = "airlock_horizon_deck_2_aft_sm"; name = "airlock_horizon_deck_2_aft_sm" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/engineering/reactor/supermatter/airlock) "djb" = ( @@ -24742,7 +24957,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_3"; name = "airlock_horizon_dock_deck_3_starboard_3" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "djC" = ( /obj/structure/table/reinforced/steel, @@ -24811,8 +25026,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/light/small/emergency, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "dkb" = ( /turf/simulated/floor/plating, @@ -25351,7 +25566,7 @@ /obj/item/storage/bag/inflatable, /obj/random/loot, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/auxatmos) "dnf" = ( /obj/structure/machinery/conveyor{ @@ -25447,6 +25662,7 @@ /area/horizon/maintenance/deck_2/research) "dnK" = ( /obj/item/wrench, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "dnM" = ( @@ -25470,6 +25686,15 @@ /obj/structure/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/horizon/engineering/hallway/aft) +"dnX" = ( +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/dark_blue{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/ai/upload_foyer) "doc" = ( /obj/structure/machinery/light{ dir = 4 @@ -25541,6 +25766,9 @@ /obj/structure/railing/mapped{ dir = 8 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/starboard) "dos" = ( @@ -25598,7 +25826,7 @@ name = "Distro to Airlock"; target_pressure = 200 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "doW" = ( /obj/structure/shuttle_part/tcfl{ @@ -25649,13 +25877,15 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/lattice/catwalk/indoor/grate/damaged{ - color = "#4c535b" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plating, +/obj/structure/machinery/door/firedoor{ + req_one_access = list(24,11,67,73); + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch_door/yellow, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port) "dpf" = ( /obj/structure/cable{ @@ -25689,6 +25919,9 @@ /obj/structure/engineer_maintenance/pipe{ dir = 1 }, +/obj/structure/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/horizon/medical/gen_treatment) "dpt" = ( @@ -26011,6 +26244,10 @@ pixel_x = -5; pixel_y = 6 }, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "dqQ" = ( @@ -26022,6 +26259,7 @@ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/alarm/north, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port) "dqR" = ( @@ -26071,6 +26309,9 @@ /obj/structure/machinery/power/breakerbox/activated{ RCon_tag = "Service Substation" }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/civ_d2) "drf" = ( @@ -26215,6 +26456,7 @@ "dsf" = ( /obj/item/stack/rods, /obj/effect/decal/cleanable/dirt, +/obj/structure/platform, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "dsj" = ( @@ -26314,7 +26556,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor/carpet/rubber, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/aft) "dsP" = ( /obj/structure/machinery/light{ @@ -26351,15 +26593,18 @@ /turf/simulated/floor/reinforced/airless, /area/horizon/exterior) "dta" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "dtb" = ( /obj/effect/floor_decal/industrial/warning/cee{ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/central_ring) "dtc" = ( /obj/structure/window/reinforced{ @@ -26644,6 +26889,7 @@ /area/horizon/holodeck/source_cafe) "dvg" = ( /obj/structure/machinery/alarm/north, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "dvk" = ( @@ -26656,6 +26902,7 @@ name = "airlock_horizon_deck_3_aft_1" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "dvo" = ( @@ -26683,10 +26930,10 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/lattice/catwalk/indoor/grate/damaged{ - color = "#4c535b" +/obj/effect/floor_decal/industrial/warning{ + dir = 10 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "dvv" = ( /obj/structure/machinery/door/airlock/glass_engineering{ @@ -27045,6 +27292,7 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/storage_maintenance) "dxY" = ( @@ -27198,7 +27446,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/random/dirt_75, /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) @@ -27254,7 +27501,7 @@ /area/horizon/security/forensic_laboratory) "dzv" = ( /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/carpet/rubber, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/aft) "dzz" = ( /obj/effect/floor_decal/corner/dark_green/diagonal, @@ -27326,7 +27573,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -27351,7 +27598,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "dAa" = ( /obj/effect/floor_decal/industrial/loading/research{ @@ -27367,7 +27614,10 @@ /obj/structure/closet/crate, /obj/random/loot, /obj/random/loot, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "dAj" = ( /obj/structure/bed/stool/chair/padded/brown{ @@ -27410,6 +27660,10 @@ name_tag = "Operations Subgrid" }, /obj/structure/machinery/power/apc/low/north, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/operations) "dAp" = ( @@ -27492,7 +27746,7 @@ /obj/effect/floor_decal/industrial/hatch_door/engineering{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/storage/lower) "dAO" = ( /obj/structure/cable/green{ @@ -27596,7 +27850,7 @@ /area/horizon/holodeck/source_battlemonsters) "dBq" = ( /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "dBs" = ( /obj/effect/floor_decal/spline/plain{ @@ -27736,7 +27990,7 @@ /area/horizon/service/cafeteria) "dCv" = ( /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "dCx" = ( /obj/effect/floor_decal/corner/brown{ @@ -27791,7 +28045,7 @@ dir = 1 }, /obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/teleporter) "dCJ" = ( /obj/structure/bed/stool/chair/office/dark, @@ -28153,7 +28407,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -28207,7 +28461,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 10 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "dFc" = ( /obj/effect/floor_decal/corner_wide/yellow{ @@ -28287,7 +28541,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "dFI" = ( /obj/effect/floor_decal/corner/dark_green{ @@ -28335,11 +28590,21 @@ }, /obj/structure/table/rack, /obj/random/loot, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/holodeck) +"dFV" = ( +/obj/effect/floor_decal/corner_wide/yellow{ + dir = 9 + }, +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/structure/machinery/alarm/west, +/turf/simulated/floor/tiled, +/area/horizon/engineering/hallway/aft) "dFW" = ( /obj/effect/floor_decal/spline/plain{ dir = 1 @@ -28400,7 +28665,7 @@ dir = 4 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "dGi" = ( /obj/effect/floor_decal/corner/dark_blue{ @@ -28549,7 +28814,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "dHn" = ( /obj/structure/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{ @@ -28857,7 +29123,7 @@ name = "airlock_horizon_dock_deck_3_port_2" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "dJw" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -28928,6 +29194,7 @@ /obj/structure/cable/green{ icon_state = "1-4" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor, /area/horizon/maintenance/substation/civ_d3) "dJI" = ( @@ -28974,13 +29241,11 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_2/central) "dKr" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/loot{ pixel_x = -10; pixel_y = -11 }, -/obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "dKt" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -29020,7 +29285,7 @@ /obj/random/tech_supply, /obj/random/tech_supply, /obj/structure/machinery/firealarm/west, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "dKE" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -29041,9 +29306,8 @@ /turf/simulated/floor/plating, /area/horizon/shuttle/intrepid/starboard_compartment) "dKI" = ( -/obj/structure/railing/mapped, /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "dKN" = ( /obj/structure/shuttle/engine/propulsion/burst, @@ -29159,6 +29423,13 @@ /obj/effect/shuttle_landmark/lift/morgue_bottom, /turf/simulated/floor/plating, /area/horizon/medical/morgue) +"dLS" = ( +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/near) "dLT" = ( /obj/effect/floor_decal/corner/mauve{ dir = 10 @@ -29197,13 +29468,14 @@ }, /area/centcom/holding) "dMd" = ( -/obj/structure/cable/green{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/operations/starboard/far) +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/main/interstitial) "dMr" = ( /obj/structure/railing/mapped{ dir = 1 @@ -29402,7 +29674,6 @@ dir = 9 }, /obj/random/junk, -/obj/random/canister/restricted, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "dNP" = ( @@ -29436,6 +29707,13 @@ /obj/item/pen, /turf/simulated/floor/carpet, /area/horizon/command/bridge/meeting_room) +"dOk" = ( +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/main/port) "dOn" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -29545,7 +29823,7 @@ /turf/simulated/floor/tiled/dark/full, /area/turbolift/scc_ship/morgue_lift) "dOS" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/item/storage/toolbox/electrical{ @@ -29634,7 +29912,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port/far) "dPE" = ( /obj/structure/flora/ausbushes/fullgrass, @@ -29735,10 +30013,14 @@ /turf/simulated/floor/tiled, /area/horizon/engineering/locker_room) "dQk" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "dQl" = ( /obj/structure/bed/stool/chair/padded/red{ @@ -29770,16 +30052,17 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_port) "dQA" = ( -/obj/effect/floor_decal/corner/mauve{ - dir = 5 +/obj/structure/table/standard, +/obj/structure/bedsheetbin, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/horizon/rnd/hallway) +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/near) "dQF" = ( /obj/structure/flora/pottedplant{ icon_state = "plant-22" @@ -30078,6 +30361,9 @@ "dSz" = ( /obj/structure/machinery/alarm/west, /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard) "dSC" = ( @@ -30089,15 +30375,13 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_3/aft/starboard/far) "dSD" = ( -/obj/structure/machinery/light/small{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/civ_d2) "dSJ" = ( @@ -30168,7 +30452,11 @@ /area/horizon/command/bridge/supply) "dTn" = ( /obj/structure/trash_pile, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "dTq" = ( /obj/structure/cable{ @@ -30181,7 +30469,7 @@ dir = 9 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "dTu" = ( @@ -30215,9 +30503,6 @@ /area/centcom/bar) "dTK" = ( /obj/structure/extinguisher_cabinet/east, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -30228,12 +30513,19 @@ c_tag = "Bridge - Restricted Area"; dir = 1 }, -/turf/simulated/floor/tiled/dark/full, +/obj/effect/floor_decal/corner/dark_blue{ + dir = 6 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/upload_foyer) "dTO" = ( /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "dTW" = ( /obj/structure/machinery/door/firedoor, @@ -30357,6 +30649,7 @@ master_tag = "airlock_horizon_deck_2_starboard_aft"; name = "airlock_horizon_deck_2_starboard_aft" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) "dUU" = ( @@ -30400,14 +30693,13 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenoarch/atrium) "dUZ" = ( -/obj/effect/floor_decal/industrial/hatch_door/yellow, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/door/firedoor{ - req_one_access = list(24,11,67,73); - dir = 4 +/obj/random/maintenance_junk_or_loot, +/obj/random/dirt_75, +/obj/structure/machinery/light/small{ + dir = 8 }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/main/starboard) +/area/horizon/maintenance/deck_2/wing/port/far) "dVf" = ( /obj/effect/floor_decal/corner/mauve{ dir = 1 @@ -30548,14 +30840,12 @@ /turf/simulated/floor/tiled/white, /area/merchant_station) "dWf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/item/hoist_kit, /obj/structure/sign/nosmoking_2{ pixel_x = -32 }, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "dWp" = ( /obj/structure/disposalpipe/segment, @@ -30619,7 +30909,7 @@ icon_state = "railing0-1"; name = "railing" }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/unsimulated/floor/plating, /area/centcom/specops) "dWR" = ( @@ -30681,7 +30971,7 @@ icon_state = "4-8" }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/main/starboard) "dXk" = ( @@ -30720,6 +31010,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/engineering/drone_fabrication) "dXu" = ( @@ -30865,14 +31156,14 @@ /turf/simulated/wall/r_wall, /area/horizon/operations/ship_supply_warehouse) "dYE" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 8 +/obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/decal/cleanable/dirt, +/obj/random/canister/restricted, +/obj/structure/machinery/light/small{ + dir = 1 }, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/near) +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/main/port) "dYF" = ( /obj/effect/floor_decal/industrial/outline/service, /obj/structure/closet/secure_closet/hydroponics, @@ -30997,7 +31288,7 @@ pixel_y = 11; req_one_access = list(12,31,73,76,77,78) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/canary) "dZx" = ( /obj/structure/cable/green{ @@ -31022,6 +31313,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/starboard/far) "dZC" = ( @@ -31290,8 +31584,10 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "ebn" = ( /obj/structure/railing/mapped{ @@ -31927,7 +32223,10 @@ dir = 4 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "eeS" = ( /obj/effect/step_trigger/thrower/shuttle/east, @@ -32159,7 +32458,7 @@ dir = 4 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "efN" = ( /obj/structure/railing/mapped, @@ -32374,7 +32673,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -32395,7 +32694,10 @@ /obj/structure/table/rack, /obj/random/loot, /obj/random/loot, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "ehx" = ( @@ -32503,6 +32805,9 @@ }, /obj/effect/floor_decal/industrial/outline/grey, /obj/structure/machinery/papershredder, +/obj/structure/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/horizon/security/investigations_hallway) "eif" = ( @@ -32559,7 +32864,7 @@ /area/horizon/weapons/longbow) "eiJ" = ( /obj/random/loot, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/contraband, @@ -32568,7 +32873,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "eiK" = ( /obj/structure/cable/green{ @@ -32653,7 +32958,6 @@ dir = 8 }, /obj/effect/decal/cleanable/generic, -/obj/structure/machinery/light/small/emergency, /turf/simulated/floor/carpet/rubber, /area/horizon/maintenance/deck_1/workshop) "ejJ" = ( @@ -32677,6 +32981,10 @@ "ejX" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "ekb" = ( @@ -32725,6 +33033,14 @@ }, /turf/unsimulated/floor, /area/antag/mercenary) +"eks" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/random/dirt_75, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_3/security/port) "ekt" = ( /obj/structure/railing/mapped, /obj/structure/lattice/catwalk/indoor, @@ -32793,18 +33109,16 @@ /turf/simulated/floor/tiled, /area/horizon/service/hydroponics) "ekN" = ( -/obj/structure/platform/ledge/dark{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/turf/simulated/open, -/area/horizon/maintenance/deck_2/cryo) +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/aft/starboard/far) "ekP" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "ekR" = ( @@ -32831,7 +33145,7 @@ /area/centcom/bar) "ekY" = ( /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/effect/map_effect/marker/airlock{ @@ -32839,6 +33153,7 @@ master_tag = "airlock_horizon_deck_1_aft_propulsion_1"; name = "airlock_horizon_deck_1_aft_propulsion_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/engineering/atmos/propulsion/starboard) "elb" = ( @@ -32864,7 +33179,7 @@ pixel_y = 35; dir = 4 }, -/turf/simulated/floor/reinforced/airless, +/turf/simulated/floor/tiled/dark/full, /area/horizon/ai/upload_foyer) "elq" = ( /obj/structure/machinery/light{ @@ -32964,6 +33279,12 @@ }, /turf/unsimulated/floor, /area/centcom/bar) +"elV" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port) "elY" = ( /obj/effect/landmark{ name = "Syndicate-Spawn" @@ -33010,7 +33331,10 @@ dir = 5 }, /obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "emr" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -33049,6 +33373,7 @@ }, /obj/structure/machinery/power/apc/low/west, /obj/structure/machinery/light/small, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/hangar) "emA" = ( @@ -33070,7 +33395,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/cable/green{ @@ -33127,6 +33452,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/elevator) "enf" = ( @@ -33512,13 +33840,13 @@ "epn" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/structure/reagent_dispensers/extinguisher, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/sign/radiation{ pixel_y = 32 }, -/turf/simulated/floor/carpet/rubber, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/aft) "epo" = ( /obj/effect/floor_decal/corner_wide/yellow{ @@ -33527,6 +33855,7 @@ /obj/structure/machinery/status_display{ pixel_y = -32 }, +/obj/structure/machinery/light, /turf/simulated/floor/tiled, /area/horizon/engineering/hallway/fore) "epv" = ( @@ -33859,7 +34188,7 @@ /area/horizon/maintenance/deck_1/main/port) "esh" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "esi" = ( /obj/effect/floor_decal/industrial/warning{ @@ -33935,6 +34264,7 @@ /area/horizon/operations/office) "esN" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/teleporter) "esQ" = ( @@ -33942,7 +34272,10 @@ dir = 4 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "esV" = ( /obj/effect/floor_decal/spline/plain/corner{ @@ -34200,17 +34533,10 @@ /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos/propulsion/starboard) "euC" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 1 - }, -/obj/structure/railing/mapped{ - dir = 8 - }, /obj/random/maintenance_junk_or_loot, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/near) +/area/horizon/maintenance/deck_1/operations/starboard) "euF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -34257,7 +34583,7 @@ /obj/effect/landmark{ name = "Revenant" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "euN" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/red{ @@ -34412,15 +34738,19 @@ /turf/simulated/floor/tiled/dark/full, /area/shuttle/mercenary) "ewx" = ( -/obj/structure/machinery/light/small/emergency{ - dir = 8 - }, /obj/structure/cable/green{ icon_state = "0-2" }, /obj/structure/machinery/power/apc/hyper/north, /obj/effect/floor_decal/industrial/hatch/red, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning/corner, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "ewy" = ( /obj/effect/floor_decal/corner/yellow{ @@ -34482,16 +34812,20 @@ /turf/simulated/floor/tiled/white, /area/horizon/security/washroom) "ewG" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard/near) "ewO" = ( /obj/structure/machinery/chemical_dispenser/bar_alc/full{ pixel_y = 7 @@ -34616,10 +34950,8 @@ /area/shuttle/skipjack) "exE" = ( /obj/structure/bed/stool/chair/office/dark, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "exF" = ( /obj/structure/shuttle_part/scc_space_ship{ @@ -34688,7 +35020,7 @@ name = "airlock_horizon_deck_3_aft_1"; frequency = 1001 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "eyg" = ( /obj/structure/table/steel, @@ -34717,8 +35049,8 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/power/apc/high/east, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/engineering/drone_fabrication) "eyq" = ( @@ -34780,10 +35112,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "eyJ" = ( /obj/effect/floor_decal/industrial/outline/red, @@ -35028,7 +35361,7 @@ /obj/random/dirt_75, /obj/random/loot, /obj/random/loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port) "eAx" = ( /obj/effect/map_effect/window_spawner/full/reinforced/firedoor, @@ -35064,7 +35397,7 @@ /area/horizon/shuttle/quark/cargo_hold) "eAX" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/floor_decal/industrial/warning{ @@ -35078,6 +35411,9 @@ dir = 1 }, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "eBd" = ( @@ -35160,13 +35496,17 @@ }, /area/centcom/holding) "eBH" = ( -/obj/effect/floor_decal/industrial/warning/cee{ +/obj/effect/floor_decal/corner/black{ + dir = 9 + }, +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/structure/machinery/light/floor{ dir = 4 }, -/obj/structure/closet, -/obj/random/loot, /turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/wing/starboard/near) +/area/horizon/hangar/auxiliary) "eBI" = ( /obj/structure/bed/stool/chair/folding{ dir = 8 @@ -35228,7 +35568,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 5 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "eCm" = ( /obj/structure/cable/green{ @@ -35251,6 +35591,12 @@ /obj/structure/grille, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) +"eCs" = ( +/obj/structure/platform, +/turf/simulated/floor/tiled/ramp/bottom{ + dir = 8 + }, +/area/horizon/maintenance/deck_1/wing/starboard/far) "eCw" = ( /obj/structure/shuttle/engine/propulsion/burst/right, /turf/unsimulated/floor/plating, @@ -35262,7 +35608,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/cable{ icon_state = "1-4" }, @@ -35335,6 +35681,9 @@ "eDs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/starboard/far) "eDt" = ( @@ -35379,6 +35728,10 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/research) "eDB" = ( @@ -35520,6 +35873,10 @@ /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/structure/machinery/alarm/north, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "eEl" = ( @@ -35760,6 +36117,14 @@ }, /turf/simulated/floor/tiled/full, /area/horizon/command/bridge/upperdeck) +"eFv" = ( +/obj/effect/floor_decal/industrial/outline/operations, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/tech_supply, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/operations/starboard) "eFB" = ( /turf/simulated/wall, /area/horizon/rnd/eva) @@ -36281,11 +36646,12 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/full, +/obj/effect/floor_decal/corner_wide/blue{ + dir = 5 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/dark, /area/horizon/storage/secure/tech_vault) "eIO" = ( /obj/structure/machinery/flasher{ @@ -36322,7 +36688,7 @@ /area/horizon/engineering/atmos/propulsion/starboard) "eJb" = ( /obj/structure/machinery/pipedispenser, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "eJc" = ( /obj/effect/floor_decal/industrial/hatch_door/red{ @@ -36393,6 +36759,9 @@ /obj/effect/floor_decal/corner/dark_blue{ dir = 6 }, +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/ai/upload_foyer) "eJx" = ( @@ -36491,7 +36860,7 @@ master_tag = "airlock_horizon_deck_1_fore_1"; name = "airlock_horizon_deck_1_fore_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/hangar/starboard) "eKK" = ( /obj/effect/map_effect/door_helper/unres{ @@ -36515,7 +36884,7 @@ dir = 8 }, /obj/effect/floor_decal/spline/plain, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/unsimulated/floor/plating, @@ -36555,12 +36924,22 @@ /turf/simulated/floor/wood, /area/horizon/service/mess_hall) "eLe" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden{ - dir = 10 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/random/dirt_75, -/turf/simulated/floor, -/area/horizon/maintenance/deck_2/wing/port/far) +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "4-8" + }, +/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor/plating, +/area/horizon/rnd/hallway) "eLj" = ( /obj/structure/table/glass{ table_reinf = "glass" @@ -36740,7 +37119,7 @@ icon_state = "4-8" }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard/far) "eNf" = ( @@ -36851,9 +37230,6 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/test_range) "eNX" = ( -/obj/structure/railing/mapped{ - dir = 4 - }, /obj/effect/floor_decal/industrial/warning, /obj/structure/machinery/alarm/north, /obj/structure/reagent_dispensers/fueltank, @@ -36960,7 +37336,7 @@ /obj/effect/shuttle_landmark/merchant/dock{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/security/checkpoint2) "eOU" = ( /turf/simulated/floor/holofloor/beach/sand{ @@ -37089,6 +37465,10 @@ /obj/structure/platform_stairs/full{ dir = 1 }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "eQv" = ( @@ -37131,7 +37511,11 @@ "eQA" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled/dark, +/obj/structure/machinery/door/firedoor, +/obj/effect/floor_decal/industrial/hatch_door/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "eQC" = ( /obj/structure/platform/ledge, @@ -37170,6 +37554,9 @@ "eQL" = ( /obj/structure/machinery/portable_atmospherics/canister/empty, /obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "eQO" = ( @@ -37278,7 +37665,7 @@ req_one_access = list(11,24) }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/research) "eRl" = ( /obj/structure/cable{ @@ -37287,6 +37674,10 @@ /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/hangar) "eRt" = ( @@ -37378,7 +37769,7 @@ pixel_x = 3; pixel_y = 3 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "eRR" = ( /obj/structure/cable/green{ @@ -37489,7 +37880,7 @@ pixel_x = 32; req_access = list(13) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/security/checkpoint2) "eSz" = ( /obj/effect/floor_decal/corner/brown/diagonal, @@ -37773,6 +38164,10 @@ icon_state = "2-4" }, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "eTz" = ( @@ -38043,7 +38438,8 @@ /area/horizon/crew/lounge) "eVJ" = ( /obj/structure/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "eVM" = ( /obj/structure/machinery/requests_console/east{ @@ -38067,7 +38463,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "eVT" = ( /obj/structure/lattice/catwalk, @@ -38112,10 +38508,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "eWg" = ( -/obj/structure/machinery/light/small/emergency, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -38123,6 +38518,9 @@ dir = 5 }, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "eWh" = ( @@ -38298,7 +38696,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "eXH" = ( /obj/structure/disposalpipe/segment{ @@ -38327,10 +38729,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "eXT" = ( -/obj/effect/floor_decal/industrial/outline/grey, /obj/structure/closet/crate/tool, /obj/random/tech_supply, /obj/random/tech_supply, @@ -38342,7 +38743,10 @@ /obj/random/tool, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port/shortcut) "eXV" = ( /turf/simulated/wall/r_wall, @@ -38351,7 +38755,10 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "eYf" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -38364,6 +38771,9 @@ icon_state = "2-8" }, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "eYg" = ( @@ -38397,11 +38807,11 @@ /area/horizon/maintenance/deck_3/aft/starboard) "eYo" = ( /obj/random/dirt_75, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, /turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_1/main/port/shortcut) +/area/horizon/maintenance/deck_2/wing/port/far) "eYq" = ( /obj/effect/map_effect/map_helper/ruler_tiles_3{ dir = 4 @@ -38515,6 +38925,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/grille/broken, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "eZu" = ( @@ -38528,6 +38939,9 @@ /obj/structure/cable/green{ icon_state = "0-4" }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor, /area/horizon/ai/upload_foyer) "eZv" = ( @@ -38547,7 +38961,7 @@ dir = 1 }, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/port/nacelle) "eZD" = ( /obj/effect/decal/cleanable/dirt, @@ -38720,9 +39134,10 @@ /turf/simulated/floor/wood, /area/horizon/service/mess_hall) "faM" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "faN" = ( @@ -38958,6 +39373,10 @@ /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "fcK" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "fcL" = ( @@ -39009,7 +39428,7 @@ /obj/structure/railing/mapped{ dir = 8 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -39202,7 +39621,7 @@ /turf/simulated/floor/plating, /area/horizon/operations/mining_main/refinery) "feo" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -39278,6 +39697,10 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/medical) "feB" = ( @@ -39380,10 +39803,10 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/intrepid/flight_deck) "feU" = ( -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 +/obj/effect/floor_decal/corner/dark_blue{ + dir = 9 }, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/chamber) "feV" = ( /obj/structure/machinery/camera/network/reactor{ @@ -39552,11 +39975,11 @@ /turf/unsimulated/floor/plating, /area/shuttle/legion) "ffQ" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/warning{ + dir = 9 }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/area/horizon/maintenance/deck_2/wing/port/far) "ffX" = ( /obj/effect/floor_decal/corner/mauve/full{ dir = 1 @@ -39613,6 +40036,17 @@ /obj/effect/floor_decal/industrial/outline/yellow, /turf/simulated/floor/carpet/rubber, /area/horizon/medical/pharmacy) +"fgy" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb2, +/obj/structure/table/rack, +/obj/random/technology_scanner, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/main/port) "fgz" = ( /obj/structure/machinery/washing_machine, /obj/structure/machinery/light{ @@ -39660,6 +40094,10 @@ /obj/structure/machinery/camera/network/command{ c_tag = "AI Core - Upload Airlock" }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/machinery/alarm/north, /turf/simulated/floor, /area/horizon/ai/upload_foyer) "fgX" = ( @@ -39668,9 +40106,9 @@ /area/horizon/holodeck/source_combat_training) "fgY" = ( /obj/structure/machinery/firealarm/south, -/obj/effect/floor_decal/corner/dark_blue/full, -/obj/structure/machinery/alarm/west, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning/full, +/obj/structure/machinery/porta_turret, +/turf/simulated/floor/tiled/dark/full, /area/horizon/ai/upload_foyer) "fha" = ( /obj/item/modular_computer/console/preset/supply, @@ -39807,6 +40245,13 @@ /obj/effect/floor_decal/industrial/outline/medical, /turf/simulated/floor/tiled/dark/full, /area/horizon/medical/paramedic) +"fhO" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/wing/starboard) "fhQ" = ( /obj/effect/floor_decal/corner_wide/black{ dir = 6 @@ -39830,6 +40275,7 @@ c_tag = "Engineering - Deck 3 - Civilian Substation"; dir = 1 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor, /area/horizon/maintenance/substation/civ_d3) "fie" = ( @@ -40006,7 +40452,10 @@ no_cargo = 1 }, /obj/random/plushie, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/full{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "fka" = ( /obj/structure/flora/ausbushes/sparsegrass, @@ -40019,11 +40468,15 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "fkf" = ( /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "fkg" = ( @@ -40124,7 +40577,10 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "fkY" = ( /obj/effect/floor_decal/corner/dark_blue/full{ @@ -40333,7 +40789,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_2"; name = "airlock_horizon_dock_deck_3_starboard_2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "fmy" = ( /obj/effect/decal/cleanable/cobweb2{ @@ -40770,7 +41226,7 @@ req_access = list(12); name = "Deck 1 Starboard Primary Maintenance Conduit" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "fpl" = ( /obj/effect/floor_decal/corner/white/diagonal, @@ -40887,7 +41343,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "fpR" = ( /turf/simulated/open, @@ -40925,7 +41382,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "fqc" = ( /obj/effect/floor_decal/industrial/warning{ @@ -40939,7 +41396,7 @@ /obj/structure/cable/green{ icon_state = "0-8" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "fqs" = ( /obj/effect/floor_decal/spline/plain{ @@ -40984,7 +41441,7 @@ /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 1 }, -/obj/structure/machinery/hologram/holopad, +/obj/structure/machinery/light/small/floor, /turf/simulated/floor/wood, /area/horizon/service/bar) "fqG" = ( @@ -41329,7 +41786,10 @@ /area/horizon/service/cafeteria) "fta" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "ftp" = ( /obj/effect/floor_decal/industrial/warning{ @@ -41632,11 +42092,13 @@ /turf/simulated/floor, /area/tdome/tdome1) "fvR" = ( +/obj/effect/floor_decal/industrial/outline/grey, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/ramp/bottom{ - dir = 8 +/obj/structure/machinery/light/small{ + dir = 1 }, -/area/horizon/maintenance/deck_1/wing/starboard/far) +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/main/port) "fvV" = ( /obj/structure/cable{ icon_state = "4-8" @@ -41728,6 +42190,14 @@ /obj/structure/railing/mapped, /turf/simulated/floor/tiled, /area/horizon/operations/loading) +"fxg" = ( +/obj/random/dirt_75, +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/near) "fxi" = ( /obj/structure/table/reinforced/steel, /obj/item/storage/toolbox/mechanical{ @@ -41757,12 +42227,14 @@ /turf/unsimulated/floor/freezer, /area/antag/mercenary) "fxq" = ( -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 8 +/obj/effect/floor_decal/corner_wide/yellow{ + dir = 10 }, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/wing/starboard/far) +/obj/structure/machinery/light/floor{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/horizon/engineering/hallway/fore) "fxt" = ( /obj/effect/decal/fake_object{ dir = 1; @@ -41874,7 +42346,7 @@ pixel_x = 25; req_one_access = list(13,65) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/security/checkpoint2) "fxW" = ( /obj/structure/sink{ @@ -42119,6 +42591,8 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small, /turf/simulated/floor, /area/horizon/maintenance/substation/civ_d3) "fzV" = ( @@ -42133,7 +42607,6 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 }, -/obj/structure/machinery/meter, /obj/structure/cable/green{ icon_state = "4-8" }, @@ -42143,6 +42616,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "fAi" = ( @@ -42164,14 +42638,11 @@ }, /area/shuttle/legion) "fAu" = ( -/obj/structure/machinery/alarm/south, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/random/dirt_75, -/obj/random/dirt_75, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "fAJ" = ( /obj/effect/floor_decal/corner/brown/diagonal, @@ -42335,7 +42806,7 @@ /obj/structure/machinery/access_button{ pixel_x = 28 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "fCf" = ( /obj/effect/floor_decal/corner/black/diagonal, @@ -42635,7 +43106,7 @@ icon_state = "1-2" }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/maintenance/deck_2/wing/port/nacelle) "fEu" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ @@ -42673,7 +43144,9 @@ /obj/structure/bed/stool/chair/padded/brown{ dir = 4 }, -/obj/structure/disposalpipe/trunk, +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/wood, /area/horizon/command/heads/chief) "fEH" = ( @@ -42750,7 +43223,8 @@ }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/ai/upload_foyer) "fFc" = ( /obj/effect/floor_decal/spline/plain/cee{ @@ -42885,10 +43359,10 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "fGm" = ( @@ -43061,6 +43535,7 @@ /area/horizon/operations/machinist/surgicalbay) "fHu" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_3/security/port) "fHB" = ( @@ -43087,6 +43562,10 @@ }, /turf/unsimulated/floor, /area/antag/ninja) +"fHH" = ( +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/auxatmos) "fHO" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; @@ -43124,15 +43603,14 @@ /turf/simulated/floor/tiled, /area/horizon/hangar/auxiliary) "fIe" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, /obj/effect/decal/cleanable/ash{ pixel_x = -11; pixel_y = -2 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port/shortcut) "fIj" = ( @@ -43152,9 +43630,11 @@ /turf/unsimulated/floor, /area/centcom/legion) "fIn" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/lube, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "fIo" = ( /obj/structure/cable/green{ @@ -43247,6 +43727,7 @@ master_tag = "airlock_horizon_deck_1_aft_propulsion_2"; name = "airlock_horizon_deck_1_aft_propulsion_2" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/engineering/atmos/propulsion) "fJc" = ( @@ -43293,7 +43774,6 @@ /obj/effect/floor_decal/corner/beige{ dir = 10 }, -/obj/structure/machinery/light, /obj/structure/filingcabinet/chestdrawer, /obj/effect/floor_decal/industrial/outline/security, /turf/simulated/floor/tiled/white, @@ -43453,6 +43933,9 @@ "fKl" = ( /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "fKx" = ( @@ -43463,7 +43946,7 @@ /turf/simulated/floor/carpet/rubber, /area/horizon/engineering/hallway/fore) "fKy" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/random/dirt_75, @@ -43485,7 +43968,7 @@ pixel_x = -31; dir = 4 }, -/turf/simulated/floor/tiled/dark/cooled, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/chamber) "fKQ" = ( /obj/structure/closet/emcloset, @@ -43636,12 +44119,10 @@ /turf/simulated/floor/tiled/dark, /area/horizon/ai/upload) "fLy" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/structure/machinery/light/small{ must_start_working = 1 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "fLH" = ( @@ -43680,13 +44161,19 @@ /obj/structure/machinery/portable_atmospherics/powered/pump/filled{ start_pressure = 15000 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/shuttle/mercenary) "fLP" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/wall/r_wall, -/area/horizon/maintenance/deck_1/main/port) +/obj/structure/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/auxatmos) "fLQ" = ( /obj/structure/table/rack, /obj/effect/floor_decal/industrial/warning{ @@ -43908,7 +44395,7 @@ /obj/structure/bed/stool/chair/shuttle{ dir = 8 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/shuttle/black, @@ -43930,6 +44417,15 @@ }, /turf/simulated/floor/tiled/dark/full, /area/horizon/tcommsat/chamber) +"fNn" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/horizon/service/bar) "fNB" = ( /obj/structure/machinery/camera/network/crescent{ c_tag = "Crescent Departures"; @@ -44093,6 +44589,9 @@ /obj/item/modular_computer/console/preset/medical{ dir = 1 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "fOO" = ( @@ -44111,7 +44610,7 @@ }, /obj/item/material/shard, /obj/effect/floor_decal/industrial/warning{ - dir = 6 + dir = 10 }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) @@ -44187,7 +44686,7 @@ /obj/structure/machinery/access_button{ pixel_x = 28 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "fPx" = ( /obj/structure/cable{ @@ -44311,11 +44810,12 @@ /turf/simulated/open, /area/horizon/maintenance/deck_2/main/starboard) "fQq" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/obj/random/dirt_75, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard/far) "fQs" = ( /obj/structure/railing/mapped{ dir = 4 @@ -44404,7 +44904,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "fQX" = ( /obj/structure/bed/stool/chair/padded/black{ @@ -44484,7 +44984,6 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/xenobiology/xenoflora) "fRs" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ icon_state = "1-2" @@ -44496,6 +44995,9 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, +/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, /turf/simulated/floor/wood, /area/horizon/service/bar) "fRu" = ( @@ -44532,6 +45034,9 @@ /obj/item/material/shard{ icon_state = "small" }, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "fRL" = ( @@ -44547,7 +45052,7 @@ /obj/structure/machinery/door/firedoor{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/air) "fSa" = ( /obj/structure/cable/green{ @@ -44561,9 +45066,13 @@ /turf/simulated/floor/wood, /area/horizon/command/bridge/minibar) "fSb" = ( -/obj/random/junk, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/outline/operations, +/obj/structure/table/rack{ + dir = 8 + }, +/obj/random/tech_supply, +/obj/random/tool, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard) "fSf" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -44662,7 +45171,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/near) "fSH" = ( /obj/random/dirt_75, @@ -44832,7 +45341,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "fTE" = ( /obj/structure/flora/ausbushes/lavendergrass, @@ -44940,7 +45449,7 @@ /obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "fTZ" = ( /obj/effect/decal/cleanable/dirt, @@ -45055,13 +45564,15 @@ /turf/simulated/floor/exoplanet/grass/grove, /area/centcom/shared_dream) "fUJ" = ( -/obj/effect/floor_decal/industrial/warning, /obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/operations) "fUU" = ( @@ -45149,7 +45660,7 @@ /turf/simulated/floor/tiled/white, /area/horizon/command/heads/cmo) "fVk" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/unsimulated/floor/plating, /area/centcom/ferry) "fVp" = ( @@ -45208,7 +45719,7 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/lab) "fVK" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/floor_decal/industrial/warning, @@ -45246,7 +45757,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port) "fWc" = ( /obj/structure/machinery/light_switch/south{ @@ -45301,6 +45812,7 @@ master_tag = "airlock_horizon_deck_1_aft_port_1"; name = "airlock_horizon_deck_1_aft_port_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "fWo" = ( @@ -45610,10 +46122,11 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/structure/machinery/firealarm/south, /turf/simulated/floor/tiled, /area/horizon/operations/lobby) "fYN" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/template_noop, @@ -45794,14 +46307,13 @@ /area/shuttle/hapt) "gao" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/railing/mapped{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/reagent_dispensers/extinguisher, -/obj/structure/railing/mapped{ - icon_state = "railing0-0" +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/service/starboard) "gaq" = ( /obj/structure/machinery/camera/network/third_deck{ @@ -46060,6 +46572,7 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/civ_d2) "gbK" = ( @@ -46118,7 +46631,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 5 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/random/maintenance_junk_or_loot, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/port) @@ -46252,6 +46765,13 @@ }, /turf/simulated/floor/tiled, /area/horizon/rnd/hallway/secondary) +"gda" = ( +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "gdb" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -46358,6 +46878,12 @@ }, /turf/unsimulated/floor, /area/centcom/legion) +"gel" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/main/port) "gep" = ( /obj/structure/grille, /obj/structure/machinery/door/firedoor, @@ -46441,7 +46967,10 @@ /obj/structure/bed/stool/chair/office/dark{ dir = 8 }, -/turf/simulated/floor, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/starboard) "geP" = ( /obj/structure/table/standard{ @@ -46457,6 +46986,9 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos/storage_maintenance) "geV" = ( @@ -46622,13 +47154,12 @@ /turf/simulated/floor/lino, /area/horizon/service/bar) "gfP" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/platform_deco{ + dir = 4 }, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/starboard/far) "gfR" = ( /turf/simulated/wall/shuttle/scc, /area/horizon/shuttle/intrepid/engineering) @@ -46645,6 +47176,7 @@ /area/horizon/hangar/auxiliary) "ggh" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/black, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "ggl" = ( @@ -46677,6 +47209,13 @@ /obj/structure/window/reinforced, /turf/simulated/floor/tiled/dark/full, /area/horizon/hangar/airstation) +"ggG" = ( +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/near) "ggJ" = ( /obj/effect/floor_decal/corner/black{ dir = 9 @@ -46778,7 +47317,7 @@ /area/horizon/engineering/reactor/indra/monitoring) "ghA" = ( /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -47285,8 +47824,9 @@ /turf/simulated/floor/plating, /area/horizon/security/hallway) "gla" = ( -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/operations) +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/aft/starboard/far) "glg" = ( /obj/structure/closet/crate/software_backup, /obj/effect/floor_decal/industrial/outline/yellow, @@ -47459,7 +47999,12 @@ /turf/space, /area/horizon/exterior) "gme" = ( -/obj/structure/girder, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "gmg" = ( @@ -47467,9 +48012,13 @@ dir = 10 }, /obj/random/dirt_75, -/obj/random/dirt_75, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "gmi" = ( /obj/structure/railing/mapped{ @@ -47668,9 +48217,12 @@ /area/horizon/hallway/primary/deck_2/fore) "gnX" = ( /obj/random/junk, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/far) "goa" = ( @@ -47689,6 +48241,10 @@ /obj/random/maintenance_junk_or_loot, /turf/simulated/floor/tiled/dark, /area/horizon/service/custodial/disposals/deck_1) +"gog" = ( +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/starboard) "goh" = ( /obj/structure/table/standard, /obj/structure/window/reinforced, @@ -47760,7 +48316,12 @@ /turf/simulated/floor/tiled, /area/horizon/security/hallway) "gou" = ( -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/obj/structure/platform, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "goB" = ( /obj/effect/floor_decal/corner/dark_green{ @@ -48006,9 +48567,11 @@ /turf/unsimulated/floor, /area/centcom/spawning) "gqp" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard) +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/operations/starboard) "gqs" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -48348,7 +48911,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard/far) "grD" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -48433,7 +48996,8 @@ /obj/structure/disposalpipe/segment{ icon_state = "pipe-c" }, -/turf/simulated/floor/plating, +/obj/random/maintenance_junk_or_loot, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "gsz" = ( /obj/structure/machinery/smartfridge/chemistry{ @@ -48641,7 +49205,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 10 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "gur" = ( /obj/structure/table/reinforced/steel, @@ -48793,7 +49357,6 @@ }, /area/horizon/holodeck/source_konyang) "gvf" = ( -/obj/structure/machinery/light, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/structure/machinery/vending/coffee, /turf/simulated/floor/tiled/dark/full, @@ -48884,7 +49447,7 @@ name = "airlock_horizon_deck_3_fore_starboard_1" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/crewlounge) "gvK" = ( /obj/structure/table/stone/marble, @@ -48967,6 +49530,10 @@ icon_state = "white" }, /area/tdome/tdomeobserve) +"gwi" = ( +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/wing/starboard) "gwk" = ( /obj/effect/floor_decal/corner/dark_green/full{ dir = 1 @@ -49048,7 +49615,7 @@ /area/horizon/engineering/hallway/interior) "gwI" = ( /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/maintenance/deck_2/wing/port/nacelle) "gwK" = ( /obj/structure/machinery/atmospherics/unary/engine/scc_shuttle, @@ -49249,7 +49816,6 @@ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "gyf" = ( @@ -49368,7 +49934,7 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/reception) "gyK" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/open, /area/horizon/maintenance/deck_2/wing/starboard) "gyR" = ( @@ -49424,6 +49990,10 @@ /area/antag/mercenary) "gzh" = ( /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/elevator) "gzj" = ( @@ -49437,7 +50007,7 @@ /area/centcom/bar) "gzn" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/cable{ @@ -49595,10 +50165,12 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/main_storage) "gAs" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard) +/area/horizon/maintenance/deck_2/wing/port) "gAu" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -49853,7 +50425,7 @@ /obj/structure/bed/stool/padded/black, /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/alarm/north, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "gBV" = ( /obj/structure/cable/yellow{ @@ -50050,10 +50622,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/starboard) "gDD" = ( /obj/structure/flora/ausbushes/sparsegrass, @@ -50304,8 +50873,7 @@ /obj/structure/railing/mapped{ dir = 8 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "gFn" = ( /obj/effect/floor_decal/corner/red/diagonal, @@ -50391,7 +50959,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_1"; name = "airlock_horizon_dock_deck_3_starboard_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "gFU" = ( /obj/structure/machinery/alarm/north, @@ -50455,6 +51023,9 @@ /turf/unsimulated/floor/plating, /area/antag/jockey) "gGk" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "gGo" = ( @@ -50465,6 +51036,9 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/machinery/light/floor{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos) "gGr" = ( @@ -50555,18 +51129,12 @@ /turf/simulated/floor/tiled, /area/horizon/rnd/hallway) "gGL" = ( -/obj/structure/platform{ - dir = 1 - }, +/obj/effect/floor_decal/industrial/warning, +/obj/random/dirt_75, /obj/structure/platform{ dir = 4 }, -/obj/structure/platform_deco{ - dir = 10 - }, -/obj/random/dirt_75, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "gGS" = ( /obj/structure/bed/stool/chair/sofa/left/purple{ @@ -50617,10 +51185,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "gHg" = ( /turf/unsimulated/wall/riveted, @@ -50701,7 +51266,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_2"; name = "airlock_horizon_dock_deck_3_starboard_2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "gHy" = ( /turf/simulated/wall/shuttle/unique/mercenary/small, @@ -50801,14 +51366,14 @@ /obj/structure/railing/mapped{ dir = 4 }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "gIi" = ( -/obj/structure/machinery/floodlight, /obj/effect/floor_decal/industrial/warning{ - dir = 5 + dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard) "gIk" = ( /turf/unsimulated/wall/steel, @@ -50840,6 +51405,9 @@ }, /obj/random/dirt_75, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "gIO" = ( @@ -51042,17 +51610,11 @@ /turf/simulated/open, /area/horizon/hallway/primary/deck_3/central) "gJW" = ( -/obj/structure/railing/mapped{ +/obj/structure/platform, +/obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/railing/mapped{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "gJX" = ( /obj/effect/floor_decal/industrial/warning, @@ -51124,7 +51686,7 @@ pixel_x = 12; pixel_y = 28 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "gKg" = ( /turf/simulated/floor/holofloor/tiled, @@ -51146,7 +51708,7 @@ /turf/simulated/floor/tiled, /area/horizon/medical/morgue) "gKz" = ( -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/platform, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "gKD" = ( @@ -51220,6 +51782,9 @@ /area/centcom/specops) "gLE" = ( /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "gLG" = ( @@ -51419,8 +51984,8 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/mercenary) "gMP" = ( -/obj/random/dirt_75, /obj/random/junk, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "gMR" = ( @@ -51434,9 +51999,7 @@ c_tag = "Engineering - Deck 2 - Medical Substation"; dir = 4 }, -/obj/structure/machinery/light/small/emergency{ - dir = 8 - }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/medical) "gMT" = ( @@ -51611,7 +52174,7 @@ /obj/structure/closet/crate, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "gNN" = ( /obj/structure/cable/yellow{ @@ -52220,7 +52783,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "gSA" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -52338,8 +52901,13 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenoarch/atrium) "gTF" = ( +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_1/main/port/shortcut) +/area/horizon/maintenance/deck_2/main/starboard) "gTH" = ( /obj/effect/floor_decal/corner/red{ dir = 9 @@ -52480,6 +53048,15 @@ }, /turf/simulated/floor/reinforced/oxygen, /area/horizon/engineering/atmos/air) +"gUK" = ( +/obj/effect/floor_decal/corner/mauve{ + dir = 10 + }, +/obj/structure/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/horizon/rnd/hallway) "gUM" = ( /obj/item/stack/packageWrap, /obj/item/hand_labeler, @@ -52503,10 +53080,11 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/gen_treatment) "gUT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, /obj/random/junk, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/platform_deco{ + icon_state = "ledge_deco" + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard/far) "gUV" = ( @@ -52817,7 +53395,7 @@ /obj/effect/floor_decal/corner/dark_green{ dir = 10 }, -/obj/structure/machinery/firealarm/south, +/obj/structure/machinery/light, /turf/simulated/floor/tiled, /area/horizon/operations/lobby) "gWP" = ( @@ -52913,6 +53491,8 @@ /area/horizon/operations/machinist) "gXo" = ( /obj/structure/machinery/anti_bluespace, +/obj/structure/machinery/alarm/south, +/obj/effect/floor_decal/industrial/warning/full, /turf/simulated/floor/tiled/dark/full, /area/horizon/storage/secure/tech_vault) "gXu" = ( @@ -53361,7 +53941,6 @@ pixel_x = 32 }, /obj/structure/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/floor_decal/industrial/warning/corner, /obj/effect/floor_decal/industrial/warning{ dir = 1 }, @@ -53373,7 +53952,11 @@ pixel_y = 30; req_access = list(16) }, -/turf/simulated/floor/tiled/dark/full, +/obj/effect/floor_decal/corner/dark_blue{ + dir = 6 + }, +/obj/effect/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/upload_foyer) "har" = ( /obj/effect/floor_decal/corner/dark_blue{ @@ -53420,11 +54003,8 @@ /turf/simulated/floor/wood, /area/horizon/repoffice/consular_two) "haz" = ( -/obj/effect/floor_decal/industrial/loading/yellow, -/obj/structure/platform{ - dir = 8 - }, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "haC" = ( /obj/structure/cable{ @@ -54363,6 +54943,12 @@ /obj/effect/floor_decal/corner/green, /turf/unsimulated/floor, /area/centcom/bar) +"hgJ" = ( +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/machinery/light/floor, +/turf/simulated/floor/tiled/full, +/area/horizon/engineering/hallway/fore) "hgK" = ( /obj/structure/machinery/portable_atmospherics/canister/air/airlock, /obj/structure/machinery/atmospherics/portables_connector, @@ -54520,6 +55106,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 6 }, +/obj/structure/machinery/light/small/floor, /turf/simulated/floor/wood, /area/horizon/service/cafeteria) "hhX" = ( @@ -54625,12 +55212,10 @@ /area/horizon/operations/warehouse) "hiU" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/effect/decal/cleanable/dirt, /obj/structure/railing/mapped{ icon_state = "railing0-0" }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port) "hiV" = ( @@ -54693,7 +55278,7 @@ req_one_access = list(24,11,67,73); dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/starboard) "hjB" = ( /obj/structure/cable/green{ @@ -54949,7 +55534,7 @@ /obj/effect/floor_decal/industrial/warning/cee{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor, @@ -55154,8 +55739,14 @@ /area/horizon/storage/secure/tech_vault) "hmf" = ( /obj/structure/trash_pile, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /obj/random/dirt_75, -/turf/simulated/floor, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "hmg" = ( /obj/effect/floor_decal/corner/dark_green{ @@ -55243,7 +55834,10 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "hmO" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -55461,7 +56055,10 @@ /obj/effect/decal/cleanable/dirt, /obj/random/junk, /obj/random/med_stack, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "hnB" = ( /obj/structure/shuttle_part/scc_space_ship{ @@ -55709,7 +56306,7 @@ /turf/simulated/floor/tiled, /area/horizon/command/bridge/supply) "hpn" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -56030,10 +56627,6 @@ dir = 1 }, /obj/item/modular_computer/console/preset/command, -/obj/structure/machinery/light/small, -/obj/structure/machinery/light/small{ - dir = 1 - }, /turf/simulated/floor/tiled/dark, /area/horizon/command/bridge/aibunker) "hrK" = ( @@ -56312,7 +56905,7 @@ name = "Operations Substation"; req_one_access = list(11,24) }, -/turf/simulated/floor/tiled/gunmetal/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/operations/warehouse) "htJ" = ( /obj/structure/machinery/door/airlock/external, @@ -56344,7 +56937,7 @@ id = "quark_bay_outer"; name = "Quark Shutter" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/quark/cargo_hold) "htP" = ( /obj/structure/window/reinforced/crescent{ @@ -56678,7 +57271,10 @@ /area/horizon/security/warden) "hvn" = ( /obj/random/junk, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "hvt" = ( /obj/structure/machinery/atmospherics/portables_connector/fuel{ @@ -56878,8 +57474,8 @@ dir = 1 }, /obj/structure/trash_pile, -/obj/structure/machinery/light/small/emergency, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "hwP" = ( /obj/effect/floor_decal/corner/dark_green/full, @@ -57083,7 +57679,7 @@ /obj/structure/closet, /obj/random/loot, /obj/random/junk, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "hyz" = ( /obj/structure/machinery/atmospherics/binary/pump/fuel{ @@ -57216,6 +57812,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "hyZ" = ( @@ -57263,10 +57860,7 @@ /obj/structure/cable/green{ icon_state = "2-4" }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 - }, +/turf/simulated/floor/bluegrid, /area/horizon/ai/chamber) "hzl" = ( /obj/structure/cable/green{ @@ -57301,7 +57895,7 @@ must_start_working = 1 }, /obj/random/canister/filled/restricted, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "hzx" = ( /obj/structure/railing/mapped{ @@ -57309,7 +57903,7 @@ }, /obj/structure/railing/mapped, /obj/structure/lattice/catwalk, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/open, @@ -57340,9 +57934,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 10 }, -/obj/effect/decal/cleanable/cobweb2, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "hzW" = ( /obj/structure/railing/mapped{ @@ -57430,6 +58023,7 @@ "hAA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/alarm/north, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "hAB" = ( @@ -57689,6 +58283,13 @@ /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/white, /area/horizon/medical/gen_treatment) +"hCj" = ( +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/wing/starboard) "hCm" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -57728,17 +58329,22 @@ /turf/simulated/floor/reinforced, /area/horizon/rnd/xenobiology) "hCI" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency, -/obj/structure/machinery/light/small/emergency, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/obj/structure/table/rack, +/obj/random/loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "hCL" = ( -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/platform_deco{ dir = 8 }, -/turf/simulated/floor/reinforced, -/area/horizon/command/bridge/selfdestruct) +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/wing/starboard/far) "hCM" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 5 @@ -57806,7 +58412,7 @@ name = "Investigators' Office"; req_access = list(4) }, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/security/investigators_office) "hDb" = ( /obj/effect/landmark/entry_point/port{ @@ -57871,14 +58477,12 @@ /turf/simulated/floor/carpet/rubber, /area/horizon/engineering/reactor/supermatter/monitoring) "hDv" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/machinery/floodlight, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/outline/operations, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard) "hDy" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -57931,7 +58535,7 @@ pixel_x = 20; pixel_y = -28 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "hDH" = ( /obj/effect/floor_decal/corner_wide/paleblue{ @@ -57958,7 +58562,7 @@ /turf/simulated/floor/carpet/red, /area/horizon/service/library) "hDM" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/lattice/catwalk/indoor, @@ -57989,6 +58593,9 @@ /obj/random/junk, /obj/structure/table/rack, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "hDX" = ( @@ -57997,7 +58604,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/random/dirt_75, /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) @@ -58032,7 +58638,7 @@ /area/shuttle/legion) "hEh" = ( /obj/structure/machinery/alarm/north, -/obj/random/dirt_75, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "hEk" = ( @@ -58101,7 +58707,7 @@ req_access = list(12); name = "Deck 1 Starboard Primary Maintenance Conduit" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard) "hEE" = ( /obj/structure/cable{ @@ -58112,14 +58718,14 @@ /obj/structure/machinery/door/firedoor, /obj/structure/machinery/atmospherics/pipe/simple/hidden/aux, /obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel, -/obj/effect/floor_decal/industrial/hatch_door/yellow{ - dir = 8 - }, /obj/structure/machinery/door/airlock/maintenance{ name = "Deck 1 Starboard Primary Maintenance Conduit"; req_one_access = list(12,31) }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/hatch_door/yellow{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard/amidships) "hEH" = ( /obj/structure/cable/green{ @@ -58283,7 +58889,10 @@ /area/horizon/hangar/intrepid) "hFZ" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "hGe" = ( /obj/structure/machinery/door/airlock/glass_security{ @@ -58323,6 +58932,7 @@ master_tag = "airlock_horizon_deck_2_starboard_aft"; name = "airlock_horizon_deck_2_starboard_aft" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) "hGq" = ( @@ -58377,14 +58987,10 @@ /turf/simulated/floor/tiled/dark, /area/horizon/security/evidence_storage) "hGA" = ( -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/random/junk, /obj/structure/platform{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "hGF" = ( /obj/structure/flora/ausbushes/fullgrass, @@ -58436,13 +59042,19 @@ /area/horizon/hallway/primary/deck_2/fore) "hHp" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/sign/double/barsign{ pixel_y = -32 }, /obj/structure/lattice/catwalk, /turf/simulated/open, /area/horizon/maintenance/deck_2/service/starboard) +"hHr" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/structure/railing/mapped, +/obj/structure/machinery/light/small/floor, +/turf/simulated/floor/wood, +/area/horizon/service/cafeteria) "hHv" = ( /obj/effect/floor_decal/industrial/warning/corner{ dir = 4 @@ -58717,6 +59329,10 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "hJs" = ( @@ -59148,9 +59764,6 @@ /obj/structure/machinery/atmospherics/pipe/simple/visible/universal{ dir = 1 }, -/obj/structure/machinery/light/small/emergency{ - dir = 8 - }, /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) @@ -59168,10 +59781,10 @@ pixel_x = 0 }, /obj/structure/machinery/firealarm/south, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, +/turf/simulated/floor, /area/horizon/ai/chamber) "hLX" = ( /obj/structure/machinery/door/airlock/external{ @@ -59222,7 +59835,10 @@ "hMc" = ( /obj/structure/closet, /obj/random/loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "hMf" = ( /obj/effect/floor_decal/corner/grey/diagonal, @@ -59236,6 +59852,10 @@ dir = 8 }, /area/horizon/holodeck/source_sauna) +"hMn" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/main/port) "hMC" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 @@ -59299,11 +59919,10 @@ /turf/unsimulated/floor/plating, /area/shuttle/legion) "hNb" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/effect/floor_decal/industrial/warning, +/obj/structure/railing/mapped{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning, -/obj/random/maintenance_junk_or_loot, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "hNe" = ( @@ -59321,6 +59940,7 @@ icon_state = "1-8" }, /obj/structure/cable, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/operations) "hNm" = ( @@ -59331,9 +59951,6 @@ /obj/structure/platform{ dir = 4 }, -/obj/structure/machinery/light/floor{ - dir = 8 - }, /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, @@ -59360,10 +59977,11 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/aibunker) "hNu" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, -/turf/simulated/floor, -/area/horizon/maintenance/deck_3/security/port) +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port) "hNv" = ( /obj/effect/floor_decal/spline/plain/corner{ dir = 4 @@ -59525,7 +60143,7 @@ master_tag = "airlock_horizon_deck_1_aft_propulsion_1"; name = "airlock_horizon_deck_1_aft_propulsion_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/propulsion/starboard) "hOw" = ( /obj/structure/cable/green{ @@ -59570,7 +60188,7 @@ "hOG" = ( /obj/effect/floor_decal/industrial/warning, /obj/random/junk, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "hOO" = ( /obj/structure/machinery/button/switch/windowtint{ @@ -59643,7 +60261,7 @@ /obj/item/pipe{ pixel_x = -5 }, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "hPl" = ( /obj/structure/bed/stool/chair/shuttle, @@ -59735,7 +60353,7 @@ /turf/simulated/floor/tiled, /area/horizon/crew/vacantoffice) "hPB" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -59768,7 +60386,7 @@ pixel_x = -32; pixel_y = -6 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "hPK" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -59901,6 +60519,13 @@ /obj/item/stack/material/graphite/full, /turf/simulated/floor, /area/horizon/command/bridge/aibunker) +"hQt" = ( +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/platform_deco{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/wing/starboard/far) "hQx" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -60079,7 +60704,8 @@ master_tag = "airlock_horizon_dock_deck_3_port_5"; name = "airlock_horizon_dock_deck_3_port_5" }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor, /area/horizon/hallway/primary/deck_3/port/docks) "hRQ" = ( /obj/structure/flora/grass/jungle, @@ -60249,7 +60875,11 @@ /turf/simulated/floor/tiled/full, /area/horizon/medical/ward) "hTl" = ( -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/starboard/far) "hTm" = ( /obj/structure/holostool{ @@ -60288,11 +60918,12 @@ /area/horizon/storage/eva) "hTF" = ( /obj/structure/table/steel, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/contraband, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "hTG" = ( /obj/effect/floor_decal/corner_wide/yellow/full, @@ -60322,7 +60953,7 @@ name = "airlock_horizon_dock_deck_3_port_4" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "hTR" = ( /obj/structure/cable/green{ @@ -60559,6 +61190,9 @@ "hWq" = ( /obj/structure/bed/stool/chair/padded/brown, /obj/structure/machinery/firealarm/north, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, /turf/simulated/floor/wood/walnut, /area/horizon/medical/smoking) "hWr" = ( @@ -60913,7 +61547,7 @@ /turf/simulated/floor/tiled/dark/full, /area/supply/dock) "hZk" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/machinery/atmospherics/pipe/simple/hidden{ @@ -60985,8 +61619,8 @@ c_tag = "Engineering - Deck 2 - Port Pod Substation"; dir = 1 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_starboard) "hZG" = ( @@ -61023,14 +61657,15 @@ /obj/structure/closet/crate, /obj/effect/floor_decal/industrial/outline/yellow, /obj/random/loot, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "hZR" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -61084,6 +61719,7 @@ /area/horizon/rnd/xenobiology/xenoflora) "iaw" = ( /obj/structure/disposalpipe/segment, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/research) "iaB" = ( @@ -61104,7 +61740,10 @@ "iaC" = ( /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/near) "iaD" = ( /obj/structure/railing/mapped{ @@ -61501,6 +62140,12 @@ "icP" = ( /turf/simulated/wall/r_wall, /area/horizon/security/lobby) +"icR" = ( +/obj/random/dirt_75, +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/far) "icW" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{ dir = 4 @@ -61606,7 +62251,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "idu" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/dirt_75, @@ -61646,7 +62291,7 @@ /area/horizon/hangar/control) "idJ" = ( /obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/maintenance_junk_or_loot, @@ -61832,7 +62477,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/floodlight, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "ieK" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -61937,7 +62582,6 @@ /turf/simulated/floor/plating, /area/horizon/engineering/storage/lower) "ifu" = ( -/obj/effect/floor_decal/industrial/outline/grey, /obj/random/dirt_75, /obj/item/storage/box/lights/mixed{ pixel_x = 6; @@ -61947,7 +62591,8 @@ pixel_x = 6; pixel_y = -4 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port/shortcut) "ifw" = ( /obj/structure/machinery/hologram/holopad, @@ -61969,9 +62614,9 @@ /area/horizon/security/checkpoint2) "ifK" = ( /obj/structure/trash_pile, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/research) "ifN" = ( /obj/structure/railing/mapped{ @@ -62201,10 +62846,12 @@ /turf/simulated/floor/tiled, /area/horizon/command/bridge/upperdeck) "ihL" = ( -/obj/structure/machinery/porta_turret/stationary, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/reinforced, -/area/horizon/command/bridge/selfdestruct) +/obj/effect/floor_decal/corner/brown{ + dir = 5 + }, +/obj/structure/machinery/firealarm/north, +/turf/simulated/floor/tiled, +/area/horizon/operations/lobby) "ihS" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -62504,7 +63151,10 @@ /obj/structure/sign/securearea{ pixel_y = 32 }, -/turf/simulated/floor, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "ikd" = ( /obj/structure/cable/green{ @@ -62866,7 +63516,7 @@ pixel_x = -22; pixel_y = 32 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "imk" = ( /obj/structure/cable/green{ @@ -62907,15 +63557,21 @@ /turf/simulated/floor/wood, /area/horizon/command/heads/captain) "imq" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ icon_state = "1-2" }, /obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/item/radio/intercom/west, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "ims" = ( /obj/structure/shuttle_part/scc/scout{ @@ -62938,6 +63594,7 @@ dir = 6 }, /obj/structure/railing/mapped, +/obj/structure/machinery/light/small/floor, /turf/simulated/floor/wood, /area/horizon/service/cafeteria) "imJ" = ( @@ -63332,6 +63989,7 @@ shuttle_tag = "Quark"; cycle_to_external_air = 1 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/shuttle/quark/cargo_hold) "ipD" = ( @@ -63364,7 +64022,7 @@ "ipQ" = ( /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "ipY" = ( /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume/aux{ @@ -63388,6 +64046,7 @@ shuttle_tag = "Quark"; cycle_to_external_air = 1 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/shuttle/quark/cargo_hold) "ipZ" = ( @@ -63549,6 +64208,16 @@ }, /turf/simulated/floor/tiled/full, /area/horizon/medical/ward) +"iqK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/random/maintenance_junk_or_loot, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/main/port) "iqN" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -63577,16 +64246,14 @@ /obj/structure/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "iqW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/atmospherics/pipe/manifold/hidden{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "iqY" = ( @@ -64055,7 +64722,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 4 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "iuf" = ( @@ -64114,19 +64781,11 @@ /turf/simulated/floor/carpet, /area/horizon/repoffice/consular_one) "iuG" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/random/dirt_75, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/far) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "iuJ" = ( /obj/effect/floor_decal/corner/dark_blue{ dir = 9 @@ -64291,7 +64950,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor, @@ -64508,7 +65167,7 @@ /obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "ixn" = ( /obj/effect/floor_decal/corner_wide/yellow{ @@ -64614,9 +65273,12 @@ /turf/simulated/floor/tiled/dark, /area/horizon/security/firing_range) "ixJ" = ( -/obj/structure/girder, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/random/maintenance_junk_or_loot, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/far) +/area/horizon/maintenance/deck_2/aft) "ixK" = ( /obj/structure/machinery/button/remote/airlock{ dir = 8; @@ -64670,7 +65332,7 @@ pixel_y = 27; dir = 8 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/ai/upload_foyer) "ixR" = ( /obj/effect/floor_decal/spline/plain/black, @@ -64719,7 +65381,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_1"; name = "airlock_horizon_dock_deck_3_starboard_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "iyg" = ( /obj/structure/cable/green{ @@ -64939,7 +65601,7 @@ "izG" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "izH" = ( /obj/effect/floor_decal/corner/lime/diagonal, @@ -64999,7 +65661,9 @@ /turf/unsimulated/floor, /area/antag/mercenary) "iAc" = ( -/obj/item/stack/material/wood/full, +/obj/item/stack/material/wood/full{ + pixel_y = 6 + }, /obj/structure/table/steel, /turf/simulated/floor/wood, /area/horizon/maintenance/deck_2/wing/starboard) @@ -65160,7 +65824,11 @@ /turf/simulated/floor/tiled, /area/horizon/operations/lobby) "iBh" = ( -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "iBn" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -65481,6 +66149,9 @@ dir = 1; icon_state = "pipe-c" }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, /turf/simulated/floor/wood/walnut, /area/horizon/medical/smoking) "iDr" = ( @@ -65535,8 +66206,23 @@ /area/horizon/engineering/reactor/indra/office) "iDV" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/alarm/north, -/obj/random/maintenance_junk_or_loot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/obj/item/paper{ + pixel_x = -1; + pixel_y = 7 + }, +/obj/item/paper{ + pixel_x = 6; + pixel_y = 1 + }, +/obj/item/pen/fountain/black{ + pixel_x = -12; + pixel_y = -1 + }, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "iEa" = ( @@ -65618,6 +66304,9 @@ /obj/structure/trash_pile, /obj/structure/machinery/alarm/north, /obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "iEN" = ( @@ -65757,6 +66446,7 @@ icon_state = "0-8" }, /obj/structure/machinery/power/apc/low/south, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "iFD" = ( @@ -65767,7 +66457,12 @@ /area/horizon/engineering/shields) "iFI" = ( /obj/random/loot, -/obj/structure/machinery/light/small/emergency{ +/obj/effect/decal/cleanable/dirt, +/obj/random/med_stack, +/obj/structure/closet/crate{ + name = "Cremation Urn Materials" + }, +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -65936,7 +66631,7 @@ /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "iGX" = ( /obj/structure/table/wood, @@ -65979,10 +66674,10 @@ /obj/structure/cable/green{ icon_state = "1-8" }, -/obj/structure/railing/mapped{ +/obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/railing/mapped, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "iHj" = ( @@ -66021,6 +66716,9 @@ "iHu" = ( /obj/structure/closet/crate/freezer/rations, /obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/aibunker) "iHv" = ( @@ -66105,7 +66803,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "iHT" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -66191,6 +66889,9 @@ /obj/structure/machinery/power/breakerbox/activated{ RCon_tag = "Operations Substation" }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/operations) "iIN" = ( @@ -66232,7 +66933,7 @@ /obj/effect/floor_decal/industrial/outline/grey, /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "iJa" = ( /obj/effect/floor_decal/corner/brown{ @@ -66288,13 +66989,10 @@ /turf/simulated/floor/plating, /area/horizon/engineering/bluespace_drive) "iJq" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/dirt_75, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/main/starboard) +/obj/random/maintenance_junk_or_loot, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/port/far) "iJr" = ( /obj/structure/bed/stool/chair/holochair{ dir = 1 @@ -66458,6 +67156,7 @@ dir = 1; name = "adjusted light fixture" }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "iKz" = ( @@ -66532,14 +67231,17 @@ /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, /turf/simulated/floor/wood/walnut, /area/horizon/medical/smoking) "iLt" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "iLu" = ( /obj/effect/floor_decal/corner/mauve/diagonal, @@ -66632,11 +67334,14 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/turbine) "iMi" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "iMk" = ( /obj/effect/floor_decal/corner/mauve{ @@ -66754,7 +67459,7 @@ name = "airlock_horizon_deck_3_aft_1"; frequency = 1001 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "iMZ" = ( /obj/effect/floor_decal/industrial/warning{ @@ -66869,10 +67574,11 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 5 }, +/obj/structure/machinery/light/small/floor, /turf/simulated/floor/wood, /area/horizon/service/cafeteria) "iNQ" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/dirt_75, @@ -66937,7 +67643,7 @@ /area/horizon/operations/office_aux) "iOp" = ( /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/carpet/rubber, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/aft) "iOq" = ( /obj/effect/floor_decal/industrial/hatch/yellow, @@ -67057,9 +67763,6 @@ /area/horizon/service/kitchen) "iPn" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ - dir = 1 - }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "iPo" = ( @@ -67069,7 +67772,7 @@ master_tag = "airlock_horizon_deck_2_starboard_aft"; name = "airlock_horizon_deck_2_starboard_aft" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "iPu" = ( /obj/random/pottedplant{ @@ -67249,7 +67952,11 @@ /obj/structure/bed/stool/chair/folding{ dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/corner/brown{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "iQu" = ( /obj/structure/platform{ @@ -67291,7 +67998,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "iQJ" = ( @@ -67420,15 +68127,18 @@ /obj/effect/floor_decal/corner/dark_blue{ dir = 5 }, +/obj/structure/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/command/bridge/aibunker) "iRo" = ( /obj/structure/closet/crate, /obj/random/loot, +/obj/effect/floor_decal/industrial/outline/grey, /obj/effect/floor_decal/industrial/warning{ dir = 10 }, -/obj/effect/floor_decal/industrial/outline/grey, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "iRu" = ( @@ -67510,6 +68220,7 @@ /turf/simulated/floor/tiled, /area/horizon/hangar/operations) "iSm" = ( +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/service/port) "iSo" = ( @@ -67634,8 +68345,8 @@ /turf/simulated/floor/tiled, /area/horizon/hangar/intrepid) "iTg" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_starboard) "iTh" = ( @@ -67650,7 +68361,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "iTo" = ( /obj/structure/table/rack, @@ -67730,6 +68441,11 @@ /obj/structure/railing/mapped, /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/central) +"iTN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/operations/starboard) "iTP" = ( /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 @@ -67740,7 +68456,7 @@ /turf/simulated/floor/wood, /area/horizon/service/mess_hall) "iTV" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/reagent_dispensers/watertank, @@ -67798,9 +68514,10 @@ /area/centcom/evac) "iUv" = ( /obj/structure/disposalpipe/segment, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/research) "iUw" = ( @@ -67886,9 +68603,12 @@ /turf/simulated/floor/plating, /area/horizon/hangar/intrepid) "iVb" = ( -/obj/random/dirt_75, -/turf/simulated/floor, -/area/horizon/maintenance/deck_3/security/port) +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port) "iVd" = ( /obj/item/reagent_containers/food/drinks/carton/soymilk{ pixel_x = 6; @@ -67925,14 +68645,17 @@ /turf/simulated/open/airless, /area/horizon/exterior) "iVt" = ( -/obj/structure/machinery/light/small/emergency{ - dir = 8 - }, /obj/effect/floor_decal/industrial/hatch/red, /obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 + dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "iVx" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -67944,15 +68667,12 @@ /turf/simulated/floor/wood, /area/horizon/service/cafeteria) "iVG" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 +/obj/effect/floor_decal/corner/dark_green{ + dir = 10 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/horizon/service/bar) +/obj/structure/machinery/light, +/turf/simulated/floor/tiled, +/area/horizon/hallway/primary/deck_3/starboard) "iVH" = ( /obj/effect/floor_decal/industrial/warning{ dir = 9 @@ -67964,7 +68684,7 @@ /turf/simulated/floor/reinforced, /area/horizon/engineering/gravity_gen) "iVO" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/junk, @@ -67973,6 +68693,7 @@ /obj/structure/railing/mapped{ icon_state = "railing0-0" }, +/obj/structure/machinery/alarm/north, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port) "iVP" = ( @@ -68062,6 +68783,12 @@ /area/horizon/operations/loading) "iWj" = ( /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "iWk" = ( @@ -68096,7 +68823,6 @@ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "iWu" = ( @@ -68427,7 +69153,8 @@ }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/ai/upload_foyer) "iYD" = ( /obj/structure/table/wood, @@ -68526,9 +69253,6 @@ /obj/structure/platform_deco/dark{ dir = 6 }, -/obj/structure/railing/mapped{ - dir = 4 - }, /turf/simulated/open, /area/horizon/maintenance/deck_2/cryo) "iZk" = ( @@ -68566,7 +69290,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/bed/stool/bar/padded/red, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -68685,6 +69409,17 @@ /obj/structure/machinery/meter, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos/propulsion) +"iZX" = ( +/obj/structure/platform{ + dir = 4 + }, +/obj/structure/platform, +/obj/structure/platform_deco{ + dir = 5; + pixel_y = -1 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "iZZ" = ( /obj/effect/floor_decal/carpet{ dir = 4 @@ -68758,8 +69493,18 @@ dir = 8 }, /obj/structure/machinery/power/apc/low/east, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/amidships) +"jaF" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/service/port) "jaG" = ( /obj/structure/platform{ dir = 4 @@ -68768,8 +69513,9 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenoarch/atrium) "jaK" = ( +/obj/effect/floor_decal/corner/brown, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "jaO" = ( /obj/effect/floor_decal/industrial/warning{ @@ -68861,7 +69607,10 @@ /area/centcom/control) "jbx" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "jbC" = ( /obj/structure/machinery/light, @@ -69120,10 +69869,12 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos/air) "jdo" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_1/main/port/shortcut) +/area/horizon/maintenance/deck_1/wing/starboard) "jdq" = ( /obj/structure/sign/drop{ desc = "A warning sign which reads 'DANGER: FALLING HAZARD' and 'THIS EQUIPMENT STARTS AND STOPS AUTOMATICALLY'."; @@ -69145,12 +69896,12 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/port/docks) "jdR" = ( -/obj/structure/machinery/atmospherics/pipe/simple/visible{ +/obj/random/dirt_75, +/obj/random/dirt_75, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/random/dirt_75, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "jdT" = ( /obj/structure/disposalpipe/segment{ @@ -69214,7 +69965,7 @@ /turf/simulated/floor/tiled/dark, /area/horizon/shuttle/quark/cockpit) "jeB" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/cable{ @@ -69472,7 +70223,7 @@ dir = 4; icon_state = "pipe-c" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor, @@ -69848,7 +70599,7 @@ "jiy" = ( /obj/effect/floor_decal/industrial/hatch/yellow, /obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/carpet/rubber, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/aft) "jiA" = ( /obj/effect/floor_decal/corner/white{ @@ -70065,6 +70816,9 @@ }, /obj/effect/floor_decal/corner_wide/yellow/diagonal, /obj/structure/disposalpipe/segment, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/break_room) "jkm" = ( @@ -70141,6 +70895,9 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_3/cafe) "jkJ" = ( @@ -70362,7 +71119,7 @@ icon_state = "1-8" }, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/maintenance/deck_2/wing/port/nacelle) "jlZ" = ( /obj/effect/floor_decal/industrial/warning{ @@ -70464,6 +71221,9 @@ "jmB" = ( /obj/structure/machinery/portable_atmospherics/powered/pump/filled, /obj/effect/floor_decal/industrial/outline/blue, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/auxatmos) "jmD" = ( @@ -70525,7 +71285,6 @@ dir = 4 }, /obj/random/dirt_75, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "jmY" = ( @@ -70551,7 +71310,8 @@ pixel_x = -6; pixel_y = 28 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/port/docks) "jnl" = ( /obj/structure/bed/stool, @@ -70620,10 +71380,7 @@ }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/lattice/catwalk/indoor/grate/damaged{ - color = "#4c535b" - }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/ramp/bottom, /area/horizon/maintenance/deck_2/wing/starboard/far) "jnE" = ( /turf/simulated/floor/carpet/purple, @@ -70686,9 +71443,8 @@ dir = 10 }, /obj/random/dirt_75, -/obj/random/dirt_75, /obj/item/material/shard, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "jnR" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -70818,6 +71574,16 @@ }, /turf/simulated/floor/exoplanet/grass/grove, /area/centcom/shared_dream) +"joO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/platform_deco{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/wing/starboard/far) "joT" = ( /obj/effect/floor_decal/corner/white/diagonal, /turf/simulated/floor/holofloor/carpet/rubber, @@ -70834,7 +71600,7 @@ /obj/effect/floor_decal/industrial/hatch_door/engineering{ dir = 1 }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/gravity_gen) "jpd" = ( /obj/structure/bed/stool/padded/brown{ @@ -70858,19 +71624,20 @@ /turf/unsimulated/wall/darkshuttlewall, /area/centcom/control) "jpj" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "jpk" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "jpo" = ( /obj/structure/bed/stool/chair/padded/brown{ @@ -70938,7 +71705,7 @@ /obj/structure/machinery/door/firedoor{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "jpR" = ( /obj/structure/machinery/computer/slot_machine, @@ -70973,6 +71740,7 @@ c_tag = "Engineering - Deck 3 - Command Substation"; dir = 4 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "jqe" = ( @@ -70982,6 +71750,19 @@ /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) +"jqg" = ( +/obj/structure/machinery/door/firedoor{ + req_one_access = list(24,11,67,73); + dir = 4 + }, +/obj/structure/machinery/door/airlock/maintenance_hatch{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch_door/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/hangar/intrepid/interstitial) "jqj" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -70990,10 +71771,10 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/central_ring) "jqn" = ( /obj/structure/disposalpipe/segment{ @@ -71022,6 +71803,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/atmos_crosser) "jqG" = ( +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "jqI" = ( @@ -71060,6 +71842,7 @@ shuttle_tag = "Quark"; cycle_to_external_air = 1 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/shuttle/quark/cargo_hold) "jqW" = ( @@ -71368,7 +72151,7 @@ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -71421,7 +72204,10 @@ /obj/item/storage/bag/inflatable, /obj/random/loot, /obj/item/storage/bag/inflatable, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "jtC" = ( /obj/effect/floor_decal/corner_wide/green{ @@ -71537,6 +72323,13 @@ /area/antag/ninja) "jur" = ( /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "juN" = ( @@ -71583,7 +72376,7 @@ /obj/structure/machinery/door/airlock/external, /obj/effect/map_effect/marker_helper/airlock/interior, /obj/structure/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/crewlounge) "jvb" = ( /obj/random/pottedplant, @@ -71731,10 +72524,9 @@ /obj/structure/cable/green{ icon_state = "0-4" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/service/starboard) "jvO" = ( -/obj/structure/lattice/catwalk, /obj/structure/machinery/atmospherics/pipe/zpipe/down/scrubbers{ dir = 1 }, @@ -71744,6 +72536,7 @@ /obj/structure/cable{ icon_state = "11-8" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/open, /area/horizon/maintenance/deck_2/wing/starboard/far) "jvW" = ( @@ -71855,6 +72648,9 @@ /obj/random/loot, /obj/random/loot, /obj/random/contraband, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "jwz" = ( @@ -72015,7 +72811,10 @@ "jxL" = ( /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "jxU" = ( /obj/structure/machinery/computer/general_air_control/large_tank_control/wall{ @@ -72099,7 +72898,8 @@ "jyC" = ( /obj/structure/machinery/meter, /obj/structure/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "jyE" = ( /obj/structure/bonfire/fireplace, @@ -72184,7 +72984,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, -/obj/structure/window/reinforced{ +/obj/effect/floor_decal/industrial/warning{ dir = 1 }, /turf/simulated/floor, @@ -72368,9 +73168,6 @@ /obj/structure/platform_deco/ledge/dark{ dir = 5 }, -/obj/structure/railing/mapped{ - dir = 8 - }, /turf/simulated/open, /area/horizon/maintenance/deck_2/cryo) "jzT" = ( @@ -72496,9 +73293,8 @@ /obj/structure/machinery/firealarm/north, /obj/structure/closet/emcloset, /obj/effect/floor_decal/industrial/outline/emergency_closet, -/obj/structure/machinery/light/spot{ - dir = 4; - must_start_working = 1 +/obj/structure/machinery/light{ + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/horizon/holodeck_control/beta) @@ -72506,8 +73302,8 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/alarm/east, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/engineering/drone_fabrication) "jBb" = ( @@ -72517,15 +73313,13 @@ /turf/unsimulated/floor, /area/centcom/ferry) "jBf" = ( -/obj/effect/floor_decal/corner_wide/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner_wide/yellow{ - dir = 10 +/obj/structure/machinery/alarm/south, +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, /obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/alarm/south, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "jBg" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -72564,6 +73358,10 @@ }, /turf/unsimulated/floor, /area/centcom/bar) +"jBv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/wing/starboard/far) "jBx" = ( /obj/turbolift_map_holder/scc_ship/primary, /turf/simulated/floor/plating, @@ -72601,10 +73399,10 @@ /area/horizon/security/autopsy_laboratory) "jBM" = ( /obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "jBR" = ( /obj/effect/floor_decal/industrial/warning/corner{ @@ -72737,13 +73535,14 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/test_range) "jCu" = ( -/obj/effect/floor_decal/industrial/outline/red, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "jCA" = ( /obj/structure/machinery/door/airlock/centcom{ @@ -72756,7 +73555,7 @@ /area/centcom/spawning) "jCB" = ( /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/research) "jCF" = ( /obj/structure/lattice, @@ -72803,7 +73602,7 @@ /obj/structure/lattice/catwalk/indoor/grate/damaged{ color = "#4c535b" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -73186,10 +73985,11 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "jGc" = ( /obj/effect/floor_decal/spline/fancy/wood, @@ -73346,11 +74146,17 @@ /turf/simulated/floor/plating, /area/horizon/engineering/reactor/supermatter/airlock) "jGV" = ( -/obj/structure/platform_stairs/south_north_solo, /obj/structure/platform{ dir = 4 }, -/turf/simulated/floor/plating, +/obj/structure/platform, +/obj/structure/platform_deco{ + dir = 5 + }, +/obj/random/dirt_75, +/obj/random/dirt_75, +/obj/random/canister/restricted, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "jHa" = ( /turf/simulated/wall, @@ -73471,13 +74277,14 @@ /turf/unsimulated/floor, /area/centcom/legion/hangar5) "jIt" = ( -/obj/structure/machinery/light{ +/obj/structure/machinery/light/floor{ dir = 1 }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 +/obj/effect/floor_decal/corner/dark_blue{ + dir = 10 }, +/obj/structure/machinery/alarm/north, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/chamber) "jIw" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ @@ -73616,7 +74423,7 @@ name = "airlock_horizon_deck_3_aft_1" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "jJs" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -73741,9 +74548,9 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/lab) "jKw" = ( -/obj/random/dirt_75, /obj/random/junk, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port/shortcut) "jKx" = ( /obj/structure/table/standard, @@ -73794,7 +74601,8 @@ pixel_x = 20; pixel_y = 6 }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor, /area/horizon/hallway/primary/deck_3/port/docks) "jKX" = ( /obj/structure/table/reinforced/wood, @@ -73837,12 +74645,11 @@ /turf/simulated/floor/holofloor/wood, /area/horizon/holodeck/source_sauna) "jLi" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/cable/green{ icon_state = "4-8" }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/main/starboard) "jLj" = ( @@ -73954,6 +74761,19 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/full, /area/horizon/operations/mining_main/refinery) +"jMp" = ( +/obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/effect/floor_decal/corner/mauve/diagonal, +/obj/effect/floor_decal/corner/mauve{ + dir = 10 + }, +/obj/structure/machinery/light/floor{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/horizon/rnd/xenoarch/atrium) "jMt" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -74006,17 +74826,15 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/icu) "jMM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ - dir = 1 +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, -/obj/structure/lattice/catwalk/indoor/grate/damaged{ - color = "#4c535b" +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/main/port) +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/auxatmos) "jMO" = ( /obj/structure/shuttle_part/scc_space_ship{ icon_state = "d3-4-f" @@ -74081,12 +74899,10 @@ /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/port) "jNs" = ( -/obj/structure/machinery/light/small/emergency{ - dir = 1 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/wing/port/far) +/area/horizon/maintenance/deck_1/wing/starboard) "jNt" = ( /obj/effect/floor_decal/industrial/warning, /obj/random/dirt_75, @@ -74104,8 +74920,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "jNA" = ( /obj/structure/cable/green{ @@ -74272,7 +75088,10 @@ "jOh" = ( /obj/structure/table/rack, /obj/random/loot, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "jOj" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden{ @@ -74680,7 +75499,10 @@ "jQL" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/random/canister/restricted, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "jQT" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden/black, @@ -74703,7 +75525,7 @@ /obj/effect/floor_decal/industrial/outline/yellow, /obj/item/reagent_containers/spray, /obj/item/reagent_containers/spray, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/operations) "jRe" = ( /obj/structure/table/glass{ @@ -74788,7 +75610,8 @@ /turf/simulated/floor/tiled/gridded, /area/horizon/operations/warehouse) "jRJ" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/teleporter) "jRL" = ( @@ -74805,7 +75628,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/tiled/dark/full, @@ -74885,6 +75708,12 @@ }, /turf/unsimulated/floor, /area/antag/mercenary) +"jSc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/random/maintenance_junk_or_loot, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/wing/starboard/far) "jSf" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -74971,8 +75800,8 @@ /turf/simulated/floor/tiled/gunmetal, /area/horizon/operations/warehouse) "jSx" = ( -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "jSy" = ( /obj/structure/disposalpipe/segment{ @@ -75135,7 +75964,10 @@ /obj/random/loot, /obj/structure/closet, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "jTF" = ( /obj/structure/bed/stool/chair{ @@ -75157,14 +75989,13 @@ }, /area/centcom/distress_prep) "jTM" = ( -/obj/structure/machinery/door/firedoor{ - req_one_access = list(24,11,67,73); - dir = 4 +/obj/random/dirt_75, +/obj/structure/machinery/alarm/north, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, -/obj/effect/floor_decal/industrial/hatch_door/yellow, -/obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/main/starboard) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/cryo) "jTO" = ( /obj/structure/machinery/door/airlock/maintenance{ dir = 4; @@ -75217,7 +76048,7 @@ pixel_y = 3; pixel_x = -8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "jTV" = ( /obj/structure/disposalpipe/segment{ @@ -75480,7 +76311,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "jVI" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/black{ @@ -75632,10 +76463,9 @@ /obj/effect/floor_decal/industrial/warning/corner{ dir = 8 }, -/obj/effect/floor_decal/industrial/warning, /obj/structure/platform, /obj/structure/railing/mapped, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "jWM" = ( /obj/effect/floor_decal/corner_wide/yellow{ @@ -75755,11 +76585,10 @@ /turf/simulated/wall, /area/horizon/service/hydroponics/garden) "jXE" = ( -/obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "jXH" = ( /obj/effect/floor_decal/industrial/warning{ @@ -76068,8 +76897,8 @@ /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/starboard/far) "jZH" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/alarm/west, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "jZI" = ( @@ -76086,10 +76915,7 @@ icon_state = "1-4" }, /obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 - }, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/chamber) "jZT" = ( /obj/structure/table/wood, @@ -76349,7 +77175,10 @@ "kbC" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/trash_pile, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "kbD" = ( /obj/structure/table/reinforced/steel, @@ -76691,8 +77520,7 @@ /obj/structure/railing/mapped{ dir = 8 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "kdv" = ( /obj/structure/cable{ @@ -76719,10 +77547,12 @@ "kdG" = ( /obj/structure/closet/crate, /obj/random/loot, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb2, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard/far) "kdL" = ( @@ -76974,7 +77804,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_3"; name = "airlock_horizon_dock_deck_3_starboard_3" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "kfA" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ @@ -77013,7 +77843,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -77073,6 +77903,9 @@ pixel_y = -32 }, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "kgd" = ( @@ -77116,9 +77949,10 @@ /turf/unsimulated/wall/steel, /area/antag/ninja) "kgm" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/port/far) "kgs" = ( @@ -77150,7 +77984,7 @@ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/teleporter) "kgE" = ( @@ -77854,6 +78688,9 @@ dir = 1 }, /obj/effect/floor_decal/sign/w, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/horizon/medical/hallway) "kle" = ( @@ -77862,6 +78699,7 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/structure/machinery/light/small/floor, /turf/simulated/floor/wood, /area/horizon/service/mess_hall) "klg" = ( @@ -77894,6 +78732,10 @@ /area/horizon/holodeck/source_trinary) "kll" = ( /obj/effect/spider/stickyweb, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/civilian/bay_51{ + pixel_y = 32 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "kln" = ( @@ -77948,10 +78790,17 @@ /area/horizon/rnd/conference) "klF" = ( /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "klH" = ( /obj/structure/bed/stool/chair/office/light, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "klK" = ( @@ -77999,11 +78848,15 @@ /area/horizon/service/hydroponics) "klY" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/plushie, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "klZ" = ( /obj/structure/railing/mapped{ @@ -78087,7 +78940,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/storage_maintenance) "kmr" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/effect/floor_decal/industrial/warning{ dir = 9 }, @@ -78113,14 +78966,12 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/ward) "kmv" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 8 }, -/obj/effect/floor_decal/corner/pink/diagonal, -/obj/random/dirt_75, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/far) "kmF" = ( /obj/structure/machinery/firealarm/west, /obj/structure/closet/secure_closet/engineering_electrical, @@ -78171,7 +79022,7 @@ /obj/structure/machinery/door/airlock/maintenance{ req_access = list(12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "kmO" = ( /obj/structure/cable/green{ @@ -78317,9 +79168,9 @@ /area/horizon/hangar/operations) "knA" = ( /obj/structure/machinery/alarm/south, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/spiderling_remains, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_starboard) "knB" = ( @@ -78414,6 +79265,7 @@ /obj/structure/machinery/door/firedoor/multi_tile{ dir = 2 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "kor" = ( @@ -78437,8 +79289,10 @@ /area/horizon/stairwell/engineering/deck_2) "kov" = ( /obj/structure/railing/mapped, -/obj/structure/girder, /obj/effect/decal/cleanable/cobweb2, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "kow" = ( @@ -78552,6 +79406,10 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/xenoarchaeology) "kpd" = ( @@ -78600,7 +79458,7 @@ dir = 6 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "kpl" = ( /obj/effect/floor_decal/industrial/hatch/grey, @@ -78946,7 +79804,7 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/tiled/dark/cooled, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/upload) "ksl" = ( /obj/structure/flora/log_bench, @@ -79072,6 +79930,9 @@ /area/tdome/tdomeobserve) "kti" = ( /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "ktm" = ( @@ -79126,8 +79987,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/machinery/light/small/emergency, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "ktG" = ( /obj/structure/table/reinforced, @@ -79376,7 +80237,8 @@ dir = 5 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "kuL" = ( /turf/simulated/wall, @@ -79435,7 +80297,6 @@ /turf/simulated/floor/plating, /area/horizon/engineering/reactor/indra/office) "kvi" = ( -/obj/effect/floor_decal/sign/w, /obj/structure/cable/green{ icon_state = "1-2" }, @@ -79456,6 +80317,7 @@ pixel_y = 25; req_access = list(5) }, +/obj/effect/floor_decal/sign/w, /turf/simulated/floor/tiled/white, /area/horizon/medical/hallway/upper) "kvn" = ( @@ -79496,7 +80358,7 @@ "kvw" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor, @@ -79547,6 +80409,10 @@ name = "Powernet Sensor - Deck 1 Research Subgrid"; name_tag = "Deck 1 Research Subgrid" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/xenoarchaeology) "kvS" = ( @@ -79571,8 +80437,6 @@ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "kvX" = ( @@ -79798,7 +80662,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/random/maintenance_junk_or_loot, @@ -80011,7 +80875,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/main/starboard) "kyH" = ( @@ -80193,10 +81057,7 @@ "kzt" = ( /obj/structure/machinery/porta_turret/cannon, /obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 - }, +/turf/simulated/floor/bluegrid, /area/horizon/ai/chamber) "kzy" = ( /obj/random/dirt_75, @@ -80211,9 +81072,11 @@ /obj/random/medical, /obj/random/medical, /obj/random/dirt_75, -/obj/random/dirt_75, /obj/random/med_stack, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "kzB" = ( @@ -80258,7 +81121,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/medical) "kzQ" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -80304,7 +81167,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard/far) "kAa" = ( /obj/structure/cable/green{ @@ -80481,9 +81344,6 @@ c_tag = "Medical - Staff Smoking Lounge"; dir = 1 }, -/obj/effect/floor_decal/spline/fancy/wood{ - dir = 8 - }, /turf/simulated/floor/tiled/dark, /area/horizon/medical/smoking) "kBh" = ( @@ -80569,7 +81429,7 @@ "kBv" = ( /obj/random/junk, /obj/effect/floor_decal/industrial/outline/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "kBw" = ( /obj/effect/decal/cleanable/dirt, @@ -80661,6 +81521,12 @@ /obj/structure/machinery/light, /turf/unsimulated/floor/rubber_carpet, /area/centcom/control) +"kCc" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/near) "kCe" = ( /obj/effect/decal/cleanable/cobweb2, /obj/effect/decal/cleanable/dirt, @@ -80669,6 +81535,9 @@ dir = 8 }, /obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "kCi" = ( @@ -80833,11 +81702,11 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/stairwell/engineering/deck_2) "kDq" = ( -/obj/structure/machinery/light, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 +/obj/structure/machinery/light/floor, +/obj/effect/floor_decal/corner/dark_blue{ + dir = 5 }, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/chamber) "kDs" = ( /obj/effect/decal/fake_object{ @@ -80984,8 +81853,8 @@ "kEf" = ( /obj/effect/floor_decal/industrial/outline/blue, /obj/structure/machinery/portable_atmospherics/powered/pump/filled, -/obj/structure/machinery/light/small{ - dir = 1 +/obj/structure/sign/air_station{ + pixel_y = 32 }, /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/auxatmos) @@ -81035,6 +81904,12 @@ }, /turf/simulated/floor/tiled/dark, /area/horizon/weapons/grauwolf) +"kEE" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/main/starboard) "kEG" = ( /obj/structure/machinery/door/blast/regular{ id = "exteriorpropulsionstarboard" @@ -81043,6 +81918,14 @@ /area/horizon/engineering/atmos/propulsion/starboard) "kEI" = ( /obj/random/junk, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/table/rack, +/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "kEM" = ( @@ -81464,6 +82347,16 @@ /obj/structure/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/plating, /area/horizon/hangar/intrepid) +"kGJ" = ( +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/spline/plain/black{ + dir = 1 + }, +/obj/structure/machinery/light/floor, +/turf/simulated/floor/tiled/dark, +/area/horizon/engineering/break_room) "kGK" = ( /obj/structure/closet/emcloset, /obj/effect/floor_decal/industrial/outline/emergency_closet, @@ -81478,7 +82371,7 @@ /obj/structure/machinery/door/airlock/maintenance_hatch{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard) "kGR" = ( /obj/structure/cable/green{ @@ -81805,10 +82698,10 @@ /turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/port/nacelle) "kIR" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/obj/random/dirt_75, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "kIS" = ( @@ -81816,7 +82709,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port/shortcut) "kIT" = ( /obj/structure/grille, @@ -81898,13 +82791,13 @@ /area/horizon/holodeck/source_moghes) "kJG" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "kJK" = ( @@ -82143,14 +83036,8 @@ /turf/simulated/floor/tiled, /area/horizon/crew/fitness/gym) "kLq" = ( -/obj/structure/railing/mapped{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/structure/platform, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "kLr" = ( /obj/structure/cable/green{ @@ -82352,14 +83239,13 @@ /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "kMN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/material/shard, -/obj/structure/lattice/catwalk/indoor/grate/damaged{ - color = "#4c535b" +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/main/port) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/wing/starboard/far) "kMP" = ( /obj/effect/floor_decal/industrial/warning{ dir = 6 @@ -82418,7 +83304,17 @@ /area/horizon/rnd/test_range) "kNd" = ( /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/item/trash/cigbutt/cigarbutt{ + pixel_x = -2 + }, +/obj/item/trash/cigbutt{ + pixel_y = -12; + pixel_x = 7 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port/shortcut) "kNj" = ( /obj/effect/floor_decal/corner/dark_blue/full{ @@ -82532,11 +83428,11 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/service/bar) "kOh" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/machinery/recharge_station, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/drone_fabrication) "kOq" = ( /obj/effect/floor_decal/spline/plain, @@ -82558,6 +83454,7 @@ dir = 8; pixel_x = 20 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_3/crewlounge) "kOs" = ( @@ -82696,6 +83593,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard) "kPR" = ( @@ -82933,12 +83833,15 @@ /obj/effect/landmark{ name = "Revenant" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/maintenance_junk_or_loot, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/research) "kRR" = ( /obj/structure/machinery/door/blast/shutters/open{ @@ -82961,7 +83864,10 @@ /obj/structure/table/steel, /obj/random/loot, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "kRV" = ( /obj/structure/holostool, @@ -83003,7 +83909,7 @@ "kSk" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/floor_decal/industrial/warning/corner{ @@ -83060,9 +83966,6 @@ /obj/effect/floor_decal/corner/dark_green{ dir = 6 }, -/obj/structure/machinery/light{ - dir = 4 - }, /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, @@ -83472,7 +84375,9 @@ /turf/simulated/floor/plating, /area/horizon/operations/lobby) "kVr" = ( -/turf/simulated/floor/plating, +/obj/effect/decal/cleanable/dirt, +/obj/structure/curtain/open/bar, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "kVs" = ( /obj/structure/bed/stool/padded/brown{ @@ -83599,7 +84504,7 @@ name = "airlock_horizon_deck_2_aft_sm" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/supermatter/airlock) "kWk" = ( /obj/effect/map_effect/window_spawner/full/reinforced/grille/firedoor, @@ -83639,6 +84544,15 @@ }, /turf/simulated/floor/tiled/dark, /area/shuttle/legion) +"kWH" = ( +/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 9 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/redgrid, +/area/horizon/command/bridge/selfdestruct) "kWJ" = ( /obj/structure/machinery/camera/network/medbay{ c_tag = "Medical - Morgue Port"; @@ -83659,7 +84573,7 @@ }, /area/horizon/medical/morgue) "kWK" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/decal/cleanable/dirt, @@ -83788,7 +84702,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/unsimulated/floor/plating, @@ -83958,12 +84872,22 @@ }, /turf/simulated/floor, /area/horizon/command/bridge/meeting_room) +"kYu" = ( +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_3/aft/starboard/far) "kYw" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/random/canister/restricted, @@ -84116,7 +85040,7 @@ req_access = list(12); name = "Deck 2 Starboard Wingframe" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "kZl" = ( /obj/effect/floor_decal/corner/yellow{ @@ -84221,9 +85145,6 @@ /turf/simulated/floor/plating, /area/shuttle/skipjack) "lad" = ( -/obj/structure/railing/mapped{ - dir = 8 - }, /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/atmospherics/pipe/simple/visible/universal{ dir = 8 @@ -84231,7 +85152,7 @@ /obj/structure/platform{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "lae" = ( /obj/effect/floor_decal/corner/paleblue, @@ -84326,7 +85247,7 @@ dir = 8 }, /obj/structure/machinery/door/firedoor, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/near) "laM" = ( /obj/effect/floor_decal/corner/dark_blue/full{ @@ -84336,7 +85257,7 @@ /obj/structure/cable/green{ icon_state = "0-8" }, -/turf/simulated/floor/tiled/dark/cooled, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/upload) "laP" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/red{ @@ -84644,6 +85565,9 @@ /obj/random/junk, /obj/structure/table/rack, /obj/structure/grille/broken, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "lcT" = ( @@ -84800,7 +85724,8 @@ pixel_x = 20; pixel_y = 6 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/port/docks) "ldC" = ( /obj/structure/machinery/door/airlock/external{ @@ -84812,7 +85737,7 @@ name = "airlock_horizon_deck_1_fore_1" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/hangar/starboard) "ldE" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -84892,7 +85817,10 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "lec" = ( /obj/structure/trash_pile, @@ -85186,6 +86114,9 @@ "lgd" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/steel, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "lge" = ( @@ -85308,7 +86239,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "lgZ" = ( /obj/structure/railing/mapped, @@ -85394,6 +86325,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_3"; name = "airlock_horizon_dock_deck_3_starboard_3" }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/hallway/primary/deck_3/starboard/docks) "lhU" = ( @@ -85451,7 +86383,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "lir" = ( /obj/effect/floor_decal/corner_wide/lime{ @@ -85913,7 +86849,10 @@ }, /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "lkJ" = ( /obj/structure/closet/emcloset, @@ -86077,6 +87016,9 @@ pixel_x = -32; pixel_y = 32 }, +/obj/structure/machinery/light{ + dir = 8 + }, /turf/simulated/floor, /area/horizon/command/bridge/aibunker) "llW" = ( @@ -86089,6 +87031,12 @@ }, /turf/simulated/floor/tiled/dark, /area/horizon/weapons/grauwolf) +"lme" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/operations/starboard) "lmo" = ( /obj/structure/machinery/atmospherics/unary/cryo_cell, /turf/simulated/floor/tiled, @@ -86157,10 +87105,10 @@ /obj/effect/floor_decal/industrial/warning, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "lmU" = ( /obj/structure/cable/green{ @@ -86319,6 +87267,18 @@ }, /turf/simulated/floor/tiled, /area/horizon/rnd/hallway/secondary) +"lnW" = ( +/obj/structure/railing/mapped{ + dir = 8 + }, +/obj/effect/floor_decal/corner/black{ + dir = 9 + }, +/obj/structure/machinery/light/floor{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/hangar/auxiliary) "lod" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/ladder/up{ @@ -86441,7 +87401,8 @@ "loS" = ( /obj/random/dirt_75, /obj/structure/machinery/firealarm/west, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/operations) "loZ" = ( /obj/effect/floor_decal/corner/brown/full{ @@ -86537,9 +87498,6 @@ icon_state = "1-2" }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/obj/random/dirt_75, -/obj/random/maintenance_junk_or_loot, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "lpy" = ( @@ -86680,15 +87638,15 @@ output_level = 45000 }, /obj/structure/cable/yellow, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/carpet/rubber, /area/horizon/maintenance/deck_1/workshop) "lqg" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/effect/floor_decal/corner/dark_blue/full, -/obj/structure/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/structure/machinery/light/floor, +/obj/effect/floor_decal/corner/dark_blue{ + dir = 5 }, /turf/simulated/floor/tiled/dark, /area/horizon/ai/upload_foyer) @@ -86799,7 +87757,7 @@ name = "Deck 2 Starboard Wingframe"; req_one_access = list(12,31,67) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "lqJ" = ( /obj/structure/disposalpipe/segment{ @@ -86918,7 +87876,7 @@ "lrn" = ( /obj/structure/machinery/suit_storage_unit/standard_unit, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/tiled/dark/full, @@ -87201,7 +88159,7 @@ "ltf" = ( /obj/random/tool, /obj/random/tech_supply, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "ltg" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -87224,6 +88182,18 @@ }, /turf/simulated/floor/tiled/dark, /area/horizon/service/hydroponics/hazard) +"ltn" = ( +/obj/structure/railing/mapped{ + dir = 4 + }, +/obj/effect/floor_decal/corner/black{ + dir = 6 + }, +/obj/structure/machinery/light/floor{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/hangar/auxiliary) "ltq" = ( /obj/structure/sink{ dir = 8; @@ -87657,10 +88627,10 @@ /area/horizon/engineering/reactor/supermatter/mainchamber) "lwq" = ( /obj/effect/floor_decal/industrial/warning{ - dir = 8 + dir = 9 }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/auxatmos) "lws" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 1 @@ -87729,7 +88699,7 @@ /turf/simulated/floor/tiled, /area/horizon/security/checkpoint2) "lxa" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume, @@ -87738,7 +88708,8 @@ master_tag = "airlock_horizon_dock_deck_3_port_2"; name = "airlock_horizon_dock_deck_3_port_2" }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor, /area/horizon/hallway/primary/deck_3/port/docks) "lxb" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -88030,8 +89001,12 @@ /turf/unsimulated/floor/plating, /area/antag/mercenary) "lzd" = ( +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/auxatmos) +/area/horizon/maintenance/deck_2/wing/port/far) "lze" = ( /obj/structure/shuttle_part/scc_space_ship{ icon_state = "d3-2-f" @@ -88062,7 +89037,7 @@ "lzr" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/random/canister/empty, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "lzv" = ( /obj/effect/floor_decal/spline/plain/corner{ @@ -88216,7 +89191,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/holodeck) "lAs" = ( /obj/effect/step_trigger/thrower/shuttle/north, @@ -88464,11 +89439,18 @@ }, /turf/unsimulated/floor/rubber_carpet, /area/centcom/control) -"lCd" = ( +"lCc" = ( +/obj/random/dirt_75, /obj/effect/floor_decal/industrial/warning{ dir = 9 }, /turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/starboard/far) +"lCd" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "lCj" = ( /obj/structure/railing/mapped{ @@ -88504,6 +89486,9 @@ /obj/effect/decal/cleanable/cobweb, /obj/structure/machinery/vending/engivend/low_supply, /obj/effect/floor_decal/industrial/hatch/engineering, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/carpet/rubber, /area/horizon/maintenance/deck_1/workshop) "lCB" = ( @@ -88623,7 +89608,7 @@ req_access = list(13) }, /obj/structure/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/security/checkpoint2) "lDo" = ( /obj/effect/map_effect/window_spawner/full/reinforced/polarized/firedoor{ @@ -88671,7 +89656,6 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/machinery/light/small/emergency, /obj/structure/cable/green{ icon_state = "0-4" }, @@ -88840,6 +89824,9 @@ /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "lEw" = ( @@ -88870,7 +89857,7 @@ /area/horizon/engineering/hallway/interior) "lED" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/machinery/portable_atmospherics/canister/hydrogen, @@ -88965,14 +89952,13 @@ /turf/simulated/floor/tiled/full, /area/horizon/engineering/hallway/interior) "lFe" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/obj/random/maintenance_junk_or_loot, +/obj/random/dirt_75, +/obj/structure/table/rack, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/starboard/far) "lFp" = ( /obj/structure/bed/stool/chair/unmovable, /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ @@ -89052,11 +90038,11 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/light/small/emergency{ name = "broken light"; status = 2 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_port) "lGc" = ( @@ -89331,7 +90317,7 @@ dir = 4 }, /obj/structure/platform/ledge, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "lHY" = ( /obj/structure/disposalpipe/segment{ @@ -89445,7 +90431,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/closet/crate, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "lID" = ( /obj/structure/cable/green{ @@ -89623,9 +90609,15 @@ /turf/unsimulated/floor/monotile, /area/antag/mercenary) "lJz" = ( -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled/full, -/area/horizon/hallway/primary/deck_2/central) +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/shuttle/intrepid/main_compartment) "lJB" = ( /obj/structure/tank_wall/nitrogen{ density = 0; @@ -89779,22 +90771,17 @@ icon_state = "1-2" }, /obj/effect/floor_decal/corner/dark_blue/diagonal, -/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, /obj/structure/machinery/hologram/holopad/long_range, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/dark, /area/horizon/ai/upload_foyer) "lKn" = ( -/obj/structure/platform{ - dir = 4 - }, -/obj/structure/platform_stairs/south_north_solo, /obj/structure/machinery/atmospherics/pipe/simple/hidden, -/turf/simulated/floor/plating, +/obj/structure/platform{ + dir = 8 + }, +/turf/simulated/floor/tiled/ramp/bottom, /area/horizon/maintenance/deck_2/wing/starboard/near) "lKo" = ( /turf/simulated/wall, @@ -89834,9 +90821,6 @@ pixel_x = -28; pixel_y = -10 }, -/obj/structure/machinery/light/small/emergency{ - dir = 8 - }, /turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/aibunker) "lKy" = ( @@ -89850,7 +90834,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_3/security/port) @@ -89874,7 +90858,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -89893,6 +90877,7 @@ c_tag = "Engineering - Deck 2 - Engineering Substation"; dir = 8 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering) "lKF" = ( @@ -89948,7 +90933,9 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/indra/monitoring) "lKW" = ( -/turf/simulated/floor/tiled, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "lKZ" = ( /obj/structure/railing/mapped, @@ -89980,7 +90967,7 @@ req_access = list(1); dir = 4 }, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/security/interrogation/monitoring) "lLe" = ( /obj/effect/floor_decal/spline/plain/mauve, @@ -90059,7 +91046,7 @@ /turf/simulated/floor/carpet/rubber, /area/horizon/rnd/xenoarch/spectrometry) "lLQ" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/window/reinforced/crescent{ dir = 8 }, @@ -90086,7 +91073,7 @@ }, /area/centcom/control) "lMe" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume, @@ -90095,6 +91082,7 @@ master_tag = "airlock_horizon_deck_1_aft_port_1"; name = "airlock_horizon_deck_1_aft_port_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "lMg" = ( @@ -90292,6 +91280,7 @@ dir = 8 }, /obj/random/dirt_75, +/obj/structure/trash_pile, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "lNC" = ( @@ -90302,11 +91291,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "lNG" = ( /obj/structure/disposalpipe/segment{ @@ -90662,7 +91651,6 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/structure/machinery/light/small/emergency, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -90967,7 +91955,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "lTW" = ( /turf/simulated/floor/holofloor/desert{ @@ -91048,13 +92036,12 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_2/central) "lUN" = ( +/obj/random/dirt_75, /obj/effect/floor_decal/industrial/warning{ - dir = 8 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing/mapped, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/main/starboard) +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/starboard/far) "lUT" = ( /obj/effect/floor_decal/spline/plain/mauve, /obj/structure/window/reinforced, @@ -91095,10 +92082,10 @@ /turf/simulated/wall, /area/horizon/security/firing_range) "lVK" = ( -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/machinery/light/floor{ dir = 8 }, -/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos) "lVP" = ( @@ -91178,15 +92165,12 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/central) "lWb" = ( -/obj/random/junk, -/obj/effect/floor_decal/industrial/loading/yellow{ - dir = 1 - }, /obj/structure/platform{ dir = 4 }, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "lWf" = ( /obj/structure/table/wood, @@ -91293,7 +92277,7 @@ name = "Deck 3 Civilian Substation"; req_one_access = list(11,24) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/civ_d3) "lWO" = ( /obj/structure/bed/stool/chair, @@ -91495,14 +92479,17 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos/air) "lYo" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/railing/mapped{ dir = 4 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "lYq" = ( /obj/structure/sign/fire{ @@ -91511,16 +92498,18 @@ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning/cee, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "lYr" = ( /obj/random/junk, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "lYv" = ( /obj/structure/cable/green{ @@ -91721,6 +92710,12 @@ }, /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/xenoarch/hallway/hangar) +"lZu" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "lZy" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/black{ dir = 9 @@ -91895,6 +92890,10 @@ /area/antag/raider) "maS" = ( /obj/structure/machinery/alarm/south, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/security) "maY" = ( @@ -92052,7 +93051,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/tiled/dark/full, @@ -92276,7 +93275,8 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_2"; name = "airlock_horizon_dock_deck_3_starboard_2" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard/docks) "mdN" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -92377,11 +93377,9 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/medical/morgue) "meo" = ( -/obj/effect/floor_decal/corner_wide/yellow{ - dir = 10 - }, /obj/structure/machinery/hologram/holopad, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/break_room) "mep" = ( /obj/effect/floor_decal/corner/white/diagonal, @@ -92475,7 +93473,11 @@ }, /area/centcom/legion/hangar5) "meP" = ( -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "meU" = ( /obj/effect/floor_decal/spline/plain{ @@ -92499,6 +93501,14 @@ }, /turf/simulated/floor/tiled, /area/horizon/security/brig) +"mfb" = ( +/obj/structure/platform{ + dir = 1 + }, +/turf/simulated/floor/tiled/ramp/bottom{ + dir = 4 + }, +/area/horizon/maintenance/deck_1/wing/starboard/far) "mfe" = ( /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) @@ -92611,7 +93621,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "mfZ" = ( /obj/structure/cable/green{ @@ -92759,7 +93769,7 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenoarch/atrium) "mgM" = ( -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/tiled/dark, /area/horizon/storage/secure/tech_vault) "mgN" = ( /obj/effect/landmark/entry_point/port{ @@ -93240,7 +94250,7 @@ dir = 4 }, /obj/random/dirt_75, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port) "mji" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ @@ -93368,8 +94378,9 @@ /area/centcom/ferry) "mjX" = ( /obj/structure/machinery/alarm/west, -/obj/structure/girder, -/turf/simulated/floor/plating, +/obj/structure/machinery/floodlight, +/obj/effect/floor_decal/industrial/outline/operations, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard) "mka" = ( /obj/structure/machinery/firealarm/south, @@ -93384,6 +94395,7 @@ /area/antag/raider) "mkh" = ( /obj/structure/machinery/alarm/north, +/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/far) "mki" = ( @@ -93459,7 +94471,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/turbine) "mkO" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/effect/decal/cleanable/dirt, @@ -93618,9 +94630,6 @@ name = "Powernet Sensor - Shield Subgrid"; name_tag = "Shield Subgrid" }, -/obj/structure/machinery/light{ - dir = 8 - }, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/shields) "mmk" = ( @@ -93935,6 +94944,14 @@ /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard/far) +"mor" = ( +/obj/random/dirt_75, +/obj/random/dirt_75, +/obj/structure/closet/crate, +/obj/random/softcap, +/obj/random/toolbox, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard) "moz" = ( /obj/structure/machinery/atmospherics/binary/pump{ dir = 8; @@ -93943,15 +94960,10 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos/air) "moG" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, -/obj/structure/cable/green{ - icon_state = "1-2" - }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/operations) +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/operations/starboard) "moI" = ( /obj/structure/cable/green{ icon_state = "1-4" @@ -93982,7 +94994,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "moQ" = ( /obj/structure/table/rack, @@ -93991,7 +95003,7 @@ dir = 4 }, /obj/random/dirt_75, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "moS" = ( /obj/structure/table/stone/marble, @@ -94305,9 +95317,14 @@ /turf/unsimulated/floor/plating, /area/shuttle/syndicate_elite) "mrf" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/trash_pile, -/turf/simulated/floor/plating, +/obj/structure/platform{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/bed/stool/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "mrg" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/red{ @@ -94500,7 +95517,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "msp" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -94589,7 +95606,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/machinery/atmospherics/pipe/manifold/visible/scrubbers, /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, @@ -94663,7 +95680,7 @@ "mtA" = ( /obj/effect/floor_decal/industrial/warning, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "mtC" = ( /obj/structure/machinery/meter{ @@ -94733,7 +95750,7 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 1 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/effect/map_effect/marker/airlock{ @@ -94751,7 +95768,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_starboard) "muo" = ( @@ -94947,13 +95964,9 @@ /turf/simulated/floor, /area/horizon/command/heads/captain) "mvt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/service/starboard) +/obj/structure/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/full, +/area/horizon/hallway/primary/deck_2/central) "mvv" = ( /obj/structure/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ dir = 4 @@ -95004,6 +96017,14 @@ /obj/structure/target_stake, /turf/simulated/floor/tiled/dark/full, /area/horizon/security/firing_range) +"mvR" = ( +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/floor_decal/industrial/warning/cee, +/obj/structure/machinery/atmospherics/unary/vent_pump/aux{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/command/bridge/selfdestruct) "mvS" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -95023,7 +96044,7 @@ dir = 9 }, /obj/random/dirt_75, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "mvW" = ( /obj/structure/cable/green{ @@ -95177,7 +96198,8 @@ /obj/effect/floor_decal/industrial/hatch_door/red{ dir = 1 }, -/turf/simulated/floor/plating, +/obj/structure/machinery/door/firedoor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/nacelle) "mxb" = ( /obj/structure/cable{ @@ -95235,7 +96257,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "mxv" = ( /obj/structure/bed/stool/chair/shuttle{ @@ -95524,7 +96546,7 @@ icon_state = "4-8" }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "mzC" = ( /obj/structure/cable/green{ @@ -95552,7 +96574,10 @@ "mzX" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "mzY" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/aux, @@ -95581,18 +96606,15 @@ /area/horizon/stairwell/port/deck_2) "mAe" = ( /obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "mAg" = ( /obj/structure/disposalpipe/segment, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor, @@ -95649,7 +96671,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/port/far) "mAK" = ( /turf/simulated/floor/airless, @@ -95848,7 +96870,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -95859,10 +96881,8 @@ /area/horizon/command/bridge/controlroom) "mCw" = ( /obj/structure/railing/mapped, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/open, /area/horizon/maintenance/deck_2/main/starboard) "mCx" = ( /obj/effect/floor_decal/corner/dark_green/full{ @@ -95891,7 +96911,7 @@ /turf/simulated/floor/tiled/full, /area/horizon/operations/commissary) "mCO" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/dirt, @@ -96004,7 +97024,7 @@ dir = 5 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -96041,6 +97061,17 @@ }, /turf/simulated/floor/plating, /area/horizon/service/hydroponics/lower) +"mEa" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/platform_deco{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/wing/starboard/far) "mEd" = ( /obj/effect/floor_decal/industrial/warning{ dir = 9 @@ -96066,14 +97097,10 @@ /turf/simulated/floor/carpet/rubber, /area/horizon/tcommsat/chamber) "mEk" = ( -/obj/structure/machinery/porta_turret/stationary, -/obj/effect/floor_decal/industrial/warning/full, -/obj/structure/machinery/camera/motion{ - c_tag = "Scuttling Device"; - network = list("Command","Security") - }, -/turf/simulated/floor/reinforced, -/area/horizon/command/bridge/selfdestruct) +/obj/effect/floor_decal/spline/plain/black, +/obj/structure/machinery/hologram/holopad, +/turf/simulated/floor/tiled/dark, +/area/horizon/service/bar) "mEo" = ( /obj/structure/table/rack, /obj/effect/floor_decal/industrial/outline/operations, @@ -96090,7 +97117,10 @@ /obj/structure/table/steel, /obj/random/junk, /obj/random/contraband, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "mEq" = ( /obj/structure/machinery/light_switch/east{ @@ -96206,6 +97236,9 @@ /obj/structure/table/reinforced/steel, /obj/random/contraband, /obj/random/contraband, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/carpet/rubber, /area/horizon/maintenance/deck_1/workshop) "mEZ" = ( @@ -96502,12 +97535,12 @@ /turf/unsimulated/floor/plating, /area/centcom/legion) "mGA" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, /obj/structure/machinery/atmospherics/pipe/simple/visible{ dir = 6 }, -/turf/simulated/floor/tiled/dark, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "mGB" = ( /obj/structure/machinery/button/remote/blast_door{ @@ -96547,7 +97580,7 @@ dir = 4; req_one_access = list(5,10,12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "mGV" = ( /obj/effect/landmark/entry_point/port{ @@ -96585,6 +97618,9 @@ /obj/effect/floor_decal/corner/brown/full{ dir = 1 }, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/horizon/operations/commissary) "mHc" = ( @@ -96739,7 +97775,7 @@ "mHX" = ( /obj/effect/floor_decal/industrial/warning, /obj/structure/machinery/alarm/north, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor, @@ -96803,7 +97839,7 @@ /obj/effect/floor_decal/industrial/hatch_door/engineering{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/elevator) "mIC" = ( /obj/effect/floor_decal/industrial/hatch_door/red, @@ -96831,7 +97867,7 @@ "mIH" = ( /obj/random/junk, /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "mIQ" = ( /obj/effect/floor_decal/corner/dark_blue/full, @@ -96993,7 +98029,7 @@ name = "airlock_horizon_deck_1_fore_1" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/hangar/starboard) "mKj" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -97260,7 +98296,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/engineering/drone_fabrication) "mMa" = ( @@ -97445,7 +98481,8 @@ /area/horizon/engineering/atmos/storage) "mMO" = ( /obj/random/junk, -/obj/structure/machinery/light/small/emergency{ +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -97514,10 +98551,13 @@ /turf/unsimulated/floor, /area/centcom/bar) "mNb" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "mNc" = ( @@ -97583,7 +98623,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "mNu" = ( /obj/effect/floor_decal/industrial/warning{ @@ -97921,7 +98961,6 @@ }, /area/shuttle/legion) "mQw" = ( -/obj/structure/lattice/catwalk, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -97931,6 +98970,7 @@ /obj/structure/cable/green{ icon_state = "11-4" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/open, /area/horizon/maintenance/deck_2/wing/starboard/far) "mQz" = ( @@ -97962,7 +99002,7 @@ /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/closet/radiation, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/rubber, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/aft) "mRn" = ( /obj/structure/platform/ledge, @@ -98030,16 +99070,17 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_1"; name = "airlock_horizon_dock_deck_3_starboard_1" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard/docks) "mRS" = ( /obj/structure/table/steel, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "mRU" = ( /obj/structure/window/reinforced{ @@ -98376,8 +99417,10 @@ /turf/simulated/floor/shuttle/black, /area/centcom/specops) "mUv" = ( -/obj/effect/floor_decal/industrial/warning, /obj/structure/trash_pile, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "mUw" = ( @@ -98441,10 +99484,7 @@ /obj/structure/window/borosilicate/reinforced/skrell{ dir = 1 }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 - }, +/turf/simulated/floor/bluegrid, /area/horizon/ai/chamber) "mVm" = ( /obj/structure/railing/mapped, @@ -98581,7 +99621,7 @@ name = "airlock_horizon_deck_1_aft_port_1" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "mWm" = ( /obj/effect/map_effect/window_spawner/full/reinforced/indestructible, @@ -98808,7 +99848,7 @@ "mYc" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/alarm/east, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/random/maintenance_junk_or_loot, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port) @@ -98816,6 +99856,7 @@ /obj/structure/disposalpipe/segment{ icon_state = "pipe-c" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "mYf" = ( @@ -98891,7 +99932,7 @@ /area/horizon/hangar/intrepid) "mYt" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/reagent_dispensers/fueltank, @@ -98990,10 +100031,10 @@ /area/centcom/specops) "mYY" = ( /obj/structure/machinery/alarm/north, -/obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "mZa" = ( @@ -99035,7 +100076,6 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/medical/cryo) "mZg" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ icon_state = "1-2" }, @@ -99043,7 +100083,8 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 8 }, -/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, /turf/simulated/floor/wood, @@ -99118,12 +100159,11 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_3"; name = "airlock_horizon_dock_deck_3_starboard_3" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "mZz" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/operations) "mZB" = ( /obj/effect/floor_decal/industrial/hatch_door/yellow{ @@ -99354,11 +100394,17 @@ /turf/simulated/floor/reinforced/airless, /area/horizon/exterior) "naT" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/simulated/floor/reinforced, -/area/horizon/command/bridge/selfdestruct) +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/starboard/far) "naU" = ( /obj/effect/floor_decal/corner/dark_blue{ dir = 6 @@ -99383,8 +100429,7 @@ /area/horizon/medical/hallway/upper) "nbn" = ( /obj/structure/railing/mapped, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "nbp" = ( /obj/effect/decal/cleanable/dirt, @@ -99398,7 +100443,8 @@ /obj/structure/cable/green{ icon_state = "2-4" }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/open, /area/horizon/medical/gen_treatment) "nbt" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/black{ @@ -99574,7 +100620,7 @@ req_one_access = list(24,11,67,73); dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "ncM" = ( /obj/structure/machinery/mech_recharger, @@ -99795,6 +100841,9 @@ /obj/item/modular_computer/laptop/preset/medical{ pixel_y = 11 }, +/obj/structure/machinery/light{ + dir = 4 + }, /turf/simulated/floor/wood, /area/horizon/medical/psych) "ndF" = ( @@ -99805,11 +100854,13 @@ /turf/simulated/floor/tiled/dark, /area/horizon/command/bridge/controlroom) "ndG" = ( -/obj/effect/floor_decal/industrial/outline/grey, /obj/random/dirt_75, /obj/random/dirt_75, /obj/structure/machinery/portable_atmospherics/canister/empty/carbon_dioxide, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port/shortcut) "ndK" = ( /obj/effect/floor_decal/industrial/warning{ @@ -99936,6 +100987,13 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) +"new" = ( +/obj/effect/floor_decal/corner/brown{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/wing/starboard/far) "nez" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -100074,12 +101132,17 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "nfe" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/trash_pile, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "nfp" = ( @@ -100121,18 +101184,21 @@ /area/horizon/maintenance/deck_1/wing/starboard) "nfw" = ( /obj/structure/platform, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "nfy" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 + dir = 4 }, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 8 - }, -/obj/structure/machinery/vending/cigarette/horizon, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/service/starboard) "nfD" = ( /obj/structure/machinery/door/airlock/maintenance{ @@ -100173,6 +101239,7 @@ name_tag = "Deck 3 Command Subgrid" }, /obj/structure/cable/green, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "nfW" = ( @@ -100180,7 +101247,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/junk, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/contraband, @@ -100210,16 +101277,12 @@ /obj/effect/floor_decal/industrial/warning{ dir = 10 }, -/obj/structure/railing/mapped{ - dir = 8 - }, -/obj/structure/railing/mapped, /obj/structure/trash_pile, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "ngz" = ( /obj/effect/floor_decal/industrial/warning{ @@ -100348,7 +101411,7 @@ /turf/simulated/floor/holofloor/wood, /area/horizon/holodeck/source_sauna) "nha" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/floor_decal/industrial/warning{ @@ -100391,7 +101454,7 @@ frequency = 1109; req_one_access = list(19) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/ai/upload_foyer) "nho" = ( /obj/structure/machinery/firealarm/west, @@ -100417,10 +101480,12 @@ /turf/unsimulated/floor/rubber_carpet, /area/centcom/control) "nid" = ( -/obj/effect/floor_decal/industrial/warning, /obj/structure/machinery/alarm/north, /obj/structure/closet/crate/bin, /obj/random/loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "nig" = ( @@ -100576,6 +101641,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/port/far) "njg" = ( @@ -100650,9 +101718,6 @@ /obj/structure/platform/ledge/dark{ dir = 8 }, -/obj/structure/railing/mapped{ - dir = 4 - }, /turf/simulated/open, /area/horizon/maintenance/deck_2/cryo) "nku" = ( @@ -100707,7 +101772,7 @@ icon_state = "4-8" }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -101028,7 +102093,7 @@ name = "airlock_horizon_deck_1_aft_propulsion_2" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/propulsion) "nmz" = ( /obj/structure/machinery/atmospherics/portables_connector, @@ -101066,7 +102131,7 @@ /area/horizon/engineering/atmos/storage) "nmJ" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -101445,6 +102510,9 @@ /obj/structure/reagent_dispensers/watertank, /obj/effect/floor_decal/industrial/hatch/yellow, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "nqw" = ( @@ -101528,7 +102596,7 @@ "nrf" = ( /obj/effect/floor_decal/industrial/warning, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/port/nacelle) "nri" = ( /obj/effect/floor_decal/industrial/hatch/red, @@ -101667,7 +102735,8 @@ /obj/structure/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "nsp" = ( /obj/effect/floor_decal/corner/dark_blue/diagonal, @@ -101726,6 +102795,12 @@ /obj/structure/shuttle/engine/propulsion, /turf/simulated/floor/plating, /area/shuttle/mercenary) +"nsQ" = ( +/obj/effect/floor_decal/industrial/warning/cee{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/main/starboard) "nsR" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -101778,12 +102853,17 @@ master_tag = "airlock_horizon_deck_2_port_1"; name = "airlock_horizon_deck_2_port_1" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "ntf" = ( /obj/effect/floor_decal/corner/dark_blue, /turf/simulated/floor/tiled/dark, /area/horizon/security/interrogation/monitoring) +"nti" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/main/starboard) "ntp" = ( /obj/structure/cable/green{ icon_state = "4-8" @@ -101832,10 +102912,7 @@ /obj/structure/cable/green{ icon_state = "2-8" }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 - }, +/turf/simulated/floor/bluegrid, /area/horizon/ai/chamber) "ntv" = ( /obj/structure/cable{ @@ -101891,7 +102968,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor, @@ -102262,12 +103339,9 @@ /turf/simulated/floor/reinforced, /area/shuttle/hapt) "nwM" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, -/obj/random/dirt_75, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/operations/starboard) "nwN" = ( /turf/simulated/floor/holofloor/grass{ dir = 8; @@ -102316,9 +103390,7 @@ c_tag = "Engineering - Deck 1 - Security Substation"; dir = 8 }, -/obj/structure/machinery/light/small{ - dir = 4 - }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/security) "nxb" = ( @@ -102327,7 +103399,13 @@ no_cargo = 1 }, /obj/random/firstaid, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown{ + dir = 6 + }, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "nxd" = ( /obj/structure/machinery/door/airlock/centcom{ @@ -102413,13 +103491,19 @@ "nxT" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, /area/horizon/command/heads/rd) +"nxU" = ( +/obj/structure/trash_pile, +/obj/effect/decal/cleanable/dirt, +/obj/structure/railing/mapped, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/operations/starboard) "nxW" = ( /turf/simulated/wall/shuttle/hapt/blue, /area/shuttle/hapt) "nxZ" = ( -/obj/structure/lattice/catwalk/indoor, /obj/structure/railing/mapped, /obj/structure/machinery/alarm/north, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/research) "nyc" = ( @@ -102598,13 +103682,13 @@ /turf/simulated/wall/shuttle/scc_space_ship/cardinal, /area/horizon/command/bridge/controlroom) "nzh" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "nzj" = ( /obj/structure/disposalpipe/segment, @@ -103348,14 +104432,14 @@ /area/horizon/command/bridge/minibar) "nDP" = ( /obj/structure/machinery/recharge_station, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/ai/upload_foyer) "nDQ" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 }, /obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/holodeck) "nDR" = ( /obj/structure/machinery/cryopod, @@ -103388,19 +104472,12 @@ /turf/simulated/floor/tiled/dark, /area/horizon/storage/eva) "nED" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/random/maintenance_junk_or_loot, +/obj/structure/machinery/light/small{ + dir = 8 }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/far) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/nacelle) "nEE" = ( /obj/effect/floor_decal/industrial/hatch_door/engineering{ dir = 1 @@ -103475,8 +104552,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) @@ -103640,7 +104717,7 @@ /area/horizon/security/brig) "nFV" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/lattice/catwalk/indoor/grate/old, /turf/unsimulated/floor/plating, /area/antag/raider) @@ -103675,8 +104752,10 @@ /turf/unsimulated/floor/plating, /area/centcom/specops) "nFZ" = ( -/obj/item/stack/tile/floor, -/turf/simulated/floor/tiled, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/tile/floor_dark, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "nGb" = ( /obj/structure/lattice/catwalk, @@ -103692,7 +104771,7 @@ /obj/structure/window/reinforced/crescent, /obj/effect/decal/cleanable/dirt, /obj/structure/table/steel, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/floor_decal/corner/grey{ @@ -103905,7 +104984,7 @@ /obj/structure/machinery/door/airlock/maintenance{ req_one_access = list(12,19) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "nHo" = ( /obj/structure/window/shuttle/unique/scc/scout{ @@ -103922,9 +105001,13 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/security_port) "nHy" = ( -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 1 +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "nHB" = ( @@ -104117,7 +105200,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 5 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor, @@ -104519,16 +105602,15 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "nLp" = ( -/obj/structure/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_2/central) "nLs" = ( /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/main/starboard) @@ -104749,7 +105831,7 @@ master_tag = "airlock_horizon_deck_1_aft_propulsion_1"; name = "airlock_horizon_deck_1_aft_propulsion_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/propulsion/starboard) "nMN" = ( /obj/structure/sign/directions/security{ @@ -104828,14 +105910,10 @@ /area/template_noop) "nNG" = ( /obj/structure/platform, -/obj/structure/platform{ - dir = 8 - }, -/obj/structure/platform_deco{ - dir = 9 - }, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/obj/random/dirt_75, +/obj/random/canister/restricted, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "nNH" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ @@ -105077,6 +106155,11 @@ }, /turf/simulated/floor/exoplanet/grass/grove, /area/centcom/shared_dream) +"nPv" = ( +/obj/effect/floor_decal/industrial/outline/grey, +/obj/random/canister/restricted, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_3/security/port) "nPx" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/black, /turf/simulated/wall/shuttle/scc_space_ship/cardinal, @@ -105101,6 +106184,7 @@ /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/elevator) "nPH" = ( @@ -105589,6 +106673,7 @@ "nTg" = ( /obj/structure/disposalpipe/segment, /obj/structure/machinery/alarm/east, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/research) "nTj" = ( @@ -105607,7 +106692,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/xenoarch/atrium) "nTn" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/bed/stool/chair{ @@ -105818,15 +106903,7 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/hallway) "nUL" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, -/obj/item/trash/cigbutt{ - pixel_y = -12; - pixel_x = 7 - }, -/obj/item/trash/cigbutt/cigarbutt{ - pixel_x = -2 - }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port/shortcut) "nUN" = ( @@ -105954,11 +107031,11 @@ /area/shuttle/burglar) "nVI" = ( /obj/effect/floor_decal/corner/brown/diagonal, -/obj/structure/machinery/light/spot{ - dir = 1 - }, /obj/structure/closet/lasertag, /obj/effect/floor_decal/industrial/outline/red, +/obj/structure/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/holodeck_control) "nVR" = ( @@ -105993,6 +107070,7 @@ /obj/random/dirt_75, /obj/random/junk, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "nWe" = ( @@ -106028,8 +107106,8 @@ c_tag = "Engineering - Deck 2 - Starboard Auxiliary Atmospherics"; dir = 1 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "nWp" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -106041,12 +107119,16 @@ /area/horizon/security/checkpoint2) "nWM" = ( /obj/effect/floor_decal/corner/dark_blue/diagonal, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/machinery/hologram/holopad, +/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/ai/upload_foyer) "nWN" = ( @@ -106091,7 +107173,7 @@ /area/horizon/rnd/xenological) "nWT" = ( /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "nXb" = ( @@ -106119,7 +107201,12 @@ /area/horizon/rnd/hallway) "nXe" = ( /obj/effect/decal/cleanable/dirt, -/obj/random/maintenance_junk_or_loot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/steel, +/obj/random/pottedplant_small{ + pixel_x = 2; + pixel_y = 2 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "nXf" = ( @@ -106151,6 +107238,13 @@ /obj/structure/stairs/north, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/service/starboard) +"nXu" = ( +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/platform_deco{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/wing/starboard/far) "nXx" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/machinery/light/small{ @@ -106185,7 +107279,7 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "nXS" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -106242,7 +107336,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/disposalpipe/segment, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor, @@ -106332,6 +107426,9 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/far) "nZa" = ( @@ -106534,9 +107631,6 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard) "oaF" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, /obj/effect/floor_decal/industrial/warning{ dir = 8 }, @@ -106638,6 +107732,15 @@ /obj/random/maintenance_junk_or_loot, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) +"obv" = ( +/obj/effect/floor_decal/corner/dark_green{ + dir = 6 + }, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/horizon/hallway/primary/deck_1/central) "obw" = ( /obj/structure/table/stone/marble, /obj/item/reagent_containers/glass/rag/advanced/idris{ @@ -106712,6 +107815,7 @@ pixel_x = 20; pixel_y = 6 }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/hallway/primary/deck_3/starboard/docks) "obN" = ( @@ -107052,7 +108156,10 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "odX" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -107169,7 +108276,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/legion) "oey" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/table/rack, /obj/effect/map_effect/mecha_part_spawner/propulsion, /obj/effect/floor_decal/industrial/outline/yellow, @@ -107537,6 +108644,9 @@ /obj/structure/cable/green{ icon_state = "2-4" }, +/obj/structure/machinery/light/floor{ + dir = 4 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/aibunker) "ogv" = ( @@ -107557,7 +108667,7 @@ name = "airlock_horizon_deck_1_aft_port_1" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "ogy" = ( /obj/structure/table/reinforced/steel, @@ -107749,9 +108859,6 @@ /area/horizon/engineering/break_room) "ohZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ - dir = 1 - }, /obj/structure/bed/stool/chair, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) @@ -108038,10 +109145,10 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/surgery) "ojv" = ( -/obj/structure/railing/mapped{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "ojI" = ( @@ -108120,18 +109227,30 @@ /turf/simulated/floor/plating, /area/merchant_station/warehouse) "okz" = ( -/obj/structure/cable{ +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ icon_state = "4-8" }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_1/main/port/shortcut) +/turf/simulated/floor/tiled/full, +/area/horizon/rnd/hallway) "okF" = ( /obj/structure/machinery/portable_atmospherics/canister/air/airlock, /obj/structure/machinery/atmospherics/portables_connector{ dir = 1 }, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "okI" = ( /obj/structure/cable/green{ @@ -108187,7 +109306,8 @@ /turf/simulated/wall, /area/horizon/security/meeting_room) "olm" = ( -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_3/aft/starboard/far) "oln" = ( /obj/structure/toilet{ @@ -108372,7 +109492,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/hangar/airstation) "omI" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/effect/floor_decal/industrial/outline/service, @@ -108388,7 +109508,8 @@ master_tag = "airlock_horizon_dock_deck_3_port_4"; name = "airlock_horizon_dock_deck_3_port_4" }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor, /area/horizon/hallway/primary/deck_3/port/docks) "omQ" = ( /obj/effect/floor_decal/industrial/warning{ @@ -108775,6 +109896,7 @@ /obj/structure/lattice/catwalk/indoor/grate/damaged{ color = "#4c535b" }, +/obj/item/pen, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "opn" = ( @@ -108782,7 +109904,7 @@ /turf/simulated/floor/bluegrid, /area/horizon/tcommsat/chamber) "opo" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/unsimulated/floor/plating, @@ -108805,12 +109927,12 @@ icon_state = "1-4" }, /obj/structure/machinery/power/apc/hyper/south, -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 1 - }, /obj/structure/railing/mapped{ dir = 4 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "opE" = ( @@ -109319,8 +110441,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "osD" = ( /obj/effect/floor_decal/corner_wide/yellow{ @@ -109374,7 +110496,7 @@ /turf/simulated/floor/tiled, /area/horizon/hangar/operations) "osX" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/lattice/catwalk/indoor/grate/damaged{ @@ -109497,6 +110619,10 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering/lower) "otK" = ( @@ -109663,7 +110789,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -109808,7 +110934,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/holodeck) "ovV" = ( /obj/structure/bed/stool/chair{ @@ -109919,7 +111045,7 @@ /area/shuttle/merchant) "owF" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/cable{ @@ -109937,11 +111063,9 @@ /turf/simulated/floor/tiled/gunmetal, /area/horizon/operations/warehouse) "owI" = ( -/obj/effect/floor_decal/industrial/warning/cee{ - dir = 4 - }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "owJ" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -109997,6 +111121,9 @@ /obj/structure/cable/green{ icon_state = "1-2" }, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/intrepid/main_compartment) "oxe" = ( @@ -110020,7 +111147,10 @@ no_cargo = 1 }, /obj/random/gloves, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "oxq" = ( /obj/structure/bed/stool/chair/shuttle, @@ -110083,6 +111213,12 @@ "oxM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/alarm/north, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_port) "oxQ" = ( @@ -110093,7 +111229,7 @@ name = "airlock_horizon_deck_2_aft_sm" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/supermatter/airlock) "oxR" = ( /obj/effect/floor_decal/industrial/hatch/red, @@ -110141,6 +111277,9 @@ "oyp" = ( /obj/structure/machinery/vending/cigarette/horizon, /obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, /turf/simulated/floor/wood/walnut, /area/horizon/medical/smoking) "oyq" = ( @@ -110167,9 +111306,9 @@ /area/horizon/command/heads/cmo) "oyv" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/random/canister/empty, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "oyz" = ( /obj/effect/floor_decal/corner_wide/lime/diagonal, @@ -110282,7 +111421,7 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_2/fore) "ozq" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "ozr" = ( @@ -110353,7 +111492,6 @@ /turf/simulated/floor/tiled, /area/horizon/rnd/hallway/secondary) "ozK" = ( -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, @@ -110425,6 +111563,10 @@ /area/horizon/security/investigations_hallway) "oAd" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/machinery/meter, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "oAe" = ( @@ -110576,6 +111718,9 @@ dir = 4 }, /obj/item/radio/intercom/south, +/obj/effect/floor_decal/corner/dark_blue{ + dir = 9 + }, /turf/simulated/floor/tiled/dark, /area/horizon/ai/upload_foyer) "oBl" = ( @@ -110618,6 +111763,7 @@ /area/shuttle/legion) "oBz" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/red, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "oBD" = ( @@ -110761,6 +111907,9 @@ /obj/structure/machinery/power/breakerbox/activated{ RCon_tag = "Engineering Lower Deck Substation" }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering/lower) "oCI" = ( @@ -110800,7 +111949,7 @@ /obj/random/dirt_75, /obj/effect/floor_decal/industrial/outline/grey, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port/shortcut) "oCR" = ( /obj/structure/disposalpipe/segment, @@ -111307,11 +112456,12 @@ /turf/simulated/floor/tiled, /area/horizon/operations/machinist) "oGs" = ( +/obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/industrial/warning{ - dir = 8 + dir = 10 }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/wing/starboard/far) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/main/starboard) "oGt" = ( /obj/structure/machinery/door/airlock/glass{ dir = 1; @@ -111366,11 +112516,13 @@ /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "oGP" = ( /obj/structure/cable/green{ @@ -111508,7 +112660,7 @@ /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/closet/crate, /obj/random/loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "oHG" = ( /obj/structure/railing/mapped{ @@ -111809,9 +112961,10 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/structure/railing/mapped, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "oJM" = ( @@ -111910,7 +113063,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_1"; name = "airlock_horizon_dock_deck_3_starboard_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "oKh" = ( /obj/structure/railing/mapped, @@ -111996,8 +113149,8 @@ /area/shuttle/transport1) "oKI" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "oKM" = ( /obj/effect/floor_decal/corner/dark_blue{ @@ -112346,8 +113499,11 @@ /area/horizon/engineering/atmos/propulsion/starboard) "oMH" = ( /obj/random/junk, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "oMK" = ( /obj/effect/decal/fake_object{ @@ -112531,7 +113687,7 @@ dir = 4; req_one_access = list(5,12) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard) "oNN" = ( /turf/simulated/floor/holofloor/wood, @@ -112565,7 +113721,7 @@ }, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "oOg" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -112656,9 +113812,11 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenoarch/atrium) "oOz" = ( -/obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/machinery/atmospherics/pipe/manifold4w/hidden, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "oOI" = ( /obj/structure/table/reinforced/steel, @@ -112763,13 +113921,12 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/central) "oPC" = ( -/obj/structure/machinery/door/window/eastright{ - dir = 1 - }, /obj/structure/machinery/atmospherics/pipe/manifold/hidden{ dir = 4 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor, /area/horizon/hallway/primary/deck_3/port/docks) "oPE" = ( @@ -112797,7 +113954,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/random/maintenance_junk_or_loot, @@ -112806,7 +113963,10 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/cargo_compartment) "oPN" = ( -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "oPO" = ( /obj/structure/machinery/door/airlock/maintenance_hatch{ @@ -112880,9 +114040,6 @@ /area/horizon/service/cafeteria) "oQp" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ - dir = 4 - }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_3/aft/starboard/far) "oQu" = ( @@ -112969,10 +114126,7 @@ "oRf" = ( /obj/structure/machinery/porta_turret, /obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 - }, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/chamber) "oRi" = ( /obj/effect/floor_decal/corner/red{ @@ -113037,6 +114191,7 @@ "oRC" = ( /obj/random/dirt_75, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "oRD" = ( @@ -113406,10 +114561,10 @@ no_cargo = 1 }, /obj/random/lavalamp, -/obj/structure/machinery/light/small/emergency{ - dir = 4 +/obj/effect/floor_decal/corner/brown{ + dir = 6 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "oTp" = ( /turf/simulated/floor/wood, @@ -113435,6 +114590,7 @@ /obj/random/loot, /obj/random/bandana, /obj/random/firstaid, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "oTJ" = ( @@ -113513,6 +114669,9 @@ dir = 8 }, /obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/main/starboard) "oUg" = ( @@ -113568,8 +114727,10 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/medical/paramedic) "oUx" = ( -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_3/security/port) +/obj/random/maintenance_junk_or_loot, +/obj/structure/platform, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/operations/starboard) "oUB" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -113955,11 +115116,11 @@ /turf/simulated/floor/tiled/full, /area/horizon/hangar/operations) "oXf" = ( -/obj/effect/floor_decal/industrial/warning/corner, /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/operations) "oXi" = ( /obj/effect/floor_decal/industrial/hatch_door/red, @@ -113995,7 +115156,7 @@ dir = 4 }, /obj/structure/machinery/floodlight, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "oXq" = ( /obj/structure/machinery/door/firedoor{ @@ -114120,11 +115281,8 @@ /turf/simulated/floor/tiled/gunmetal, /area/horizon/operations/ship_supply_warehouse) "oXN" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/random/tool, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "oXX" = ( /obj/structure/cable/green{ @@ -114150,7 +115308,8 @@ "oYa" = ( /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "oYb" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -114270,7 +115429,7 @@ /obj/effect/floor_decal/industrial/warning/cee, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/central_ring) "oYW" = ( /obj/structure/machinery/door/window/southleft{ @@ -114290,7 +115449,7 @@ /area/horizon/shuttle/canary) "oZl" = ( /obj/structure/lattice/catwalk/indoor, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/unsimulated/floor/plating, @@ -114377,7 +115536,7 @@ /area/horizon/command/bridge/upperdeck) "oZW" = ( /obj/structure/trash_pile, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/dirt_75, @@ -114398,7 +115557,11 @@ /turf/simulated/floor/plating, /area/horizon/operations/break_room) "oZY" = ( -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "pai" = ( /obj/effect/floor_decal/corner/dark_green{ @@ -114419,7 +115582,7 @@ /turf/simulated/floor/tiled, /area/horizon/crew/fitness/changing) "pan" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -114535,7 +115698,7 @@ name = "Cryogenics Control Room"; req_access = list(66) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "pbg" = ( /obj/effect/floor_decal/spline/plain/yellow{ @@ -114606,8 +115769,11 @@ /turf/simulated/open, /area/horizon/medical/gen_treatment) "pbN" = ( -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/machinery/disposal/small/east, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk, /turf/simulated/floor/wood, /area/horizon/command/heads/chief) "pbO" = ( @@ -114639,6 +115805,7 @@ dir = 1; icon_state = "pipe-c" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "pcg" = ( @@ -114677,6 +115844,7 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/research) "pcJ" = ( @@ -114899,14 +116067,17 @@ /obj/structure/machinery/power/breakerbox/activated{ RCon_tag = "Research Substation" }, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/research) "peq" = ( /obj/structure/cable/green{ icon_state = "2-8" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_port) "pet" = ( @@ -115015,7 +116186,10 @@ "peN" = ( /obj/structure/trash_pile, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "peQ" = ( /obj/structure/shuttle_part/scc_space_ship{ @@ -115115,6 +116289,9 @@ dir = 8; c_tag = "Operations - Supply Corridor Aft" }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/operations) "pfp" = ( @@ -115222,7 +116399,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "pfP" = ( /obj/structure/cable{ @@ -115232,6 +116409,9 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/engineering/storage/lower) "pfT" = ( @@ -115870,7 +117050,10 @@ }, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "pkh" = ( /obj/item/aiModule/conglomerate, @@ -116280,7 +117463,7 @@ pixel_y = 6 }, /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -116305,11 +117488,11 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/security/armoury) "pnw" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/landmark{ + name = "Revenant" }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/far) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard/near) "pnD" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -116702,14 +117885,30 @@ /turf/simulated/floor/tiled, /area/horizon/maintenance/deck_3/security/port) "pqm" = ( -/turf/simulated/floor/reinforced, +/obj/structure/sign/flag/scc{ + pixel_x = 32 + }, +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "pqn" = ( /obj/structure/machinery/atmospherics/pipe/manifold/visible{ dir = 8 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "pqv" = ( /obj/effect/decal/cleanable/dirt, @@ -116765,18 +117964,6 @@ /obj/structure/stairs/north, /turf/simulated/floor/tiled, /area/horizon/operations/loading) -"prj" = ( -/obj/effect/floor_decal/corner_wide/yellow{ - dir = 10 - }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/horizon/medical/hallway) "prm" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 1 @@ -116814,7 +118001,7 @@ /obj/structure/disposalpipe/segment{ icon_state = "pipe-c" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -117036,7 +118223,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "psD" = ( /obj/structure/machinery/door/airlock/external{ @@ -117296,7 +118483,7 @@ }, /obj/structure/table/wood, /obj/random/contraband, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "puG" = ( /obj/effect/floor_decal/corner_wide/paleblue/diagonal{ @@ -117393,7 +118580,10 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "pvl" = ( /obj/structure/railing/mapped, @@ -117404,11 +118594,15 @@ /turf/simulated/floor/plating, /area/horizon/engineering/reactor/indra/office) "pvs" = ( -/obj/structure/machinery/atmospherics/unary/vent_pump/aux{ +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/turf/simulated/floor/reinforced, -/area/horizon/command/bridge/selfdestruct) +/turf/simulated/floor/wood, +/area/horizon/service/bar) "pvw" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -117452,7 +118646,7 @@ master_tag = "airlock_horizon_deck_1_aft_port_1"; name = "airlock_horizon_deck_1_aft_port_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "pvW" = ( /obj/structure/bed/stool/chair/padded/black{ @@ -117464,7 +118658,7 @@ /turf/simulated/floor/carpet, /area/horizon/repoffice/representative_two) "pwg" = ( -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "pwj" = ( /obj/structure/closet/emcloset, @@ -117508,10 +118702,12 @@ /turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "pws" = ( -/obj/effect/decal/cleanable/dirt, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled, -/area/horizon/maintenance/deck_1/operations/starboard) +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/starboard/far) "pwv" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -117547,9 +118743,15 @@ /turf/simulated/floor/plating, /area/horizon/command/bridge/controlroom) "pwz" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/structure/platform, +/obj/structure/platform{ + dir = 8 + }, +/obj/structure/platform_deco{ + dir = 9 + }, +/obj/structure/machinery/portable_atmospherics/canister/air/warm, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "pwC" = ( /obj/effect/floor_decal/industrial/outline/grey, @@ -117634,6 +118836,7 @@ dir = 4 }, /obj/structure/machinery/alarm/north, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/operations) "pxv" = ( @@ -117721,7 +118924,10 @@ dir = 4 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "pxP" = ( /obj/structure/machinery/light{ @@ -117782,7 +118988,10 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "pyp" = ( /obj/structure/machinery/seed_storage/garden/xenobotany, @@ -117837,7 +119046,7 @@ }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/maintenance/deck_2/wing/port/nacelle) "pyI" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, @@ -117854,7 +119063,7 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos/turbine) "pyM" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -117998,13 +119207,9 @@ /turf/simulated/floor/wood, /area/horizon/command/bridge/upperdeck) "pzV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/random/dirt_75, -/obj/random/dirt_75, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/main/starboard) +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/main/starboard) "pzW" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -118024,8 +119229,14 @@ pixel_x = -11; pixel_y = -2 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port/shortcut) +"pAe" = ( +/turf/simulated/floor/tiled/ramp, +/area/horizon/maintenance/deck_1/operations/starboard) "pAi" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -118065,7 +119276,7 @@ name = "airlock_horizon_deck_2_port_1" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "pAA" = ( /obj/structure/machinery/access_button{ @@ -118197,7 +119408,7 @@ icon_state = "4-8" }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port) "pBj" = ( /obj/effect/floor_decal/industrial/warning{ @@ -118284,7 +119495,7 @@ /obj/effect/floor_decal/corner/dark_blue{ dir = 5 }, -/obj/structure/machinery/light/small{ +/obj/structure/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -118385,7 +119596,7 @@ name = "airlock_horizon_deck_2_starboard_aft" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "pCo" = ( /obj/structure/table/reinforced/steel, @@ -118469,12 +119680,16 @@ master_tag = "airlock_horizon_deck_2_aft_sm"; name = "airlock_horizon_deck_2_aft_sm" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/engineering/reactor/supermatter/airlock) "pCM" = ( /obj/random/tool, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "pCP" = ( /obj/structure/railing/mapped{ @@ -118578,6 +119793,9 @@ dir = 8 }, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard/far) "pDm" = ( @@ -118707,7 +119925,7 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "pEj" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/decal/cleanable/dirt, @@ -118857,6 +120075,9 @@ /area/horizon/holodeck/source_battlemonsters) "pFS" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "pGe" = ( @@ -118884,7 +120105,8 @@ dir = 4 }, /obj/random/junk, -/turf/simulated/floor/tiled/dark/full, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "pGm" = ( /obj/structure/tank_wall{ @@ -118918,6 +120140,13 @@ /obj/random/dirt_75, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port/shortcut) +"pGF" = ( +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard) "pGG" = ( /obj/structure/machinery/door/airlock/hatch{ dir = 4; @@ -119269,7 +120498,7 @@ dir = 10 }, /obj/structure/machinery/alarm/east, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "pJa" = ( /obj/structure/shuttle_part/scc_space_ship{ @@ -119305,6 +120534,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/visible/purple{ dir = 6 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "pJs" = ( @@ -119497,7 +120727,13 @@ dir = 10 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "pKx" = ( /turf/simulated/wall/shuttle/unique/tcfl{ @@ -119532,7 +120768,10 @@ "pKC" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/random/dirt_75, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "pKI" = ( /obj/effect/floor_decal/spline/plain/black{ @@ -119583,9 +120822,6 @@ /turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "pLp" = ( -/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, /obj/structure/cable/green{ icon_state = "1-2" }, @@ -119596,6 +120832,7 @@ dir = 10 }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/horizon/service/bar) "pLu" = ( @@ -119617,7 +120854,7 @@ req_access = list(1); dir = 4 }, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/security/interrogation) "pLy" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden{ @@ -119725,10 +120962,10 @@ /area/horizon/command/heads/om) "pMv" = ( /obj/effect/floor_decal/industrial/warning{ - dir = 1 + dir = 6 }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/port/far) +/turf/simulated/floor, +/area/horizon/maintenance/deck_3/aft/starboard/far) "pMw" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -119796,6 +121033,7 @@ icon_state = "2-8" }, /obj/structure/machinery/power/apc/low/north, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/medical) "pNc" = ( @@ -119910,6 +121148,9 @@ /area/centcom/spawning) "pNT" = ( /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "pNX" = ( @@ -119919,6 +121160,7 @@ }, /obj/effect/floor_decal/industrial/outline/yellow, /obj/random/dirt_75, +/obj/structure/machinery/alarm/north, /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "pNY" = ( @@ -119933,14 +121175,12 @@ /turf/simulated/floor/wood, /area/horizon/command/bridge/upperdeck) "pOa" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, -/obj/structure/lattice/catwalk/indoor/grate/damaged{ - color = "#4c535b" - }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard/far) "pOb" = ( /obj/effect/landmark/entry_point/fore{ name = "fore, starboard ballast" @@ -120206,11 +121446,12 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/port) "pPQ" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/light/small/emergency{ - dir = 1 +/obj/structure/machinery/door/firedoor{ + req_one_access = list(24,11,67,73); + dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/hatch_door/yellow, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port) "pPR" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -120242,7 +121483,10 @@ /obj/random/tool{ pixel_y = 6 }, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "pPZ" = ( /obj/structure/bed/stool/padded, @@ -120542,6 +121786,7 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 1 }, +/obj/structure/machinery/light/small/floor, /turf/simulated/floor/wood, /area/horizon/service/bar) "pRR" = ( @@ -120813,14 +122058,11 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) "pTN" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{ - dir = 4 - }, -/turf/simulated/floor/reinforced, -/area/horizon/command/bridge/selfdestruct) +/turf/simulated/floor/tiled/full, +/area/horizon/hallway/primary/deck_2/central) "pTZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/unsimulated/floor, @@ -120833,7 +122075,7 @@ dir = 8 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/holodeck) "pUg" = ( /obj/structure/table/standard, @@ -120976,7 +122218,7 @@ req_one_access = list(12,66); name = "Deck 1 Starboard Primary Maintenance Conduit" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/teleporter) "pVw" = ( /obj/structure/bed/stool/chair/office/dark{ @@ -121009,6 +122251,7 @@ /obj/structure/machinery/atmospherics/binary/pump{ name = "Mix to Connector" }, +/obj/structure/machinery/firealarm/east, /turf/simulated/floor/plating, /area/horizon/engineering/storage/lower) "pVD" = ( @@ -121342,7 +122585,8 @@ /area/merchant_station/warehouse) "pXz" = ( /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, +/obj/structure/machinery/alarm/north, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "pXA" = ( /obj/structure/lattice, @@ -121439,10 +122683,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/obj/random/dirt_75, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "pYd" = ( @@ -121469,7 +122710,7 @@ icon_state = "0-4" }, /obj/structure/machinery/power/apc/low/south, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port) "pYr" = ( /obj/effect/floor_decal/industrial/warning{ @@ -121523,7 +122764,7 @@ name = "airlock_horizon_deck_2_starboard_aft" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "pYV" = ( /obj/effect/floor_decal/corner_wide/yellow{ @@ -121726,6 +122967,9 @@ "qaq" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/operations) "qas" = ( @@ -121801,10 +123045,14 @@ /area/horizon/operations/machinist) "qaV" = ( /obj/structure/machinery/alarm/west, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "qbc" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -121812,7 +123060,10 @@ /area/horizon/maintenance/deck_1/hangar/port) "qbh" = ( /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "qbj" = ( /obj/effect/floor_decal/industrial/warning/full, @@ -122153,6 +123404,14 @@ }, /turf/simulated/floor/tiled/full, /area/horizon/operations/mining_main/refinery) +"qdE" = ( +/obj/random/maintenance_junk_or_loot, +/obj/random/dirt_75, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/far) "qdL" = ( /obj/effect/floor_decal/corner/red{ dir = 10 @@ -122210,11 +123469,11 @@ /area/horizon/crew/fitness/changing) "qec" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/railing/mapped{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/aft) +/area/horizon/maintenance/deck_2/wing/starboard) "qee" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -122248,7 +123507,7 @@ name = "airlock_horizon_deck_1_aft_port_1" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "qem" = ( /obj/structure/machinery/door/firedoor, @@ -122258,7 +123517,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "qep" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -122385,9 +123644,13 @@ /turf/simulated/floor/reinforced/airless, /area/horizon/engineering/reactor/indra/mainchamber) "qfa" = ( -/obj/effect/floor_decal/industrial/outline/grey, +/obj/structure/cable, +/obj/structure/machinery/power/apc/low/south, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port/shortcut) "qfo" = ( /turf/simulated/open/airless, @@ -122490,6 +123753,9 @@ /obj/effect/floor_decal/corner/dark_blue{ dir = 5 }, +/obj/structure/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/horizon/security/investigations_hallway) "qga" = ( @@ -122515,8 +123781,10 @@ /turf/simulated/wall/shuttle/scc_space_ship/cardinal, /area/horizon/maintenance/deck_2/security_port) "qgf" = ( -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "qgh" = ( /obj/structure/cable/green{ @@ -122858,7 +124126,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "qiW" = ( /obj/structure/platform/ledge{ @@ -122885,6 +124153,22 @@ }, /turf/simulated/floor/tiled/freezer, /area/horizon/crew/fitness/showers) +"qjh" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/starboard/far) "qjk" = ( /obj/effect/floor_decal/corner/dark_blue{ dir = 10 @@ -122902,15 +124186,21 @@ /turf/simulated/floor/holofloor/wood, /area/horizon/holodeck/source_sauna) "qjG" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/obj/structure/machinery/light/small, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "qjH" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/table/rack, /obj/random/loot, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "qjN" = ( /obj/structure/machinery/light, @@ -123092,7 +124382,7 @@ name = "airlock_horizon_deck_1_aft_propulsion_1" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/propulsion/starboard) "qli" = ( /obj/structure/flora/ausbushes/sparsegrass, @@ -123123,7 +124413,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard) "qlr" = ( /obj/structure/railing/mapped{ @@ -123358,6 +124648,9 @@ /obj/effect/floor_decal/spline/plain/corner/black{ dir = 1 }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/break_room) "qmh" = ( @@ -123458,9 +124751,6 @@ target_pressure = 200 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) @@ -123685,9 +124975,6 @@ }, /area/centcom/control) "qnV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, /obj/structure/trash_pile, /obj/random/dirt_75, /turf/simulated/floor/plating, @@ -123731,7 +125018,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "qor" = ( /obj/structure/machinery/alarm/east, @@ -123853,7 +125140,7 @@ "qpd" = ( /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "qpr" = ( /obj/structure/closet/secure_closet/guncabinet{ @@ -123984,7 +125271,6 @@ /turf/simulated/floor/tiled, /area/horizon/security/investigations_hallway) "qqm" = ( -/obj/structure/grille/broken, /obj/item/material/shard{ icon_state = "medium" }, @@ -124002,9 +125288,6 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small{ - dir = 8 - }, /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow, /turf/simulated/floor/plating, @@ -124043,6 +125326,9 @@ /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos/storage_maintenance) "qqF" = ( @@ -124071,10 +125357,10 @@ /turf/simulated/floor/tiled/white, /area/horizon/shuttle/intrepid/medical) "qqP" = ( -/obj/random/dirt_75, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port/shortcut) "qqQ" = ( @@ -124194,12 +125480,19 @@ icon_state = "1-4" }, /obj/structure/machinery/power/apc/low/west, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/civ_d2) "qrM" = ( /obj/effect/decal/cleanable/dirt, /obj/random/junk, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "qrO" = ( /obj/item/reagent_containers/food/drinks/waterbottle{ @@ -124556,6 +125849,9 @@ }, /obj/structure/lattice/catwalk, /obj/structure/disposalpipe/down, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/open, /area/horizon/maintenance/deck_2/wing/starboard/near) "quC" = ( @@ -124600,7 +125896,7 @@ /obj/effect/floor_decal/industrial/hatch_door/engineering{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/storage/lower) "quS" = ( /obj/effect/floor_decal/industrial/warning, @@ -124676,7 +125972,7 @@ name = "Deck 2 Research Substation"; req_one_access = list(11,24) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/research) "qve" = ( /obj/structure/railing/mapped{ @@ -124740,7 +126036,10 @@ pixel_y = 3 }, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "qvD" = ( /obj/structure/machinery/light{ @@ -124888,7 +126187,7 @@ dir = 8 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/amidships) "qwU" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ @@ -124933,7 +126232,7 @@ pixel_x = 28; pixel_y = 12 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "qxm" = ( /obj/effect/floor_decal/corner/mauve/full{ @@ -125068,7 +126367,7 @@ }, /area/centcom/shared_dream) "qyg" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/maintenance_junk_or_loot, @@ -125110,7 +126409,7 @@ pixel_y = 32 }, /obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/floor_decal/industrial/outline/firefighting_closet, @@ -125157,6 +126456,9 @@ }, /obj/structure/machinery/atmospherics/pipe/simple/hidden, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) "qyQ" = ( @@ -125339,7 +126641,7 @@ }, /obj/structure/closet/crate/bin, /obj/random/loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/amidships) "qAF" = ( /turf/unsimulated/wall/darkshuttlewall, @@ -125465,7 +126767,8 @@ /obj/structure/cable/green{ icon_state = "1-2" }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/open, /area/horizon/medical/gen_treatment) "qBm" = ( /obj/structure/machinery/portable_atmospherics/hydroponics, @@ -125542,7 +126845,8 @@ "qBM" = ( /obj/random/junk, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/near) "qBN" = ( /obj/structure/flora/ausbushes/lavendergrass, @@ -125572,11 +126876,13 @@ }, /area/centcom/control) "qBY" = ( -/obj/effect/floor_decal/spline/fancy/wood{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/wood, -/area/horizon/service/bar) +/obj/random/maintenance_junk_or_loot, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/operations/starboard/far) "qBZ" = ( /turf/simulated/wall, /area/horizon/stairwell/port/deck_3) @@ -125620,24 +126926,30 @@ }, /area/tdome/tdomeobserve) "qCx" = ( +/obj/effect/floor_decal/corner/white{ + dir = 5 + }, /obj/structure/machinery/light/floor{ dir = 1 }, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_2/central) "qCy" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "qCB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, +/obj/structure/machinery/portable_atmospherics/powered/pump/filled, +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "qCN" = ( /obj/structure/bed/padded, /obj/item/bedsheet/blue, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/floor_decal/corner/dark_blue/full, @@ -125792,7 +127104,6 @@ icon_state = "1-2" }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "qDQ" = ( @@ -125857,6 +127168,9 @@ /obj/structure/machinery/computer/ship/navigation{ dir = 8 }, +/obj/structure/machinery/light{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/command/bridge/aibunker) "qEl" = ( @@ -126314,23 +127628,20 @@ c_tag = "Engineering - Deck 2 - Research Substation"; dir = 1 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/research) "qHn" = ( /obj/structure/closet/crate, -/obj/structure/railing/mapped{ - dir = 4 - }, /obj/random/loot, /obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1" }, -/obj/structure/railing/mapped{ - icon_state = "railing0-0" - }, /obj/random/med_stack, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "qHv" = ( /obj/effect/floor_decal/corner/brown{ @@ -126410,6 +127721,12 @@ "qHE" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, /area/horizon/maintenance/deck_1/atmos_crosser) +"qHG" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard) "qHI" = ( /turf/simulated/wall, /area/horizon/medical/main_storage) @@ -126474,18 +127791,12 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/port/far) "qIf" = ( -/obj/effect/floor_decal/corner_wide/blue{ - dir = 5 - }, -/obj/effect/floor_decal/corner_wide/yellow{ - dir = 10 - }, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/porta_turret/stationary, +/obj/effect/floor_decal/industrial/warning/full, /obj/structure/sign/nosmoking_1{ pixel_y = -32 }, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "qIg" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -126818,7 +128129,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/turf/simulated/floor/tiled, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "qKs" = ( /obj/structure/machinery/telepad, @@ -126853,10 +128165,12 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/elevator) "qKF" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/table/rack, +/obj/random/loot, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "qKM" = ( /obj/effect/floor_decal/industrial/outline/grey, @@ -127054,7 +128368,7 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos/air) "qLN" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/map_effect/marker/airlock{ @@ -127062,7 +128376,10 @@ master_tag = "airlock_horizon_deck_3_aft_1"; name = "airlock_horizon_deck_3_aft_1" }, -/turf/simulated/floor, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "qLO" = ( /obj/structure/railing/mapped, @@ -127084,7 +128401,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -127109,15 +128426,14 @@ /turf/simulated/floor/tiled/dark, /area/horizon/medical/gen_treatment) "qLX" = ( -/obj/structure/machinery/portable_atmospherics/canister/empty/air, -/obj/structure/window/reinforced{ - dir = 8 +/obj/effect/floor_decal/industrial/warning{ + dir = 6 }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/port/nacelle) +/obj/structure/table/reinforced, +/obj/item/screwdriver, +/obj/item/clothing/glasses/sunglasses, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "qMe" = ( /obj/structure/table/standard, /obj/effect/floor_decal/corner/dark_green/diagonal, @@ -127278,7 +128594,7 @@ name = "airlock_horizon_deck_2_aft_sm" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/supermatter/airlock) "qMR" = ( /obj/effect/floor_decal/spline/plain/black{ @@ -127674,6 +128990,10 @@ }, /turf/simulated/floor/tiled, /area/horizon/hangar/intrepid/interstitial) +"qQf" = ( +/obj/structure/machinery/light/small/floor, +/turf/simulated/floor/wood, +/area/horizon/service/mess_hall) "qQh" = ( /obj/structure/sign/greencross{ name = "Emergency Room" @@ -128044,7 +129364,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/starboard) "qSA" = ( /turf/unsimulated/wall/steel, @@ -128069,9 +129389,6 @@ /turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "qSL" = ( -/obj/structure/machinery/light/small{ - dir = 8 - }, /obj/effect/floor_decal/corner/dark_blue/full, /obj/structure/closet/walllocker/firecloset{ pixel_x = -32 @@ -128180,6 +129497,9 @@ /obj/random/loot, /obj/random/maintenance_junk_or_loot, /obj/random/contraband, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/central_ring) "qTs" = ( @@ -128230,9 +129550,7 @@ "qTR" = ( /obj/structure/table/rack, /obj/random/loot, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 - }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "qTS" = ( @@ -128323,7 +129641,7 @@ /turf/simulated/floor/holofloor/carpet, /area/horizon/holodeck/source_courtroom) "qUT" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/railing/mapped{ @@ -128413,7 +129731,7 @@ /obj/effect/floor_decal/industrial/outline_segment/yellow{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/tiled/dark, @@ -128470,7 +129788,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "qVF" = ( /obj/structure/cable/green{ @@ -128519,7 +129841,7 @@ /obj/effect/floor_decal/industrial/warning/cee{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/service/starboard) "qWc" = ( /turf/simulated/floor/tiled/dark/full, @@ -128553,7 +129875,8 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "qWk" = ( /turf/simulated/wall/shuttle/scc_space_ship/cardinal, @@ -128709,7 +130032,7 @@ }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/trash_pile, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/port/nacelle) "qXl" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/purple{ @@ -128853,7 +130176,7 @@ /turf/unsimulated/floor/plating, /area/centcom/specops) "qXJ" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/table/rack, @@ -129396,7 +130719,8 @@ /obj/structure/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "rbM" = ( /obj/structure/cable/green{ @@ -129423,7 +130747,7 @@ "rbW" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/greenglow, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -129668,7 +130992,6 @@ dir = 1 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "rdS" = ( @@ -129779,6 +131102,9 @@ /obj/item/material/stool/chair/folding/camping, /obj/item/material/stool/chair/folding/camping, /obj/item/wrench, +/obj/structure/machinery/light{ + dir = 8 + }, /turf/simulated/floor/wood, /area/horizon/rnd/xenoarch/presentation) "rer" = ( @@ -130186,10 +131512,13 @@ /turf/simulated/open, /area/horizon/medical/hallway/upper) "rhw" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/bed/stool/chair/padded/black, /obj/structure/machinery/alarm/north, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "rhx" = ( /obj/structure/machinery/conveyor{ @@ -130238,6 +131567,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "rhL" = ( @@ -130357,8 +131687,8 @@ /turf/simulated/floor/wood/maple, /area/horizon/holodeck/source_cafe) "rim" = ( -/obj/structure/lattice/catwalk/indoor, /obj/structure/railing/mapped, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/research) "rir" = ( @@ -130367,7 +131697,7 @@ /obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "riy" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -130456,7 +131786,7 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/storage_hard/upper) "riR" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -130475,19 +131805,22 @@ /turf/simulated/floor/plating, /area/horizon/shuttle/intrepid/port_compartment) "riV" = ( -/obj/structure/machinery/alarm/east, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/storage/secure/tech_vault) "rjd" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 }, -/turf/simulated/floor, -/area/horizon/maintenance/deck_3/aft/starboard/far) -"rjn" = ( -/obj/structure/railing/mapped{ +/obj/structure/platform_deco{ dir = 8 }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/wing/starboard/far) +"rjn" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/platform{ dir = 4 @@ -130574,6 +131907,9 @@ "rjI" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/main/starboard) "rjL" = ( @@ -130584,7 +131920,7 @@ /turf/simulated/floor/tiled, /area/horizon/operations/machinist) "rjP" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/cable/green{ icon_state = "4-8" }, @@ -130714,11 +132050,12 @@ /turf/simulated/wall, /area/horizon/maintenance/deck_3/aft/holodeck) "rkL" = ( -/obj/effect/floor_decal/corner/white{ - dir = 5 +/obj/effect/floor_decal/industrial/warning{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/horizon/hallway/primary/deck_2/central) +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/operations/starboard/far) "rkM" = ( /obj/effect/floor_decal/corner/mauve{ dir = 10 @@ -130820,7 +132157,7 @@ /obj/random/loot, /obj/random/loot, /obj/random/contraband, -/turf/simulated/floor/carpet/rubber, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/aft) "rlq" = ( /obj/effect/floor_decal/industrial/warning, @@ -130860,10 +132197,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/tiled/full, /area/horizon/rnd/hallway) "rlE" = ( @@ -130883,18 +132222,18 @@ /turf/simulated/floor/tiled/dark, /area/horizon/rnd/xenoarch/hallway/elevator) "rlF" = ( -/obj/effect/floor_decal/industrial/outline/grey, /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/loot, /obj/random/bomb_supply, /obj/random/bomb_supply, /obj/random/bomb_supply, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/closet/crate/tool, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port/shortcut) "rlJ" = ( /obj/effect/floor_decal/corner_wide/paleblue/diagonal{ @@ -131107,7 +132446,7 @@ req_one_access = list(12,31); name = "Deck 1 Starboard Primary Maintenance Conduit" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard) "rmy" = ( /obj/effect/floor_decal/spline/fancy/wood/corner, @@ -131212,7 +132551,7 @@ master_tag = "airlock_horizon_deck_2_aft_sm"; name = "airlock_horizon_deck_2_aft_sm" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/supermatter/airlock) "rmU" = ( /obj/effect/floor_decal/industrial/warning{ @@ -131417,7 +132756,7 @@ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/port/far) "roU" = ( @@ -131495,7 +132834,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "rps" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ @@ -131580,10 +132920,10 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/hallway/upper) "rpV" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 5 +/obj/effect/floor_decal/industrial/warning/cee{ + dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "rpY" = ( /obj/structure/cable/green{ @@ -131764,6 +133104,16 @@ }, /turf/unsimulated/floor/rubber_carpet, /area/centcom/specops) +"rqX" = ( +/obj/random/dirt_75, +/obj/structure/machinery/door/firedoor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/hatch_door/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/starboard) "rre" = ( /obj/effect/map_effect/window_spawner/full/reinforced/firedoor, /turf/simulated/floor/tiled/dark/full, @@ -131982,7 +133332,7 @@ dir = 4; req_one_access = list(12) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard) "rsr" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden{ @@ -132078,7 +133428,15 @@ /area/centcom/specops) "rti" = ( /obj/structure/machinery/atmospherics/pipe/manifold4w/visible, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/random/dirt_75, +/obj/random/dirt_75, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "rtj" = ( /obj/structure/machinery/door/firedoor/multi_tile, @@ -132157,7 +133515,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/reagent_dispensers/watertank, /obj/effect/floor_decal/industrial/warning{ dir = 1 @@ -132212,9 +133570,15 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos/turbine) "rtV" = ( -/obj/structure/machinery/atmospherics/pipe/simple/visible/universal, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning, +/obj/random/smalltank, +/obj/random/smalltank, +/obj/structure/table/rack, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "ruc" = ( /obj/structure/machinery/door/window/eastleft, @@ -132380,7 +133744,10 @@ /obj/item/material/shard{ icon_state = "medium" }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "rvl" = ( /obj/structure/railing/mapped{ @@ -132393,7 +133760,7 @@ dir = 1 }, /mob/living/silicon/robot/shell, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/ai/upload_foyer) "rvo" = ( /obj/structure/machinery/door/airlock/glass_command{ @@ -132404,8 +133771,12 @@ /area/shuttle/hapt) "rvs" = ( /obj/effect/floor_decal/industrial/outline/yellow, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/table/rack, +/obj/random/smalltank, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "rvy" = ( /turf/simulated/floor/shuttle/dark_red, @@ -132521,12 +133892,12 @@ /area/horizon/medical/ward) "rwq" = ( /obj/structure/trash_pile, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "rws" = ( /obj/random/dirt_75, /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "rwv" = ( @@ -132539,10 +133910,10 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 +/obj/effect/floor_decal/corner/dark_blue{ + dir = 9 }, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/chamber) "rwJ" = ( /obj/effect/landmark/entry_point/aft{ @@ -132626,7 +133997,7 @@ /area/centcom/legion/hangar5) "rxo" = ( /obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/unsimulated/floor/plating, /area/centcom/specops) "rxp" = ( @@ -132695,7 +134066,7 @@ /area/horizon/security/office) "rxL" = ( /obj/random/keg, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "rxO" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -133052,12 +134423,15 @@ /obj/structure/machinery/door/airlock/maintenance{ req_one_access = list(5,10,12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "rzO" = ( /obj/random/junk, /obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "rzW" = ( /obj/effect/map_effect/window_spawner/full/reinforced/indestructible, @@ -133110,7 +134484,7 @@ /obj/structure/machinery/access_button{ pixel_x = -28 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "rAr" = ( /obj/effect/floor_decal/corner/dark_blue{ @@ -133313,6 +134687,14 @@ "rBJ" = ( /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/indra/smes) +"rBO" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/random/maintenance_junk_or_loot, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/wing/port/far) "rBT" = ( /obj/structure/cable{ icon_state = "1-2" @@ -133320,7 +134702,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -133440,7 +134822,8 @@ c_tag = "Engineering - Deck 1 - Atmospherics Substation"; dir = 1 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering/lower) "rDi" = ( @@ -133520,8 +134903,10 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "rDL" = ( /obj/effect/floor_decal/spline/plain/corner, @@ -133530,6 +134915,7 @@ "rDN" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "rDS" = ( @@ -133560,9 +134946,16 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard/docks) "rEc" = ( -/obj/structure/foamedmetal, -/turf/simulated/floor/plating, -/area/horizon/exterior) +/obj/effect/floor_decal/industrial/outline/grey, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table/rack, +/obj/random/tool, +/obj/random/tech_supply, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/main/port) "rEd" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -133668,7 +135061,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/effect/decal/cleanable/dirt, /turf/unsimulated/floor, /area/antag/jockey) @@ -133765,7 +135158,7 @@ }, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "rFo" = ( /obj/structure/shuttle/engine/propulsion/burst/right{ @@ -133797,7 +135190,7 @@ /area/horizon/operations/ship_supply_warehouse) "rFB" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -133915,6 +135308,7 @@ /obj/structure/engineer_maintenance/electric{ dir = 8 }, +/obj/structure/machinery/light/floor, /turf/simulated/floor/tiled/dark, /area/horizon/command/bridge/aibunker) "rGs" = ( @@ -134134,7 +135528,7 @@ /area/horizon/command/heads/rd) "rHt" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "rHz" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -134420,7 +135814,8 @@ "rJP" = ( /obj/random/dirt_75, /obj/structure/trash_pile, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "rJR" = ( /obj/structure/machinery/firealarm/south, @@ -134733,7 +136128,7 @@ name = "airlock_horizon_deck_1_fore_1" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/hangar/starboard) "rLY" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -134768,17 +136163,13 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/medical/reception) "rMc" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/light/small{ - dir = 8 - }, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/disposalpipe/segment, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, -/area/horizon/engineering/storage/lower) +/area/horizon/operations/machinist) "rMe" = ( /obj/structure/window/shuttle/scc_space_ship, /obj/structure/grille, @@ -134805,13 +136196,12 @@ /turf/simulated/floor/plating, /area/horizon/command/bridge/controlroom) "rMf" = ( -/obj/structure/machinery/door/window{ - dir = 1 - }, /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 6 }, -/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor, /area/horizon/hallway/primary/deck_3/port/docks) "rMj" = ( @@ -135236,17 +136626,16 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_2/central) "rOO" = ( -/obj/effect/floor_decal/corner/dark_blue/full{ - dir = 4 - }, -/obj/structure/machinery/light{ - dir = 4 - }, -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/structure/machinery/atmospherics/portables_connector{ dir = 8 }, -/turf/simulated/floor/tiled/dark, -/area/horizon/ai/upload_foyer) +/obj/structure/machinery/portable_atmospherics/canister/air/airlock, +/obj/effect/floor_decal/industrial/outline/red, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/starboard/near) "rOR" = ( /obj/structure/railing/mapped{ dir = 8 @@ -135308,7 +136697,9 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos) "rPb" = ( @@ -135418,7 +136809,7 @@ /obj/structure/machinery/door/firedoor{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/medical) "rPH" = ( /obj/structure/machinery/door/blast/odin/shuttle/tcfl/shutter{ @@ -135431,10 +136822,10 @@ /obj/effect/floor_decal/industrial/warning{ dir = 10 }, -/obj/structure/machinery/power/apc/low/north, /obj/structure/cable/green{ icon_state = "0-2" }, +/obj/structure/machinery/power/apc/north, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "rPP" = ( @@ -135464,7 +136855,7 @@ icon_state = "0-4" }, /obj/structure/machinery/power/apc/low/west, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/teleporter) "rPW" = ( /obj/effect/decal/fake_object{ @@ -135595,7 +136986,7 @@ /obj/structure/disposalpipe/segment{ icon_state = "pipe-c" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/cable{ @@ -135688,7 +137079,7 @@ /obj/effect/landmark{ name = "Revenant" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "rRE" = ( /obj/structure/machinery/camera/network/engineering{ @@ -135699,12 +137090,12 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_port) "rRL" = ( /obj/structure/table/wood/gamblingtable, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "rRO" = ( @@ -135807,10 +137198,10 @@ /obj/structure/cable/green{ icon_state = "0-8" }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 +/obj/effect/floor_decal/industrial/warning{ + dir = 8 }, +/turf/simulated/floor, /area/horizon/ai/chamber) "rSo" = ( /obj/effect/floor_decal/industrial/warning{ @@ -135840,6 +137231,9 @@ "rSt" = ( /obj/effect/floor_decal/corner/pink/diagonal, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "rSu" = ( @@ -135935,9 +137329,13 @@ "rST" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/alarm/west, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "rSV" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "rTf" = ( @@ -136003,9 +137401,13 @@ /turf/unsimulated/floor, /area/antag/raider) "rTp" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/aft) +/obj/random/dirt_75, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/nacelle) "rTt" = ( /obj/structure/machinery/vending/tool, /obj/effect/floor_decal/corner/dark_green{ @@ -136313,10 +137715,13 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/storage_hard/lower) "rUY" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "rVa" = ( /obj/effect/floor_decal/spline/plain/corner{ @@ -136327,6 +137732,9 @@ "rVc" = ( /obj/effect/floor_decal/corner_wide/yellow/diagonal, /obj/structure/reagent_dispensers/water_cooler, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/break_room) "rVj" = ( @@ -136341,7 +137749,10 @@ pixel_x = -11 }, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "rVn" = ( /obj/structure/cable{ @@ -136659,14 +138070,12 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/railing/mapped{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/disposalpipe/segment, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "rXH" = ( @@ -136716,7 +138125,9 @@ /obj/effect/floor_decal/corner_wide/yellow{ dir = 5 }, -/obj/structure/machinery/alarm/north, +/obj/structure/machinery/light{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/horizon/engineering/hallway/aft) "rXX" = ( @@ -136742,11 +138153,12 @@ /turf/simulated/floor/wood, /area/horizon/service/mess_hall) "rYe" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard) "rYf" = ( @@ -136828,6 +138240,9 @@ input_level = 50000; output_level = 45000 }, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/central_ring) "rYP" = ( @@ -136846,7 +138261,13 @@ /obj/structure/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/sign/air_station{ + pixel_y = 32 + }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "rYW" = ( /turf/simulated/wall/shuttle/unique/tcfl{ @@ -136883,7 +138304,7 @@ /obj/item/modular_computer/console/preset/engineering{ dir = 8 }, -/obj/structure/machinery/light{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/tiled/dark/full, @@ -136948,7 +138369,8 @@ master_tag = "airlock_horizon_dock_deck_3_port_5"; name = "airlock_horizon_dock_deck_3_port_5" }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor/grate, +/turf/simulated/floor, /area/horizon/hallway/primary/deck_3/port/docks) "rZw" = ( /obj/structure/cable/green{ @@ -137074,11 +138496,14 @@ /area/horizon/repoffice/consular_one) "sam" = ( /obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "san" = ( /obj/random/junk, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "saD" = ( /obj/effect/floor_decal/industrial/warning{ @@ -137089,7 +138514,7 @@ name = "\improper CAUTION: HEAVY MACHINERY IN USE sign"; pixel_y = 32 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "saG" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -137122,6 +138547,15 @@ /obj/structure/table/rack, /turf/unsimulated/floor, /area/centcom/legion/hangar5) +"sbd" = ( +/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 8 + }, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/redgrid, +/area/horizon/command/bridge/selfdestruct) "sbk" = ( /obj/structure/machinery/alarm/tcom/north, /obj/effect/floor_decal/spline/plain/black{ @@ -137165,7 +138599,15 @@ dir = 5 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/random/smalltank, +/obj/structure/table/rack, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "sbD" = ( /obj/effect/floor_decal/industrial/outline/yellow, @@ -137409,7 +138851,7 @@ }, /obj/structure/machinery/portable_atmospherics/canister/air/airlock, /obj/effect/floor_decal/industrial/outline/red, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/near) "sdr" = ( /obj/structure/machinery/door/firedoor{ @@ -137630,8 +139072,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/light/small/emergency, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "sfe" = ( /obj/structure/cable/green{ @@ -137910,7 +139353,7 @@ /turf/simulated/floor/plating, /area/horizon/hallway/primary/deck_2/starboard) "sgB" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/effect/floor_decal/industrial/warning/corner{ dir = 4 }, @@ -137936,6 +139379,7 @@ /area/shuttle/skipjack) "sgF" = ( /obj/item/stack/rods, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "sgH" = ( @@ -137999,6 +139443,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/horizon/storage/primary) +"sha" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/item/material/shard, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/main/port) "shc" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -138033,7 +139482,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -138143,6 +139592,7 @@ pixel_x = 20; pixel_y = 6 }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/hallway/primary/deck_3/starboard/docks) "shJ" = ( @@ -138348,6 +139798,7 @@ name = "airlock_horizon_deck_3_aft_1"; frequency = 1001 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "siA" = ( @@ -138381,8 +139832,6 @@ dir = 8 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "siM" = ( @@ -138503,12 +139952,11 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/telesci) "sjz" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/industrial/warning{ - dir = 8 + dir = 4 }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/wing/starboard/far) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "sjA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -138827,7 +140275,7 @@ /area/horizon/crew/vacantoffice) "slR" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -139043,9 +140491,8 @@ /obj/structure/window/reinforced, /obj/effect/floor_decal/industrial/outline/emergency_closet, /obj/structure/closet/emcloset, -/obj/structure/machinery/light/spot{ - dir = 4; - must_start_working = 1 +/obj/structure/machinery/light{ + dir = 4 }, /turf/simulated/floor/tiled/dark, /area/horizon/holodeck_control) @@ -139138,7 +140585,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "snH" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -139275,7 +140722,7 @@ dir = 1; req_one_access = list(5,12) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/holodeck) "spd" = ( /obj/effect/floor_decal/corner/purple{ @@ -139298,6 +140745,7 @@ icon_state = "1-8" }, /obj/structure/machinery/alarm/east, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/hangar) "sph" = ( @@ -139342,7 +140790,7 @@ pixel_x = 28; pixel_y = 12 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "spE" = ( /turf/simulated/wall, @@ -139422,8 +140870,11 @@ /turf/simulated/floor/plating, /area/horizon/medical/reception) "sqM" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port/shortcut) "sqP" = ( /obj/structure/table/steel, @@ -139432,6 +140883,13 @@ }, /turf/simulated/floor/shuttle/black, /area/shuttle/hapt) +"sqS" = ( +/obj/effect/floor_decal/corner/brown{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/wing/starboard/far) "sqT" = ( /obj/effect/floor_decal/corner/teal{ dir = 10 @@ -139581,7 +141039,7 @@ dir = 4 }, /obj/structure/trash_pile, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/cargo_compartment) "ssd" = ( @@ -139775,7 +141233,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "ssL" = ( /obj/effect/floor_decal/corner/dark_blue/full{ @@ -139804,8 +141263,9 @@ }, /area/centcom/ferry) "std" = ( -/turf/simulated/floor, -/area/horizon/maintenance/deck_2/wing/port/far) +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/main/port/shortcut) "stp" = ( /obj/structure/table/standard{ no_cargo = 1 @@ -140090,7 +141550,7 @@ pixel_x = 32; req_one_access = list(12,31,73,76,77,78) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/quark/cargo_hold) "svw" = ( /obj/structure/cable/green{ @@ -140129,7 +141589,7 @@ /area/horizon/security/office) "svM" = ( /obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/canister/restricted, @@ -140236,9 +141696,6 @@ /turf/unsimulated/floor/plating, /area/centcom/legion) "swm" = ( -/obj/structure/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, /obj/structure/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{ dir = 8; frequency = 1380; @@ -140277,7 +141734,7 @@ /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/central) "sws" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/effect/map_effect/marker/airlock/docking{ @@ -140285,14 +141742,15 @@ master_tag = "airlock_horizon_dock_deck_3_port_4"; name = "airlock_horizon_dock_deck_3_port_4" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/port/docks) "swt" = ( /obj/structure/railing/mapped, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, -/obj/structure/lattice/catwalk/indoor, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/research) "swu" = ( @@ -140367,6 +141825,7 @@ master_tag = "airlock_horizon_deck_2_port_1"; name = "airlock_horizon_deck_2_port_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "swT" = ( @@ -140390,6 +141849,14 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/horizon/command/heads/xo) +"swW" = ( +/obj/random/maintenance_junk_or_loot, +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard) "swX" = ( /obj/structure/railing/mapped, /obj/structure/platform/ledge{ @@ -140466,13 +141933,10 @@ }, /area/centcom/control) "sxq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/railing/mapped{ +/obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/tiled/ramp/bottom{ - dir = 4 - }, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "sxz" = ( /obj/structure/table/standard, @@ -140529,6 +141993,13 @@ /obj/effect/floor_decal/industrial/warning/full, /turf/unsimulated/floor, /area/centcom/control) +"sxQ" = ( +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port/far) "sxS" = ( /turf/simulated/floor/wood, /area/horizon/command/heads/rd) @@ -140655,13 +142126,14 @@ /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/junk, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "syv" = ( /obj/effect/floor_decal/industrial/warning/cee{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "syK" = ( /obj/effect/landmark/entry_point/starboard{ @@ -140746,7 +142218,7 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/tiled/dark/cooled, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/upload) "syZ" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -140876,7 +142348,7 @@ dir = 4; req_one_access = list(5,12) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/starboard/far) "szR" = ( /turf/simulated/wall/r_wall, @@ -140950,6 +142422,9 @@ pixel_x = -6 }, /obj/random/contraband, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/starboard/far) "sAx" = ( @@ -141002,7 +142477,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/dirt_75, @@ -141013,7 +142488,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/maintenance_junk_or_loot, @@ -141269,16 +142744,16 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/canary) "sBT" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/obj/structure/railing/mapped{ - dir = 8 - }, /obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "sBV" = ( /obj/structure/table/wood/gamblingtable, @@ -141350,7 +142825,10 @@ /obj/structure/reagent_dispensers/watertank, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "sCr" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -141488,8 +142966,11 @@ /area/horizon/rnd/conference) "sDi" = ( /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard) "sDk" = ( /obj/structure/machinery/atmospherics/pipe/manifold/hidden, @@ -141498,7 +142979,7 @@ master_tag = "airlock_horizon_deck_3_fore_starboard_1"; name = "airlock_horizon_deck_3_fore_starboard_1" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/crewlounge) "sDo" = ( /obj/structure/disposalpipe/segment, @@ -141533,6 +143014,12 @@ /obj/structure/machinery/firealarm/south, /turf/simulated/floor/tiled/dark, /area/horizon/rnd/xenoarch/hallway/elevator) +"sDx" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port) "sDz" = ( /obj/structure/machinery/door/airlock/external{ dir = 4; @@ -141596,7 +143083,7 @@ /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "sDM" = ( /obj/structure/machinery/door/firedoor, @@ -141635,6 +143122,9 @@ }, /obj/random/loot, /obj/random/contraband, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/port) "sDU" = ( @@ -141754,6 +143244,7 @@ /obj/effect/decal/cleanable/dirt, /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "sES" = ( @@ -141994,13 +143485,11 @@ /turf/simulated/floor/plating, /area/horizon/security/evidence_storage) "sGD" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/near) "sGF" = ( /obj/effect/floor_decal/corner/lime{ @@ -142148,10 +143637,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/railing/mapped, /obj/structure/closet, /obj/random/loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "sHz" = ( /turf/simulated/floor/tiled/dark, @@ -142253,6 +143741,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "sIl" = ( @@ -142310,7 +143799,7 @@ /obj/random/junk, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port) "sIQ" = ( /obj/effect/floor_decal/industrial/warning{ @@ -142360,7 +143849,7 @@ welded = 1 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/central_ring) "sJm" = ( /obj/structure/cable/green{ @@ -142466,7 +143955,10 @@ /obj/structure/machinery/light/small, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "sJY" = ( /obj/structure/bed/stool/padded, @@ -142626,9 +144118,14 @@ }, /area/centcom/legion/hangar5) "sLa" = ( -/obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown{ + dir = 6 + }, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "sLf" = ( /obj/structure/table/reinforced/wood, @@ -142766,6 +144263,7 @@ /obj/effect/floor_decal/corner/dark_blue{ dir = 4 }, +/obj/structure/machinery/light/floor, /turf/simulated/floor/tiled/dark, /area/horizon/command/bridge/controlroom) "sLT" = ( @@ -142824,7 +144322,10 @@ "sMp" = ( /obj/random/maintenance_junk_or_loot, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "sMw" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -143432,6 +144933,9 @@ dir = 4 }, /obj/structure/machinery/disposal/small/east, +/obj/structure/machinery/light/floor{ + dir = 8 + }, /turf/simulated/floor/tiled/full, /area/horizon/command/bridge/upperdeck) "sQG" = ( @@ -143549,7 +145053,7 @@ req_access = list(63) }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/security/firing_range) "sRv" = ( /obj/structure/machinery/vending/zora{ @@ -143786,7 +145290,7 @@ /obj/structure/machinery/door/airlock/maintenance_hatch{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "sSD" = ( /obj/structure/machinery/door/blast/shutters{ @@ -143818,7 +145322,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/port) "sSL" = ( @@ -143853,7 +145357,7 @@ /area/horizon/engineering/atmos/air) "sTe" = ( /obj/effect/decal/cleanable/cobweb, -/obj/random/dirt_75, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard/far) "sTh" = ( @@ -144191,14 +145695,18 @@ dir = 1 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "sWx" = ( /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "sWC" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -144491,6 +145999,14 @@ /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) +"sYd" = ( +/obj/random/dirt_75, +/obj/random/dirt_75, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/nacelle) "sYf" = ( /obj/effect/decal/fake_object/light_source/invisible, /turf/unsimulated/floor/rubber_carpet, @@ -144534,7 +146050,7 @@ /turf/simulated/floor/tiled/white, /area/horizon/service/kitchen) "sYx" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/map_effect/marker/airlock{ @@ -144542,7 +146058,7 @@ master_tag = "airlock_horizon_deck_2_port_1"; name = "airlock_horizon_deck_2_port_1" }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "sYE" = ( /obj/structure/shuttle_part/ert{ @@ -144560,7 +146076,7 @@ dir = 8 }, /obj/structure/trash_pile, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/amidships) "sYJ" = ( /obj/effect/floor_decal/corner/green{ @@ -144647,7 +146163,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_2"; name = "airlock_horizon_dock_deck_3_starboard_2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "sZm" = ( /obj/structure/machinery/embedded_controller/radio/simple_docking_controller{ @@ -144681,7 +146197,6 @@ /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "sZy" = ( /obj/effect/decal/cleanable/spiderling_remains, -/obj/structure/machinery/light/small/emergency, /turf/simulated/floor/carpet/rubber, /area/horizon/maintenance/deck_1/workshop) "sZz" = ( @@ -144839,7 +146354,7 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "taQ" = ( /obj/effect/floor_decal/corner/dark_green{ @@ -144879,7 +146394,7 @@ /area/horizon/maintenance/deck_1/wing/starboard/far) "tbc" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -144912,6 +146427,18 @@ }, /turf/simulated/open, /area/horizon/maintenance/deck_2/main/starboard) +"tbR" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/main/starboard) "tbT" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -144970,7 +146497,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 10 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/holodeck) "tcr" = ( /obj/structure/tank_wall/oxygen{ @@ -144992,12 +146519,10 @@ /turf/simulated/floor/tiled/gunmetal/full, /area/horizon/operations/ship_supply_warehouse) "tcA" = ( -/obj/structure/cable/green{ - icon_state = "4-8" - }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/main/starboard) +/obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_2/wing/port) "tcB" = ( /obj/effect/floor_decal/corner_wide/lime/diagonal, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -145111,14 +146636,14 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, /obj/structure/machinery/power/apc/west, /obj/structure/cable/green{ icon_state = "0-2" }, /obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/main/starboard) "tdm" = ( @@ -145352,6 +146877,9 @@ /area/horizon/engineering/storage/tech) "teO" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "teR" = ( @@ -145411,7 +146939,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled, /area/horizon/maintenance/deck_2/wing/port/nacelle) "tfs" = ( /obj/effect/floor_decal/industrial/hatch_door/red, @@ -145471,7 +146999,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "tfC" = ( /turf/simulated/floor/wood, @@ -145528,7 +147056,7 @@ name = "Deck 2 Starboard Wingframe"; req_one_access = list(12,31,67) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "tfX" = ( /obj/structure/machinery/light/floor{ @@ -145555,12 +147083,23 @@ /obj/structure/closet/crate, /obj/random/contraband, /obj/random/loot, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "tgj" = ( /obj/structure/machinery/suit_cycler/freelancer, /turf/unsimulated/floor, /area/centcom/distress_prep) +"tgl" = ( +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard) "tgm" = ( /obj/structure/railing/mapped{ dir = 8 @@ -145926,11 +147465,10 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/auxatmos) "tim" = ( -/obj/random/dirt_75, -/obj/random/dirt_75, /obj/item/stack/material/steel{ amount = 10 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "tis" = ( @@ -146148,8 +147686,10 @@ "tkj" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "tkk" = ( /turf/simulated/floor/shuttle/dark_blue, @@ -146625,7 +148165,7 @@ }, /obj/effect/map_effect/marker_helper/airlock/interior, /obj/structure/machinery/atmospherics/pipe/simple/hidden/aux, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/quark/cargo_hold) "tna" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/purple{ @@ -146634,9 +148174,6 @@ /turf/space, /area/horizon/exterior) "tne" = ( -/obj/structure/machinery/light/small/emergency{ - dir = 8 - }, /obj/structure/cable{ icon_state = "0-8" }, @@ -146646,6 +148183,7 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/xenoarchaeology) "tng" = ( @@ -146666,7 +148204,7 @@ /obj/structure/machinery/computer/drone_control{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "tnj" = ( /obj/structure/disposalpipe/segment{ @@ -146696,7 +148234,8 @@ "tnn" = ( /obj/structure/machinery/atmospherics/pipe/manifold4w/visible, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "tno" = ( /obj/structure/machinery/light{ @@ -146775,6 +148314,7 @@ frequency = 1109; req_one_access = list(19) }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/ai/upload_foyer) "tnL" = ( @@ -146800,6 +148340,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, +/obj/structure/machinery/light{ + dir = 8 + }, /turf/simulated/floor/reinforced, /area/horizon/weapons/grauwolf) "tnV" = ( @@ -146863,13 +148406,14 @@ master_tag = "airlock_horizon_deck_3_fore_starboard_1"; name = "airlock_horizon_deck_3_fore_starboard_1" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/machinery/embedded_controller/radio/airlock/airlock_controller{ dir = 4; pixel_x = -20 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_3/crewlounge) "tos" = ( @@ -146898,7 +148442,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard) "toJ" = ( /obj/structure/machinery/atmospherics/unary/vent_pump/on, @@ -147018,7 +148562,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "tpX" = ( /obj/structure/disposalpipe/segment, @@ -147250,7 +148794,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "tqZ" = ( /obj/structure/sign/flag/scc, @@ -147287,14 +148831,14 @@ /area/horizon/rnd/xenoarch/storage) "trh" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/port/far) "trj" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -147429,10 +148973,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/visible/purple{ dir = 9 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "trS" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{ @@ -147455,6 +149000,7 @@ id_tag = "merchant_shuttle_dock_sensor"; pixel_x = -27 }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/security/checkpoint2) "trU" = ( @@ -147672,7 +149218,10 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "ttB" = ( /obj/effect/overlay/palmtree_r, @@ -147901,15 +149450,10 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "tvn" = ( -/obj/structure/railing/mapped{ - pixel_y = -5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/material/shard{ - icon_state = "small" - }, +/obj/random/maintenance_junk_or_loot, +/obj/structure/railing/mapped, /turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/main/starboard) +/area/horizon/maintenance/deck_1/operations/starboard) "tvp" = ( /obj/structure/shuttle_part/scc/scout{ icon_state = "7,9" @@ -148092,7 +149636,7 @@ /obj/item/material/folding_table, /obj/item/material/stool/chair/folding, /obj/item/material/stool/chair/folding, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "twp" = ( /obj/structure/machinery/alarm/east, @@ -148258,7 +149802,8 @@ "txy" = ( /obj/structure/machinery/light/small, /obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "txz" = ( /obj/effect/floor_decal/corner/green/full{ @@ -148276,7 +149821,11 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/turf/simulated/floor/tiled/dark/full, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/machinery/light/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/storage/secure/tech_vault) "txD" = ( /obj/structure/disposalpipe/segment, @@ -148882,9 +150431,6 @@ pixel_x = 6; pixel_y = -6 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/item/pipe{ pixel_x = 10; pixel_y = -2 @@ -148901,7 +150447,7 @@ pixel_x = -5; pixel_y = -3 }, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "tBz" = ( /obj/structure/machinery/alarm/east, @@ -149114,7 +150660,11 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/material/shard{ + icon_state = "small" + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "tDj" = ( /obj/structure/machinery/computer/shuttle_control/lift{ @@ -149140,7 +150690,7 @@ dir = 1 }, /obj/effect/floor_decal/industrial/warning, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/service/starboard) "tDr" = ( /obj/structure/cable/green{ @@ -149228,6 +150778,15 @@ }, /turf/unsimulated/floor, /area/centcom/spawning) +"tDV" = ( +/obj/structure/cable/green{ + icon_state = "1-2" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/starboard/near) "tDZ" = ( /obj/effect/floor_decal/corner/dark_blue{ dir = 6 @@ -149256,10 +150815,10 @@ /turf/simulated/floor/tiled, /area/horizon/crew/resdeck/living_quarters_lift) "tEj" = ( -/obj/structure/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/effect/floor_decal/corner_wide/blue{ + dir = 5 }, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/tiled/dark, /area/horizon/storage/secure/tech_vault) "tEl" = ( /obj/effect/floor_decal/industrial/warning, @@ -149270,9 +150829,7 @@ /turf/simulated/floor/tiled/dark/full/airless, /area/horizon/command/bridge/controlroom) "tEm" = ( -/obj/structure/machinery/anti_bluespace, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/redgrid, /area/horizon/command/bridge/selfdestruct) "tEq" = ( /turf/simulated/floor/exoplanet/water/shallow{ @@ -149354,7 +150911,7 @@ dir = 4; name = "Deck 2 Starboard Wingframe" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard) "tEP" = ( /obj/structure/plasticflaps/mining, @@ -149371,9 +150928,14 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/lab) "tEX" = ( -/obj/effect/floor_decal/industrial/warning, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "tFe" = ( /obj/effect/floor_decal/corner/red/diagonal, @@ -149555,7 +151117,7 @@ dir = 4; req_one_access = list(12,19) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port) "tFV" = ( /obj/effect/floor_decal/corner/paleblue/full{ @@ -149797,7 +151359,7 @@ /turf/simulated/floor/reinforced/airless, /area/horizon/exterior) "tHh" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{ @@ -149818,6 +151380,7 @@ master_tag = "airlock_horizon_deck_2_aft_indra"; name = "airlock_horizon_deck_2_aft_indra" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/engineering/aft_airlock) "tHj" = ( @@ -149854,10 +151417,16 @@ /area/horizon/holodeck/source_desert) "tHq" = ( /obj/effect/floor_decal/corner/dark_blue/diagonal, +/obj/structure/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/ai/upload_foyer) "tHu" = ( /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/cryo) "tHw" = ( @@ -150157,7 +151726,7 @@ dir = 4; req_one_access = list(12,19) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port/far) "tKa" = ( /obj/structure/machinery/vending/wallmed1{ @@ -150176,7 +151745,7 @@ "tKb" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/structure/closet/secure_closet/refrigerator/cafe, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/cafe) "tKc" = ( /obj/effect/decal/cleanable/dirt, @@ -150226,24 +151795,15 @@ /turf/simulated/open, /area/horizon/medical/gen_treatment) "tKq" = ( -/obj/structure/railing/mapped{ - dir = 4 - }, -/obj/structure/railing/mapped{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/structure/platform, +/obj/structure/machinery/portable_atmospherics/canister/air/warm, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "tKs" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "tKu" = ( /obj/structure/cable/green{ @@ -150277,7 +151837,10 @@ dir = 4 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "tKA" = ( /obj/effect/decal/fake_object{ @@ -150401,6 +151964,7 @@ master_tag = "airlock_horizon_deck_2_starboard_aft"; name = "airlock_horizon_deck_2_starboard_aft" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) "tLr" = ( @@ -150435,7 +151999,7 @@ pixel_y = -28 }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/aft_airlock) "tLB" = ( /obj/structure/machinery/light{ @@ -150500,7 +152064,7 @@ /obj/structure/machinery/door/airlock/maintenance_hatch{ dir = 4 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "tMs" = ( /obj/structure/closet/secure_closet/medical3, @@ -150784,7 +152348,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "tOT" = ( /obj/structure/flora/ausbushes/sparsegrass, @@ -150796,12 +152360,11 @@ /turf/simulated/floor/grass/no_edge, /area/horizon/hallway/primary/deck_2/fore) "tOX" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "tOZ" = ( /obj/structure/machinery/atmospherics/binary/pump{ @@ -150983,7 +152546,7 @@ /obj/structure/cable/green{ icon_state = "4-8" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/dirt_75, @@ -151071,6 +152634,7 @@ /obj/structure/machinery/light/small/red{ dir = 4 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/shuttle/quark/cargo_hold) "tRk" = ( @@ -151143,7 +152707,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/aux, /obj/structure/machinery/atmospherics/pipe/simple/hidden/fuel, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -151315,7 +152879,7 @@ /obj/effect/decal/cleanable/cobweb2, /obj/random/smokable, /obj/random/smokable, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "tTb" = ( /obj/structure/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -151395,6 +152959,15 @@ }, /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/xenoarch/atrium) +"tTJ" = ( +/obj/effect/floor_decal/corner/brown{ + dir = 5 + }, +/obj/structure/machinery/light/floor{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/horizon/operations/office) "tTQ" = ( /obj/structure/machinery/button/remote/blast_door{ dir = 1; @@ -151478,6 +153051,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "tUJ" = ( @@ -151522,8 +153098,7 @@ dir = 1 }, /obj/effect/floor_decal/industrial/warning, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/service/starboard) "tUS" = ( /obj/effect/floor_decal/industrial/warning, @@ -151531,7 +153106,7 @@ /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port) "tUW" = ( /obj/structure/machinery/telecomms/processor/preset_one, @@ -151587,7 +153162,7 @@ }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/disposalpipe/segment, @@ -151607,6 +153182,9 @@ dir = 1; pixel_y = 22 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "tVm" = ( @@ -151679,6 +153257,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/railing/mapped, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/far) "tVV" = ( @@ -151799,7 +153378,7 @@ dir = 4 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "tWV" = ( /obj/structure/cable/green{ @@ -151820,7 +153399,7 @@ "tWX" = ( /obj/random/maintenance_junk_or_loot, /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/structure/table/rack, @@ -151844,7 +153423,10 @@ /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/research) "tXd" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -151869,7 +153451,7 @@ name = "Research Maintenance"; req_one_access = list(12) }, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/far) "tXi" = ( /obj/effect/floor_decal/industrial/warning{ @@ -152013,12 +153595,13 @@ }, /area/centcom/control) "tYc" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "tYe" = ( @@ -152451,7 +154034,7 @@ dir = 4; req_one_access = list(12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port/shortcut) "ubD" = ( /obj/effect/floor_decal/industrial/warning{ @@ -152517,10 +154100,13 @@ /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "ubX" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "ubZ" = ( @@ -152940,11 +154526,11 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/central_ring) "ufx" = ( -/obj/effect/floor_decal/industrial/outline/grey, -/obj/structure/railing/mapped, -/obj/random/canister/restricted, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/near) +/area/horizon/maintenance/deck_2/wing/starboard) "ufG" = ( /obj/structure/bed/stool/chair/padded/black{ dir = 4 @@ -153089,7 +154675,10 @@ /area/horizon/security/washroom) "ugu" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "ugF" = ( /obj/structure/grille, @@ -153245,7 +154834,7 @@ /obj/structure/railing/mapped{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "uhu" = ( /obj/effect/floor_decal/corner/red{ @@ -153387,7 +154976,7 @@ /area/antag/mercenary) "uiw" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor, @@ -153475,7 +155064,7 @@ dir = 1 }, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "uiN" = ( /obj/structure/bed/stool/chair/sofa/right/brown, @@ -153667,7 +155256,7 @@ }, /obj/structure/table/rack, /obj/random/dirt_75, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port) "ujU" = ( /obj/effect/floor_decal/industrial/warning{ @@ -153761,7 +155350,7 @@ "ukq" = ( /obj/random/junk, /obj/effect/floor_decal/industrial/warning{ - dir = 1 + dir = 9 }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) @@ -153770,7 +155359,7 @@ dir = 6 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "ukx" = ( /obj/structure/platform_stairs/full{ @@ -153794,7 +155383,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_2"; name = "airlock_horizon_dock_deck_3_starboard_2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/starboard/docks) "ukI" = ( /obj/structure/machinery/portable_atmospherics/hydroponics, @@ -153871,6 +155460,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/indra/mainchamber) "ulh" = ( @@ -153977,6 +155569,7 @@ icon_state = "0-4" }, /obj/structure/machinery/power/apc/low/west, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/research) "umh" = ( @@ -154083,6 +155676,12 @@ icon_state = "white" }, /area/tdome/tdomeadmin) +"umG" = ( +/obj/effect/floor_decal/corner/white{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/horizon/hallway/primary/deck_2/central) "umM" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ dir = 1 @@ -154156,7 +155755,7 @@ dir = 4; req_access = list(12) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/auxatmos) "uns" = ( /obj/structure/shuttle_part/scc_space_ship{ @@ -154326,7 +155925,7 @@ req_one_access = list(24,11,67,73); dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "uoP" = ( /obj/effect/floor_decal/corner/beige/diagonal, @@ -154413,14 +156012,12 @@ /area/horizon/command/bridge/cciaroom) "upp" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 1 - }, /obj/structure/cable/green{ icon_state = "1-2" }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "upx" = ( @@ -154669,7 +156266,7 @@ }, /obj/random/dirt_75, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "uqT" = ( /obj/effect/floor_decal/spline/fancy/wood{ @@ -154714,10 +156311,7 @@ pixel_y = 25; req_access = list(16) }, -/turf/simulated/floor/bluegrid{ - name = "cooled mainframe floor"; - temperature = 278 - }, +/turf/simulated/floor/bluegrid, /area/horizon/ai/chamber) "ura" = ( /obj/effect/floor_decal/corner/mauve{ @@ -154885,7 +156479,7 @@ pixel_x = 2; pixel_y = 5 }, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "urV" = ( /obj/structure/machinery/light/small/emergency{ @@ -154903,7 +156497,7 @@ dir = 4 }, /obj/structure/platform/ledge, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "usa" = ( /obj/structure/stairs/south, @@ -155021,15 +156615,11 @@ /turf/simulated/floor/bluegrid, /area/horizon/tcommsat/chamber) "usI" = ( -/obj/structure/machinery/light/small/emergency{ - dir = 8 +/obj/effect/floor_decal/industrial/warning{ + dir = 9 }, -/obj/random/maintenance_junk_or_loot, -/obj/random/dirt_75, -/obj/random/dirt_75, -/obj/structure/table/rack, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/far) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/research) "usJ" = ( /obj/structure/bed/stool/chair/padded/blue{ dir = 8 @@ -155043,7 +156633,11 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/machinery/alarm/south, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "uta" = ( /obj/effect/floor_decal/industrial/warning{ @@ -155139,17 +156733,19 @@ /turf/unsimulated/floor/plating, /area/shuttle/transport1) "utL" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, /obj/structure/cable/green{ icon_state = "1-2" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "utO" = ( /obj/effect/floor_decal/corner_wide/yellow{ @@ -155239,6 +156835,9 @@ }, /obj/structure/machinery/hologram/holopad, /obj/item/radio/intercom/south, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 7 + }, /turf/simulated/floor/wood/walnut, /area/horizon/medical/smoking) "uuv" = ( @@ -155321,7 +156920,7 @@ pixel_x = 12; pixel_y = -28 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "uvi" = ( /obj/effect/decal/cleanable/liquid_fuel, @@ -155362,7 +156961,10 @@ /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos) "uvv" = ( -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard) "uvw" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -155375,7 +156977,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/near) "uvG" = ( @@ -155532,7 +157134,7 @@ dir = 6 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -155621,7 +157223,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/platform_stairs/south_north_solo, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "uxj" = ( /obj/structure/closet/secure_closet/engineering_chief, @@ -155715,8 +157317,14 @@ dir = 8 }, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/operations) +"uxQ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_3/aft/starboard/far) "uxU" = ( /obj/effect/floor_decal/spline/plain, /turf/simulated/floor/exoplanet/barren/raskara, @@ -156180,6 +157788,9 @@ /obj/effect/floor_decal/corner/dark_green{ dir = 1 }, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_1/central) "uBA" = ( @@ -156464,12 +158075,11 @@ }, /area/centcom/shared_dream) "uDg" = ( -/obj/structure/table/rack, -/obj/random/loot, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/turf/simulated/floor/plating, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "uDl" = ( /obj/effect/floor_decal/spline/fancy/wood/cee{ @@ -156590,7 +158200,10 @@ /obj/random/loot, /obj/random/loot, /obj/random/contraband, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "uDP" = ( /obj/structure/machinery/disposal/small/east{ @@ -156603,7 +158216,7 @@ /turf/simulated/floor/tiled/white, /area/horizon/medical/pharmacy) "uDT" = ( -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/engineering/drone_fabrication) "uDV" = ( /obj/effect/floor_decal/corner/dark_blue{ @@ -156987,7 +158600,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/maintenance/deck_2/wing/port/nacelle) "uGs" = ( /obj/structure/machinery/alarm/east{ @@ -157040,7 +158653,7 @@ master_tag = "airlock_horizon_deck_2_aft_sm"; name = "airlock_horizon_deck_2_aft_sm" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/supermatter/airlock) "uGL" = ( /obj/effect/floor_decal/corner/dark_blue{ @@ -157219,7 +158832,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/security/evidence_storage) "uHE" = ( /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{ @@ -157230,6 +158843,7 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_1"; name = "airlock_horizon_dock_deck_3_starboard_1" }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/hallway/primary/deck_3/starboard/docks) "uHG" = ( @@ -157271,7 +158885,7 @@ }, /obj/structure/machinery/power/apc/east, /obj/random/dirt_75, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/operations) "uId" = ( /obj/effect/decal/cleanable/dirt, @@ -157516,7 +159130,7 @@ icon_state = "1-2" }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -157527,7 +159141,7 @@ }, /obj/structure/machinery/power/apc/south, /obj/structure/cable, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "uJw" = ( /obj/effect/floor_decal/spline/plain{ @@ -157580,6 +159194,7 @@ pixel_x = 2; pixel_y = 8 }, +/obj/random/dirt_75, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "uJZ" = ( @@ -157835,6 +159450,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/storage/secure/tech_vault) "uLC" = ( @@ -157950,7 +159568,7 @@ pixel_x = -28; pixel_y = 12 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "uMi" = ( /obj/effect/floor_decal/spline/plain{ @@ -158213,7 +159831,7 @@ "uOD" = ( /obj/effect/floor_decal/industrial/warning, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/carpet/rubber, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/aft) "uOE" = ( /obj/structure/machinery/camera/network/service{ @@ -158362,7 +159980,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/unsimulated/floor, @@ -158375,8 +159993,6 @@ icon_state = "1-2" }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/obj/random/dirt_75, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "uPK" = ( @@ -158420,6 +160036,9 @@ dir = 10 }, /obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, /turf/simulated/floor/wood/walnut, /area/horizon/medical/smoking) "uPV" = ( @@ -158508,7 +160127,7 @@ /area/horizon/maintenance/deck_2/wing/port/far) "uQG" = ( /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/random/maintenance_junk_or_loot, @@ -158861,6 +160480,9 @@ /area/shuttle/syndicate_elite) "uSC" = ( /obj/structure/machinery/recharge_station, +/obj/structure/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/aibunker) "uSF" = ( @@ -158939,14 +160561,13 @@ /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/port/far) "uTo" = ( -/obj/effect/floor_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/wing/starboard/near) +/obj/structure/platform, +/obj/random/dirt_75, +/obj/structure/closet/crate/freezer, +/obj/random/booze, +/obj/random/booze, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/starboard/far) "uTs" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/floor_decal/corner_wide/green{ @@ -158966,7 +160587,7 @@ dir = 4 }, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard/far) "uTA" = ( @@ -159238,6 +160859,7 @@ /obj/structure/machinery/light/small{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/security/checkpoint2) "uVk" = ( @@ -159385,11 +161007,11 @@ /turf/unsimulated/floor/plating, /area/antag/raider) "uWf" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, /obj/structure/platform, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/near) "uWh" = ( /obj/effect/floor_decal/industrial/outline/blue, @@ -159570,7 +161192,7 @@ /obj/structure/sign/electricshock{ pixel_y = 32 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/main/starboard) "uXo" = ( /obj/effect/floor_decal/industrial/warning{ @@ -159587,7 +161209,8 @@ master_tag = "airlock_horizon_dock_deck_3_starboard_3"; name = "airlock_horizon_dock_deck_3_starboard_3" }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/dark_blue/diagonal, +/turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_3/starboard/docks) "uXq" = ( /obj/structure/cable/green{ @@ -159599,7 +161222,9 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "uXr" = ( @@ -159654,13 +161279,15 @@ /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenological) "uXF" = ( -/obj/effect/floor_decal/industrial/warning, /obj/structure/closet, /obj/random/loot, /obj/structure/railing/mapped{ dir = 8 }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "uXG" = ( /obj/effect/floor_decal/industrial/hatch/yellow, @@ -159901,8 +161528,11 @@ /area/horizon/command/bridge/controlroom) "uZR" = ( /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/port) +/area/horizon/maintenance/deck_2/wing/starboard/far) "uZS" = ( /obj/structure/cable/green{ icon_state = "1-2" @@ -159919,6 +161549,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/engineering/lower) "uZV" = ( @@ -160255,6 +161886,13 @@ }, /turf/simulated/floor/tiled/full, /area/horizon/service/hydroponics/lower) +"vcp" = ( +/obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/operations) "vcq" = ( /obj/effect/map_effect/window_spawner/full/reinforced/polarized/firedoor{ id = "bar_fore"; @@ -160414,6 +162052,9 @@ /obj/effect/floor_decal/corner/dark_green{ dir = 4 }, +/obj/structure/machinery/light/floor{ + dir = 1 + }, /turf/simulated/floor/tiled, /area/horizon/hallway/primary/deck_1/central) "vcY" = ( @@ -160623,7 +162264,7 @@ name = "airlock_horizon_deck_2_aft_sm" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/reactor/supermatter/airlock) "veM" = ( /obj/effect/floor_decal/corner/white/diagonal, @@ -160647,11 +162288,7 @@ /area/centcom/spawning) "veP" = ( /obj/structure/machinery/portable_atmospherics/canister/empty/air, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port/nacelle) "veQ" = ( /obj/effect/floor_decal/corner/green{ @@ -160806,6 +162443,7 @@ name = "airlock_horizon_deck_3_aft_1" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "vgg" = ( @@ -161174,13 +162812,14 @@ "vjk" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/structure/reagent_dispensers/extinguisher, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "vjm" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard/far) "vjo" = ( @@ -161326,7 +162965,7 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/substation/research) "vkn" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, @@ -161410,10 +163049,10 @@ /turf/simulated/floor/wood, /area/horizon/service/chapel/main) "vkO" = ( -/obj/random/dirt_75, /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/lattice/catwalk/indoor/grate/dark/damaged, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "vkY" = ( @@ -161490,7 +163129,10 @@ "vlx" = ( /obj/effect/decal/cleanable/dirt, /mob/living/silicon/robot/drone/construction/matriarch, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/drone_fabrication) "vlz" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -161635,7 +163277,7 @@ }, /area/horizon/holodeck/source_pool) "vmv" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/nacelle) "vmw" = ( @@ -161805,6 +163447,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "vnN" = ( @@ -161830,6 +163473,7 @@ /area/horizon/hallway/primary/deck_2/central) "vnP" = ( /obj/random/junk, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "vnS" = ( @@ -161917,7 +163561,7 @@ "vom" = ( /obj/effect/floor_decal/industrial/warning, /obj/item/material/shard, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "vop" = ( /obj/effect/floor_decal/spline/plain/black{ @@ -161996,6 +163640,10 @@ "voK" = ( /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/main/starboard) "voU" = ( @@ -162077,7 +163725,7 @@ /area/horizon/hallway/primary/deck_2/central) "vpO" = ( /obj/random/canister/filled/restricted, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "vpT" = ( /obj/effect/floor_decal/spline/plain/corner/black{ @@ -162212,9 +163860,6 @@ /turf/simulated/floor/tiled, /area/horizon/security/brig) "vqO" = ( -/obj/effect/floor_decal/corner_wide/green{ - dir = 6 - }, /obj/structure/disposalpipe/trunk{ dir = 8 }, @@ -162223,6 +163868,7 @@ dir = 8 }, /obj/structure/machinery/disposal/small/north, +/obj/structure/machinery/light/floor, /turf/simulated/floor/tiled/white, /area/horizon/medical/gen_treatment) "vqQ" = ( @@ -162232,8 +163878,8 @@ /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "vqT" = ( /obj/effect/decal/cleanable/dirt, @@ -162241,7 +163887,7 @@ /obj/structure/closet, /obj/random/loot, /obj/random/junk, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "vqY" = ( /obj/structure/machinery/door/blast/odin/shuttle/tcfl/shutter{ @@ -162291,7 +163937,8 @@ /area/centcom/spawning) "vrr" = ( /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/security/port) "vrH" = ( /obj/structure/curtain/open/shower/security, @@ -162374,21 +164021,23 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 8 - }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "vsg" = ( -/obj/structure/machinery/porta_turret/stationary, -/obj/effect/floor_decal/industrial/warning/full, /obj/structure/sign/flag/scc{ pixel_x = 32 }, -/obj/structure/machinery/light/small/emergency{ +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/reinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "vsl" = ( /obj/structure/machinery/portable_atmospherics/canister/carbon_dioxide, @@ -162448,15 +164097,14 @@ /turf/simulated/floor/plating, /area/horizon/hangar/intrepid) "vti" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/floor_decal/industrial/warning{ + dir = 1 }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/random/dirt_75, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/wing/starboard/far) +/obj/random/bomb_supply, +/obj/random/bomb_supply, +/obj/structure/closet/crate, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/main/port) "vtq" = ( /obj/structure/machinery/door/blast/regular{ dir = 4; @@ -162469,7 +164117,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/turf/simulated/floor/plating, +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "vtu" = ( /obj/effect/floor_decal/spline/plain/lime{ @@ -162486,12 +164135,13 @@ /obj/effect/floor_decal/industrial/warning{ dir = 6 }, -/turf/simulated/floor/plating, +/obj/random/dirt_75, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "vtw" = ( /obj/structure/bed/stool/chair/sofa/left/red, /obj/effect/floor_decal/corner/brown/diagonal, -/obj/structure/machinery/light/spot{ +/obj/structure/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -162512,6 +164162,9 @@ icon_state = "0-4" }, /obj/structure/machinery/power/apc/low/west, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, /turf/simulated/floor/tiled/dark, /area/horizon/engineering/atmos/storage_maintenance) "vtM" = ( @@ -162688,6 +164341,9 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/rnd/xenobiology/xenoflora) "vvr" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard) "vvt" = ( @@ -162880,7 +164536,10 @@ /area/horizon/rnd/lab) "vwJ" = ( /obj/structure/table/rack, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "vwP" = ( /turf/simulated/wall/r_wall, @@ -163059,12 +164718,12 @@ /turf/unsimulated/floor/plating, /area/centcom/control) "vyb" = ( -/obj/structure/machinery/door/window{ - dir = 1 - }, /obj/structure/machinery/atmospherics/pipe/manifold/hidden{ dir = 8 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor, /area/horizon/hallway/primary/deck_3/starboard/docks) "vyc" = ( @@ -163120,10 +164779,8 @@ /area/horizon/security/hallway) "vyC" = ( /obj/structure/machinery/floodlight, -/obj/effect/floor_decal/industrial/warning{ - dir = 4 - }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/outline/operations, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard) "vyE" = ( /obj/structure/bed/stool/chair/office/dark{ @@ -163176,7 +164833,10 @@ /area/centcom/legion/hangar5) "vyT" = ( /obj/random/junk, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "vyX" = ( /obj/effect/decal/fake_object{ @@ -163200,7 +164860,7 @@ shuttle_tag = "Quark"; cycle_to_external_air = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/quark/cargo_hold) "vzb" = ( /obj/structure/machinery/firealarm/west, @@ -163414,7 +165074,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "vAL" = ( /obj/structure/machinery/light, @@ -163530,7 +165190,6 @@ /turf/simulated/floor/plating, /area/horizon/operations/package_conveyors) "vBe" = ( -/obj/structure/grille/broken, /obj/structure/machinery/door/firedoor, /obj/item/material/shard{ icon_state = "small" @@ -163539,7 +165198,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "vBf" = ( /obj/structure/machinery/atmospherics/valve{ @@ -163656,6 +165315,9 @@ alarm_id = 1601; req_one_access = list(11,24,52) }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/operations) "vBO" = ( @@ -163677,7 +165339,7 @@ /area/centcom/legion) "vBR" = ( /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard) "vBU" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ @@ -163848,12 +165510,23 @@ /obj/effect/decal/fake_object/light_source/invisible, /turf/simulated/floor, /area/tdome/tdome2) +"vDf" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/horizon/maintenance/deck_1/main/starboard) "vDg" = ( /obj/structure/cable/green{ icon_state = "1-8" }, /obj/structure/cable/green, /obj/structure/machinery/power/apc/low/east, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/xenoarchaeology) "vDj" = ( @@ -164043,6 +165716,10 @@ /obj/structure/cable/green{ icon_state = "0-4" }, +/obj/effect/floor_decal/industrial/warning, +/obj/structure/machinery/light/small{ + dir = 1 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_starboard) "vEo" = ( @@ -164441,7 +166118,7 @@ /area/horizon/maintenance/deck_2/central_ring) "vHq" = ( /obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "vHL" = ( /obj/structure/table/standard, @@ -164597,13 +166274,10 @@ /turf/simulated/floor/tiled/white, /area/horizon/security/autopsy_laboratory) "vIR" = ( -/obj/random/dirt_75, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port/shortcut) "vIZ" = ( @@ -164792,10 +166466,11 @@ /turf/simulated/open, /area/horizon/hallway/primary/deck_2/central) "vKx" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/tiled/dark/full, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "vKz" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -165029,6 +166704,9 @@ /obj/structure/sign/nosmoking_1{ pixel_y = -32 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "vLF" = ( @@ -165063,7 +166741,10 @@ /area/horizon/hangar/auxiliary) "vMb" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/starboard/far) "vMk" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -165299,12 +166980,9 @@ /turf/simulated/floor/tiled, /area/merchant_station) "vON" = ( -/obj/structure/machinery/light/small/emergency{ - dir = 4 - }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "vOR" = ( /obj/structure/lattice, @@ -165581,12 +167259,15 @@ /turf/unsimulated/floor, /area/centcom/holding) "vQY" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/table/standard{ no_cargo = 1 }, /obj/random/contraband, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "vRa" = ( /obj/effect/floor_decal/spline/fancy/wood/corner{ @@ -165647,7 +167328,7 @@ /area/horizon/rnd/xenobiology/xenoflora) "vRz" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -165692,6 +167373,19 @@ /obj/structure/table/reinforced/steel, /turf/simulated/floor/carpet/rubber, /area/horizon/command/bridge/controlroom) +"vRZ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/material/ashtray/plastic{ + pixel_x = -5; + pixel_y = 8 + }, +/obj/item/paper/cig/fine{ + pixel_x = 3; + pixel_y = 1 + }, +/obj/structure/table/reinforced/steel, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_1/wing/starboard/far) "vSa" = ( /obj/effect/floor_decal/industrial/hatch/red, /obj/effect/floor_decal/industrial/warning/corner{ @@ -165954,10 +167648,12 @@ /turf/simulated/floor/wood, /area/horizon/service/library) "vUc" = ( -/obj/effect/floor_decal/industrial/warning{ +/obj/structure/machinery/anti_bluespace, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "vUj" = ( /obj/structure/bed/stool/chair{ @@ -166323,7 +168019,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/operations/starboard) "vVO" = ( /obj/structure/disposalpipe/segment, @@ -166771,7 +168467,8 @@ /obj/structure/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/operations) "vYp" = ( /obj/structure/cable/green{ @@ -166797,7 +168494,7 @@ master_tag = "airlock_horizon_deck_1_fore_1"; name = "airlock_horizon_deck_1_fore_1" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/hangar/starboard) "vYu" = ( /obj/structure/window/reinforced/holowindow{ @@ -166890,13 +168587,14 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 1 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/effect/map_effect/marker/airlock{ frequency = 1004; master_tag = "airlock_horizon_deck_1_fore_1"; name = "airlock_horizon_deck_1_fore_1" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/starboard) "vZn" = ( @@ -166970,8 +168668,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "vZQ" = ( /obj/structure/machinery/door/blast/odin/open{ @@ -167038,6 +168735,7 @@ /obj/item/material/shard{ icon_state = "small" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard) "wax" = ( @@ -167162,28 +168860,27 @@ /turf/simulated/floor/plating, /area/horizon/shuttle/intrepid/main_compartment) "wbr" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, -/obj/effect/floor_decal/industrial/warning{ - dir = 10 - }, /obj/structure/machinery/atmospherics/portables_connector, /obj/structure/machinery/portable_atmospherics/canister/air/airlock, /obj/structure/sign/nosmoking_1{ pixel_y = 32 }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "wbs" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor, /area/horizon/maintenance/deck_2/wing/port/far) "wbv" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -167261,7 +168958,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/railing/mapped, +/obj/effect/floor_decal/industrial/warning/corner, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "wcg" = ( @@ -167372,6 +169069,9 @@ /obj/structure/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, /turf/simulated/floor/wood/walnut, /area/horizon/medical/smoking) "wcx" = ( @@ -167392,11 +169092,12 @@ /turf/simulated/floor/marble, /area/horizon/holodeck/source_trinary) "wcB" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/floor_decal/industrial/warning{ + dir = 5 }, +/obj/random/dirt_75, /turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_1/main/port/shortcut) +/area/horizon/maintenance/deck_2/wing/starboard) "wcC" = ( /obj/structure/bed/stool/bar/padded/blue, /obj/effect/floor_decal/spline/fancy/wood, @@ -167488,7 +169189,7 @@ }, /obj/random/loot, /obj/random/loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "wcW" = ( /obj/structure/disposalpipe/segment, @@ -167496,7 +169197,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/research) "wcX" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -167522,7 +169223,7 @@ }, /obj/random/junk, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "wdo" = ( /turf/simulated/floor/holofloor/tiled, @@ -167557,7 +169258,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/tiled/dark/full, /area/horizon/operations/secure_ammunition_storage) "wdK" = ( @@ -167651,7 +169352,8 @@ dir = 9 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "wee" = ( /obj/structure/table/standard, @@ -167686,6 +169388,12 @@ /area/horizon/medical/main_storage) "wef" = ( /obj/random/maintenance_junk_or_loot, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "weh" = ( @@ -167717,7 +169425,7 @@ pixel_x = -5; pixel_y = -3 }, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "weq" = ( /obj/effect/floor_decal/industrial/hatch_door/red, @@ -167880,6 +169588,9 @@ dir = 9 }, /obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/nacelle) "wfp" = ( @@ -168266,7 +169977,7 @@ dir = 4 }, /obj/random/dirt_75, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -168374,7 +170085,8 @@ dir = 8 }, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/operations) "wiq" = ( /obj/effect/floor_decal/corner/lime/diagonal, @@ -168550,10 +170262,10 @@ /turf/simulated/floor/tiled/white, /area/shuttle/hapt) "wjI" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port) "wjJ" = ( /obj/effect/floor_decal/corner_wide/black{ @@ -168586,16 +170298,11 @@ /turf/unsimulated/floor/plating, /area/centcom/specops) "wjV" = ( -/obj/random/dirt_75, -/obj/effect/floor_decal/industrial/warning, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 8 - }, /turf/simulated/floor/tiled/dark, -/area/horizon/maintenance/deck_2/wing/starboard) +/area/horizon/maintenance/deck_2/wing/port/near) "wkc" = ( /obj/structure/bed/stool/chair/office/light{ dir = 8 @@ -169043,6 +170750,9 @@ "wmv" = ( /obj/effect/decal/cleanable/dirt, /obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/aft) "wmD" = ( @@ -169405,14 +171115,11 @@ /area/centcom/bar) "woF" = ( /obj/effect/floor_decal/industrial/hatch_door/yellow, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/structure/machinery/door/firedoor{ req_one_access = list(24,11,67,73); dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/starboard) "woH" = ( /obj/structure/window/reinforced/crescent{ @@ -169447,12 +171154,7 @@ /obj/structure/ladder/up{ pixel_y = 13 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb2, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port) "wpb" = ( @@ -169630,6 +171332,7 @@ /area/horizon/holodeck_control) "wqg" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_3/aft/starboard/far) "wqh" = ( @@ -169917,14 +171620,12 @@ }, /area/centcom/spawning) "wqY" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/bed/stool/chair/padded/black{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ - dir = 8 - }, -/turf/simulated/floor/tiled, +/obj/effect/floor_decal/corner/brown/full, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "wqZ" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -170175,17 +171876,17 @@ /turf/simulated/floor/tiled/dark/full, /area/horizon/service/bar) "wsN" = ( -/obj/structure/railing/mapped, -/obj/structure/railing/mapped{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 6 +/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/random/maintenance_junk_or_loot, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_1/wing/starboard/far) +/area/horizon/engineering/storage/lower) "wsR" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -170326,7 +172027,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -170427,9 +172128,6 @@ /obj/structure/platform/ledge/dark{ dir = 8 }, -/obj/structure/railing/mapped{ - dir = 4 - }, /obj/structure/lattice, /turf/simulated/open, /area/horizon/maintenance/deck_2/cryo) @@ -170538,7 +172236,7 @@ name = "Deck 2 Starboard Nacelle Substation"; req_one_access = list(11,24) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/wing_port) "wuI" = ( /obj/structure/machinery/vending/coffee/free{ @@ -170773,6 +172471,9 @@ dir = 4 }, /obj/structure/disposalpipe/trunk, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, /turf/simulated/floor/wood/walnut, /area/horizon/medical/smoking) "wwE" = ( @@ -170834,6 +172535,10 @@ }, /turf/simulated/floor/tiled/dark, /area/shuttle/mercenary) +"wwN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/operations/starboard) "wwP" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/machinery/light{ @@ -170855,7 +172560,7 @@ /turf/simulated/floor/wood, /area/horizon/command/bridge/meeting_room) "wwX" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/reagent_dispensers/watertank, @@ -170884,7 +172589,8 @@ /area/horizon/engineering/atmos/storage) "wxe" = ( /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/operations) "wxj" = ( /obj/structure/curtain/open/bar, @@ -170932,13 +172638,16 @@ /turf/simulated/floor/tiled/dark, /area/horizon/engineering/storage/tech) "wxv" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/table/standard{ no_cargo = 1 }, /obj/item/reagent_containers/glass/rag, /obj/random/smokable, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/corner/brown/full{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "wxy" = ( /obj/effect/floor_decal/corner/dark_blue{ @@ -170979,7 +172688,7 @@ "wxG" = ( /obj/structure/disposalpipe/segment, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -171087,7 +172796,10 @@ "wyA" = ( /obj/random/dirt_75, /obj/structure/machinery/alarm/west, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) "wyB" = ( /obj/structure/machinery/atmospherics/pipe/manifold/visible/purple{ @@ -171214,6 +172926,10 @@ }, /turf/simulated/floor/lino, /area/horizon/security/investigators_office) +"wzp" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/wing/port/far) "wzr" = ( /obj/effect/shuttle_landmark/lift/operations_third_deck, /turf/simulated/open, @@ -171313,7 +173029,7 @@ name = "airlock_horizon_deck_1_fore_1" }, /obj/effect/map_effect/marker_helper/airlock/exterior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/hangar/starboard) "wzS" = ( /obj/effect/floor_decal/corner/beige/full{ @@ -171565,7 +173281,7 @@ /area/horizon/rnd/lab) "wCb" = ( /obj/effect/floor_decal/corner/brown/diagonal, -/obj/structure/machinery/light/spot{ +/obj/structure/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -172034,6 +173750,9 @@ "wFH" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/bed/stool/bar/padded/red, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/starboard/far) "wFI" = ( @@ -172062,7 +173781,7 @@ /obj/effect/floor_decal/industrial/warning{ dir = 5 }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/starboard) "wFZ" = ( @@ -172158,8 +173877,8 @@ /obj/effect/floor_decal/industrial/warning{ dir = 9 }, -/obj/structure/machinery/light/small/emergency, -/turf/simulated/floor/plating, +/obj/structure/machinery/light/small, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "wGH" = ( /turf/simulated/floor/tiled, @@ -172188,7 +173907,7 @@ /obj/structure/railing/mapped{ dir = 4 }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /obj/structure/table/rack/folding_table, @@ -172204,7 +173923,7 @@ /obj/effect/floor_decal/industrial/outline/grey, /obj/effect/floor_decal/industrial/warning, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/cafe) "wGN" = ( /obj/structure/machinery/door/firedoor, @@ -172216,7 +173935,7 @@ /obj/effect/floor_decal/industrial/hatch_door/engineering{ dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/storage/lower) "wGP" = ( /obj/structure/tank_wall/nitrogen{ @@ -172387,7 +174106,7 @@ /turf/simulated/floor/wood, /area/horizon/service/mess_hall) "wHx" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/random/junk, @@ -172595,12 +174314,10 @@ /turf/simulated/open, /area/horizon/security/investigations_hallway) "wJL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1" }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port) "wJM" = ( @@ -172612,6 +174329,9 @@ /area/horizon/service/custodial/disposals/deck_1) "wJQ" = ( /obj/effect/floor_decal/corner_wide/yellow/full, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/shields) "wJR" = ( @@ -172721,7 +174441,7 @@ name = "airlock_horizon_deck_1_fore_1" }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/hangar/starboard) "wKo" = ( /obj/effect/floor_decal/corner/brown{ @@ -172980,12 +174700,12 @@ /turf/simulated/floor/plating, /area/merchant_station/warehouse) "wMC" = ( -/obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/railing/mapped{ - dir = 8 +/obj/effect/floor_decal/industrial/warning{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/aft) +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/wing/starboard/far) "wMJ" = ( /obj/structure/disposalpipe/segment, /obj/structure/machinery/door/airlock/maintenance{ @@ -173272,7 +174992,7 @@ "wOw" = ( /obj/effect/floor_decal/corner/brown/diagonal, /obj/structure/bed/stool/padded/red, -/obj/structure/machinery/light/spot{ +/obj/structure/machinery/light{ dir = 1 }, /turf/simulated/floor/tiled/dark, @@ -173299,6 +175019,7 @@ /obj/structure/machinery/light/small/red{ dir = 8 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/shuttle/quark/cargo_hold) "wOz" = ( @@ -173424,7 +175145,7 @@ dir = 1 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/research) "wPr" = ( /obj/effect/floor_decal/corner/brown{ @@ -173598,12 +175319,8 @@ /area/horizon/holodeck/source_wildlife) "wQg" = ( /obj/effect/floor_decal/industrial/warning, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/structure/machinery/alarm/north, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/wing/starboard/far) "wQj" = ( /obj/structure/flora/pottedplant{ @@ -173632,6 +175349,7 @@ pixel_x = -6; pixel_y = 28 }, +/obj/structure/lattice/catwalk/indoor/grate, /turf/simulated/floor/plating, /area/horizon/hallway/primary/deck_3/starboard/docks) "wQq" = ( @@ -173639,7 +175357,7 @@ dir = 10 }, /obj/random/junk, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/port) "wQs" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -174136,7 +175854,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/hangar/starboard) "wTq" = ( /obj/effect/spider/cocoon, @@ -174164,7 +175882,8 @@ /area/horizon/crew/fitness/gym) "wTw" = ( /obj/structure/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "wTz" = ( /obj/structure/cable{ @@ -174179,6 +175898,15 @@ /obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard/far) +"wTA" = ( +/obj/effect/floor_decal/corner/dark_green{ + dir = 9 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/horizon/hallway/primary/deck_1/central) "wTD" = ( /obj/effect/floor_decal/corner/dark_blue/full{ dir = 1 @@ -174309,7 +176037,7 @@ name = "airlock_horizon_dock_deck_3_port_5" }, /obj/effect/map_effect/marker_helper/airlock/interior, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/full, /area/horizon/hallway/primary/deck_3/port/docks) "wUx" = ( /obj/structure/closet/bombclosetsecurity, @@ -174510,7 +176238,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "wVm" = ( /obj/structure/machinery/door/blast/shutters{ @@ -174820,7 +176548,7 @@ pixel_y = 13 }, /obj/effect/floor_decal/industrial/warning/cee, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/tiled/dark, @@ -174906,6 +176634,7 @@ /area/horizon/operations/lobby) "wYd" = ( /obj/structure/machinery/atmospherics/pipe/simple/visible/purple, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/atmos_crosser) "wYg" = ( @@ -175087,6 +176816,9 @@ pixel_y = 4 }, /obj/structure/machinery/alarm/north, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor, /area/horizon/command/bridge/aibunker) "wYJ" = ( @@ -175228,7 +176960,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /turf/simulated/floor/plating, @@ -175249,8 +176981,7 @@ /area/shuttle/merchant) "wZJ" = ( /obj/structure/machinery/nuclearbomb/station, -/obj/effect/floor_decal/industrial/warning/full, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/redgrid, /area/horizon/command/bridge/selfdestruct) "wZT" = ( /obj/effect/floor_decal/corner/mauve/diagonal, @@ -175664,7 +177395,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 8 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/aft/port) "xcO" = ( /turf/simulated/wall/shuttle/unique/ert{ @@ -176207,7 +177938,7 @@ /obj/effect/floor_decal/industrial/hatch_door/yellow{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/main/port) "xfX" = ( /obj/structure/machinery/door/airlock/security{ @@ -176237,6 +177968,7 @@ pixel_x = 3; pixel_y = 8 }, +/obj/random/dirt_75, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/nacelle) "xgd" = ( @@ -176250,9 +177982,6 @@ "xgn" = ( /obj/structure/table/reinforced/steel, /obj/item/storage/bag/circuits/basic, -/obj/structure/machinery/light/small/emergency{ - dir = 1 - }, /turf/simulated/floor/carpet/rubber, /area/horizon/maintenance/deck_1/workshop) "xgr" = ( @@ -176279,6 +178008,7 @@ dir = 4 }, /obj/structure/cable, +/obj/structure/lattice/catwalk/indoor, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/hangar) "xgx" = ( @@ -176492,9 +178222,6 @@ /obj/effect/floor_decal/industrial/warning{ dir = 8 }, -/obj/structure/machinery/light/small/emergency{ - dir = 1 - }, /turf/simulated/floor, /area/horizon/maintenance/substation/command) "xid" = ( @@ -176507,7 +178234,7 @@ name = "Deck 2 Starboard Nacelle Substation"; req_one_access = list(11,24) }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/wing_port) "xie" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -176681,6 +178408,9 @@ /obj/structure/cable/green{ icon_state = "1-4" }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/hangar/starboard) "xki" = ( @@ -176841,8 +178571,8 @@ /area/horizon/hallway/primary/deck_3/central) "xli" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/pinup/bay_47{ - pixel_x = -32 +/obj/structure/machinery/light/small{ + dir = 8 }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/service/starboard) @@ -176860,7 +178590,7 @@ name = "Deck 3 Civilian Substation"; req_one_access = list(11,24) }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/substation/civ_d3) "xlm" = ( /turf/simulated/wall, @@ -176951,7 +178681,8 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/main/port/shortcut) "xma" = ( /obj/effect/floor_decal/spline/plain/corner{ @@ -177171,7 +178902,17 @@ "xnE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/random/maintenance_junk_or_loot, +/obj/structure/table/steel, +/obj/item/pen{ + pixel_x = 10 + }, +/obj/structure/sign/poster/civilian/bay_56{ + pixel_y = 32 + }, +/obj/item/paper/stickynotes/pad/random{ + pixel_x = -1; + pixel_y = 6 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "xnI" = ( @@ -177186,7 +178927,7 @@ /turf/simulated/floor/tiled, /area/horizon/hangar/operations) "xnL" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/machinery/atmospherics/unary/vent_pump/high_volume{ @@ -177197,6 +178938,7 @@ master_tag = "airlock_horizon_deck_2_starboard_aft"; name = "airlock_horizon_deck_2_starboard_aft" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) "xnQ" = ( @@ -177249,6 +178991,12 @@ }, /turf/simulated/floor/tiled/dark, /area/shuttle/legion) +"xoq" = ( +/obj/structure/machinery/atmospherics/pipe/simple/hidden/aux{ + dir = 6 + }, +/turf/simulated/floor/redgrid, +/area/horizon/command/bridge/selfdestruct) "xos" = ( /obj/effect/floor_decal/corner/mauve{ dir = 5 @@ -177259,11 +179007,11 @@ /obj/structure/cable/green{ icon_state = "0-2" }, -/obj/structure/railing/mapped{ - dir = 4 - }, /obj/structure/machinery/atmospherics/pipe/simple/hidden, /obj/structure/machinery/power/apc/high/west, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/medical/cryo) "xoC" = ( @@ -177346,6 +179094,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb2, /obj/structure/machinery/power/apc/east, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_starboard) "xpu" = ( @@ -177469,11 +179218,16 @@ /area/centcom/shared_dream) "xqg" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ - dir = 4 +/obj/effect/floor_decal/corner/purple{ + dir = 9 + }, +/obj/structure/table/steel, +/obj/item/stack/material/steel/full{ + pixel_x = -6; + pixel_y = 9 }, /turf/simulated/floor/tiled, -/area/horizon/maintenance/deck_1/wing/starboard/far) +/area/horizon/maintenance/deck_2/wing/starboard) "xqk" = ( /obj/effect/floor_decal/corner/purple{ dir = 9 @@ -177519,9 +179273,6 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos) "xqu" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, /obj/effect/decal/cleanable/dirt, /obj/random/junk, /turf/simulated/floor/plating, @@ -177536,11 +179287,13 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/lattice/catwalk/indoor/grate/dark, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/machinery/alarm/north, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard) "xqD" = ( @@ -177579,9 +179332,13 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "xqL" = ( -/obj/effect/floor_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/structure/platform_deco{ + icon_state = "ledge_deco" + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_1/wing/starboard/far) "xqT" = ( /obj/effect/floor_decal/corner_wide/blue{ @@ -177616,7 +179373,6 @@ /turf/simulated/floor/tiled, /area/horizon/hangar/intrepid) "xrf" = ( -/obj/structure/machinery/light/floor, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, @@ -177640,6 +179396,9 @@ pixel_y = -9 }, /obj/structure/machinery/power/apc/east, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/substation/wing_port) "xrw" = ( @@ -177713,7 +179472,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/structure/lattice/catwalk/indoor/grate/damaged{ color = "#4c535b" }, @@ -177751,7 +179510,9 @@ /turf/simulated/floor/plating, /area/horizon/engineering/atmos/air) "xsf" = ( -/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "xsn" = ( @@ -177935,17 +179696,13 @@ /turf/unsimulated/floor/wood, /area/antag/actor) "xtc" = ( -/obj/effect/floor_decal/corner_wide/blue{ - dir = 10 - }, -/obj/effect/floor_decal/corner_wide/yellow{ - dir = 5 - }, +/obj/structure/machinery/firealarm/north, +/obj/effect/floor_decal/industrial/hatch/red, +/obj/effect/floor_decal/industrial/warning, /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/structure/machinery/firealarm/north, -/turf/simulated/floor/reinforced, +/turf/simulated/floor/tiled/dark/full, /area/horizon/command/bridge/selfdestruct) "xtf" = ( /obj/structure/closet/secure_closet/refrigerator/standard, @@ -177970,8 +179727,11 @@ /turf/simulated/floor/tiled, /area/horizon/hangar/auxiliary) "xtj" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/cryo) "xtu" = ( @@ -178009,8 +179769,9 @@ "xtE" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/railing/mapped{ - dir = 8 +/obj/structure/lattice/catwalk/indoor/grate/dark, +/obj/structure/machinery/light/small{ + dir = 4 }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/near) @@ -178056,6 +179817,7 @@ /obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/storage_maintenance) "xub" = ( @@ -178073,7 +179835,7 @@ /obj/effect/floor_decal/industrial/hatch_door/engineering{ dir = 1 }, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/engineering/atmos/propulsion/starboard) "xuc" = ( /obj/structure/disposalpipe/trunk{ @@ -178197,9 +179959,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -178232,7 +179991,8 @@ dir = 9 }, /obj/structure/machinery/meter, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "xuR" = ( /obj/effect/floor_decal/corner/paleblue{ @@ -178255,6 +180015,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/railing/mapped, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port/far) "xuT" = ( @@ -178374,7 +180135,7 @@ /area/centcom/legion) "xvQ" = ( /obj/item/material/shard, -/turf/simulated/floor/tiled/dark, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/security/port) "xvY" = ( /obj/structure/machinery/camera/network/service{ @@ -178387,7 +180148,7 @@ "xwd" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, /obj/random/junk, -/obj/structure/machinery/light/small/emergency, +/obj/structure/machinery/light/small, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "xwf" = ( @@ -178422,9 +180183,6 @@ /obj/effect/floor_decal/corner/dark_blue{ dir = 5 }, -/obj/structure/machinery/light/small{ - dir = 1 - }, /obj/structure/closet/walllocker/medical/firstaid{ pixel_y = 32 }, @@ -178455,6 +180213,7 @@ /obj/effect/floor_decal/corner/mauve{ dir = 10 }, +/obj/structure/machinery/light/floor, /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenoarch/atrium) "xwU" = ( @@ -178472,7 +180231,7 @@ dir = 4 }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/research) "xxb" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -178488,7 +180247,6 @@ /obj/effect/floor_decal/spline/fancy/wood{ dir = 4 }, -/obj/structure/machinery/light/small/floor, /turf/simulated/floor/wood, /area/horizon/service/cafeteria) "xxi" = ( @@ -178513,8 +180271,8 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "xxu" = ( /turf/simulated/wall, @@ -178572,8 +180330,10 @@ /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard/far) "xxC" = ( -/obj/structure/table/rack, -/obj/random/loot, +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "xxE" = ( @@ -178948,6 +180708,7 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden{ dir = 10 }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/wing/starboard/far) "xzE" = ( @@ -178971,8 +180732,12 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/hapt) "xzK" = ( +/obj/random/junk, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/aft) +/area/horizon/maintenance/deck_2/wing/starboard/far) "xzL" = ( /obj/effect/floor_decal/industrial/warning{ dir = 8 @@ -179342,6 +181107,14 @@ }, /turf/simulated/floor/tiled, /area/horizon/security/hallway) +"xCH" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/random/dirt_75, +/obj/random/maintenance_junk_or_loot, +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_2/research) "xCI" = ( /obj/structure/platform/ledge{ dir = 4 @@ -179431,7 +181204,10 @@ "xDi" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/tiled/dark, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/starboard/far) "xDm" = ( /obj/structure/machinery/light{ @@ -179475,7 +181251,7 @@ pixel_y = 24 }, /obj/effect/floor_decal/industrial/warning/full, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/unsimulated/floor/plating, @@ -179831,10 +181607,12 @@ /turf/simulated/floor/tiled/full, /area/horizon/command/heads/om) "xFD" = ( -/obj/structure/railing/mapped, -/obj/structure/lattice/catwalk/indoor, +/obj/effect/decal/cleanable/dirt, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, /turf/simulated/floor/plating, -/area/horizon/maintenance/deck_2/research) +/area/horizon/maintenance/deck_1/wing/starboard) "xFJ" = ( /obj/structure/disposalpipe/segment{ icon_state = "pipe-c" @@ -180204,6 +181982,9 @@ }, /area/horizon/holodeck/source_moghes) "xIz" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/cryo) "xIB" = ( @@ -180217,12 +181998,12 @@ /obj/structure/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/main/interstitial) "xIF" = ( /obj/effect/floor_decal/industrial/outline/grey, /obj/structure/machinery/vending/quick_e_meals, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_3/cafe) "xIH" = ( /obj/structure/window/shuttle/scc_space_ship, @@ -180338,7 +182119,7 @@ dir = 8 }, /obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/dark/cooled, +/turf/simulated/floor/tiled/dark, /area/horizon/ai/upload) "xIY" = ( /obj/structure/bed/stool/chair/office/light{ @@ -180406,7 +182187,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/plating, @@ -180428,6 +182209,7 @@ master_tag = "airlock_horizon_deck_1_aft_port_1"; name = "airlock_horizon_deck_1_aft_port_1" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/auxatmos) "xJO" = ( @@ -180723,7 +182505,7 @@ /area/horizon/service/cafeteria) "xLT" = ( /obj/structure/lattice/catwalk/indoor/grate/dark, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 4 }, /turf/simulated/floor/plating, @@ -180820,7 +182602,8 @@ /obj/structure/cable{ icon_state = "1-4" }, -/turf/simulated/floor/tiled, +/obj/structure/lattice/catwalk/indoor/grate/dark, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "xMC" = ( /obj/effect/floor_decal/industrial/outline_straight/yellow{ @@ -180918,7 +182701,7 @@ req_one_access = list(2,3,4) }, /obj/effect/floor_decal/industrial/hatch_door/yellow, -/turf/simulated/floor/tiled/full, +/turf/simulated/floor/tiled/dark/full, /area/horizon/security/evidence_storage) "xNh" = ( /obj/effect/floor_decal/industrial/outline/service, @@ -180950,6 +182733,9 @@ }, /area/horizon/medical/morgue) "xNk" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, /turf/simulated/floor, /area/horizon/ai/upload_foyer) "xNm" = ( @@ -181049,6 +182835,9 @@ /obj/random/dirt_75, /obj/random/dirt_75, /obj/random/dirt_75, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, /turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "xNW" = ( @@ -181212,7 +183001,7 @@ "xPf" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden, /obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, /obj/structure/lattice/catwalk/indoor/grate/dark, @@ -181493,8 +183282,8 @@ /area/horizon/engineering/lobby) "xRs" = ( /obj/structure/machinery/atmospherics/pipe/manifold/visible, -/obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/auxatmos) "xRu" = ( /obj/structure/closet/crate, @@ -181615,8 +183404,7 @@ dir = 4 }, /obj/structure/railing/mapped, -/obj/random/maintenance_junk_or_loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_1/operations/starboard/far) "xSC" = ( /obj/structure/bed/stool/padded/red, @@ -181657,8 +183445,9 @@ /turf/simulated/floor, /area/horizon/maintenance/deck_3/aft/starboard/far) "xSQ" = ( -/obj/structure/closet/crate/bin, -/obj/random/med_stack, +/obj/effect/decal/cleanable/dirt, +/obj/structure/whiteboard/portable, +/obj/structure/machinery/alarm/north, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_1/operations/starboard) "xSV" = ( @@ -181698,7 +183487,10 @@ /obj/structure/sign/securearea{ pixel_y = 32 }, -/turf/simulated/floor, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/aft/port/far) "xTg" = ( /obj/effect/map_effect/window_spawner/full/reinforced/firedoor, @@ -181859,7 +183651,8 @@ /turf/simulated/floor/tiled, /area/horizon/hangar/intrepid/interstitial) "xTV" = ( -/obj/structure/machinery/light/small/emergency, +/obj/structure/lattice/catwalk/indoor, +/obj/structure/machinery/light/small, /turf/simulated/floor, /area/horizon/maintenance/substation/civ_d3) "xTW" = ( @@ -182008,7 +183801,7 @@ /obj/effect/map_effect/door_helper/unres{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/operations/break_room) "xUR" = ( /obj/structure/closet/secure_closet/guncabinet{ @@ -182027,9 +183820,12 @@ /area/horizon/engineering/hallway/fore) "xUW" = ( /obj/structure/machinery/alarm/west, -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 8 }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/port) "xUY" = ( @@ -182061,7 +183857,10 @@ dir = 4 }, /obj/random/maintenance_junk_or_loot, -/turf/simulated/floor, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_2/wing/port/far) "xVj" = ( /obj/structure/machinery/camera/network/research{ @@ -182115,8 +183914,15 @@ /obj/effect/floor_decal/industrial/warning{ dir = 5 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark, /area/horizon/maintenance/deck_3/security/port) +"xVE" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/machinery/light/small/floor, +/turf/simulated/floor/wood, +/area/horizon/service/cafeteria) "xVO" = ( /obj/effect/floor_decal/industrial/warning{ dir = 5 @@ -182331,7 +184137,7 @@ /obj/effect/map_effect/door_helper/unres{ dir = 8 }, -/turf/simulated/floor, +/turf/simulated/floor/tiled/dark/full, /area/horizon/holodeck_control/beta) "xXI" = ( /obj/structure/table/rack, @@ -182615,7 +184421,8 @@ }, /obj/structure/machinery/light/small, /obj/random/dirt_75, -/turf/simulated/floor/tiled/dark, +/obj/structure/lattice/catwalk/indoor, +/turf/simulated/floor, /area/horizon/maintenance/deck_3/auxatmos) "xZE" = ( /turf/simulated/wall, @@ -182647,7 +184454,7 @@ "xZR" = ( /obj/structure/closet, /obj/random/loot, -/turf/simulated/floor/plating, +/turf/simulated/floor/tiled/dark/full, /area/horizon/maintenance/deck_2/wing/port) "xZU" = ( /obj/structure/machinery/atmospherics/pipe/simple/hidden/supply, @@ -182788,9 +184595,6 @@ /obj/effect/floor_decal/industrial/warning{ dir = 5 }, -/obj/structure/machinery/light{ - dir = 1 - }, /turf/simulated/floor/tiled/dark/full, /area/turbolift/scc_ship/morgue_lift) "yaW" = ( @@ -182924,6 +184728,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/lattice/catwalk/indoor/grate/dark, /turf/simulated/floor/plating, /area/horizon/maintenance/deck_2/wing/starboard/far) "ybZ" = ( @@ -182936,10 +184741,7 @@ /turf/simulated/floor/holofloor/wood, /area/horizon/holodeck/source_sauna) "ycp" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark/full, +/turf/simulated/floor/carpet/rubber, /area/horizon/engineering/atmos/storage_maintenance) "ycu" = ( /obj/effect/floor_decal/industrial/warning{ @@ -182969,7 +184771,7 @@ }, /area/shuttle/syndicate_elite) "ycB" = ( -/obj/structure/machinery/light/small/emergency{ +/obj/structure/machinery/light/small{ dir = 1 }, /turf/simulated/floor/reinforced/airless, @@ -183209,6 +185011,9 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, +/obj/structure/machinery/light/small{ + dir = 8 + }, /turf/simulated/floor/tiled/dark/full, /area/horizon/shuttle/intrepid/main_compartment) "yef" = ( @@ -183661,6 +185466,9 @@ /obj/item/circuitboard/optable, /obj/item/circuitboard/security/engineering, /obj/item/circuitboard/grill, +/obj/structure/machinery/light/small{ + dir = 4 + }, /turf/simulated/floor/carpet/rubber, /area/horizon/maintenance/deck_1/workshop) "ygu" = ( @@ -184051,6 +185859,13 @@ /obj/effect/floor_decal/corner/mauve/full, /turf/simulated/floor/tiled/white, /area/horizon/rnd/xenobiology) +"yji" = ( +/obj/random/maintenance_junk_or_loot, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/dark/full, +/area/horizon/maintenance/deck_2/wing/port/far) "yjj" = ( /obj/effect/floor_decal/spline/plain{ dir = 4 @@ -184067,15 +185882,15 @@ /turf/simulated/floor/grass/no_edge, /area/horizon/service/hydroponics/lower) "yjp" = ( -/obj/structure/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/effect/floor_decal/industrial/warning{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/stool/chair/office/dark{ + dir = 8 }, -/obj/effect/floor_decal/spline/fancy/wood, -/turf/simulated/floor/wood, -/area/horizon/service/bar) +/turf/simulated/floor/tiled/dark, +/area/horizon/maintenance/deck_1/operations/starboard/far) "yjt" = ( /obj/structure/machinery/portable_atmospherics/canister/oxygen, /obj/effect/floor_decal/industrial/outline/medical, @@ -202315,7 +204130,7 @@ swu swu ooy wTz -dMd +nOK ooy swu eSV @@ -203323,7 +205138,7 @@ eSV eSV tua gsg -kVr +xXe xxB mug tss @@ -203585,13 +205400,13 @@ rfC rfC tss jFW -efI -efI -tqS -tqS -tqS -tqS +qBY +qBY tqS +yjp +rkL +rkL +qBY efI xSt aDC @@ -203837,7 +205652,7 @@ vQY wqY taW bJk -jAH +mEa jAH sSA hnj @@ -204090,8 +205905,8 @@ mhP rfC rfC rhw -cXF -jaK +jBv +meP fpc vQA gJW @@ -204342,13 +206157,13 @@ eSV eSV rfC prG -jaK +new klF iQp kVr -jaK -jaK -cXF +sqS +jBv +meP taW nkF kLq @@ -204599,17 +206414,17 @@ eSV eSV tua oxe +jBv +jBv jaK -jaK -jaK -xqg +kVr cXF sLa fIn taW lNe tKq -wsN +dKI taW pYX sCS @@ -204856,8 +206671,8 @@ eSV eSV tua oxm -jaK -cXF +jBv +jBv meP taW taW @@ -205121,11 +206936,11 @@ bMo nju ayn taW -vjm +hCL gUT +vRZ taW -taW -ahH +dzV wlr wlr htA @@ -205379,10 +207194,10 @@ hFg hFg taW bdv -bdv +mfb taW -fxq -dzV +taW +ahH dPK jxs yjC @@ -205634,8 +207449,8 @@ sQE sQE ida hFg -oxe -cXF +jSc +joO aBI taW wQg @@ -205892,7 +207707,7 @@ evv lnz hFg kdG -cXF +rjd xqL jHt mAe @@ -206149,10 +207964,10 @@ aoJ lnz hFg jOM +eCs cqB -fvR jHt -mAe +dKI mcw wlr wji @@ -206405,9 +208220,9 @@ scN aoJ lnz xZm -oxe -oGs -sjz +vjm +nXu +hQt jHt mAe uTy @@ -206663,8 +208478,8 @@ iZD lnz xZm sTe -xXe -xXe +wMC +kMN taW owI uKF @@ -207955,13 +209770,13 @@ nfd lcZ jxL uvv -rHt -uvv -afe +jdo +fhO +hCj kbC ppE -rHt -uvv +jNs +gwi vVL aOe jgx @@ -208733,7 +210548,7 @@ uOT uOT tJW qHn -hWT +gqp hWT jgx bzL @@ -208976,7 +210791,7 @@ nNk dmm hFg plB -rHt +xFD tJW dIe sxl @@ -209747,7 +211562,7 @@ wbG nad nid uCN -akV +aCt tJW hQh avE @@ -210002,7 +211817,7 @@ vht uUo mwG nad -dUZ +woF hjs woF tJW @@ -210513,8 +212328,8 @@ huR idV diA qGr -rMc gWV +wsN quK rXL opl @@ -211294,9 +213109,9 @@ gRK xnE nXe iFI -gou +nxU +oUx vrJ -gou san bGJ vBR @@ -211550,12 +213365,12 @@ lTB gRK iDV nFZ -gou -gou +iTN +lKW gKz dta pyo -gou +lme rvf ecj gRK @@ -211806,14 +213621,14 @@ wtJ lTB gRK xSQ -jbx -gou -gou -gou -pws +aCR +moG +nwM +pAe +hWT sIk -lKW -lKW +hWT +hWT sgF uEI hWT @@ -212063,8 +213878,8 @@ hrS avG gRK dTn -jbx -gou +iTN +wwN lKW gou fta @@ -212317,17 +214132,17 @@ ygr meB mUv uCN -akV +aCt gRK kll -vrJ +euC mMO -vrJ +tvn dsf iYO xMz rUY -vrJ +eFv fSb wZA beE @@ -212572,7 +214387,7 @@ pWo meB meB meB -jTM +gDu bHz gDu gRK @@ -212828,11 +214643,11 @@ xMp vGz aCt ssf -qLQ -pkJ +tbR +coT uCN -aCt -sae +nsQ +vDf sae qLQ ssf @@ -213099,7 +214914,7 @@ lJn jQA dyx uJc -pzV +ttN wZA dFP jhe @@ -213843,10 +215658,10 @@ hPJ lKF cbM gHe -cBy +gHe wVl wdd -cBy +gHe ieG oXm lKo @@ -213855,7 +215670,7 @@ iBP dYV kYZ lKo -eYo +qqP bGo fFU wXy @@ -214356,7 +216171,7 @@ ahB saD bAv cRS -moN +dMd moN lTV lTV @@ -214372,7 +216187,7 @@ lKo bni pAa liX -qfa +std lQd lQd lQd @@ -214883,7 +216698,7 @@ mbO mwx chZ lKo -wcB +qqP ndG hGt hGt @@ -215140,7 +216955,7 @@ lKo unM lKo lKo -okz +qqP sqM hGt ozx @@ -215655,7 +217470,7 @@ hie jvh lKo vIR -cPd +nUL hGt cbH dnK @@ -215664,7 +217479,7 @@ klH fOM hGt lsX -aPJ +esN qwi nRa lbj @@ -215912,7 +217727,7 @@ rzj mHI lKo eXT -jdo +nUL hGt irM gIh @@ -216426,7 +218241,7 @@ pcn det lKo ifu -gTF +nUL hGt hGt iKv @@ -216692,7 +218507,7 @@ iNk iNk iNk aAX -aAX +jqg qwi qwi ieR @@ -216941,7 +218756,7 @@ pdw tVN sJO sJO -sJO +wTA sJO cyD koZ @@ -217243,7 +219058,7 @@ wGg dAO ixB esA -esA +fUs fUs iJG fdt @@ -217455,7 +219270,7 @@ kBl jwp ooP kST -oWD +obv oWD cyD woc @@ -217489,7 +219304,7 @@ hdc bPS uVW nxM -yed +lJz dwn oEP dwn @@ -221829,7 +223644,7 @@ jRR fpH uxc sio -djZ +vZK vYZ oeT sxb @@ -222086,7 +223901,7 @@ owQ ahU sBT sQy -vZK +djZ vYZ oeT nEo @@ -222600,7 +224415,7 @@ owQ ahU tEX gXz -vts +bxY vYZ oeT uIj @@ -222857,7 +224672,7 @@ owQ ahU pPQ dpe -vts +pPQ vYZ hTy hTy @@ -223112,14 +224927,14 @@ uGV uGV lZy ahU -tEX +dOk vgh rpV hmM -blI +iqK uku esc -rpV +gel gBg xgH qEr @@ -223863,7 +225678,7 @@ iHh iHh hgK qGq -lzd +bjj aus umn jwD @@ -224142,7 +225957,7 @@ cVG xzl mbV rtS -vts +vti eFV onW nLE @@ -224639,7 +226454,7 @@ aus bti kYw mha -lzd +xxb eMv nHV nLo @@ -224650,7 +226465,7 @@ nLo nHV qiR yfU -amR +gxi coJ cVG oDt @@ -224941,7 +226756,7 @@ tzF ggJ ggJ ggJ -ggJ +eBH rNG qCn bdZ @@ -225455,7 +227270,7 @@ bbj jFo jFo gNE -gNE +ltn gNE gNE gNE @@ -226983,7 +228798,7 @@ oRJ eLF jVV dHs -bBk +jMp eEw ktX wIE @@ -227989,10 +229804,10 @@ dfr oDa lHu dfr -sRg -rEc -fLP -jMM +xNA +fvR +bgD +gxi dok dok dok @@ -228024,8 +229839,8 @@ caC lnO bhl bhl -lnO rWr +lnW bdZ bdZ bdZ @@ -228246,10 +230061,10 @@ aJU aJU aJU xkJ -sRg -rEc -bgD -kMN +xNA +dYE +sha +gxi dok bJR eJj @@ -228281,7 +230096,7 @@ iBn xie iBn hrU -iBn +bSs swm eTt xth @@ -228503,9 +230318,9 @@ aJU aJU aJU lHu -sRg -rEc -fLP +xNA +xNA +xNA woP dok oZQ @@ -228760,10 +230575,10 @@ aJU aJU aJU xkJ -sRg +xNA rEc -bgD -fLP +hMn +gxi dok uBS vrM @@ -229017,10 +230832,10 @@ aJU aJU aJU lHu -sRg -rEc -bgD +xNA +fgy bgD +gxi dok dok dok @@ -229042,7 +230857,7 @@ upf lgr lgr fVa -jUl +rBO scr njf xZg @@ -229274,8 +231089,8 @@ aJU aJU aJU xkJ -sRg -sRg +xNA +xNA xNA xNA gLM @@ -233411,7 +235226,7 @@ eSV eSV eSV xDX -jNs +kgm jpS vsr eSV @@ -264491,7 +266306,7 @@ sSL mvX fjk sSp -usI +sSL sSL okw bGR @@ -264500,14 +266315,14 @@ okw laV sDE fqa -sDE +naT sDE sDE jnC sDE fqa siH -vti +sDE fQP aef urY @@ -264748,7 +266563,7 @@ lqt oRC bsJ kti -oRC +kti kzy okw uDy @@ -264761,12 +266576,12 @@ ncE jGV lWb gGL -qgf +gfP fjk kvT qjG fjk -kiI +qjh lHQ mzX fjk @@ -265003,10 +266818,10 @@ wSb xPN iNQ syu -rSV +srI gMP -kti -kti +srI +srI xid peq lFZ @@ -265014,7 +266829,7 @@ okw mCO tkj fjk -xxC +srI nNG haz cJN @@ -265023,7 +266838,7 @@ fjk iWn hCI qqm -aPd +kiI lHQ qjH fjk @@ -265259,11 +267074,11 @@ eSV tYz rPj sSL -mvX -kti -kti +lFe +srI +lCc hDV -qgf +xxC okw oxM xrs @@ -265272,15 +267087,15 @@ baX uUa qem srI -qjG -qjG +uTo +haz tOX srI qem -nED -srI +kvT +lUN vBe -iuG +kiI lHQ jTy fjk @@ -265519,7 +267334,7 @@ fjk fjk tfB fjk -ixJ +fjk fjk okw okw @@ -265774,9 +267589,9 @@ aHz fjk tWX nWa -kti +srI tYc -pnw +jUn lgY jUn nUl @@ -265791,10 +267606,10 @@ wnP aMt kZc srI -nED +kvT klY fjk -nED +kvT qfP fjk fjk @@ -266030,17 +267845,17 @@ tYz jQD fjk sSp -kti +uZR rSV ybU -bsJ +xzK fjk sMp +fQq +fQq +pOa qgf -qgf -vMb -qgf -qgf +fQq fRc rWx ffJ @@ -266308,8 +268123,8 @@ lik qWj sbt eNL -iuG -qjG +kiI +pws efY ucz fjk @@ -266547,7 +268362,7 @@ cxh gIJ iWj jmf -jNB +wcB hwV epZ oly @@ -266802,9 +268617,9 @@ fJX fJX tim byC -gAs +jNB vkO -tDL +jNB tfU pGJ mKw @@ -267057,11 +268872,11 @@ rZc lkX fJX wYS -iWj +jNB sam qog sdl -pEd +qHG bSi wjs mEQ @@ -267314,10 +269129,10 @@ xnV njK fJX mYY -pEd +qec kov wrk -pOa +vkO sDi hwV qJo @@ -267570,10 +269385,10 @@ tYz mHE fJX fJX -iWj +rqX +fJX fJX fJX -jNB sdl qvA bSi @@ -267827,10 +269642,10 @@ rZc kiT rir deU -iWj +gog fJX -gLE -jNB +swW +tgl sdl kRU bSi @@ -268084,7 +269899,7 @@ xnV fJX bjK gNJ -rDN +cPd eQA rDN mjM @@ -268341,9 +270156,9 @@ bnZ fJX lNC esh -pEd -gqp -tDL +cfP +fJX +pGF dvt hcp peN @@ -268598,9 +270413,9 @@ blA fJX snE esh -pEd -gqp -pEd +cfP +fJX +mor fke kJG gLE @@ -268863,16 +270678,16 @@ uIt wat tfU mZz -wxe -gla -gla -gla +mZz +mZz +mZz +mZz aUO wxe loS wij oXf -moG +oXf eXH jgu aNy @@ -269109,7 +270924,7 @@ eSV tYz mHE kzH -vnD +xqg lQN vnD lXk @@ -269117,11 +270932,11 @@ fJX fJX bvs dFA -pEd +ufx fJX jRb cnn -wxe +vcp pfo vYo vBL @@ -269366,9 +271181,9 @@ eSV rZc kiT btW -pEd -tlD pFs +tlD +btW baC baC fJX @@ -270393,15 +272208,15 @@ tHf exF xqu pEd -pFs +btW fJX fJX fJX fJX fJX fpW -wjV -gqp +eIx +nHy kEI fJX rPD @@ -271429,7 +273244,7 @@ qyO bnl hLU kDz -jkr +bzM jkr jkr pyM @@ -271679,7 +273494,7 @@ nXR iPo pYS jOd -oJM +pZu gFm kdu uWf @@ -271688,7 +273503,7 @@ oaF oaF oaF oaF -uTo +gun nez rdJ dod @@ -271937,14 +273752,14 @@ dUK ppk rsr jqe -oJM +pnw nbn jWI sjO bzr pTG uyE -cFn +uyE hNb nLu nwj @@ -272193,7 +274008,7 @@ ppk ppk ppk sdp -sdp +rOO bVg akk aCW @@ -272201,8 +274016,8 @@ sjO bzr svM pTG -ufx -eBH +pTG +hNb vaL nwj qNa @@ -272227,7 +274042,7 @@ dhN dhN dhN dhN -fUl +ihL uHG aaw dEI @@ -272974,7 +274789,7 @@ sON ltE dUV khW -ebm +ewG nwj vwY eTz @@ -273247,7 +275062,7 @@ tWP cxb cxb jdq -aFJ +tTJ chu tWP tNC @@ -273495,10 +275310,10 @@ cgw hvn iBh iBh +cFn +iBh +iBh iBh -dBq -oJM -oJM oMH tWP vOb @@ -273740,20 +275555,20 @@ eNf oGM sWx cVF -sWx +tDV utL jCu kvH ape nGt dzZ -ape +xtE mBL -euC +ape +ape xtE -xtE -dYE -bcf +ape +ape yki pan qVv @@ -274513,7 +276328,7 @@ fRB ykj aEs leL -oZN +kEE qgh rmS ipa @@ -274744,7 +276559,7 @@ dBi lTn cXW lTn -lTn +dBi lTn lTn xHQ @@ -274782,7 +276597,7 @@ rmS yaR caI gOt -prj +lss rPd nUu vmb @@ -276312,7 +278127,7 @@ jwC fpR fpR fQk -lUN +rjI dXe ygJ ygJ @@ -277083,8 +278898,8 @@ unC qiC fpR rFQ -oZN -iJq +pzV +aio ygJ tAr kqK @@ -277336,7 +279151,7 @@ gDn pbP tWW tDd -tvn +unC qiC fpR rFQ @@ -277854,7 +279669,7 @@ oZN uga uga mfn -teO +nti hdD fXk bWj @@ -278368,7 +280183,7 @@ jGr xGE fpR rFQ -teO +oGs aio xlm aUI @@ -279396,7 +281211,7 @@ pPE stI kfX qaV -tcA +aio xlm xlm uwk @@ -279652,7 +281467,7 @@ bim bSB whQ mCw -jur +gTF iZk xlm xlm @@ -279688,7 +281503,7 @@ nku msU qVW gGT -mvt +qVW kYT fhz rfq @@ -279908,7 +281723,7 @@ udq tqs bSB xVm -teO +aSC jur nLs koc @@ -279953,10 +281768,10 @@ vlf gyf sAM wwp -qBY vNU +fNn fqF -yjp +eGN stz fui jrl @@ -280165,7 +281980,7 @@ gTR hIU xeI whQ -oZN +mCw eTx aIT koc @@ -280213,11 +282028,11 @@ hQe ezA ofw ozK -iVG +eGN moS fui jrl -sdI +mEk tnA crQ tUB @@ -280470,7 +282285,7 @@ ejL ezA wUG pRL -eGN +pvs faY fui jrl @@ -280937,7 +282752,7 @@ tqs bSB whQ jzS -ekN +qTS jdZ qTS jEE @@ -281176,7 +282991,7 @@ cSv bHl cwA ksO -mHM +iGQ aSM oqf lyi @@ -281965,8 +283780,8 @@ qEQ nIl stI stI +jTM tHu -coT xIz xtj jHa @@ -282205,7 +284020,7 @@ egn jxA sRp wUd -wUd +dFV bVJ wUd rBX @@ -282219,7 +284034,7 @@ iUf aFt nYs uef -bSB +bWK fKx stI stI @@ -282527,7 +284342,7 @@ iGf oiD pqM wwv -rxQ +qQf fje wFI wFI @@ -282736,10 +284551,10 @@ vKz dwE lGs ujA -lGs +hgJ dwE upO -bSB +fxq gvf stI oaA @@ -282988,10 +284803,10 @@ dLd tlL gOK lNY -lql +utO wWv djb -utO +lql uFY lql lql @@ -283765,8 +285580,8 @@ bLv bLv bLv ecg -rkL -nLp +umG +mvt ikp gst kBx @@ -284022,10 +285837,10 @@ bLv bLv bLv ecg -rkL qCx +pTN xrf -gst +edn mlB pQd pwm @@ -284279,8 +286094,8 @@ bLv bLv bLv ecg -rkL -lJz +umG +nLp qRi rCg iAR @@ -286328,7 +288143,7 @@ iNU enb uWn nJg -vxx +rMc vxx lbd dpx @@ -286370,7 +288185,7 @@ oGh kwI aoE aoE -yfn +jaF leN nBM pxy @@ -287093,8 +288908,8 @@ wuX dHB aTV ycp -aTV -aTV +ycp +ycp hzs vwP ycF @@ -287367,7 +289182,7 @@ cwK ceN nKX vQS -nqF +rTg fnk qtl cyZ @@ -287624,7 +289439,7 @@ xMb xRv hQo dZD -nqF +rTg fnk ovK cyZ @@ -287861,12 +289676,12 @@ epn uOD jOO vDb -xzK +jOO rST -xzK +jOO faM vnP -ata +jOO jBy qmF fHs @@ -287882,8 +289697,8 @@ nqF ydZ nqF nqF -fnk -ovK +paQ +qgE cyZ ufu hNT @@ -288118,7 +289933,7 @@ jiy dzv jOO ufs -rTp +qCy vnP dYY dYY @@ -288376,7 +290191,7 @@ uOD jOO pRY ubX -rTp +qCy dYY oOR lzQ @@ -288397,11 +290212,11 @@ tmk rJl pAT fnk -qgE +ovK cyZ goa dkb -bAg +bdp qKU cyZ mwl @@ -288633,7 +290448,7 @@ dsL aIU pRY tgg -rTp +qCy dYY pUg hxH @@ -288887,7 +290702,7 @@ bqw ovm cqF jOO -qec +jOO pRY oTH qCy @@ -288911,7 +290726,7 @@ nXc uGo uGo dVf -ovK +qgE cyZ dtb jqj @@ -289142,7 +290957,7 @@ oUm dOx qJs ovm -ubX +ixJ jOO yak pRY @@ -289401,7 +291216,7 @@ ovm ovm oep jOO -wMC +jOO afY afY afY @@ -289658,7 +291473,7 @@ ovm tAI tAI tAI -jOO +nmJ afY hoc xRV @@ -290463,7 +292278,7 @@ pCI oaL hKx apM -lkG +xCH hCQ hCQ hCQ @@ -291209,7 +293024,7 @@ twH uXi cwC gbF -gbF +qcY eMG gbF eRe @@ -292252,7 +294067,7 @@ hfB tuY gGK pfE -qgE +ovK neT jCF gwn @@ -292265,7 +294080,7 @@ jyQ wGF qTu bJf -fwI +aPd abh efg gos @@ -292507,9 +294322,9 @@ cfm cfm cfm tuY -dQA +paQ rlz -bjl +qgE neT jCF jCF @@ -292758,15 +294573,15 @@ rrx nRV uJH vZd -xFD +rim cfm cfm cfm cfm tfn -gBd -qmR -ovK +czN +eLe +gUK tuV jCF gwn @@ -292778,7 +294593,7 @@ mFY rmO mso qTu -iHT +wjV iaC fqG fTe @@ -293786,7 +295601,7 @@ jVY kXk eXV kRy -czN +rim rIA gwn gwn @@ -294043,15 +295858,15 @@ kdc xFe eXV lVs -czN +rim rIA gwn gwn gwn neT paQ -qmR -ovK +okz +qgE ohz ohz moM @@ -294300,14 +296115,14 @@ jgB rkM eXV tXc -czN +rim rIA gwn gwn gwn neT fnk -qmR +okz ovK mFY qcM @@ -294574,13 +296389,13 @@ pnP hpD hvc kmb -ozc +usI rKb taE taE bqZ tXd -ash +dQA fTe xtB nXi @@ -294837,7 +296652,7 @@ twJ hPT bqZ sKU -ncB +ggG fTe gsR fFV @@ -295094,7 +296909,7 @@ sUE fwI laK tXd -oMW +kCc fTe meW mbR @@ -295608,7 +297423,7 @@ fpo hdM bqZ tXd -fwI +dLS sxD fTe fTe @@ -295865,7 +297680,7 @@ gll ncB bqZ mfu -fwI +dLS lkJ qTu oHF @@ -296122,7 +297937,7 @@ ash jGx bqZ tXd -iaC +fxg qTu qTu kBv @@ -296383,7 +298198,7 @@ qTu qTu vgA llu -iey +clc vTm kWK obe @@ -296635,12 +298450,12 @@ rzi qYc pnk eAZ -uZR -iey +ass +bEr xUW -iey -iey -llu +sDx +sDx +iVb nSn xnT qHe @@ -296892,12 +298707,12 @@ rzi xqI alf bGw -nBW -iey -iey -llu -iey -iey +ass +ass +ass +tcA +ass +ass tlN hNn xXl @@ -297146,16 +298961,16 @@ eDy qvd lAg rzi -iey -iey nSn -nBW -iey -iey +nSn +elV +agT +ass +ata nfe -xqI -iey -iey +gAs +hNu +hNu cTn lgd rzi @@ -297406,8 +299221,8 @@ rzi xqI nBW iey -nSn -iey +clc +ass xqI cYQ eRy @@ -297921,7 +299736,7 @@ rzi rzi rzi rzi -iey +ass iQH rzi vHq @@ -298154,7 +299969,7 @@ mGC dZt qBg bce -bvp +kmv bvp vbn uwY @@ -298412,7 +300227,7 @@ htU sWD eXV cOz -sHs +sxQ bri uwY dQT @@ -298669,7 +300484,7 @@ rlk kpN kpN jPS -ipQ +icR bvp uwY hAg @@ -298683,7 +300498,7 @@ boy egy nsw uwY -pAV +cVh oom wZE wec @@ -298940,12 +300755,12 @@ rjR rGZ itL uwY -pAV +cVh dCz -cdm -cdm -xsf -cdm +lZu +iuG +cBy +iuG aMX aMX aMX @@ -299200,9 +301015,9 @@ uwY eVJ fEm xsf -ipQ -sHs -sHs +iJq +iJq +iJq aMX hqr bMK @@ -299453,19 +301268,19 @@ uwY mEd hql uwY -pAV +dUZ wTw cuO xNU bxI -sHs -ihk +eYo +sjz aMX pGi vtv -ihk -pMv -ihk +bvp +uiM +cdm rwq piA bWZ @@ -299697,7 +301512,7 @@ eTS sBe aMX ihk -ihk +amR aQm acr rIU @@ -299715,12 +301530,12 @@ oYa wSF vON uDg -ihk -ihk +aSk +aSk aGt -ihk -ihk -sHs +bvp +bvp +bvp uiM ipQ ipQ @@ -299954,7 +301769,7 @@ qJp bTv aMX pAV -pAV +bcf bvp uwY mOQ @@ -299967,10 +301782,10 @@ uwY oHl aGL uwY -pAV -ihk +qdE +wzp oMt -aMX +iZX lad hGA rjn @@ -300225,7 +302040,7 @@ uwY uwY uwY kpN -cdm +qLX xuS aOa doU @@ -300233,7 +302048,7 @@ jXE bsd jOh vwJ -aSk +gda aSk aIW aMX @@ -300488,7 +302303,7 @@ nfw ldZ oOz okF -std +aSk aSk aSk kIR @@ -300731,15 +302546,15 @@ iml ssr lYo pxO -cdm +bvp kpN qKF -ihk -pAV -pAV +ffQ +lzd +lzd gnX kpN -xsf +yji oBu lJr wbs @@ -301002,7 +302817,7 @@ kOu kOu kOu kOu -std +aSk xVh aMX sYx @@ -301253,14 +303068,14 @@ evC evC evC sKD -qLX +veP cFr veP dWf uJT kOu hEh -eLe +ekP pAr akB ntb @@ -301506,13 +303321,13 @@ aMX sKD sKD sKD -evC -evC -evC +sKD +sKD +sKD sKD qnV -nwM -lwq +bBm +hnP exE xgc kOu @@ -301760,17 +303575,17 @@ qwo bBm bUr bBm +nED bUr -bUr -sKD -sKD -sKD -sKD +hnP +bBm +sYd +obs sKD axx rVl bvV -mxY +bjl dqM kOu jrL @@ -302021,17 +303836,17 @@ hnP ssK hDX hDX -ewG -lFe +hDX +hDX suc -gfP +hDX qDP lpw uPG -kmv -kmv pXR -ffQ +pXR +pXR +pXR aeY eZR jZH @@ -302279,11 +304094,11 @@ swi hnP bBm sGd -bBm +hnP kOu huQ aAl -sGd +rTp bXN rSt rSt @@ -302291,8 +304106,8 @@ iMi tKz rFk dyP -jSj -eZR +bBm +bBm eZC gwI gwI @@ -302549,7 +304364,7 @@ gKj dHQ qzR dKr -fQq +bBm vQV het het @@ -341323,7 +343138,7 @@ siv nqk qmH cev -hTl +uxQ wFH sAp bPE @@ -341583,7 +343398,7 @@ ttm wqg olm bTe -rjd +hHF nzt nKW eAX @@ -341841,7 +343656,7 @@ tkY hTl eDs dHm -yiS +kYu nKW jZB mfe @@ -342358,7 +344173,7 @@ bom nKW cgO qTR -mfe +gla nZt ofr eai @@ -342613,9 +344428,9 @@ ltD fLk hHF gGk -gGk -gGk -mfe +ekN +pMv +gla xQw ofr eai @@ -342870,8 +344685,8 @@ gdB fLk mFK hBM -gGk -mfe +gla +gla vKx ofr bMX @@ -345469,7 +347284,7 @@ phb fZL mOz iPC -hkE +iVG tZu tJp bpu @@ -347742,10 +349557,10 @@ mBr kQc jGE fvx -vvr +sFX sFX geN -vvr +sFX dUo eFc hll @@ -349537,7 +351352,7 @@ pXI cfh nKc hZG -dMP +kGJ meo fyf fyf @@ -350595,11 +352410,11 @@ wZG kcX nFG twr -rag +hHr nZM xCI hSB -fFN +xVE bdD wZG cah @@ -350835,7 +352650,7 @@ xrU iyG biD lXK -mgM +riV abT iyG iyG @@ -351604,7 +353419,7 @@ xZa wyv hxs iyG -mgM +tEj pAi mgM glg @@ -352382,7 +354197,7 @@ iyG iyG iyG rJP -vrr +dlo jQL lzr nLb @@ -352639,7 +354454,7 @@ wyA dAg uDM oZY -vrr +dlo pKC oyv nLb @@ -352892,13 +354707,13 @@ pzX syg bhb dTO -oZY -hNu -hNu -iVb -oZY +dlo +dlo +dlo +dlo +dlo pKC -jQL +nPv nLb nLb nLb @@ -353150,7 +354965,7 @@ fNL bhb hTF fHu -oZY +eks dQk qbh vrr @@ -353375,7 +355190,7 @@ rVj xLZ qWk qGv -tOi +bvM wQG lLC bOg @@ -353667,7 +355482,7 @@ pPT sph xvQ qpd -oUx +dlo xVC moQ tOS @@ -354160,7 +355975,7 @@ eyA ngB rvn nDP -vpt +dnX oBb wNN wNN @@ -354669,7 +356484,7 @@ uyp eyg mgc eJt -rOO +lqg lBL ngB hap @@ -354949,7 +356764,7 @@ phj jCj jCj kEf -eeO +iqR mGA avK xZA @@ -355207,7 +357022,7 @@ gIo fpL oPN knB -eeO +fLP jcR jpk xNS @@ -355442,11 +357257,11 @@ cJa mSl ngB oKR -mEk -naT -pqm -pTN -ihL +auD +tEm +tEm +sbd +qIf oKR oKR sRg @@ -355700,9 +357515,9 @@ ngB ngB oKR xtc -hCL +tEm wZJ -pvs +sbd jBf oKR oKR @@ -355721,7 +357536,7 @@ gIo wed qfD til -cLM +bdz sWq usQ jCj @@ -355957,9 +357772,9 @@ tnJ mUn oKR auD -pqm -tEm -pqm +xoq +aPJ +kWH qIf oKR oKR @@ -355975,10 +357790,10 @@ cKu cKu phj ajx -oPN +fHH fXs eeO -cLM +jMM eXX sJX jCj @@ -356213,10 +358028,10 @@ eli mUn xut oKR -vsg -vUc -vUc +pqm +mvR vUc +cxP vsg oKR xut @@ -356233,7 +358048,7 @@ cKu phj dnd cLM -oPN +lwq pKr uqO izG @@ -395110,7 +396925,7 @@ eSV eSV fVU oUd -bdp +vKe qDD qDD qDD From 879296835e4e3c24bbce9021e00e76e01858d500 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:34:44 +0000 Subject: [PATCH 11/68] Fix: Subspace broadcast filters non-radio devices (#22539) * Please describe the intent of your changes in a clear fashion. Addresses an `undefined variable` error (`canhear_range`) occurring in `/proc/get_hearers_in_radio_ranges` when an `/obj/item/implant/explosive` was present in the list of devices. The root cause was identified in the `TRANSMISSION_SUBSPACE` path of `/datum/signal/subspace/vocal/broadcast()`. Previously, this path would copy all devices registered under `RADIO_CHAT` (which included the explosive implant) into the `radios` list. Although a subsequent loop attempted to filter out non-receivable devices, it would skip processing non-`/obj/item/radio` types but not remove them from the list. This meant the explosive implant, lacking a `canhear_range` variable, was still passed to `get_hearers_in_radio_ranges`, causing the crash when `radio.canhear_range` was accessed. The fix modifies the `TRANSMISSION_SUBSPACE` logic to explicitly build the `radios` list by iterating through `SSradio.get_devices` and only adding actual `/obj/item/radio` instances that are capable of receiving the signal. This ensures that `get_hearers_in_radio_ranges` only receives valid radio objects, preventing the `canhear_range` error and preserving the `as anything` keyword in the helper proc as it will now always receive a correctly typed list. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-SR --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- .../structures/machinery/telecomms/broadcasting.dm | 8 +++----- html/changelogs/hellfirejag-explosive-implant-runtime.yml | 4 ++++ 2 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 html/changelogs/hellfirejag-explosive-implant-runtime.yml diff --git a/code/game/objects/structures/machinery/telecomms/broadcasting.dm b/code/game/objects/structures/machinery/telecomms/broadcasting.dm index 64b37ce6f9b..271aaff621a 100644 --- a/code/game/objects/structures/machinery/telecomms/broadcasting.dm +++ b/code/game/objects/structures/machinery/telecomms/broadcasting.dm @@ -151,11 +151,9 @@ if (TRANSMISSION_SUBSPACE) // Reach any radios on the levels var/list/all_radios_of_our_frequency = SSradio.get_devices(frequency, RADIO_CHAT) - radios = all_radios_of_our_frequency.Copy() - - for (var/obj/item/radio/subspace_radio in radios) - if(!subspace_radio.can_receive(frequency, signal_reaches_every_z_level)) - radios -= subspace_radio + for (var/obj/item/radio/subspace_radio in all_radios_of_our_frequency) + if(subspace_radio.can_receive(frequency, signal_reaches_every_z_level)) + radios += subspace_radio // Cool antag radios can hear all Horizon comms for (var/antag_freq in list(SYND_FREQ, RAID_FREQ, NINJ_FREQ)) diff --git a/html/changelogs/hellfirejag-explosive-implant-runtime.yml b/html/changelogs/hellfirejag-explosive-implant-runtime.yml new file mode 100644 index 00000000000..12be4df3528 --- /dev/null +++ b/html/changelogs/hellfirejag-explosive-implant-runtime.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a runtime error caused by explosive implants lying about being a radio to the Radio Subsystem." From 32fbb7d9651592b0addb359ca83537fc119507f0 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:35:21 +0000 Subject: [PATCH 12/68] Fix statpanel obj_window null dereference (#22538) * Please describe the intent of your changes in a clear fashion. This PR addresses SERVER-PROD-75, where the `set_turf_examine_tab` and `return_object_images` procs in the statpanels subsystem would crash due to attempting to access `client.obj_window.atoms_to_show` when `client.obj_window` was null. The root cause was a lifecycle desync: `client.obj_window` is primarily initialized within `/mob/set_listed_turf` and can be explicitly nulled by `/datum/object_window_info/Destroy()`. However, the statpanels subsystem would still attempt to update the turf examine tab if `mob.listed_turf` was set, even if `client.obj_window` had become null (e.g., after a mob transfer, relogin, or `obj_window` destruction without a subsequent `set_listed_turf` call). The fix involves lazy-initializing `client.obj_window` within both `set_turf_examine_tab` and `return_object_images`. This ensures that `client.obj_window` is always a valid `/datum/object_window_info` instance before its properties are accessed, preventing the null dereference crash. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-75 --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- code/controllers/subsystems/statpanel.dm | 8 ++++++++ html/changelogs/hellfirejag-examine-turf-fix.yml | 4 ++++ 2 files changed, 12 insertions(+) create mode 100644 html/changelogs/hellfirejag-examine-turf-fix.yml diff --git a/code/controllers/subsystems/statpanel.dm b/code/controllers/subsystems/statpanel.dm index 465c6fad443..575d914a0db 100644 --- a/code/controllers/subsystems/statpanel.dm +++ b/code/controllers/subsystems/statpanel.dm @@ -186,6 +186,11 @@ SUBSYSTEM_DEF(statpanels) atoms_to_display += turf_content /// Set the atoms we're meant to display + // Lazy-init: SSstatpanels can fire for a client whose obj_window was never + // created (mob transfer / relogin) or was nulled by /datum/object_window_info/Destroy() + // while mob.listed_turf survived. Without this guard we'd null-deref atoms_to_show. + if(!target.obj_window) + target.obj_window = new /datum/object_window_info(target) var/datum/object_window_info/obj_window = target.obj_window obj_window.atoms_to_show = atoms_to_display START_PROCESSING(SSobj_tab_items, obj_window) @@ -210,6 +215,9 @@ SUBSYSTEM_DEF(statpanels) // No turf? go away if(!load_from.mob?.listed_turf) return list() + // Lazy-init for the same lifecycle reasons as set_turf_examine_tab + if(!load_from.obj_window) + load_from.obj_window = new /datum/object_window_info(load_from) var/datum/object_window_info/obj_window = load_from.obj_window var/list/already_seen = obj_window.atoms_to_images var/list/to_make = obj_window.atoms_to_imagify diff --git a/html/changelogs/hellfirejag-examine-turf-fix.yml b/html/changelogs/hellfirejag-examine-turf-fix.yml new file mode 100644 index 00000000000..4d6e6dea3e6 --- /dev/null +++ b/html/changelogs/hellfirejag-examine-turf-fix.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a runtime error caused by shift clicking a turf after logging out and relogging." From 86e01dba16078628cde25f660ba155f0d43e6e9f Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:35:38 +0000 Subject: [PATCH 13/68] Fix Moved() null.source_atom crash (#22537) * Please describe the intent of your changes in a clear fashion. This PR addresses the runtime error "Cannot read null.source_atom: proc name: Moved" occurring in `/atom/movable/proc/Moved`. **Root Cause:** When a `datum/dynamic_light_source` or `datum/static_light_source` is deleted (e.g., an item emitting light is removed), BYOND nullifies its reference in any lists it's part of. If the cleanup in the light source's `Destroy()` proc is incomplete (e.g., due to `contained_atom` changing before deletion), a null entry can remain in the `hybrid_light_sources` or `static_light_sources` lists of the atom it was attached to (like a mob). When the atom moves, the `Moved()` proc iterates these lists. Encountering a null entry and attempting to access `null.source_atom` results in a crash. **Solution:** 1. **Null-guard datum references:** Added checks (`if(!light)` and `if(!L)`) within the `Moved()` proc's loops for `hybrid_light_sources` and `static_light_sources`. 2. **Prune stale entries:** If a null datum is found, it is immediately removed from its respective list using `LAZYREMOVE` to prevent future occurrences and clean up the list. 3. **Null-guard `source_atom`:** Added a secondary check (`if(!light.source_atom)`) to ensure `source_atom` itself is not null before attempting to call `update_light()` or `static_update_light()`. These changes prevent the crash by safely handling null references during iteration and proactively cleaning up the lists. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-GQ --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- code/game/atoms_movable.dm | 10 +++++++++- html/changelogs/hellfirejag-dynamic-light-runtime.yml | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/hellfirejag-dynamic-light-runtime.yml diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 8332eef368b..681524ddcc3 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -577,11 +577,19 @@ /* END Spatial grid stuffs */ for(var/datum/dynamic_light_source/light as anything in hybrid_light_sources) + if(!light) // datum was deleted but list entry not yet pruned + LAZYREMOVE(hybrid_light_sources, light) + continue + if(!light.source_atom) + continue light.source_atom.update_light() if(!isturf(loc)) light.find_containing_atom() for(var/datum/static_light_source/L as anything in static_light_sources) // Cycle through the light sources on this atom and tell them to update. - L.source_atom.static_update_light() + if(!L) // datum was deleted but list entry not yet pruned + LAZYREMOVE(static_light_sources, L) + continue + L.source_atom?.static_update_light() /atom/movable/Exited(atom/movable/gone, direction) . = ..() diff --git a/html/changelogs/hellfirejag-dynamic-light-runtime.yml b/html/changelogs/hellfirejag-dynamic-light-runtime.yml new file mode 100644 index 00000000000..81ef6582cc2 --- /dev/null +++ b/html/changelogs/hellfirejag-dynamic-light-runtime.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a runtime regularly caused by flashlights." From 238096d2bbcea7db0761ac2b8f982199bfb50b1d Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 1 Jun 2026 06:36:04 -0400 Subject: [PATCH 14/68] Some Mob Define Cleanup (#22536) Just removing a few ancient 2008-era vars that were on every mob globally, but were completely unused in the modern code. I thought about removing the Mutations too, but since the Hulk mutation is actually used by a tiny handful of things, I would probably have to do that in a separate PR by turning the Hulk code into an Element instead. --- code/game/objects/effects/gibs.dm | 11 +++++------ code/modules/admin/verbs/randomverbs.dm | 2 +- code/modules/mob/death.dm | 2 +- code/modules/mob/living/carbon/human/death.dm | 2 +- code/modules/mob/living/living.dm | 4 ---- code/modules/mob/living/silicon/death.dm | 2 +- .../mob/living/simple_animal/friendly/spiderbot.dm | 2 +- code/modules/mob/mob.dm | 4 ---- code/modules/mob/mob_defines.dm | 12 ------------ html/changelogs/hellfirejag-mob-vars-cleanup.yml | 4 ++++ 10 files changed, 14 insertions(+), 31 deletions(-) create mode 100644 html/changelogs/hellfirejag-mob-vars-cleanup.yml diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index 2a643f5cf43..da1c89c007e 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -1,25 +1,24 @@ -/proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor) - new gibber_type(location,viruses,MobDNA,fleshcolor,bloodcolor) +/proc/gibs(atom/location, var/datum/dna/MobDNA, gibber_type = /obj/effect/gibspawner/generic, var/fleshcolor, var/bloodcolor) + new gibber_type(location,MobDNA,fleshcolor,bloodcolor) /obj/effect/gibspawner icon = 'icons/effects/map_effects.dmi' icon_state = "gibspawner" var/sparks = 0 //whether sparks spread on Gib() - var/virusProb = 20 //the chance for viruses to spread on the gibs var/list/gibtypes = list() var/list/gibamounts = list() var/list/gibdirections = list() //of lists var/fleshcolor //Used for gibbed humans. var/bloodcolor //Used for gibbed humans. -/obj/effect/gibspawner/Initialize(mapload, list/viruses, datum/dna/MobDNA, fleshcolor, bloodcolor) +/obj/effect/gibspawner/Initialize(mapload, datum/dna/MobDNA, fleshcolor, bloodcolor) . = ..() if(fleshcolor) src.fleshcolor = fleshcolor if(bloodcolor) src.bloodcolor = bloodcolor - Gib(loc,viruses,MobDNA) + Gib(loc,MobDNA) -/obj/effect/gibspawner/proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null) +/obj/effect/gibspawner/proc/Gib(atom/location, var/datum/dna/MobDNA = null) if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) to_world(SPAN_WARNING("Gib list length mismatch!")) return diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index e8c058e2929..cc6fd7814fe 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -782,7 +782,7 @@ Traitors and the like can also be revived with the previous role mostly intact. message_admins("[key_name_admin(usr)] has gibbed [key_name_admin(M)]", 1) if(isobserver(M)) - gibs(M.loc, M.viruses) + gibs(M.loc) return M.gib() diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm index 66416bfd8cf..b634e3d6ff4 100644 --- a/code/modules/mob/death.dm +++ b/code/modules/mob/death.dm @@ -18,7 +18,7 @@ flick(anim, animation) if(do_gibs) - gibs(loc, viruses, dna, get_gibs_type()) + gibs(loc, dna, get_gibs_type()) QDEL_IN(animation, 15) QDEL_IN(src, 15) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 09568fad545..51e77e580c7 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -14,7 +14,7 @@ I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)), rand(1,3), round(30/I.w_class)) ..(species.gibbed_anim) - gibs(loc, viruses, dna, null, species.flesh_color, get_blood_color()) + gibs(loc, dna, null, species.flesh_color, get_blood_color()) /mob/living/carbon/human/dust() vr_disconnect() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 88c13c7835e..c31ee8eb46d 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -745,10 +745,6 @@ default behaviour is: to_chat(src, SPAN_NOTICE("You can't move...")) return var/resisting = 0 - for(var/obj/O in requests) - requests.Remove(O) - qdel(O) - resisting++ var/resist_power = get_resist_power() // How easily the mob can break out of a grab for(var/obj/item/grab/G in grabbed_by) resisting++ diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 51aa3051f9d..05d311f355d 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -1,6 +1,6 @@ /mob/living/silicon/gib() ..("gibbed-r") - gibs(loc, viruses, null, /obj/effect/gibspawner/robot) + gibs(loc, null, /obj/effect/gibspawner/robot) /mob/living/silicon/dust() ..(/obj/effect/decal/remains/robot) diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 2ec1a6b9c04..fee86ea65df 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -238,7 +238,7 @@ held_item = null eject_brain() - gibs(loc, viruses, null, /obj/effect/gibspawner/robot) //TODO: use gib() or refactor spiderbots into synthetics. + gibs(loc, null, /obj/effect/gibspawner/robot) //TODO: use gib() or refactor spiderbots into synthetics. qdel(src) return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 4c0106f602b..38d5af82885 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -22,14 +22,10 @@ if (mind) mind.handle_mob_deletion(src) - for(var/infection in viruses) - qdel(infection) - for(var/cc in client_colors) qdel(cc) client_colors = null - viruses.Cut() item_verbs = null //Added this to prevent nonliving mobs from ghostising diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index fd63e192e41..5e4a78c799c 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -176,7 +176,6 @@ var/datum/hud/hud_used = null var/list/grabbed_by = list( ) - var/list/requests = list( ) var/list/mapobjs = list() @@ -186,10 +185,6 @@ var/job = null//Living - var/const/blindness = 1//Carbon - var/const/deafness = 2//Carbon - var/const/muteness = 4//Carbon - var/can_pull_size = 10 // Maximum w_class the mob can pull. var/can_pull_mobs = MOB_PULL_LARGER // Whether or not the mob can pull other mobs. @@ -224,13 +219,6 @@ //Wizard mode, but can be used in other modes thanks to the brand new "Give Spell" badmin button var/list/spell/spell_list -//List of active diseases - - var/list/viruses = list() // replaces var/datum/disease/virus - -//Monkey/infected mode - var/list/resistances = list() - mouse_drag_pointer = MOUSE_ACTIVE_POINTER var/update_icon = 1 //Set to 1 to trigger update_icon() at the next life() call diff --git a/html/changelogs/hellfirejag-mob-vars-cleanup.yml b/html/changelogs/hellfirejag-mob-vars-cleanup.yml new file mode 100644 index 00000000000..d8eb3baeff8 --- /dev/null +++ b/html/changelogs/hellfirejag-mob-vars-cleanup.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - rscdel: "Removed a couple of completely vestigial global-ish mob vars to save on memory and time." From a1723313dfdf1148ad48be63026c977d14314e53 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:36:23 +0000 Subject: [PATCH 15/68] Fix bad usr in get_status_tab_items (#22534) * Please describe the intent of your changes in a clear fashion. This PR addresses the "bad usr: proc name: get status tab items" error (SERVER-PROD-CK). The root cause was identified as the `statpanel(S.panel)` call within `/mob/proc/get_status_tab_items()` (code/modules/mob/mob.dm:1449). The `statpanel()` built-in implicitly relies on `usr` to determine which stat panel is active. However, `get_status_tab_items()` is frequently called by the `statpanels` subsystem's background update loop, where `usr` is `null`. To fix this, the `!statpanel(S.panel)` condition has been removed from the `if` statement. This eliminates the call to the `usr`-dependent built-in in a context where `usr` is null, resolving the runtime error. The `statpanel()` check was unnecessary as the web-based stat panel handles its own display logic, making this server-side filtering redundant. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-CK --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- code/modules/mob/mob.dm | 2 +- html/changelogs/hellfirejag-artificier-runtime-fix.yml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/hellfirejag-artificier-runtime-fix.yml diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 38d5af82885..c6047f49c92 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1444,7 +1444,7 @@ if(. && LAZYLEN(spell_list)) for(var/spell/S in spell_list) - if((!S.connected_button) || !statpanel(S.panel)) + if(!S.connected_button) continue //Not showing the noclothes spell switch(S.charge_type) if(Sp_RECHARGE) diff --git a/html/changelogs/hellfirejag-artificier-runtime-fix.yml b/html/changelogs/hellfirejag-artificier-runtime-fix.yml new file mode 100644 index 00000000000..adfd63f28c1 --- /dev/null +++ b/html/changelogs/hellfirejag-artificier-runtime-fix.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a runtime error caused by giving any mob spell objects." From 124f7ee17b7577a6f657d89c0dbb9e8ef8f4d64a Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 10:36:40 +0000 Subject: [PATCH 16/68] Hydroponics: Fix invalid plant icon state from negative growth (#22523) * Please describe the intent of your changes in a clear fashion. This PR addresses a server crash caused by an invalid icon state being requested for certain plants, specifically those with spreading traits like biomass vines. **Root Cause:** The `refresh_icon()` proc for `/obj/effect/plant` was directly decrementing the instance variable `max_growth` based on fringe conditions (`spread_distance` and `at_fringe`). This meant that `max_growth` could become negative over multiple processing ticks. When `seed.get_icon()` was subsequently called with a negative growth stage (e.g., -2), it constructed an invalid icon state string (e.g., `biomass--2`), leading to a crash. **Solution:** To prevent `max_growth` from being permanently altered, a local variable `effective_max` is now used within `refresh_icon()`. This local variable is initialized with the current `max_growth` and then decremented based on the fringe conditions. The `growth` calculation and subsequent icon state generation now use `effective_max`, ensuring that the persistent `max_growth` variable remains stable and positive, thus preventing the generation of invalid negative icon states. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-TJ --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- code/modules/hydroponics/spreading/spreading.dm | 14 ++++++++------ html/changelogs/hellfirejag-vines-bugfix.yml | 4 ++++ 2 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 html/changelogs/hellfirejag-vines-bugfix.yml diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 734e5b201e4..9dc331b4afe 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -188,15 +188,17 @@ SHOULD_NOT_SLEEP(TRUE) overlays.Cut() - var/growth = 0 - if(growth_threshold) - growth = min(max_growth, round(health/growth_threshold)) + var/effective_max = max_growth var/at_fringe = get_dist(src,parent) if(spread_distance > 5) if(at_fringe >= (spread_distance-3)) - max_growth-- + effective_max-- if(at_fringe >= (spread_distance-2)) - max_growth-- + effective_max-- + + var/growth = 0 + if(growth_threshold) + growth = min(effective_max, round(health/growth_threshold)) var/image/our_icon = seed.get_icon(growth) @@ -205,7 +207,7 @@ AddOverlays(our_icon) - if(growth>2 && growth == max_growth) + if(growth>2 && growth == effective_max) layer = (seed && seed.force_layer) ? seed.force_layer : 5 if(growth_type in list(GROWTH_VINES,GROWTH_BIOMASS)) opacity = 1 diff --git a/html/changelogs/hellfirejag-vines-bugfix.yml b/html/changelogs/hellfirejag-vines-bugfix.yml new file mode 100644 index 00000000000..ff64a418ccf --- /dev/null +++ b/html/changelogs/hellfirejag-vines-bugfix.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed vines spamming runtime errors after they are 'damaged' by a player." From 1b60e9948d5d82eea30cbdb0121bf8d88cf09108 Mon Sep 17 00:00:00 2001 From: ElorgRHG <71735193+ElorgRHG@users.noreply.github.com> Date: Mon, 1 Jun 2026 12:36:43 +0200 Subject: [PATCH 17/68] Badge sprite tweak (and belt sprite) (#22522) So in the effort to make it so badges display on belts, I have gazed upon the ever so slightly better looking investigator badge and wondered why aren't all security badges like that. So now they are like that. Also they display on belts now. From the changelog: > - imageadd: "Tweaked the sprites for security badge accessories and added belt sprites for them." The change (left is what is being changed to right, which is what is contained in the PR): badges and things (just badges) --- .../clothing/under/accessories/badges.dm | 33 +++++++++--------- html/changelogs/ElorgRHG-badge-tweak.yml | 13 +++++++ icons/mob/belt.dmi | Bin 11377 -> 11485 bytes icons/mob/ties.dmi | Bin 57345 -> 57142 bytes icons/obj/clothing/ties.dmi | Bin 48978 -> 48845 bytes 5 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 html/changelogs/ElorgRHG-badge-tweak.yml diff --git a/code/modules/clothing/under/accessories/badges.dm b/code/modules/clothing/under/accessories/badges.dm index 4935f9246ac..352afe66cfd 100644 --- a/code/modules/clothing/under/accessories/badges.dm +++ b/code/modules/clothing/under/accessories/badges.dm @@ -165,23 +165,31 @@ /obj/item/clothing/accessory/badge/officer name = "security officer's badge" desc = "A bronze security badge." - icon_state = "bronzebadge" - overlay_state = "bronzebadge" - slot_flags = SLOT_TIE + icon_state = "officerbadge" + item_state = "officerbadge" + overlay_state = "officerbadge" /obj/item/clothing/accessory/badge/warden name = "warden's badge" desc = "A silver security badge." - icon_state = "silverbadge" - overlay_state = "silverbadge" - slot_flags = SLOT_TIE + icon_state = "wardenbadge" + item_state = "wardenbadge" + overlay_state = "wardenbadge" /obj/item/clothing/accessory/badge/hos name = "head of security's badge" desc = "An immaculately polished gold security badge." - icon_state = "goldbadge" - overlay_state = "goldbadge" - slot_flags = SLOT_TIE + icon_state = "hosbadge" + item_state = "hosbadge" + overlay_state = "hosbadge" + +/obj/item/clothing/accessory/badge/investigator + name = "\improper investigator badge" + desc = "This badge marks the holder as an investigative agent." + icon_state = "invbadge" + overlay_state = "invbadge" + badge_string = "Corporate Investigator" + /obj/item/clothing/accessory/badge/bssb name = "\improper BSSB agent's badge" @@ -252,13 +260,6 @@ icon_state = "marshalbadge" badge_string = "Federal Marshal" -/obj/item/clothing/accessory/badge/investigator - name = "\improper investigator badge" - desc = "This badge marks the holder as an investigative agent." - icon_state = "invbadge" - overlay_state = "invbadge" - badge_string = "Corporate Investigator" - /obj/item/clothing/accessory/badge/idbadge name = "\improper ID badge" desc = "A descriptive identification badge with the holder's credentials." diff --git a/html/changelogs/ElorgRHG-badge-tweak.yml b/html/changelogs/ElorgRHG-badge-tweak.yml new file mode 100644 index 00000000000..5cb244d2ab6 --- /dev/null +++ b/html/changelogs/ElorgRHG-badge-tweak.yml @@ -0,0 +1,13 @@ +# Your name. +author: ElorgRHG + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - imageadd: "Tweaked the sprites for security badge accessories and added belt sprites for them." diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index 66619bafa9392937f8dff0ed515091baff0b1eae..d71057500c4643ea063f37a00b33b3d1f8d3993a 100644 GIT binary patch literal 11485 zcmd6N2T)Vpw(y}Sexd@RAW{toDosIA#84y%sDOfk)TlHm0qLC}N|PocRRnDG-a?NB z=|~SH^bUc97Lq{9fB5d5_rE*y&zoD`o%_!uYoD{vE^Dv0*IIi=+|$)OdieBV0053^ zYr*sZfEj#b1`Ztri*4_LUGPQ7_rW7~n6;awtKD;VJ7*^V@J>s>e0RcLJaTZ#je6pi zpD;#2X+iGGDc5K4@0n*upGq1qpKWPN4-B)hlXDbxi+rK?7O5}pIvI$hm--=4vUN7G z`sZBg?1tct3i%=aN7u3fd>sv$?2Zs;KR(DAb{egFZ4h&BqsZ9jZJ*OP?OK$vc*T}^HIl>;=vJimJ=rG976-DlYjN&))IwmL_@%ajPMG2^Deg20SpDkda<^&4V8 z0D1;Gqc}h?foM0`hi-^ z)!8C}k@z#hwZ>BY$2kcGj+ zk69=H5CODdY7e~A*2as!XEL))@tY7WP%qawQaXERl7u>g$n>OJCcGy83o9(APBn23c?c* z5M**PfiUC{2+qMkpn7Is)DMF_fP3K}_=lP*o&<^-ckQ{|IZ`i9gx#$|G~bMKD5_~5 zu0j;mESz3|K33?4axD*E`*ISvAStQi;ZbQ^W)TEK%Cjri<@<*P5m&?d|OcV!cj9 z`I^oB&h~9BvsUx^gf%yZ8G0-qcjtehRE)c1$9SLS%MKiBU(7(t_za<^?4pr@UZvTn z*lodU&qbDa25_xEk|HOZZX>T=C=>*MTGQ$SZWn+_%TlVtVw zHj)jPrn0t7=Q_Dx;%{;^^Q-n0Su~E-USAR~d!XBJ;G$KiW#J^BJFoA>3E)kGREtY6 z9^?&KD%*3PFMFK-6ifa!Mh6ub8a#QQ>DPLT6|id15}U!sPj;I;6UHutsq}E!u>os( zRf=v4IgJd>SrQor;j)ZSVK2|9>`|^l@L#$`>poj(f5DM^JD=egxcXHP$l}>v{}fwr z$$sFRL;Jh)#!Ax`{8#MX&D$QzDJ-n4y?TZ6P#1*S2t?t$sai!FNWz~8C6gRHxkNaJ3@D(*3l!NF_>a_%=q>xmt|)D;pEm=M44rDvD)!W>L#{yhiVyca^=~#_YDx`DDXcopW|}G2g|45~f$h0B-F_N=mZV zh8(-&$2PV3wc~;E^g?Hf2YPhzGu_8j?LiDO=1Ds$ zK<4a!u`CJ{g@1#3{X@JIVFR`9@*u_&`SV_#bexu0Nn>!%2T4*A@aBvO^4vWo?|l}D zSBDHQj*jA;PuZi+9*;P6C)hNcR`lV{elsSpL5qtNqEZ7U&{7(_`{GNbXIbWA#;C7- zw!W#UgNL)d{=+&ygZKdq=Aax$N`Vg03Usl@Vb;0b*I(OWtGFbS4Vm*1#@`!`V@&oA zLE^&gWTYNEtg9)xSb}1bGse0KNN}S*r|yJk;b(qX_|ds#yrQ{`yb5RDa+fv`+sR`P5GT+9LZ|`yrLm1@w~i`;*V^c~``RefVW_EsSrwG~#8>jH!&QQh^wb9aWV

    DLtUxryy@- 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 H9Q=O(NGd9Q literal 11377 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 B!QlV^ diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi index 131a91bdc0349d009b53e6dfc7a60867f03d84e1..d3cf0dfb32078ad74e901574ab07176dcc27506c 100644 GIT binary patch literal 57142 zcmdSA2T)Vrw?B#^qA10JDAhs{kS5Yg6a)mMNH0Ppm9j8tS~WYo$p zo@s+@D*zS-9FdyW2W}$;iA?auX3?CNa7Y#IW|G zsA7`|buCPm>U_rDJ#UJ)am;*_3sGC&d3F79tQh2ncZ6F(9zuKjOm?0U%v$MM-Y9vt%{lQ zOCOJmplz?py_l7|z2Z_TDa(19%A=p&iOmF5#-t?l4ZU(`l@0o|viBkjvGN%-m9wpI z#M&wMGO~z4gRwp)-}@LXjn6gl%!`tc96wro#BI(E`d}dWw!K7&1|}K%YtmHnN1Csm zVc9F1fNd2^kq3qddY|Gl?;iz|&z}a>ekpoYvz_*}c+%CDS0h6?aoV@$Fy_PWWp0KM z$_l28uF3BO{bw?7Q&?_XEFuqz5gO#8tI8o4@BZCD|3rbA@>f?Y_?-H$k6J|*Jm!8E zqjz6fyb1mIDvB|-h0|2ojKi!y4Y!_6Fhyq+Z(j_^b|bi?=4O=iIv9UCPbdicqs59#F`T4Uw?fjCoYleHO(E11R zT+8z?CA!&|r}k+a9tC6lgHun!e}6yz_;%wPi`2ol2c0jBq(7`C+TS*50h?#re%&VD zrN5FVzhE&#*E6q0l@N3OA&e)|-RZ}ZbQ>E=nO}+Wf1YvF_ z{pTRAP=Z@mmYHMa;E%sTQkJ~NE94%tj3}{n+pqj%^s%mNmW=D4Jli2p+{>&^p7=tX zGI_MT6UvGD@#b9#H(z*SPk7-i0i*tmCb*dSyf&Z27j%ReP{iub?Q0j;FkYR3(;@e6xzf` zB;P;ny@7wsW=2MKmrVKjGaav#tyy0`ov~&j5jzmp$A01Z`Df3c{`g$0mzx37h`6{` z-f8#B_?rDSp3idhu{B?h9`a}j@A&jHZqATqR5u-F?eT(c}#0WIrbd zUaDzH$n&)h5AwH3K!L7T_ zFFNVLSj-EeSVTI}A{O8wd<_In5+8DS-Ka;J6eoRnQ{(-GRyI%|?802u!L~ zCnyiJU&!8M#%WonQSy!CY9lScFpxtI(0DW&93z@(C@2XR9UrY&3BLKd=Gxzcw|F3b;(6&Ye=Y~ zo1t$X0kYn|j!Ph3{31@|z0z|Az6aiF@NTK}-*|yog`SQ^a+=B!YxoiaYU#uPp4~m^ zWj9XnyF7lQZK`XaeFwPIXSVE8Dhbh#^H+$;P753uh5*xL$Q74GKo%0T&HmM^XyV|s zezMo)GZBse2p#Aa;*v!CH#A|D80B&TP=_k)*JQUuWK(4T@}GJo<}6(<#Jc}vWq(vv z`bE_VTSELiK(4*Rt8F9!yQRDGAD!L=fwRXbKRyn88LGMM3eyMaG&yK3VI5egzQZ>q z=`e4*a1=`$1JmL)4GY$-VRXT6ApPL&ihrkVO;IKE_x=EtjfH4OpiqPc_%7B+Iw(Nz zDO2U&CrjRoT3JXh*!CHo3lsiQb6)gVOlzNOf4@_Z^(rAOm2v;^%6=6i1FgY1HHR-% z=c(F8>|O)QrXQ3F5Y!E25C{)N-rxTd&i1le>w#%U3jLsXv<6^DStfQS=@97QW`>^+5V$MGNh4f#-*BvR`J9hJJkN4(X_KnzC`;O0^@QN&0 z{%b*u8qIBi&y$H>Mq#0pCGR?vQd#{`vK-!maASI`_NB0G;$#v3bauS8h9%)f-?TnV*xK48Lqmm_8A^nZq0`L| z(CDyJkB2wk63*RymXn{K+|(pZfAeNRQPIX{C{Zd?^I@>#uQ(>_COe+5wcHcA`71Ln z90Fw5`wAMZ5;rPjRC@bXsNY}E5f|+8b@PYCxMl>~izzDnP_yF=(E&Ca=r>^zGAlz>3)y@cQxF`;9?$ z`vB>bVyDEF6TF#!?~@w>nZ)Q}=<%%F%$g{?&HJ>-BMm_$3Fi~x7;uQpOuqy{AQT<$ z+%YU80e53f<=$RIOC6JTh!>nB^)4*hjtQmte4+dzO8hrta_sBy5?mo8gO{IYv<7s1t2Uchu%IE%+I~1a z1g#<&i*%aa;=(!Jj4xsIn(R>rB7n0X+-eUz5SfcmkPbVE;!y2dXb)Y?iud~QuKPNo z^M2ZY+LxFNR>ngjdGXb2QtPj|ERt0J$N8iQgL4Y^yTxUe+Imr0Uf*3Buoi%Wkab_v zv?iI@kgD`;N%w+P(jed!Qj`Hx_S)b8j0WFHGHr8;C*|emsmNYj=xn8Wm`+a0=gEF7 z)cuF;v^zBuHpRa4Yb*W9sThnqBJhomPs3!B zcjcl73lQ>Ky?2|jUfMJF;T_4|VAjQt53Y@vIHL~^-g-k?#%#)RX$f5=z6YInGNXl6 zuQH%zwH^q1Tbj*|OL%1P7`meC5_7^Zy*5Ic02Znjz(=ToZgkymgFo4PRY*N7padUGI z;SM*?zz^OWOU!K|%k-6%zX((>>SjfBA0o|muR^mzOW_2cqrQrtW&2iX$?} z6%~)+)8d>GfYDn)#v36{2uMWrD{_)3=zL4w|CLF}pWB+Gf%o)6)ET0lVU}29QdeBG z{mDNM3|{{q_PzhRp8iRwwny?mP!3P5D+GeW`@typL<_(AK)%rnMu?^ko@A+ z!BUgPzHYAcm*V>gW{Z8&on>qF`^6#gXtcMi!9iVwMZdHd0wE#6sC4sbZ*Omy8I+8< zQ)qd4xpT?fmt&}NX=dZjN)`@z{b+xBW!1|}hnOT$>vPeKg(I>v#|hOk(8&fZiA286 zhT<359(RZbVBMwB_9=<0$MiB{0bUXy)K#M&@15Uv)60g509pb}+)sby*70n|HHj>e zjsRa}g#mV$)6&wC=i$S>f2qY(?pd|j@vP$SJ+~$-G9WW5%cNyAT>pzKr~m1Z$F08f zvYpw+8!FN(tK!0l{oYh2&{i~NKx)?}U101+gxO!VSmG@r0UwFqA;nCa+D>5VCC$%b zoR9Y0N)lIBSc(_r$o>XVgI~&@Nvc7nNB2*B{U3U*vKc7jOg?gmsP1HKntTEiS=Ep3 zx1gPK$ZeT!eW1-{Pz(`|c$sRxy$|2pDzVz^OBTa^-nj9X=O^~0cdra=`@WcPu=OoD zTh68It0lO-S2@xXoieSc)k5JA=WxBMv<8>ofa*`1ye+H;+?nDlI9ggq*Ud%DdAP;p<#~4-=TnW>`EqN~sEpg6(lDbF`;(OQ@-+ z**3|DD5$7kLCu*8UCFq?*@lS1><=Ky|8WvgYY`~U0K%e1R)lI6C?NUxBm(qBkpHx| zxZ1+{!%@6`t!*QNr27l~&TmzU(~?#>h4LZp2z#+r(8Z&J+)}e@;t^J)2vWi5SPZGa z5Gd^<)(CH}KjnIvU=9ZHCD4IB?f)zz&9xe?nw2E@=A&Vi%{9aoRXn5pO1<|^9edH` z8=MK%Ww1r>H(&mxj*BL0YN>hz-w->y4a|6QW&cNtD}BaJ1ENFI%~kLwBjT}FAh5K} zT+pXYI3{G0)2C5QM8pGk+QaAbZsP)aV|SY9JGe`8C0wnz8C>tA{+P(#uwq zB!ceC?fJf@0!C{7!JH_9d@7W1B1vreHC1IBJpgk0evy{7q`Q`=DROvcyG4WRCRKY* z{bp(7fHV=0);m&AcMk|Bxey@GJcr^%_t9+7>;A8=pY2b#A)t8WPcGhDzmmfm7es-X zForJG>f2Fy)x!fCXzxU@CZk21dpvI`E zFt(IUtk9&n?a|+mBHn@r%;sf!+GJ19M#=DSGtSj1N`3t`TYZb|G^_t+(y8xrlVO@IH^ znh06k3tm|-CEj>=c9M~DL!Aj$`LBN+ED?qetJP12q&WyNE9Pd&(5Hz z?)SpuO_8&rX8%*s*todD`UwLgqrC0u+UiqT!@t|9!IJPhwjrPTJk-G0;U4I&<}PdM zgL`#ZMT);LI?7r=ulfKb^<;3--`VVJR%WG#O&!8+yKH84yEeXRW(VhfVrSx$SbGRE zX)&^T<|p+?pPi!BxYSeWGJil*S+H*69EHfssia#xQ`(ujz52!yOt9%ziTrfB zNtUVY)k7VbR2oU{LlSLWe(s}aTo;Lfs zgO4UO1u&AC(KTB$`3TXQ%25Oy_E56gsnjQRP`OdHN2YA|;!o|<6_o=*9di8UcH!r5 zjbVTn?sy@&xXiT-1w5FHPX>e4&j?^F@YfAj1=KY&>_N^Lcyc2=FHmUcWh zFY;p>%=BQBwufk?-K3+c#Wd;(0VX80$alxTYqE|olHI`eUlXznlavRqi5!1T%SNwz zPDNK|jQJojen*t4aj^#Dom>M7(LTT)Yk+(nK6*4tNjwfY+L@iUIR%pALo6I#_WSn{ z^eQdaJ(AiFmdNDB`nauIhd7-6iH7NIl%ce;4vkf43gJtE)Os6A$g0Bx8$; zs4&@Jg{T^b*?YDj$H`9n`LlTF##Vl=$Qw4m~Bg%&S$&mCq`r}<07zRGi64sNV`DIn-6 zkdl0I{WB5cdhBGYY0L*RD1R*?QtbmMkea1#@cH%SqQc8I?O&HwD)78_>9%s=gcD2U z$7dQ+8d8v*(dBrvo%PT_q#1NJ#rgMToZogxR8DxRueV`oWJ80I<7~q#!1#TRBRkcw zO#@T9KWc|O1!7}k?fR26boBJ53IZ^m$vr(Px_Wv=fF_EXGvZi_3K1EhpQh&zcHXXt@MwPupO)C6K$Z;kXn zRJO(~(~_$JCaI-2AK6Ymh8yqqYw$O8N!K{sfs&Jw{D@j_Fp|pV-_i|6NbAk8+d^`S z;Djtd*k;jA#7w&l;iipB!&5AHh+1qm)2&5Tr`Z=f4s2|;y!#_S1Ork}!i=qm3EUum zik+IJs4|0}W0XFY^Vo=isU?dRYUevpv-)M?4w?RVZ};^*N_8LZj><`sIknOMWqPM{6p~aOxHEzFv5^A6QC2xPlU(Z= zo$NgdBtM!E!N#u4yIP{-Ofd7m8&Er6OiG1LB*r_ZrEBdebPkt| zFbBy+FpXD+lj|y~s@jHzi8W5BJOu%#sEyv{^$L0f-ZPke9Zop4OZ8g#l7@7%FTvS- z(etlrL;DOxMQdXaQ2uy!5<5rRnaZnZse-F7>!ZgHp)%dMiOcG#3=+{)tilQwg(THPw3<#G_7wrvlYUV6LBH9_I8 zHd_9w?v))c{30ctsoi@lW&S1I!oR8Ct?_#A7p~MICo|F4#d0Pm=DT~=|NYcl-s^ydgJ>gJ^j0DfnciayL_ z6nD-jDk@@>xtDZw8_0cSMyu^19&6uAf$fEkzA@?Y#A`1|(mA6CJuBynS)(`HkNM5T zx&hdmI_S(nc^Gg%(lF5acsHjH!?d9=8ze0eOF5D$-yjOczb-7CEBncn|E?e_>(S#C zv2UjV+4bP52Y+H8|F(Xh=vMU-$%+=CLtXl~A9O+%uC`5;FHw! zjft`8tf8K&_YbUbn!UUJRsiSl3PZKVmF~CT-3%Da;m)iv^bFl=bU1W9j8V87omBeq zBTHmuOPc2tl3jUhjPic*d(*P_I}_y`S}2)w8VU;aqE3Y2kp|co({r$*nMLpBhACHy zz{yv<87OQM=lfP;t9#$43(k@K+%NV2!oe-il`^3eb^lFSON%L2I`dqOxBas%N&D;; zvpWR)K8O!hb0YQmw`COyg5bxR0DK&)qn3-h~ybYI3{(L?vsjYZxxUb zdEnNq+nRpa^i#A1oZ$dX>lq&HQYkfX|7~p;cYVkx2dNm2Vi3u+-6yEU7bO)n3G;SGuJTU zV7WIeUgpC2XY@C>23OOG#_3Rk6FvQIsGo`E5BU#I2P>zv#NSz2dW^UD`&K!jSn28M zpSKJE+W?rcn2(WJRG!SS&ATQjdUW@tfkHQb#@Y|xDD1YQ(#n8>)MPaVz9XI%4=96?>?!-qpbEC6lfhvQvW0gy}#e5rW} zju_z}`lpFHPFXGsKh5?PcYNw}xISVMbw6`Lk@oDgwyDSA0onMd4zHM)fEMDcp`hz@ zHqyG^Zzj=w^WEab=9wAk<&_m%REx}1dFv^HENmwe2(^*1HnnU_>GCAxl(~1R`aF;F zojZ4u#E80Qt{pEOXAcqsBrNh)`k}ga?s$3zHsKF?Q&XiNilsoxx1DHae8Xf~k1XzY z<1`ou5+wHlgnbNt0%22M@6E%*GdNXE{O0#a_0_9q?4Nxc$NM@{*DBAZ{I=8-keq&` ztStn&Lx$T{9ncrNJvW9<^JQ~o=e~V)V>&*CZE<`G+&xTN5(MIA{uux0?5AG66)EbF zs8m#FZB}b*kFaxJubbHnm@Kyl9orMLUs(+I6*ULQ0xGgY_7@KR8F}{~G_b@5LUwkF zLOCHl1x~#2`D`+zbR#PZh?HYtHONt&VxTSR+3C2B7IlQuFGL z7Og8$ivy5nxvwZ{ z=FpGb-7wSISHwwssJV~l3uFzs?)aw0>*J`!akd)sG>dAl8@r~U0S76~+%H$mD#j_% z2z;&QtfK!4s4wC~!=1szJ<_no!SHn$MEd9gnav&E45bX~5R6{gwBSlRN@|)$$F?sN z4#5|J9DYf!&Te)p%y~x;rg+shsf`5@chC#Fu$Db@LLw2!UxAg15d(~B91=&|t4BPK z?Mf*@*JRKAnUE)wxhUfQtA6`wtVZgK)?0mUY0XEJ<7VHaeYa`9p^60p-T)MA`alk$ z@pK!I<464bq7kdB$u0h;IN4i!rl=PG{>77%yt=xC6UC*IJ=XwPM92fWN-|uu__4*i z-X9cbW^6)szM|>k^p$(qAe*KVvI(zyTdSdt3}}?}3W|T_>jH!x*n|JA1po;tgn;1W z23fw#zNnEBK4W)CnQ1_6lpy}U8l*UEJ5WfoZ*dyDZUxKRSgmpHN7-lGRC+9KZkZ=K<^Uqr~TBK zpERIhv_UDf}QrTk< zeC$oA!1EiI(diQj(Bp3E^!*=9kIZif94*qieSGjsC_|}B=BOL7`2D&+{ZEZP=vxcI zeEeFhhTKE4KL*dqWT*m40;(|HkbnSDl=g!%A<_aZHXkLBu8WC^)FjmNEcF=!)@G5a<$;8UO=RsqJg)*bl%AURpaS&HVvB?xWjH$cD^Gl*oj2>GwF ztlT)yveQePT)k(^Kfg9eqGTx%XUwwG#Xxvh7R$Bii01xJGRz?^_GBNS__ zxBB6PmMDdtS5@2QVv#wMNIBihRgAI&tv_5r5%9H^xkJ5Ammp^=&#~`{YuH52k(I|T zK*&3z)@aQkX3q7y_-VW##tS!ih~VuR10}p^1|w+JaZOpTTOWtifdQ1K^NsjXuZxI_TvX2c=@ zSF`Co{UG}A#J%)nwzq7pla^pM({g+=)*PPzp6q5kToi+0j(?Z&3kUgbEcm>9o6CpZ z4gQ%@+0p4IJ@t4TIKQi56Cfk|OdWoXV(L$XQwwku?|86HY{1u*EZ5cy!1WQ)HQ^pv z{ZMHP;7q1M=ruE_Rb*4`n+ztuR@c*-**UOK+Em7&rX-1`G8$8oB$A{r;XhV(46F(` zl}z3$D**A^pTJ<~-7$0y%p%nW%|HApoch-EugJIR=DnXT-{>3B0QI}^g|i=|ERkOHAb{m$Jt!881FxNv`Rp+YB@xlTZ?(ZJ?l}V!07Dy7yN`IQ!#PaDh~;}TXnACSHOtt< z-(v{6+VG&Cmc^Z=X9L4(VzX_^E=hZK_=up@G&XRF+#k{JItRH2+f^U-wx==i(yQC$lN$1 z2^uc|j0`|Du819n`6Gw$Z}MJE^!kaQ>ZUoIK4usbaUAoFG#5EKBfmxR@cc$qnioJ0 zvu6c8KYOoBae~h~trVZEB#AN02ty04&t}8|3b>12Xn}vIM`3=>1RG()+3eVrIOxMG z0=KVZZqHFbW+uw}TgZooj|>{o15#=uMvEQcB9J-n{8$`V#yFyu&*7-j9$9L&Syd%7 ze(~yU^Q7^qYWw&*g68k5PbPq)%6l@$-Buu5TU$;(zJ6x#^u7^j=tPDPfTVo?JnF=* zB@xq-U2F!4xfa9Oylb;X8d{|8%+f|H#9OQcr!I$oSd9Q4w6n~qtnv`jCoHQ zJ+~jvHbNjXtXZ|jwi(KN*nPx+bAVV@`h*eRMqLH` zahRb*>$G+6v*(?7@}~>ko1Bgb^>WMfTF){uW5O)-HXxdafW8khPhF8@>zAlq1 zcm)QR);Ph&+YGyt#CZ*^{gF6>hHg z8H}@9tw-qWc*#T=-e>!&e4^t~Cb1pL2jE{h9-HGLRGFgZ%|}>g_Ugg2lATtx0l+>n zhUxi$H2S5bl@)IG`Xiuz=cg~A@5$?%EU~ewC_lgNgu_89ODh$k5lcYge%TnO-&rO- zZe=l0N6)m35}DuT;2{WbAnYh#7a;i1^4$xNZ@!NoQDAQh`sc)`lwSd)|m^YVB>X@3EF1-z9!e@ms zOK6Egh#u6p1%G~HmN@vn-G6x7eyCV&r${Gj0|kdGtEvjGrumjuul}rGO|u8U^_N7# znZI}Cy~x$Z!sjVavM&~`oQ2Mia&wLkX>Wn@sA_yc8j!T? zyX&!WbBE)BJkP@?lF%PF(7J<;(>298?;_aOQzu!fj~Tin#|F2Ji%BgXYfmL*tvB5P zj#GMrE2pwqZKE7w`q5k(qES!058jP%h+$vstR%$8q?BxI*jajPyz^(6DN#?=F)@MV zEWIDwWafPxPc|-iLG(n4PRHU zQ!zHS90+Hb<~&$wwt>-O)9%U9>;!+u*4(V~<%_NHvi^*E3bWHq(${y>(;4Y+2Ezxs zz7K1)-gEy03&bo}@;33#w8bMz2Y(v3&I|L2%!J+ykpGjO-mzo3cDC61Oq7euSVCfw zhkG(RD(X5#;In4o#_Y7z;b*&jI{?I2un^TeWl~{QFEQEE-yN4D3j0{IX?TE6CrZ19 z6c!dHNqbiS2j-4Po&q8!hgJ1djIfqc{sRxaeD(1SMda6=U-m=ydZ{yq=124{**9$1 zy3tp0i28mG>Eu1Byk2A3dkfg_icIP0>E!|FfWa<@m>BZKyo*7zPqjnI$5h{)daJ{Y zvB+|W?~iT-z2*vvctYunZ#;~>Tw_c2ui+H(K8barcjuM6at2OJ?|3@(udLWZ{C9odem3_-u{uJ096s=U^vgZf-F z!+n!;sX^l+Zbw?H#WyHzm;2~@cD73Wf(5*1b9z+T_Z;dJ0claOzV@V{9AXCGuP60e zuRPUD8=#L+X)% zdu~6l*ov(&K`f_{bshe`BJjMW#^ruSE5&P&XOP;v2a4bJa=|09Y#{xQGlEOObY%)5 z5qZ!0ZoyY(=_Akr%4|@4`KrLvEc;^-BH49St6=x`6zAg<3E#pS{)va1x$5&fd)r`x zupncn%jqtn59AqfZFl{TLA>{$RjzZ;eV4_j(*r{pUD&q!WMUpFDCfc6O;2Y9FC%fk zsiUzkftZ0RdY+ltK?JwIg>kkiHFV(PuMFUyii(OmapwETam6S%&t&#fLG2Ib$4)NI z(Iq}C0lR&k6oUZjr>v!>7RFxq4w0sa)E*h0a)WH&VtKzwQ;M%APF?z`)}IVQeWCf7 zkJ()H?q6fr^!*(c3 zVcdSD%6YgvuEw{pprFeIBE!ea8;TFWXaVIn>|QZ3F$KUd4u2}NTk4ex1^tx|B3RAN zCDv(WD|aARZSIW6$n}(pI-QBe2TVszsiwq6Ku}49XV1G)+IMfy?NHgj6klr=b_{B9 z`S4`F{#ja@cP)qa?C)y0%d@(8ZJemzBejwzsr`U!Str!@Lyy)m^-zx*@HD6L=2x1{r*_w2jmd$IbalN&dow)e=` zN;~F#zQqC##D7%^wZAO>99yT#-6T~6W2J#qw zQHQVo+okp4!3dU|_C@^y`_dEI_6wU&P>ragZCkF^EX7}+8*_ajt|52b3c5j z2?Wh*pF=x}^XGK+^?i*5=q}j+Zcq{cjxi^z>Bjy|eEm=$W zPx>-&Ve21rbuRUaEzW7CEjw%txD#}>7oIXwcPLZi>M%Isw6H9Gh50qbp|QV-m%>rU zN%?Lr;d`p{bUxp?@#(f(7W;JXlYLeatxJyHHJVC)2_c)&!3ZS)$tJeR6uUE<3S?s5 zruh*0t6hgb`uKc+%u7uHrA$sQJ%S!f<`gt3;QauzTaZKnrWIO>>1R7V9F5?JFUd6H>|eg4qzyQ6ZX*; zZ3pUrWOCF1v=bb%GDaH*N;f-C_R}S!p<&7ebz7WuQz1ceOgGLJ*Z+X2ne}A-P(NWQ z$u(DEE`Z(OF6>a-;i6kt~H!X0aI)-|gx=`4F0( zo*peA6F)R{b#nv4c`gl$b}WH zXmGA|8|_qRAi|qoGoJi5Z^i`DE{V_I;^Ez_b{?hD)fMq0{(i;#lQDrz%hTL-?O`W=xh;f40A>u`z@wj{gIR7$kye9CyoQ#OQm)p z52~Del{`J{Oh8~{PWtTQ4)?2hh4Ly#IUwQLizr|9rK05ZiDAY~T=F;~4sb|Z<#l_3Pp|IEy zCLHwyJR=?*74_DU_S4!PQ}gwSCpV|Rr=*ksnm;2TrKT->ou~Afzgaj7V`a8_`%MjIz*q@hQr)-8b6Q2v{>8P2As1-a&6mz@Kf3` z_xPDsieXzfTGSQNCcdgDPu4KpWodL=N&Tb#s|GWVYDHHq_YCUvQ_m-o4^{6h>*7wr z^pmEY>N@&TPbpWAhEO8fPKzk8@34?D7h9+(z@+fowo8>ZL-(!QK40sgZmp^Nh1_%tuL_zD zL^iU8u<&cN$)4)4zV2r}kvo1=H`I@Y_*rL9H9)Yzq<97VHE z0=FWmx(BAB5gVnG|J3Je5$|s<@|SvHlI*J7-O5GS>k` zIYPW(?(5P4+FBz~mM>Gkm1AAJzE^9Q+FbE%o}kUx0asm7f(?3u*m6Gp-aGmzC*nIx zoofnx^i_z!N+g-ro>GNZ`zAyL54}POoC1hs+X2qDAWyzxc*ca-caDPt^8JC5DV*l0 zF+iTJn#zje9dmZYhS9c!Ih5WR(V|r-pE`V=8yMGVLCrFp)CvL4Q+0@A=S*$~C z59HU-p>`?#TUY35fccJ=^@bO=g_igo8?!Z@7B!pXnSi+JaSf<;eOk<8UlbcXtE{d< zIhM4i^lOxhqnKYpL03e#2<;WZ1BlCRb0c;*Gnz(6f9-wr{gZNDE0rP|@o<_^F78}; z&1zrl1o!lBi|T5rBGlno5t6aYxBe`@KLnOn{7u*zenTv?kJpsd!uv_n>oCW4gMriJ zPkoeAw1#0#3D zj5;~xJUv~H?jqF+==}sEF2iLJMUUL-A_z~;Qbue;KMNYz5)AI*V2AURAbs->*~_2g z?!kRY$PgL(`(ueHMpDc9^@INhc<^5^;s5t_A>pw@kGnANS%k2uwc7)~XC!+n?E)kl zjf7TzF&ZKD(L;8nBG7TgDM3Ot)rxrI?c0f%b;a;(2-``ze24dh2}n%c1U8rGlAiA- zm{b2fHs$`bVC?<+6DA++m%mF?I6e+1nN|P0)yqN>}Mk`?>G6 z-`K;9eb(<`QB#hlm_g<;d#(lnS*ADa>%95=lJ8QC8~Mg%-dP5rY9H~z^f5?Nq`Euw z&b72fCq7Ac(%rZNE}4l11k`4{xep$~>c4jHfwFeMQKfuGef4zHTBZc)jS~o;aMVqo zrL6xldYaxR7B#wGGk9-t=I`t&4+>{j$b1lL@-Mw}V_3d3E2q*Bc$Iy5TZy;yUr0Q& z-EeBA&LSZU>_C>gf6dDgLz0~~yzII1WPMZ)gbjRb33>-eQ#`z?%%Gb^3Mk}CU_{FX z zEcH#X%rh@PUsWro78psu3OjWfTP-D@MCAm<2QdaUkAp)k{gqueF*{?tuG1@g#`mi^ zb_3T|V8(q?*`ToGpHjdJE6Iq|+&QkpgOYTTTsa9@5s!t1MHZEcnSz>0BLTQgVVzg6 zGEp<-L(zBFF3v~=xaF}c1YFGBLz_lf;ccqfcjfo!Yh}#Y*Q>dj{VQQG2Mjv?+Jipt zMo7qJsz?cdQKn-uythXn9Lj8-+Z)Q4Jji!|o10&qW*?>w=FfMeCS#_|R@PceO*p*S zJ~{?%*HjE4vT0@Bfmw_mDks(F7-#=LPC1sB2q=S7!6t4GYUy|QzmCQ=(Pr73C7a(W zTc>CEfE@~9ecY;n${H#4nnM4c%b-b9$$G9MWM8g$6f4I6>$`z+NUYIPLsRJV&!c_z-g z^|qh8*YD2mce!oE@LT4JebP|gV7_Fwo^&%6a=L50Jq29};y! zzFjpr7%3Fmw&+5z3iYfNR3o9+Y0`$~wW-Vyq+VH6MMW!W_rr)rpEj_Wv9!#kxw)fb zWn{GU)(wk%qn($$HbqGVQT)BS&b89sl*UB3WqND)cdr~{%bIj-Y<%*pf4fwce1?H!*SvA&l&neM%95E8rN`r8u5hmLL*tFy>M;Xj!0>IF0%pL+$@MwO zR{ZOE^Z8D%mMLqKtIN~`W7%fF!Raj=uErQ(V;JDR_l+i9t#($jN^s>cyMEpc*X0B7 z+D_8JyoeIyf=F}KQT64t!-ZhD*c@{{>2n3)trBtOSe4kY$B3RlDJBC0JpYxR|7wM| zP#If4b$T|J^sa4cO&8og@s7;AcXO>>Rvv#-N2Te^9`=NHUiDC7__8rtZQu7~!O$jBjuGOU)E%L*#lA=R+<`&_dnAf_FE&g1aIpgXI}R+9q5(xD5iK$**2ifOfaEk!O-ztJaVneacCN- z_2J|`I?Q!G?%N(#KsLpe#q(3MT$gi%eO5$%+iBk(3XLWGLdtIAp6X6l}D^L zl#4XW)r-T+T@TO9>C!#@TSEhk8_AR?QH577a?^chzC&?-yoPf!o5^&(S z!?`;5uUY_cTd1;EYxv=CVc>5wNMEF^@x8+}F6D-W(Py}6T9mHiBPQ`Rz)jvRZMJBB z;%v}L&5H_~App+OOH-ncI=$YBW>{=zfQoXzfX>dI;g904S|yOly>%zr_>HDsy)}Uc zinj&y8MnDR`8BBz{=T zVCRDri9Ah{t&j!uxn}DIe@t9SsJA~ivn*x$n06qd2q|+V`icL$=AAD9@~`(iTYeW4 zN$vkarW#*;xuZCCaOg%FGLN=*biM6K^Zv?nlY)G9<vaTq=O4#c8e5Sj-SJ%SCEKE(c#Qlzd=lln*V6V|++8v+N{FQw3n}sNWwfmN`ONeuA(X zC_P2Nhuse!&<)nWj1SeXdbYDXwrm(mTvg_nhdkA-(bp1pZ}{-!x}vaD2&8>`RKe)% zO&{=(sAYq45iN+=;C>nYbJol-Hz_GtOcL0Q!I&8~E)K@T1Y^Nk+S+46bc7E;SxX%I z7#BxpPW;-Kk}~NmU=}c|;P1P^L#40gEr4X}?e(q|YVTgWD^f$(z~J_z-s{&T-tu$9 zsYFJYnctxVkc!#9Gi5IX>bY>XShEgkI`CXWJ7$+iAA2*z?6VRj2-^^5VV*n=)J(f~ z4*_-Hz>iK{;KvT15>GlfiV7~3;Q%8m0P3_z5L|!1?yFakj~_nJ!B~W6yCZEvB@R0hZww)k1GdmT z-Q8biWVdnjdf^{Z8_YGAe3X@y-%%XLMEk6bAdsEz`ZIWC+N2i~F^nOa$X|Pf;nWtH z2)#D;@5>rKgZS-vEq{w~iFs-+Or$4RvZ|%gWEjN>BU#s1@4J1_|%yk20}3O!UeN3Ul`Beq2zi=~PkhZlUaP@kt|t2u)D=1U-ZpeX5>LUB#O1;>RlLQKiT0Za$0U zLq%d*Rw4fvb8j6M)z|e89~z`V8fioUMH-|#6zMLdySoMv=?-az20^+(y1N^slt!e7 zoZrFk{oMEcyzh1W{(P_3iy3FmIeVXdR_(RcXYD-d{m-zY_p zx5&IOklI2@>NB{m&1HXTov0E`TC><#r-icbm^HAedFglgyGh@%&k{Ss7-$J#zS#4a zduxJONVt{GOh^)X*5@00)C%J;&3EFc2E~f*JUrZuWgrm#W*E`JDJ;QVrK|TTt=eSA zpA^=a894zSIhD83C=Y718y8`Y57W;{i^1pdEw?MzF7x2`uuBzb8qz7y2rXXpcZM@?_fbTZG|YDkrV`xw8#$<1o4a&#I0^;{F1F|jyBX)p+B_D{cc2E3<8-2V z5{aj+{HkyKL*0e9=+dKLg`WLsY;R%5S}syU1RQ^^b@TEAEu=5;hF&=`? zS`4U=C`O*d?_?T15l<^?ki({}8S_kuZ2dBAan7lMz|~X-;$8|}<}SE@Dd-Z->uSwY zzqtR4y<%dSJ@ohUSz0bHcMaZB49hKafF)ftwoyC`+`Nf7#2-W1@e*jS{ zh6faTh}u%?T-V1vk+N?hZeb40)N04MEQ|?A+O2}H?*P>;#yt4HF;!w_MqC*P+<^`c zyzfV2u#CF?9o(CM=8~onftF!i1#b`Ag2;e{O!-D*pXfw_mCoRmv?14bx@YQQc;9Ki zpc6@2q5L9xF5dEezW&+M8uUp-l^3LsDV>-YXlONQ7TQGK&8BcNaW;HOsIThEx~h$h%zT`Wky1jfqDM?ZoSs+aDSk zIn(zc<@bG3Qj)|JS9f=>82U$QmO;mn1C$L;GC~6GbfhSv1}Y{T0Ki)EWE17hiz3>& z@h{MJr10UfX5?p_@zB#)&n7hEWbi>C&5s^<{PTl){8f$np=AdVdTK8^HW1w2EoVY+^%+HO6}D& ziJ>!8YXng1vitDL!`89*v?p^0XY8Lz$mT>she&?Bk?`(^P|@!qoCbnjxDimfzi>JK&!@&$oF487&^F@Y&K#uHNHF7bwj6Q^T*U ztn4AY$-;Y#v16N8|0zA%W~6Rp0Hli$6kPsf9O+AM@9f?3nB9!XGq=oA7^mhdmL^#c zuEMWA^~5IJg5lg7$FPb=qx}{uB<%{fLu+eL&YsRC{ha-;muKvmnD*|b2&J9zy;hU^ zzC;qdxMO|6XmKlnKRTBvV)3Zw7}^Cf#lXDnMi<<9!eaMS!v_VET^_- z@_Q3MgUxA+%uT0!*bjRzd~uDuRcDV1DB%9_pUvM2Hz+Clz16Zs7-4#k2rR$sGw5*( zCKaKdPW~AjxZ)8{TJva(wk*~WX4Wjx9d)h{m`Rpxt~=6s(MxunJVwi@*QY(?_nc*k z{Dqk)bf7^8+4>q;Vs6;Qa>nn@n@eDp^}7?q9p~4KzyC6sBeW52#qMaw+a+u&fuMUNF(KsF=_4n(DX;uq88?3=JJK>bJPb|#LHfcncv)`^dttfzg-meQ|*&@7E zz7U89)Zo#+oCzb2)8SECaX20Iki*KL{nrDcKUUQKj_F|>di0p`7nYP(>iNoX*18yW zY7s0HZ#TSm#`4WXaPRq5^DZ!Y#^3bP9T}EU$iJ-I>|_<(^)R>0P+Z_k)nckud`7Ub zDHu|^b+OB5{`Ch_TncvH1k{9%EPtiD(@I$owZg5kzaMUi^P1NPcykD} zkB}HHEy;s|*I?lMa1H6J@E}*V)cN@cJ_Kda0BN?1@)o zXH2(x)d*GX(@Wu834aKyNN`qGLGv42?y(c!^QKvbN96cqIoXxUSvhqJAHZs484@I3 zZd38)-X`g_M9Uc}L;5rsO&P%9xgWvms;>*Xzi+1Dv>2BH=j%iu1`0iLY#DJ>WF-Jy zJUsCe6FmlDggMAM?Uc>Sj>zwTe*xPVU2IP7JBEB5Q3+KyZg|nuym=CgL3h(kge4G< zZ|}C_1*fjbiQH2&4$tlxdwB2#;@SObFq>d~5ao~p ztlUBhN4Ir$`t&%X5aZo5g&wvq9VPuvg16sZbr(wdRoVm^_<7g0{<_7HQH$$r(3SMmcH9a=aRNg(eTUAK?6A(s^0s}vZDk{- z4cEp==(eFeBLO9rDEs?Pom5AlI@ z0iQm7q-a$!$v6FGS|?MdXJ*o-MjI&l;X}5}F$SX{#w5`0`N3in-SDrO#pGuWC@FAn1kdbL8)+9_s zM1+h#Gk#9Er^m#=um&27kjO||o~?MkR4BNS+=2Ns78VH`n{NaNj~W7hNHm{;t5|Ef zi^{)BNH%=8DdGKnb33Qws!)rLfvZl(CnUD*<>%Kr7qJ1Y-nInog{IS;b!t#@GU@c} zY)(OeH1*LuL&V7agp(4}yCRlo5^)+vMwE_@4$@ce0Z_oa&Ylep4e3HEB{w!UV&dW^ zzg>$xe_;Z1`XW@yPvxi4Pn?D7IwLAq`;x0=;hEzeT!MZYCK}^=Ilm~-I4A7sEm%=8B58Ig&}>T6Wh z&uiSyr+<7v`{8=}Q9kA{OH&1RIjw2Y_}2X1sI>0qk-HqYBgOzi3&aZjp^FWZb+QOb zZbT8vn|c*7>5Ee1SFYYCgMOtEPbv|GZW_ZKnZ@cp(GFzy6H#?D`N!S!>#QO+4wc6! zh(fhOkSkn=nH-l|4@G5PdlpbX8sK-tNq2BmLxguQ>etWk_2Da{Rm$tY5iBb)wuA(IUy5NxX)Q zq2I}9HlMS3&2m0P*h$M7OYklh7csz`yp$`bti%^b=i*u9{89g6etk;h{%TBPNSmIX zt_E^@3Z1kC#fLOU#n4P@3}6I5rep;MBIhwM<$?>;_@q&|Fk;UepKQd_=>G6g7W?qg z{aEgn-#b%7DGP!&Kp?>&yuY`nq^lb~Kd(jKMMg+yY$7O^H9IrYIP#Vy?bgTFMq5Gx ziJXFB-Q_iHU`6RI@%WN9Izr)8Xm78yrj&H+vZKA-!PU2!lgV^bMQi!00N0tOqP$51 zps2Web&9uHNM=>-uHm&eb1YUfPvR<~f~}s773ug*VNekz_zt*C@Mc{qVjn-ePq2JN^W(d)-y|hU9x@ymGfisq zGU_ajPWd;8>@5ESGRLHt}~HwCqE8iP)jqfJ@~Y~! zjTgm-=*Y8K5OENa)$I2qnI%Vk+@=48H3=x_6JW>B-3BT!i$_eWqn>v(*6c5ECshl%# z?e<7_!3k^D0NV9EylZ*4t}nob`R*Q9={~cS4EPgXU*_m-7k=0*;!M)Q6Qo_?NI7^50p2%4>8xWL%i)VQu=W zd_9Mr!qnNQTg;obN3?iP@WYBzb<}wFGVs*(@vBPR-MF~wa&i-4{xmCYs4)}a>3x?G&$>7 zO`)iosMAxh`FDffyjy_7iw^M=B}JvJ>Tln$z;w)3zLw2#ZOK&Tk&1I@6WjM&Ll<8C zvEuSYFN(drWdXyp7MYZ>i2dpC*q|U(V>%9q1hh@8^X=*w3c7Xr}6* z)jlL$T+L*)2}hjP)zm>>=OO%xhe(bbFyY@T{UKqsc!$bDCr0^1OGzstj&R0fJyOxO z4dw2D0&1nW3~9l8CJN8%e!5=x4&D0DLP7Jb55v5ZSGoYE%YIq-NQi|+Qn~;9U6w(r z_it9b4V_|{I=q{Mp28YyD#K?RacA$KK^L{5%rynim5b=T4yG+Ft^MNwdy?BnYx^+C6lQe*K#4`=bR-68hbIbZW>#fh4asHw)t?T)^(oakY(9;wPRi^0(ML zW)L(DsqXWGs}7OpzI1G~DrsGo0e42DYTP9>ZuTsl1QQoNe~QQKxFpa&g5-Ss`0?6^ zC+^LQdq}c?ezW^M$3zZ~;{;z`~1`VD<^%NkEYWKxXbLAg+B16D7u%4@-(_4pKe7h%?J>j=sy z7{ab@xAj(h=vw45tKp^tO*v?OH-$)TNBpCH+d1_k$JLx;F;?AVsv(P z=Jw?gJhTTFp`904bF5pwSR3@;3pkyLF5}GHzM++LuD?gHKPVicS&5|HM>zNKY8o8@S_IRJ!U|OO&8?URvOUY!;%vswS zWUNh!pmDPN@KRoOg&HoLGlgxg?C6mMUKW-XwEuNgrLl93eVsse)Y7~7M7G2 zsTVANCuM?(EjfQ33FyEqcO%}1Q4gK^34&L)*$UNbsFuG)E@mC2K?NfpYckD4_BYoU z&_#L-WO{BoAEw-t6WBz`vm|-Zk-1G5nzT9mG(}pKw9I?B`z)8j z<6Z*>9L+|Tp8)2F;iBIa)>uW~xJ5^hFmem1pD#+u{)Ptb zrRt=A6Gf{i8`vw^xs(l^%H26(mVJ}% z#Q7=olmB-JfW&5bH%||rjMjWbZ#$a4x}z=gIsOh7*v&1v)EPb|#Pq$?yYXgU9Lo8r z%TE7m3vAgL5e=}pAs#8jI<8ZI2EMyUO=svQ+%Rn|p}dU^brpJj)5D|8BpJ(4J;*rbCo9oll%oxvS{Rayr?wO=e-?^2WU=A^0<6-vlo$Dq`wn z)!ghjmp(ZU7gtu^+mU%(T4ZD{uGB9=f28q-8NCV0Q4~A(mbLF7^}oydc$AN4l04iO zSo}z!-OWQ^EZRI_%J{PamFJ%X$iP}Ga$q7e#Wu~XSDhG2NW_FkNI{54h`@bC^X{1r z-0@gq)t@8PRzQPl3u~u@dbg$Zf%s!Bi*GQbF z$cNm3Ic-#^*G!yVxc^5R2vyvGd}+ziKZSL+%MHER0;7_Vx(Nc-Qd{HKQT#|c+6G}F zwK2+SNeI|d7Rkc*4b(BHJl7&rzjPFKGF%FzA`0JD-+wZ$2kHQwG7*D))8B%`;S8I zoNa$2X=3`0YCgdh{ghu)YWZ7x>?&@^zVtvqEg(t5ckL3VKfFYE+{}EL?z%Uy*3SVA zw!dLs1NX7X1ax#cWef{`_ML3P@Y@StL=f5HLPahE-OdTeFhZn#RdRxyf5#JIASCw* zqo5&)ubpmh%SK0j8}L=j?rbZl6QcWF=Dy1Lxh0WhA`0%k zlWps_;tWq@n!)7+EeN_}CA*f;93&n$g%)4Xwu3|2z){=_b($NeI&z_Qqf4dFkem+F zKMi-*25NezY}#1?a}W(t>|_+5G4Trqz2=+p?My;ZMA?Iy?vf<}f7{iK?Qq;$VXoKxjgBe4+W*4OspS3QvR>*vp! zrRR{7;k)ZR*{VLBYx%6}o>y31uk;ZJx<1kfk02Kt>SGgh-4jF25GM-D!d~{yU@l+a zg$TP6zs>+mNrOK8^Y@zRKCL78UtdUr_{-lT3_kSp_ir8%Q|W&$B<&^E^5^)UGq38} z5flF1suG1b>)&T0UR3;7|27{{p8c!0S6IfFtfFN9?ojvta;v7RrH`YM%Op4mz%O`g zZml`=5w&3U;>FcFE30AvD4bgOmZ7^?*omfCROj2e*-uRm&@g$LSG(C+{`<SSUG0>HV3XI42kDV%bF;D68^jP>f`Njbcu0=tMLM==tj`pw72Ruuh5 z0~;mX>96JrhpCpq&#Rr4P(&aT5G42epIU%LztUIXEnhAMYH$IQKGj<&c;E#c?CY_8 znES;`bo7q2)Kuo*l>C~Ww@al9(5XX zBJ2={owin(2DzLb65+8*mUDa4=05rUI1R3V4BU>D)BdNST!_mdOG&^73MDp4PF}Up zk!S;AynuS}YR4rO!w=nyx}C6ar7z!vtU#7%J?;`>G0(jtL+ zsV27U6+1j2MkxggK*z-7yqKAt<#|%A0r)?hK6(0r*wq5_|FIowGs%qIL5}NYZ~sGlg`g&tyAKK1U-5io9K#aB^~5JVzve z@{XeS^u5`?WfoU77eKzsRteOpj!I!${ftT9x3N@w*b7gLE_L;eeCsHU=q|m*_3dWU z+#ov5XN)^*Q!P}20J?t9T}^xHh)Z~#MCg|${vIf>|7!dFFtHqu=L~gv%a;A# z-tUa#U#;QWb3MtiX*=f)`IbHZx;dv4VI`MBMn>JZfMo@Zh+5eAarInyLbah$PnDn` z?2i&4>gmb<^7|igpPR$_knnIMz!*O9TT^yKI_?hKuK9L%+lu)@P-Dy z-HT9g!=>ZdJ)dQv7i6XrQT_uBli0wCLLGXo*%NCohHThdL;~*wGI-b6xG`V9V?R7tO=Xcxb5Rcuu(8Auf=Vf6TVXlyA zk$(Dh=i6%lp1pXd8H6vq(rBgAEXrUqZ$?V;O``Yw&zdkzNVEc)U2FI(djoe#a;2sJPiOB0l}Sl=j&1eWA-KptlM~ zY@$}!82eX`{@sPLyBK+aV1fY}n--Gm?b6YBrMy14_ulSQSHYu!7lO9({M5NlIDtQn0D@YC&Nt)Qr z)2W4ygNzo0RlM2J_gMdIN0$)zK~Ime)4J8}3uEF3YT$P!@yB|N?Z(h?qM;Lq%NmpJ zp3l38YWH)vU_mH~seV^yXN=Run+WJ(Sj&phv|d;`_^th?E~wctFT_F4qd9KS)FgjE zXIlyDrn+_`fNtG=$k#PZMFk?rh%qIXKX1aP37?qJTKyn4)DPH1%TGhg3Riq#MrxG} z>0K0_YYcU6?k-w*8af7k5wku~&POjDfKawSRkvULaC@jJgW}N4krf2kcCy~@G|J=4 zlPTI?@cx>WYr}k}&9h-oWDT^x*i5;qx;J%DKTtDH`*!di)a&DVHu&dTq`pYozJ186 zs_cYwt|XJExY2#;ntF8lcyR!&>}?9P1k`;ktwVUJQREpbsp-Nn571yLC>N2sB(350 zikn;ACr*8V^*#YR|63vV{hYbX8W^6m!mv&PX^05{~5qfFbS5uG>S5bl6`)&iU%p!W|k`ACf2xN zZiPP|lBQhA#Z&~lsncvl1o9%9I_96U2+V`puH{?7+xi@nr!G;wqd!Pxc1kbKTUi{b z09)Yc!=o_%*P~FcR7-ggyWAd}8>x+T6@C4R08CF$zwfE~Zq_FR8i~N*U?iZkt4mo` z_0uPFwhQfK&nn#Z5j28avm5Vs*m2B{I5|0cK9d-P87Ao}$M9vU;#M>jnmK z9*lW6ZZl5Ej5yr-%mmSBSPO9S>L@@~bwzl0OKGrVQ^vdJ|wU0_g z2L!K|qTl59hTj$PekIJBzREh5o?gH5u+*>m;mr9(lzL8lGRx4IXg>Y}8)=)y6FI2w( z+)Gbo19f@|7tm6S#&vInOuf~kK5|Rg=5XB4Mo_E~WN%K1uTUX54EYTbWSK1?hboo8 zxNc}vvAk~XFB1;c`B7)FYC{K)AlALu4x!_qwl)Z%u6?;nU=$sx!yw4k07ofSK+13| zx2Z5tP-s&=$X;Pqq%bTzK%A}i0|Th6tOQ)}wZQE0-kz1Dq$CY1>o6V!483|QIgod{ z%58|uaa-)?pWgTzpuSB}u2K|sq2@psqH1|3FJNM376ziE*+0%G}R8(5pfQCub}l$_X8b)%#HV3$%3puaC4Z>o^U}&d z2U!*Mh;0Ejg=^StpN3MT4d9Tio~=$EBTSo$l`bd-yrvF*yI`(;QJV3aEM*GdBKhS1 zCS-y^%-^OFKG)Xd+cy^&3&wOKh~ra|vSuP`7)pxJC2|VUOrS2T41VQ$dZHN+NUA`9yz{HE zHH?j%5uTH$&Wg+Io1`k>x{vm|+6x`6wr z2Et-#n)R6$xQs7t1ps`YF(Dj&40fo-Y@iuhMkg>@HD}ZtJ6%hiMd815bwFlC3G* zXdg~Fu4>q#0bl6?7e5`Oi8%Z8155G_U!MRCS9B78QjUos)$_E&ovN<4x>fcvw*#$L zoPEJq6{W~?l#pt+s!hdJ_fOIyQC-ajTy<$ZI3I{JUA~vE$`CD`rwNl_kGB~Lg}x~9 zef>MF;Az~Iuk4}N#R$|>)~U#rv0>}zp@%m3gLhhy&HH}29o0r)gZU$O_>;fbxFL$g zRuD4+@Ik^}R6NhT(zI5wZ)R&ZMLUHq;h({Z=lL==OydB{KC!g05mu0MpfRKo6r>y* zUHX_39Sw}@9U#2?Q1`RP*Td^RF>B6M&Hv^7rbcd;;cfW~X>GQ()bm-a$g#Xl0yf7) z`LU+H%eNNb)CZ!B=g&GHY60+}4+a7ErzTjvmT<8B;K25n6TC9h`WAbIwEP)IEC_ZE5#OSQvzrAX*QU z^Hbc6;O_a*DC1Lev{(1*T($fKfRP+b(}z2wUzz9bu!rKMJj5yo-UOY+m1bW5K)}Pt zmvmJ&;ceP5e7D}!nx7G8m-g5~Q~QG#sh{fyVev(jagtZHEJIB;q*N$J^u?7PIxzlN+d{sd!#JmTt~JK(vD?<;cT0 z=n3gQRuwFGn#SYpRvpQqm-MFYa%0-77p_&Gx&h-o`rwcA$T-HQq&&aAJhG=$G@2pt zyA|%kt1?-o*z#RpUk|cqd0)|GE)tTE@OZP53Ez&_j9NCLATRIPaipYan{cJa?!*>d zcyE3b*{mST4klPBps$DcDzJ!b5pCy9O|n$c+w1etp3D5EKU|oO>V(vu8?cU2QX4P3 z(f%;P6A@0p1@#zXe!non#yWTwf%~;2=h?Q4jE+=r-*5`PSMcz`rwovc?T}XdgUX2` zJpnE6?Xshmmjnml4;X0>a!lc*j3}E7C8%LPsrkxkB;Gxstmjw>1o430&}y=8i2V-| zP1L^C6{daC;R38Yf;4~YD~f8|AB*BB5^)l-EcYAi_l$SWHLWNkeb0v~Fm?zrV}Xl{ z75Bf$t4P$^hE0Az!~teQbjR%$8Zf{wZ-ZF&%YIlGxVXb%kVJGwwY?;Tuj)7H-yGc; z=l4Mae@S7yL^$|*Ml{X|1zpLtw5so!uL;&$ z{mM*9NePHTvC6x~BP9IP)byHH%!(0IpX}^xKF5tfwWUBjL~wHybR3*se*`3&!1jq; znPYl_gn8>wJI5|Zgh3DmM^u=~vLpxp(FC5o8P76=YL#zV@wRZuagGhMU>f_FyJAF9 z35O)S>1_;E;C#@G=bwTQ@O@V}3aYXvmvkDU!O8)T(s2SlGjN;u`oSW)q87GSNg^rG zp_h;o$%A>yNXar@5w%#zT7%}X*m9#=g;{2)8u38aCbn{{pq`=GFONH1St=@fm;3nO zK6+sj-~^YF_b(PY@qmTqG7;M~Y0@kI0l;(KwMS+dfQ@a!OC<3 z#4tk!gSuIP>q~tJqc6uTb1})EL6Lv(@S>DEuCDLk3fdJQ0($#<@-Wr2PDfiWVT~Y> zgmH&#wuy2DrQM=x~mEX(e+ZjR@CTXjLne(k+W*q`(_h2GREm&o; zTQ{=7`SfWoUKSUoEm&M)WMrfS&Ke-~jhk)2U&cZJu(7c%Y-|FjcDazD`oHSUbj8v6 zGTw3V@Z@A?cZ|p^{DexD#J{%nvW)uzQTgZ?50iAo@GoGsa1DK9qLD=NE6$P63zp>= z@krK22U^1HTU+I`PEU@ZZ{PYVBiId7NpXJSie@+?=9G;2T&?l9v2LY=51tvmlW^Cu zNZY?~&5v#H!(e$|^|G4p1XLHPcRMoN9?P00}J70WW z%FAs01pU#YfCAUBM*}#d!^fo=Bu9+V{PB>%SfkpRSt zYJL=zd4s8*#1MxqP;H28+HnAjxDVP~O+S5p|Ku*Jdb2sU4L&n9F{v`c_|>Fq^ngiB zTS-9Jm}YbOW#x*Qu`zvX*(91#IN{!`t_|i8iEz%u>vTg+?43A7mu-=@%5&Gl?4s$* z6hDDSreci;bgrV>o_g~o!JAXzZYfe73>MjvImb*+j+)iZ{tQ2F@%{YL`jGb zrQYTB&DwIkOc+x0E#x|IQtN#U>{NeCo$ES7exZ&CBv#@i1YHRWZs@@&A`S|*9VU(U zc?JVA_aPG1mvJ8l<@|i4>g;EagK*obYNe3Ccl8(=j;FXMv7lShlw4ybvRmn@>l#`` z=0GORbC`<4>t+*mF#^W>ao+|rqBf%ijvWp80_$Db;2M>^+r#6X3YS*k5#;fj{y#)i zI42c{#Raxib3gSOb`1`}+}9%kb1GYw`~L3yf`Ui(`v!wy5HR((E5o+fr94uvA8n1G z$KtE-E~-rc4756znv&9-_I>V!!=9w&@}KmfqXPm6??2uk$mq_0d9-WobaL4y&=QY| z3HC&_vgvK+04BFe!9*7V*9#$z;Vv<%It2>UwYelY!+2-#)C=b>;*ZK!-H~iX{oOCU z&t8`@PQ-$fkxpuIQLUV{&SpRdjv9}G707TgC$_Z+ON{ZK2G>9Nwzfy(ld>otMa~Tc zm|Yz%@j46%e8!uc1#B@N5+grmTLiDmZH3KIlh}MD(}cY1NFzGkUO01*0;8hWsp$`* zvTGebsBa}rd_UOB@uYBNr~*ts`g|W#zXo@o?Ug?(dg4d9xUB=3HuRhC0JD&hzqp4z z$O&bKT#G=&W{xSwBHGtsHmtQcH<=8)u}vtuFQK=B63AVe||1iYAhfWiBbBpWAqb|owds# z!|hvIrQ+2!n(TeH&auZvuO59=fnT-5q?=K8Qt;bhTrJ-ZHuGIW2CFX1IPnt`b2Gr) zEQR?_tIgoy;^xPTgQXRlrDNZb{R2VUc)6`1_jNEf1pEgs_2?haj6pcPO!!SFt;Gu! zq0Jp!#RFQU4ajzXqx3EH{A*dSFSVthF?|6B|KmD&3S{Px1|!U1_m+7dV?T;|xu3q~ zA;)*+PlOo%0wZzmR-gom=j~X>+6|VfHlcoPTX4&}>K0!rUaV7iTHkU)q>{>!^=2w8 z-&}iXu(I>0_J`ajlv1h11jmbDmO=KUDezbMknYl`jenFC-_Ay~^+5;{5~qv=6VY6r zxKVur)-1p0wiwfZ**G%JBPx*wb#Q<}-_IuBEFLUWOWnTm6`ITqUW$Ech8O@^?oQ}N ze8}M7gs{OLK{oUF(0ev~O?`xzc}t8zL7W?Vep}UhYW_v68pucQna*+W;%D$^N?Q)f z93C6?`-^Yn6kcRDH4RjA0p0K3C~Y}{3!V6jrgo<@7yWFTH_LTMuT^~r-W95Pzu%{s z_|o8#Fki{9Q=egsTmc{o=?eK36`{Ey@*9^YP4e&$2-IeSYhI$-tUl~09?Sh?IGV1> zEyThvMr^^lNKWR#qN$uBNbvmrT>c&Z&I4iKSKNzFApZ=DPXpFc$Az8q!g2SR7uieX zPXFJfYE*7u;F}0AuX|sWF5GX3*b%8&d6&Vl?ego(Sa-1P#?(zjTxx_`pkTGEDYURCsA&gOiZu*);=iR$^%?1vybx9=tjg|;M zRc~px#r?RWs`HoQHjlANrL8jT79A~ub8CakQUE(FKmYn7l9E3 zU78^Og}=NVs?q%~#N@5anyJ>maTn768~XA85zw*=L<^pvU*?Y?@r^n?WY=#Gk^YU< zI8(J-W&Q`@`D}OZCQ5AVcbzeRbp*B0@4=Z8ei=#5)){XYI5;11wd@*+6RMU-Atz{{*P#W{=&uMaLGa^d#wbtH(65jl-<6~5{Iw1-N)w2mbl4U zhu2sI!|qyR?T$ovK2Tn}9hu)oDv$>6Q}bKFU^l+>rYZK)Bd4lTIzp75iYWCp+Zu+6_7eHvX3A^GTcCr~E4 z|NQ3eYH`j{FLsu5d~@~3T%9$R1&t~ETdM=AS|1MlfqIBi=*V7z2hyhA$SS&MacmzY zHN)W>p$l|H?4%@p24Qw$D-L&c1AxCU?K+=|8aklmbuNC^m=%4T+PZS{L9xefcroTz zb$K|G874qVM7e6iXvg;hV=os6Zf&&3gHa|pi_PlpFkvBb5Ode}{plAB23r_L- z<8GS|b`k`cTlvX?qvi7Kf?uErr=~rwwLx@JvUFo*IOdDh|5dk~z z06If5>c2O?zIs2ERwFvl@c*Q31iYs*DF>p(T$g0ql^*`POD2l@S!sF4WC@AU?hK}* z<3aw;QVX@Tw82M^yxBi(@TGeU>|7{)KEH;Zu4Zgrtg13Gus2Z$kblZw;5h|lCDw7< z#YWhNu!vBD%tab#&xMXi7`ccnJQWhBdq25l`3z)2#JAlBQ1<#8RN;yX7-Y!;SzDxr zl-^(Q;UHOkerkQRV9vDL*(yE(c$SY`jf!!1&C6NO-H^l^S#3TviT;iC`@sJkRfX}Op~PqYsBTKqY) zOO8=KP%_00F@R_Ke362sbEnqtLr0MWEDo>R;2XgdCi9hHiU4W7Q3Q{tYm;;(TWLA_ zD8{L^X>a?r!F|KUQ5$R>6`}{x80Hc3h1XneX(pwjXr4du8f|JIluZFK;-;qzz`Jl& z*ll%bvU{+1aJjuK0mo`;K%#qFWPlFSb#T7Xn{_l5j`t6e+H{KDzOQdjAPZC+!Kl72 z@B$uYopkv5=iS(H^=q3O3V=Tvk8p^pdSUE51aEe=j=U#PYLGLFRs!wOpzxE_6K)_Y zuXTLq7DTGF-G4p5;AL1b>i%M+uVT34c5v&yy|!mvCXq0!>UF^hDiZyM41z;+ZJO^? zqu9bLBC_%B9lzunPx3HKoLqC0#|Daq2tWh7qhQ@*KmVzX$C;jRxvy@|r#?hEuf{L{ z?J@OiJRHgzv}=kcCLN2;cO}DqUO5~)5n1~p4I45FX0u}yTYo=dJDBzWjdN{JpoOJc z)ma*9hBujIB2BxKc-|i?_OEl3xw;K#c5axODrJIg-BQ@I{Dq}$JYbTH?ubFbiYCXF zv@smnSY0j(X14v4W_IaiQkFu;KM%)@?uVSmc^L*^LwY}73L^+v?^!>MGq83MUbSUz zv1*#qcdF}$ak|S(cSno6N~i~ml=D8YqQQgkZ%1Hf;3Iy_j8%Rx9=hF3z;NS^F#Qb{ zkYcZ(Y&N9lhYj3ysVFP$cMmqNN^j*nx7%)iFbe}qP^pAjLQdXyb0&3Ct`do~!U&p7 zY4`qH+o&11Rh;Y9JSLVPXCAth@R_{&<9Pfuow(2>)fzuc$TWLf&jo5*x77I!TRU}c z9|D?)gRk?pdJwlq1v|Y|I%ECMB+wT>ET#KuSTeuIfgv{~11SDr;wu4JZ05$zO)G&DD>v2rDJubJg<5sh%tf5-+PUXwnzGGN2Q!dm;1Nk8%QU%in1h7Lq42h-LeaE- z&_Z016$^9-pjGS0|6l-wh?<4W(0v$BOP|lHz&;+&Q=Wo?{BSSh4Ehc{+NC1a{Y$&iWztvz?97i>g9uO z7VKRoJ(-I#isB8Opn!N%0CQK_8;gbe(TfXBtJH~T9HT8StFbV_S$xVh``wSYvtNin zYp+M5jzDk*iO&@nPsaFak(WLG5am@nLGseVCeVzT=L%Nou4SG;|$ zz3fyx-5O}_i@+67a92(z$Z*_!>*25PlS6597GbTi*YTta9NbU5nca*jdto-_vq7x3 za@S6kJ1vE2fn_g6q2KScee{n%;(Hry_3n}byNFzLd<0-6DT0E;!F3SB2k4n+0vXKd zP8Bt=3{G*>h}~0BIGM%yArls|I6SxC##vLjAT#JzcAdMwm~=(Eh6APOz{`7{bn zu1g#J=;`kj-d)&xmC{{mR=LAW(>zKJ~tF(*VS9JX7IbZR!5krq@|UQKkLu*w*)x^rr-VV z7Vux=f>J(V1HGcmO2bp+G2M*jrHuEZs_8YPhNaCzoXX<{qQ9}@Fsu)}db^!F6p8Rq zGc+n)9F3UXVLc`Z`IOuu2Hbqs<9n+;e#L&=l z>yD{*FNm27l{?E`HtuWzGE#ZAtJ@SC2)R z#y$n;6fW_imP*2v5O0D_z^qgC_Qwsb$Miu4yZ#jk8Y6 zpl1PErj_!IDZ$^`+`NhkxDBV#ACgBg{?>LCOsz*pBzx*T19bbYg--9|7cCu`X$0U8 zw!N_D`4YhR|Ab(M|L>RwFNW+tPf@Vn@xO}PqK#jaV)<;-PCypH zUFACV*7=;at#!OFZoe-5h2QJy&LXwY1 zA(lTb5G?8pi7iR^x@YF}(14K*TmTBGBWe`ca#$v+I2&EX1T2R5+mDaDSTmDXUa&W< zED_pwtOJu0wMVi>sD;R>ry~ zY%MX%Pb6&P?NGS>iTnOcZ>F(t2TW_kfh%lQ!BAz31a9-^c} z#9$@cLZOF8lx=ROomE(RMyZ+idC(6IhIsS0*UxI&>;ZU z*zdtE!$1>V{&SiBp;a09oO$|dcw3_tZIzqp49bqGZqGU;$fZ1Fa~?uUL|r+84+ZtKCgh3oDq%kkHI(y2xV)w=uITzMbF zkDRD>{a*Ug|%AlU`=$Xv0mE>C5p=|+zpIxcEJjSELpl8&)-PTNW`nzG& z!@#KyeT+>z>g(kyDxh+Zmi?9$V?96o4Cfe(A$qqpe955pTww@uFTMCRHqfB@764346f}t;q9SPEkZ^!x_;1SL=1tE{c3{(U>WRm$Bkzq^ z^loaFz;CynRjh?{@O%s(l0R>&!R(9ep=DGuo}$Cu>dC8mW^aCA?a84pAPRbmlDrp6 z7Yihc!^EKzcMy4&LJmJ?2l zc;9l5a2b&`d>Xsxr`Yp53!K%EGazK;*c?&(6R*%)UWQ02_{P{mS8nywNlU}WlKfh+ z{8RU-9mWvTmW1%iAYpBTt0L`ivLbHl*$}Y&PA&8GXIQr+CEH7Bm$6K+Jg;l|t7`tD zVXb%YvuhX}51JfuOE2@v>8ET2l@K|&WBekxS(PMI*mv#dTiVp_To*nm12;JrhOa4{=@iuHJ6@lAbxUZBncY?&w(pLfgXPz{$ub1=& zxa%wbC#L=F%rnR;Z0H;CI#oB4O_u-)y05R`E2V(HCe(w<`p5jig%{a_!l$>M035&5 ze?Jvwvds({%;GcxgIc=`Kpl+Ct<0Qv=~kFd4)4RMzt9N_;;+n0>{C;foJT~6+et=! zp@_}Z-W0LxAytsRMHt(dVig9}ox;6G9S$2^jLDy%4t+I=K^6 z00)qXuP_-6v+8&aFVB*VRyjEy-E|prCvFgqFSR!OpX%NOs;OmL8%0r3w}Na%P?~JP zEh-=)N)JInQBgpVzKMb~0s)b}39$!hRRmO;fPf%fq;Er1It3y07y?AvKp;d2NeJow z%HHSPd;a&oH{N)6y#K!Q7=yL4s%q7$X4b54&YD%T;%iLMg^e}$spOvD>_}N}*s4+M z8TAS3{RJ(`t;dcOm5=5He2Vlfs)AWU@}4|C?>(e{K?(^p4*;L4fwC+_U16ORpw?-| z1Izfuu|%A=y8ybbk^>W>rcXIbZ|U6P(WLRUW|8O>0J!c!w%ae3~W1meQmsbfMT zbiYL8McXR(g7w4Ld30UH_FA!whXAOm&9(&o$q?|MSf#l5UBBuiTu)c-DR^Dj?v>oL zNk`QR2Asg<+hU_I1P>>0wMcoedLhz9K0LljYUSCp%M@eg(z6Y+*R*y}MW&e|aOXLR zyCU^WtYBbaPFiTt#zvu`fa9W-2@S` zzF!Q1(1cGD4Ls%og;sTishBlAA*Ww-%7hp+0x{T2PIe1>C4QQiVsqZ#O}xlF^?}cI z>)0)7tird$TRH@#wp%G!(tQ>W*yPc&D#hvP1OY!udg!~qpvY|ch}zltbB-9NPQ!G# zFJQdavWntPg{}ChiUNG0pqAWSW+8lm<}L;yF`%Q93r{+SW3pf9dIKE0E&7G*4SPI5}&6=65i zCAnRk3M1JxUuidnwCW^*h{DVbUPAdTa3i?XNEtcPTzUyPL7FV5=WFCxc6jyIK6*xdGC=ce{6bu zDfvh}>rD8X=L$HJIS06Jxg5Fu^}5)B?Mqzy`U7CC>C`m!jBo>BA2`^IpvGagKBk_=m%5Ibo-X)HkV-)T3 zWeZ|n?CGv8*&*%GqOzl3ighlu&)Rrhvq@kyAc4>MgKl36^>0{)47h3S;F@Jpm~ZlD*b5I_9=?jIQ<@!Y{d5vQLb=_>8|&zm8QJ4>rSjGz1X?LCDwq0gL%8yj=X zSPvBIX-bZ}hHZj?GXd*J6A|!oBJf5sGdH*S?vCdm$=bqzNy6tt!s7c6l7n7K|1LBr zSENl#oM5;UtieDA!Cu<~-&k;PAe;V1*ylGP_qhA{KNVO)gYDQ`H}9oSq10S9U8Y8z ze@ZU@1E1u5O<$lX!A7Yd%Cz6Vy5WUhHZryn-ko4PIpQ%3&;4ppCn;yq2u zeAgufQI?$&{{`E#wX6=)?-cyTr}(w^dvFql&U@C~n2YfkmcjBNX!IRXl;Y)|rmgdR6CGEA-PvorVG3|_ zb5vE;#(=f!tZBk?)nS|iINbcZq=26Xvuo=_J^#4noG5&E2M*-z>ndkey6K4P^&^e* zSDOF1>n4D=r#E>|^)|P&lx+1K4LvhT|6HvhiEV;C^nQ9|)5O5gkLKi_IO zDO)fA3{g(Y4K^Ib1WEt%on3ov19kpovrnMesNS~!+|zR_^1rro=f7#~>ehdCKT^*4 z=D~%)ScZ?s%oLTutmV>Vk+oPX1w~zN*ye5sP|Wlg)-sy2!GHo#&9>t9vy~^h0drRpYP#H6ohehH{%S%u zc@MXazCGh@Y;S*1=nt@-ob3Bi*n$MS@=973m<`Q!XDSK(VW1{Hpsp_b#l-F|C%pv# zIAIxNBDP^&ceqUAsPgG7Vg%E5sy0a&hxt*Ja|h*0v40UT;?z%QTS>!if0a@%=b%RE zVhy2RwY7DNc_m|c6586@HCexjMjQQ1!)|%`axBu4g$Mht8h)qr+@G7Bz4h(opYK)& zk3BXv&IUJSy9(o(+1X1WzC+8hf?`kY-FwZ!CYruD5(f_72M!y&0C3slKQa#5?R`&L zYHI3JLELDAPOIV(!3)-uiOCR%n~Mj>rZtedwgM9$7^fO^KAxtEcEBc?{G>lK4S2;- z$}4!2%3k?$`kaHR_oHY`35GS?1(shEFR(3ax8vVfRL%=$$8}enie#tnZFi*^Sm8gp zM_HsBO3n}=kylu(U);|ft(Xu^{2ebp;U_4JzODMq14finf?l*y9?5X#m{&p1Fz-0m zYJAw~0rrxwG@k15zQxsWdhgyo*M5~4^DD0w%+&?_3K3MjlCd1Fn`yS*xc6MaJ>dRsf=5jg1XAD*NQ16Ab-8!m_Y>G`#OBvb&eH`FTy zT*6@UdtaDAkTN<`$-ARl4*i--fBI`JbwQoMrK7>t-OGzxbYw&yU?S4t{NM|k#`LD& zi9Nq8jH^S?Z_SQA!+kmTS{>zn_Qd%6t(Ehdqv;$q_PodKpo3Py28}z#guaHiKM>j1 z6ygC#T16H6ES7y4=zY=<&+H7)Y8^N=@%1;#iO**SPM)+&g=8H#wP&4hLPj@umze(A zbAlKr?^5z2d>&h9?cT|h6W12-z!7Dk@c)W>HawnRK_D;=I~*MyGXkaIht@9| z9K3PRliUM*v#Y-Lw~(K0mm^e8EUfJ+5?KMfr5+RbU_L z`FoD;-O2udvgsQxo#CTS!Hdr_GGw~<5K><{BF`GkUJOMSh)YpqzDiL_vom#E*7zZOQ`NA_*l z1;Ecb2z}$;TAs(3hb2OMX97_Aw)lE<9n(i)WXBdFP zx$bVf5?T4+b>;n^i^sTJ-HVkzoP*#mv`wtfEw@2Q3ls#6&@zdC@7!aH*xuUq43G&)H_-U`G~%XDe<2vhG%>Z2#B;vBCzk7(&I>hqll%EcZnQ%T)2EPA1NvGYxo|gw zJt8&OguSR`|4R6iDfDKb@D#J2{=}#i%-V_29_%^_d>}sr`%s-av!TknIwbpG5C1dk z+ffW#0=zAV0Z+a)>9V;edA#g5+f|fXpCoAqt*~AXV76GzJ~oVc?Ng{+Ijmr^sJAGL}V-?T>k&Z1Ak-r$WogD}VH!*wg@AKbE_8hJ9+JGqW!IV|5f$ z(}wKwo~Z0TK27x-b0^S$bxg$p%Z)oq0@IdsF=sF}c`ig(S96=E7PuoofdmjAoc|dH z!vCR!II|dR)x5=p%_bOh5akFDyin7ANfg6sq(K`>U<1;ylk)q2?(p3;a80L4^gp-t zwp5AyzrFwW-yKE#7qHQ5K5=5a18+6Le8*pY{^{Zu*CWQC{@C*S??*4IJ#8i%Z5s?< zYtpmdtEwon(r+Yvz3+1I@acE-O`bQ3s$cKd8VWbPR{!NrHEFbX^&{eF$BmV3TFR&!sMYZ9rZbcJJ=_e*1{sVlDG~6A^9WtX_#~#?rYIeLEDZ6r*t|K2~US zd?-bw&}10gtX9^cALjjwug``SFVj7H_3uo?21hmZy^rW`l3-!2lm3) ze2HdVWs2&I;--PHtGrQkkvU~G!mY4K#t+Z7&y~OLEGG`xxMAby{Mj`mB*+a__|w05 z?b*C+h(wZ;8`>nUi!?ZwO5aS$I_=js8{iet6Pr$mJw6) zqb&H0qKhxd+#3|`Ez<3KrshIR{&#-UvRDKcVhHcS1P~E4@6kCrKS6cal*<*|2riAI zRuib;g#nII7ncj=cQV#7!)0?YJe!S;HAraXqE9iQ?1-hQ5u-E5H+y27(FhmfNCkww z8Y@?OnI4X@wlXZK7|Cs`x-)P&;(@b4fkwz^)g3pz!9pwah<6(9LpMB)G$V**fO zZt=vjozWw6umkWj{Az7x>M4G87xfHZ!~&$Qj-bMeSxh!m7R&FbIgaEfwT{5vV3BWA zxc0?Ei}X`+A~7+hC+ZJ3vgXoF`R8qirmvr%L2KUd%ey&A@Hu4Q!DC#=vFY!Bxm-T1 zc3ku`@Dr5H{rmBdz$MJ{$3i=SAD7=Z9|i7QE^W^S*Teq?5v?)Xvy&SdtgFIzwOpGG zRSXI$ofmZY#l>$qKbr2{hI=#f!cr1y1w;ubt@JhMTZJOU=qW&NUdC|mlxfUDBg(!{ zK)o-9la18+o%vRYA+*j3B443Y@fbZrqjGRUK$cf=chqfsoblD~oHlOr28zOYCieVd z8NWu%u&5P5q_L6ZwFMZw!a6=j*O zi*9^-Ka`a*Iu=6Yye;gm4>6|C+zc{*TRSBUD@iJZbK4~s1By2kj3?qisUB5_xsAj` zaBzu9bnFJ%y2r7x-hkf{!WB)^@DZ)Q5}{|``Dd< z_toK2EvMk4Rh_|m$nZgy}%DJqq{<47|=^mbv^ zMx8E??-=ElLav_XKkBL|sbM=n-`ciu{z=l+1aFGP5GYJ>$H~KKj`uDF)4DZl5d$Wj zS|)E_^pCta)$_tVZ!IVNwcOOZGBLd<+ zSy9bBR0l{pUi9CLzW*`mrX7F}?+Z0zhm`>23&2@LZH%Dc4r)#2L8YEQlY_une zBJ_U;{%4iJ5#=FQUZ2eA*8#fI7~qVMu#nWOZ!T`2;7sOMxOI&d@dd?6*5k+e)=fUO zZ)6DHJgjw7NMAs_fYdY7T~4~asqm$YwMYi*+YGs)*6Xz*^5}=Fi98DN#4L2SLeAqf zq3Vuh6K7U6>1w)03h#$PHQy?svC}!pxGPnq3zT$kK~}hzBa%x`*_H#GDm9l6KvVOV z!useVFqkfV(9#u`r4N^ASpD^;LQIy+ z5xqrOl8exd`P_03T-Iyt0Qc36ZXPhnMB~?2rl;Sh`+9xTy3SN+3)uC?lS8P-o_UWO z{`$yq821fG4f^`fojq?(-Z~c#ff|(6O~ux*iUTH+imHo9^?#bC4j#GkdXKtCj}I%S zz{b)4yhapfJ&(%u86E>k8c0HJ{`(z;p1J|uLpA4QFW^gmmSQ4VtMINNJ78VbK1)MEA@=z{{_#HWqpWIeEBE{i7Mm0F&=pzwkcYOIB8PWhzefh}{khFw$ohzi5DzE{F92C9wkC z?xv)wa|UL8Dy|RwRqPepeRzl?HcaDX(G1dAE;Z^kxLg}SBM$Ipfhl-Qepwy67Q`&^t^=`hQJ{Ekk^4VS`)|&SH z{@pBBTOp~&{VMja1fN_PLPu3of_bWqOBG8WTSSW^t$cu+V1XLI1&jv&^~q?HMutN5 zKCT~$1XG&PM@~MGbOE0%2Vbvokk}>_^EZO{3tRlLL*P>J{^2bafa|{8W4K93=;Aqn zbHe}Dh~7shBN$6d(oV@0)`PqYBY8f6@>M>Jm$iqR_iWG|Do3~*S6zeImfmhy7;{n6 z&4as9`uFhq_VTJTe+L+KXf{2);!jhJH;WI;Cz6k8GH%mS$2Hw+q1D!mh=~ez1qh0N zTVDoXm~|4U=6$tKJO8~f)c*ry*RnRDI#_9)bnEc(KkxTA1j96D+q2YkH^DY0o0b@C zQUac0UYf#f=JLYuX;GeKaiAgR#_Nx!Gb^Fel?0T%5?i0@flTdg40ut0LTXX}P47@j z=Gf4gzuSvFQl5bPK%Va{M+g&zC{pXNQ`d%OT#9&!bQBBeHg7`lq5Ho5q5ZgT6^ zsWz%b)!}*y&y4PZmVG+;%R{qGY&a>d1vNfM&WYColO3R|FaLjO@7A+hd-)s_8xJ?J z+gcOsC*h`xwYk=~OU24g4W}DtUYb_qo2Dgxqd>gBYjW+XzS0h*STh@j=!6$pLJHmB zWyr*8ekjvQvwB8yA_8lH;|1X(4^{mfw;6xM{gtW;z?@1sV1nxf#d1kt8mUu$` z1;tt>+KSEq#^2q54NuDaWo(c44!~fW6kUfTP#k9s>a0_i*t4n%BF%Xs#cAam70~*N zvE)ZPvqu~QuF8ac|6b8?>aZ@#Zm-~ZDboF_DY-URA?eKl!E9X-&mU z+v~ql%Spj#jIg^RHlKVs_!o!-Wc5kvr?LS3{W}OW|I=WM_oE95c_M#P4L1+IPU`b_ zBn{S)2S$chyU;vZK7KeWp*)9#U!N-_mhEOpMcYI9&9)xdUBz-HNX*3#KbSG(+HnrE z)PqMbDI(njd>%Dbzb)6U)EQkHzDua8JdzY(gsV)DrIzYTOT%bg#iN^i%23om6XVmc ztm9iG77NCX`H9M%w}M9m@D<*vF~!x~=lC6xC%&6y>YVA(=RFSf#_>lAiJdHd6v?l> zQzhMHyggy1y|MYtZ64v+%2ju0aJ`Z_6vC!HAP_{5Qzx}t$kZuFT zo@a@#_lhy3BhAQqI#J>t9m3^Gys#nR{N?ScP4oJAe5JdwG1ZJ{xT!ES{kV~Zvu;|r z#PO;8UP~Dx;~N#U%;>VQ4u(M=DQS;%cvb=~LATx?fj?X5G>4Tkz&%TBpKTj41|>Y7 zFSN;>2oXZ_2Qd`4mD`lPN6C7xM| zKLA^Lvrq6Zj?u-2oh-UuZsyEKcn7x&;-_^A+An3AFdHvNe3WwtbyEm*y2m-@|81q9 zm8pwVpQ!ipaHKDIds7{&)tiZ|^n^u0_h*23UsL0xj0ZocfBXnycDj_f|*m_yVn z6~~v1IC6$3w0Rfom{N9{bNHQ_z=eK*3*Te6{Mp+Xg|@3a(#RO~o?e9U8|o)IXwZsq zjGU8`lWP!LLH?aH+G9s}?@MQrZh&y<$9*>6%vf`<6pfmW{mySPBRD(6#mnz?z5m+r zD-&;`Vf{%^xtZ#?T9p8qHcFSbk6m+>N*1*P<`3WBR||D3;mrg%?{eano{+Hlx=NUF z)qbUYvha(Yha1Z9-@$=(7juJ|~A_q;&!mhX_{7L0&_laxzg((limv%d_ zTwz?2X{9xq=Onmm@@8!MI2{i-+O`bpeHSSlgx_N0n97}9Mc1@ZA6m~ZEq$NEp&*(Q zq0_G^XD^p7F=x|YS>sV`O5ebMos-fhMByrIr0T!wZfgN{aGtY!%>Nyx#5h6a26 zr>UmTA&n^6_?3hYd z+HlP)-hA{Cu`dO!rnjn;+cGz50~u>__jKLNo67H|V>2rhoA)NQ`e#~BN9$)I=ExQ$ zggUho+Re-ZBYFkGTR%?)@tgdo@8d>Jah&z~*PFor=wxRq$;CRP^1gV`yg5bYFb8k9 z?cLsKm{I+GZFkveU09v>MxN&8=9G46KOg$Z_IPUs8~iMxudTgegaR;k)52){n^J_w zT`=<5va7G9msTUI-z$f$E7Q*^eRN~>kKQbP+_Ew|UE4uzQ&>su$qF^~FxRUKhhwQ~ zTmkQb&xdKqIbv%33B)*)sjdz`Xx;`AR4QYT26Z*l(<)(iKNFeG%inv>#1>_~0$wG*5tbw;q6o!*w=mO5hS|)q&9PyNwcf00uCw0n(hLJ>V$y>a zI^Zqhifs%7rmDAcyzS){P52)YUgx*_kbc^ozTO^oQgokzw29%XHM#i*URB2< z=N@0V@SEbH&7dvxKVPs?oLa|(9yX|9K0E72E613xX{+CPbG@YG)uGwgldc^o(N(!# z>xgM5Vo52W-&LeitxwU?-Nr>Yy)mp-C@PZeBmTbeL0L zC7#Q?8z`j$zpt*5$^RKb zFbHKRisdG$G*zrw5v(CmzvVs?+G&WjM;sZPtIQTXFF}3LDLf9?b{e-gU;6{ib27O< zzV(;gjbK|Jruxm6ieWwxRB@rl zBIUl5U3G!Xcj38qz}#(6e@YAO){+);ETB>lK+1|J)9#?%+O=`r#Dwy=r^l8vXsMtR zc_IF#P&jKg%_B22)0MHcZl)o+lGdZ^_uUui1sHG`DKkx_e)(2_)5+oR)i@Z(rIiYk6{p#(lB7x#GUO68l68LQb zQ!U6-CySGm@}xIWk?+dLPfWCLe1dbEZg*36Ug}&;u`3D~Eemlw#_LscL`D)Jwd1cZ zfU}xp;E4dg*DTSXA=O0i zTJRF>DvBMqglcT4NH<_g!ZmAx1!X%=GvgUEaup36E*X}rmQPw_giM6tfo{|k*BzS~ zG;D`A64TGaRi(7}!cs9>$Y&(Cwi?bj%B_RXgUzeMXP0r!(8iy8k<(#zYG{66{#xbF zvh_CAuBfkvlXgeD5NhD1a$jD5^d2d*7Td(2{oJ_v*YlkYTB+RTUU_GJuIYkOHfY3N z2uk?halPb!5-MfI55JTN&Pj_1D=Cr2&K3=kMbTv$SG^1wGDW6dfD6T79`F?60?coqUeL2g@o33@C zF_=OV3~KIb8rBDVQo|!N$ePh>B(|UqcLU#DGSMFicecKQI+kp7_klQd&gO(SeNX#i z@LCO=V6XpJ?bb+{6X=*FQaN3$I()n9Lj%hre|68{TU-AP)KC9cy07*$)=ks02rUQ3 z3w19y1NY7j$cGbL8b1}oDg5mnd7>(UZ<*ltElA7*I5g31<}E-y3C=>V7K)0?I#;P^ z-~n&+!3lH)&#M4|HI#K$}v7N-mF%nx5Y)dDq=@{802m1De(3H2f3%q7dxE2xXd#Qptl?0vktp}5QrJ3rY#V|_V%2)bCK-uxT zy$_DaBKp6_#JtwwX4tX^2+Q_ndSc>Zq9Rfu88unEn>L&b}73 zUG^9kO=hL-HF!||UON!LS5MF^3DhppbKP{>9{a$hzK$E#Sge1EQ=^9UcnFeHu$9Js zyjo;5Z)M|@A|cEV@dKNWu^UziJezV#cg|vYlyAW0Np{5}ivaFkc71oU#4tD%4|g^5 zpaTHRmhb$IqIDkgKoeT;;v}7KU9l`^&r6V2c=s0WC+ZZoT}5a0b=u}TK%TCTk~i|r2$XVQd>qQ3g39zyR){$8f8-|NsW2-#J2@Ih*T)opY?I5gD5-7suqT3ph%`|2ftkG2Eryd|`Bd+eE+{HgC<==+#i;9RSy~w%ZPk+703^ew^*QsTt z>r}tAZ%e^}N?$Pc`*nvWDc*-!82iEce#@V+lp}j0;v+o-v>2CXWrc-?t&dfPxfvUy z{`$5DtuvIv3fSQ08XkyMLYbo%^p|gv*8&)9N%57nw-N#>a%o>AF}0OLPUbg@oR+^# zRHHg|>*jusmPskvX{=Dnx7yZHE~68WEEf?GOl7}sN7k_^c;RYl0xQb6X)rk%fXhqX z8Oa!ZHd69Rf;xYaf)6MNHM>EXXvLh^RtCoz>@`tgJA%O#OsQU(>dyy~H{x4IxG)~U zv~kAPjlLl;mef;*AfC!p7$-V`0$m#QRw^YZquD%fG(~?`-4{xa@W^j{jT?2-5dI-~ z`78vLJvEOYnn!~B#Qbg}wIHw7W{LXaWGEg7H;XSUi9))D>4b|R^&5KQUadBu@gvN_ zyNz)Vil>)G+LfT=5$oPeHY{G9|6X&QLxn$(!&)5}9RFUps(;|G9}hu@Y` zK852QmzOu=KGJNfOdswjS8RGml<0q;_1lS)w{e-Pm{D(Eg47q1>1tNIl^8gW9kzZ& z!3s@l(T^)eh_j@B+CW#|@3At}6bU)VXpSPDH)+QD^(TFmS8ayyG) z4DM40g%R6l${FIdm%EivR&Y|6{8V{@^t79>?@034y* zyqdI)Q_Q>>jT8;WR*-G{u{p0p&f35ywmK!CAmQ^lC0J(O`;TCvnJTI5DH7nrgs!Mi zl5DDZBpaBpJAGP!dj!rW`8;)T|7dN`%@NmqlZ-cl%G zA!PTDj?bcenWZSVA@o#~(aNW5A;VLJ6I5iCn#;ssk~xA zFP{9aiN)`%_*0ls&N?}kGl6~sR>)*}%S|8wpOVggxV}PzM&AqDc}(;X+zsHb;FJKE!Rlbl_Fh#|TSm_c?0<~hV}bVqR>>AoDodGGVyZv!osYXRMq zgWzv#Xuhl(7ekVt>e)Z+7fb@`DwkbtZ)xoM=Ht^HNpZ{7;^mBqs4`i}X(hA0teom3 zKQcP%M)+5XVG=llfhih}kZ?UZ96!LsHXkp*Y3VY29c3+#nEjwOV5Ds{MKQ98_84c? zTb=+kpVaaY*d6`1E&=`v26N%u_2tyC(r$}1bpM5VenzWv{PPM&PPo?3zl%Fq?Teug z|Baur^dmMLHNhfv=OPK{0f|x_lv?6MKg(P{)la!eOP3pysKsA|!3XXA7u@g)IBG0^ zwcFtWf*ZMu#q4&ybd0#{7)!y^%^&^VrN?l7PA4A~hBkI?hQ@RI(IiD6Zq z*MisjOge%_oJI=iFOnh;M=#Z0^($a}nPKkjP9k1`m z0M+ZA>@3qhzH(QEYm&Z3R@mH|3#G1!+D8QNe$cBLV4RQ;4`3cJj^<(cY;4CHkE}Ph zrlEZNxBcIXWan3l$f(e%1-27&COPSbGd4`-1G&1(_QEvhZ&QPH zK_jX=L!nvDmB9B0BN1BRKMvS2fOwtXX|5D=KlJIC+3ByP+yzPk)$&Q7%e;@Asg-LT zXypn)!Gf25h>MFi24kwG34MLw=Uzp#c#o{G_b>On9zmUQyKHO>EGNqR$3GNg9TXQg zhjIhm=m9hm4tK;nYivCXn4bJ+zC*6-OVnmvUCgwb|Ax4%n%kGhq2bKs&>5D~%GWYj zhaztQtBB{}c*~8IF)>8#xw`ew>JAF>FNb{PS{7sh@y8I~2Hv>B_tQLlpd}aiQHzZa zASlRBy>P-N#sm`hJxs*mMXkA4^IF07S6+vnTbd|8Cg{areVT0~3DUn5gQX!L-{j>J z5wnXf1U|1eCgyf^dPlGS_haJX{)6Ap&#(@w4ToLVxo-SaIC5%2fHA+jioft>OP+9i zEgLj=&0o;-Y8^6raeA~XdhDgjas-=kd(+*?FHh`@Td$eON)T$9&7#+bmi=~#iwn#k z%p<4v-ihKP7?t?xBqne25S=0DW?*CyFQ9@RJ=*vA<>f>;p{5NOfxO)MX?b~BS>6Tg zJ}P(bek&*;TiVFD6_}+!_&h2<>-H`{A>Gy`^W$P>)m%UhI!epyP}Yn>`OVKIqlRfV zc2F_t^KFYoqGyHahpeQ!z4OTk=YZ2a{O6lJ1LnJoJo{d~A!#s&^;T+3^Z)rf+o+KwepZBas~?}iNC5&kLC<^+R~f z(&MJrhtT00gAJrC3IEYMncvQNszr)wq*iz*4zr*)g}RMkYQJ{pNwpVkcjpXLaeF1y54pY&Qk z!AYb!r)Ki$=;2lLhegdUumpGOBhePvvH%+%AWv9L(%y;jf`S+6$QxbQ_hm$7s>u-G zaDW#9Yn=08+u@*9qW8Q_A{FK)7I9AgI3Ks)t&|*gP41k7tO4QBpNzZKbXLmbb zF2z!WhB*WeUQ?wq8>k3Bw>VC6crXjpVo{awgxY0BB7VnAmouvIe|0;=;1Yh_KR+H*z7-!T=5Y(Ba**F!eSsT7xr4qrmWILt4gK&rD{gmCL$qef=sW}GA zcNfJD8WJ`5FPG+%-8D87EoN>Beu*yRosTASuyqyW-@!@uedi_J!V0_0SNDpqyw_wR zrX-LjCYnS0vrjFGz5l*p)HfFQ%HB@*-I-`)P31nWXF*o2(H<|wV;g;D`hL-W44PeE z%gqd*I02SN^X5%Dvm|XGf`-=cGmw{mw-Ur!)!pDUh0(+lgzkbqO)`&KtuY$q>sWBX zoM3T>>)t(igkN6|vGQ7G8M+?tdbqXH3mrb>*IMjMmo|FK=hV2#KGe14^5&3r^ysS1 zIvGsszmVe7gVthJ{%vZr$34rfQ;IS5z_d+_b$8go4^yo%_)+URSuC&aVER3YDqHVt ziCaL~_yW?iu?X{ogPuw-&J5%QyxL%$p~K!l;ThGm2E#~mpi*Y@L1HQqdH zY%?-i0xajwFeC95BN{c;%*Xmer99Cfo+Xe3dC{&vIxdR_R%CK24IK`(-TGKsVzah3 zU=I1^YEe|>JKoU#H$V-8#-et-eJ3YmxU+gR6}Z<-BZ?1Y(L#Q0aJi1vb9V`2N&A$t zh3S!>AKF#3seD+<3B&jr7Q|XeAJJ>%mGtb}6I^V`IV8Q{O2)5#ri9$8?hmP_0o?(xAcDF6F%OV2y#@0z=e8S^OHSCY|r>8pK0m*v~GM=1XQc>h{iB4HLC#)d^im zjx<_3(@LNWIwpW`-}$_0DN`Chk_n8p#v_9xS+%foSfMO_cHu;&dlg5|=)UK;kQL2D-di7%x9KyUWCZJ6Qen_|WU-zM&K+`VUus`musm zI>VCH?1i(1ZxkV)^qmGF28ZDaxvA) zu6Y1O{YB(H_{}?P{i{31z-3w?h4KpaE2XhQFLcnFU#0oj*l&AG%*2McxHRNLph;6X z=E+6~^5>V)t+09}Q;7?LMj2Aga#GrcjqwtG&7z*MChZcF1$8kdAb zI@L;y?)rhAW)#EdAUAzxNlZ)(j9XM-{)aL$hMjZ>eWus8v&?R+4_>0t9gYZ8!Q}WI zeG?vjyCd_5?T6#00qZd_?K^Gd^j5pP9Z*Y^$8Wr!ljXez2`Zf-Ve9ku;YPDGV)fe7 zlBkuXzZ#-z(W4_%3STl}Q$v}rWcib$rjKs>QZ%ct z>dSuPk#TVP2(HkF@L+Yf(tQn)W|v>=FOpGjRbWvj-&zR7)!C3%0fgXw@$gr6BUgT@ zHg6t1v$(zkbpAqs6aG-1l)>9Ylh!DD@tC;Z;L*o9qhu80X}N>7TV*23!s^>oyAJc1 zGVlnRg1N&-jeIeSc$w<8l+WdV}}qspG&h=t-ACct{M*XrEX;!(UM&_+$DaiT`%drd(k{3fFw! zl2Z>@H+_WWBK6@ROEunOR}bINOR;;27SQ~=Wl9kQsTCW2f9@^&+7n**1ktuLc;+pt zV`g{qHrXz4Wi(#3d%F4~S@X)}{Z8jp=b7BdaORhm!JJ znexM62zMpwmJ>I)-AIGs&Iu8nr=ZU^@I*7;np;WX1OV!05<4WIz3pwO_tXGWUk>zlQ6A6GS!3bhSwI>4&b$q3p4?rn*DLE8 z5m#IKE~;{hV`GJ#CnswTmKlT@sl3C?VYSMR$EWKlFnpbLZ*E_T3UvYuE*NX|x$in8 z+eZYkeHjP<+55#;Dp92g9Pc8DUYG7E+sCu+zg|HAvJutVyQ)wk1U_wE^uM0Pr&m*QGN?H+-tjPf56Sl!p2=4ypS%e1ZnE z0$!?keRZpS4s0iG?7UOLf}g~kArr_N$e^w==<^41xXmhyj;En3%@YN;z`lr~x8YIrZ_-}=tJ2{ejAVz(beC|q>S!Il)i9)! zQ*ciZ2Up`u9FLmmq>YQo{oFRaB3-6QLFpQ8uPo(jF4TMQ zpw<6b$|3H%pG!jaun3zO5%Wv3>2CET392BmWgIwm+#;n(_r=4APp5mUUS1P^VJ}rC@`@S!N>N_lJ)}ays+q z_sRb>ChpZR2*hoaNEy;_pE+rK_TtKlH?PRQ(c2)(t!bKHcN&ZqX_E}r@TegZQbuaT zqPh+ED&l=i{VXsUdZDa(NFhE1>PF1OUP+0LfWly=-doCeQ;qpa;yBIIda0vGF{?B% z>?Y%ziHEorM=xF?$_YNEa#UlNBGiYVa$xXmE@cGjTU6JE>^XXf#lE_vVEb-Z4IX4rj4!d7e8t zR&c!Sr}its2AZ={S_0!jA+3uZ+&Mq6c%PEqtBn~pQ;P4_r$&WlGLc`l3+!xUJ{g{+ zQT*6q&rJH|><=_`c;RkU3HFnS8qP16LhnEN6C~R86Abbsg(GqV(zJQ(>f-8NA>iSp z&41TSNHf7P8#WZA>sJuz(mN59E+D-ZrI&zoX^9n-DqU)j-aDZa5e4bJB|xN? z5JF8LA>^I-{r&F!y?OIy-rV{9aqna1%-(08leN!YYkk&UXRUSk{9Id=?h^AQ8X6ip zb+xB@G&EHL$Rp<}CC zgE(mG@n$BprIb*rthXsKJBenWD0$zo(X2&Sc5dC}e_yc|qgUirzplX3%zNzI>Xn^` z^0A&QDI56>bYgIiSUB%H>4l%UzZCmKjrPO7x*?Iql-54_!kSI>HTqjk*XVPc!)rnR zSY(RXUYnz>mOU%?y2#>V6kVKW6aNp??D#E;vT%*^%ZU67iVXt^8sYI@8`P$}Q8Kn) zz0}$jujk9YE^?ELpWxzu0JC=1aer(L)p4ik`kpTK4AQ<}+BxQUlir(^Q>5f)d#*g+ z$LFb0{EM3pJ!8|9xOC~`W<7&0Jd_qr$;p`t4Y}m3=rSOsJ%`H0PH(e!$%rZ!Tgf>u z>9Hrx$MkL&;I}h0R@O{V75WS8z4I5(a+_cJ^DO9`Fu3&VLE;(XJrkx)EX$?*_L?5Q z2(Rr1p~Ue>J9%TLee2ynG9L7&_*%3KqN>4@1{VF9n&ttgwR&deYRU?(l!j$`35VQm zJ~N@say6Zt%Dj}-xU7tJf-O4o(ty&7+*GZydoHLZptONKsa z4+#uQ9prp)zGR7O*)un`=BI{nc+NH5SG?hRK6a(~?<{^=4%yHc6=6|1Oy*f`=tuo` znjkLP8i}hpKlRvKD%A9S)_68D@PPW}#=aKPty7t>HCEK$n@0QSa4n2efO(vN0YMu*o z^3S8f8`m{c>NS5H|2T8wD*vyDJ6a(@f?Fdtya&JTj*l`8G|{x_ZiZ~NQG&OqFs7V= zn)e!Oj2u?e(A=d_f2wHkI(?HI5NxnarcgjS_>>QimF|AJ@QESWrR1NrL4T0UMIH1f%ONRUzQKpO6~A=-WA zrQ+4ql_Jh&@MOgLBd86VgyhJCc`#McL>OO}1Yn+bDI53qU`>_--O{WEmFx|3VU|X%v zRRpDbB~DuC>qd3|B?5a^ScSYlq6>;h{&O``a`0YotqBO6I!!9O+G57`;@DghzJm^& zRtnpm&PIE1o3hZS)ya&Q1f@MWbc+QhuM@5^ExGT$#u=>gi+1;Yk&!AeV*_w;=Qr`< zMCVV3vS|Jc{iW*)=8=sPbGY1oGq!+3q<6+vs7_H@*BeNigO)$!I7{U9oSb98PZD?M zuG-JDT>HW&0&$+l#YU57`l)mm801<0Tcq581Tt*XkDBR`Ke2SKyg?uAd;hLWLySvk!P?HyM zwAO`Nf5$i;RgT~uoDGjUxu5|PqVT_L%VZ#L_?y4`p>p?{-WpC;toJ`I>%j_ENwe>4 zs)jifH}+oPPR+Jmb9hYuTLpTyXz=}5(p@$9j^p`S@xNsM?I^-%<5_;UGUN^oUU71j zAl_FC8Tc=q@0_SBQ=ic4_Bh%_*o*6thZz~nitBrK`#aB_63yxsNO5@lmU^OC-T%gl zw8&)E`mr{CxgK5!?1O>~(cYqh z^-aid8PoH>ux$#bq538?mGAyHZ~p;9p|6hVu6+e0TP%nw<;JCNaaQYIQ0N3TWb3kj}G;h$CE?*|Q zE7h|ZoEqzlwE5z|_Wy>pGc?DYSDgNW3den{Ymf7m3&#-XPn@VwkyESjRQ!I$$;h7|lLF=#6*s&c9-nzI?eJYNDiUL;{ZT|jzvPsY7$uIR2qVe^=RR7 zkF_TEOV!6f+E3KhZqEGp@#E=ShKD$Qd=~|AP-vnsLrw|o)F41WujUvI6Q1ylYt>;8 zFtaf}q&5&xR;eWjMpk!EF<2AS45(LvKo+}7pU}(tHvyu^B>$mJu_(|BAhwIR2Snf8W#!>vR5u^D=gf}^Lx$}1WQOxcEuv=Ad>f; z52w+tljVj10gXa+?|G+5OW6^EUY#?O=8Tp;H~4D!xBqjRTL9#%t4DAStY4_Ez=zrC zEXDV7*6gl1)K@Z^yE|V`{VUgY;VkL^4c|@X$6)>_`=h_iV*Lu7{#Agr3#a~CQ=4=D z2ez-iBb$6nVmZ4!Bhg^>^N<74MOKTgDVoQ|H-OdA=K5kLQgUJx%*^ZE#ltutQu9A; z|Gj6&c2SiavxVqvU<7S&(}PGUo>$AsY{}$HS%!v&ofS};=*6$a#k`qss2ZSM46_|@ zf(ScvAixkjfvI08HGX6D5uhE7I-ysX7FtMK&CLGo=ZLEy3Xg5%qJP>|hyO88m=K@K z!N3ZZSe-qQOzi$S2ysY%-^-R3QfGatwxPi!F)@*}mosZ*YFf0g@Y33a*07qO9wJsF6i%e{AhOtEgiNJ zDh9MWE!$sV(-qHa% z5qOwc(ogN?wV^^~9iP=1d3bE43y&igp}SSI$g&!n_F&foj-bsdqdNAWP2o}9=9cX~ z4)#ZyN&FZ44uwpsf6DFA%EnMSt>;GEGok^)`+VgRVAt8hUh}?vzRhFuPR`t1?IgDq zZz_{;h9#QuEZ~6*6@}p%k?DRTU*vx{sG{hxLW46dZF`hxqoe3lBUG>d*qST_=R{sk zF)wSmKsxG2_>PR~`>sY7p;bFJ7+yJh7yHn`NirtH6Qe$pSm(O|2bEcNGZ$2#Ii0#b+yuc zmGpAit(M6ilNnD^nYOledA_x0U6o?6l^&x*pM$mG6I=km%A)L-VSZTT^j4c? zvtM!ck2xHIMXBCx+NsRJ+#K$fz%ef>QuEu>Q9i;!<(ZwsFl15(Mbg5T`{U-S{7?1t z^j!VT3CVgzLdN`s-QemkCbC(QO-q$8g>vTwZl(>N17lkKQ@ztNWoTF-V9nraY#5RZ z54tBRswrPBY6ix{W_;`G;~#XbUqyt{?dO%72mL}ID$VwAl*8x!+L)p7&83b0`iVm` z3NSLHL56F~9~f9~G}R>w)iAzsaVf5Iozxy5Gw^qAW(?e4D@sqFScJvLyK>RgI}T;t z4=KV-2=eg(TY;TJtiHim>oyP9!#8bv1G0hGy2<^14~RZsxnBRXb(5_D7!1KUc1kzQ zRHca6haVtIKye%4d3{Rit)vaKdIhYm7h{E=qj7d|8Ozs#l@t}} z`U6_FZak%F9^qe$+{)|exfF6ZPbw}gbut7&nza%WZv*`yDjq|K`=fBM`N8*@AbB>* zp&2CNX%of4Q7P#UJLGVFVC(sh<^}e>ntyrGdCk5xJiYJ7nz1$Wm#4>@|MG7K$#nnf z#z1vIz+Ng*CP!H1t8n&bYn zbrg2d9Eo%i)>a(2-{1?QQPd)tW=!fM@9)d53jqb|Gaek6fY#S^{nJgvV%Wx*zRq}2 zLF5qe0OPyC(;@!y=LO4s@ba2_pQbfh%RF$px(E@O>sKBfUJyFia;=7YKx$!ez z)p;mOF_19pFJE!A)r@li&SZ9$bej%GTZ@9Mg9mF~_XlQ^HL7hyPIQJ0QMgu-9Izmift3YeQ59PBle zO3%4*Uwaa`@?$U1O7r)XLQbX6To6JH`e0ZX)D`;tWf+>g=^x_LhpAH6(HXy7p^_}4 zEr%0}id-s!;;zW!5tK+QLGLJcF{BRSP`M5|hLPgvf`snsbT=SyLJv zt&MEGQ+fGf3{_M@dHMJbeleyU%+z4=R(NArDhpI0Al112GKzwA7<*vh>cI>%uC?YF zaP;j3?&#@{?pHv|zHmm}@oe(j+RS5@4|Mqzj`)QSDgtbu>%_4pz%XQ;Ye68sZ?xP} zHZeZFMBMdc*%=$%Ko)iyiUo`tp(WG21G{%7qkixX4b7|XvRiy1;;$cPdU*#??No8G zoT>i z2w~TKlOFNY@A&7swvkbiX`M@=gxgfs^M^~$A?lYtDj_Rhyw{csNC>54$wwlQMz*uS zdh8N9fJ&o%_Iv&2!yjDdr%$WS+w zwXqEy&HcGBYmKI>?{{R@useG2&%rJE_dfT(06gh_#rMA=>~Bxu3$F&at<8N`f_jX43hBVs7>C4@QC z{2ls&AgfVBixw`wiAme&qbAOxwl+bD%WDT$){+ERY!7DRDF(*I&K;qHa%HHLL#81l zvj>_cJ~zLU_hUzZr)U;vwF5zGr~YHi0J3qe);36VeEbhS7qG>?ejZy$oaVrVC2#c zQ-FT8@9%H#xp)}xscC7xhx5Z=7Kz(I<_NYYZ6eP;eq^}X=DtWFMB$1XrnVLZ_%|yu z<@fMYTcN`lvaNJB00cH>Wt)2Lo@`dQ-#J)}thA;OFN{x47BwNac5&48iim8UoCLic zq`qEcn30{;!|v7i1l1WqH?Wt#Q*EZWYdueTVmZ*|X#P+$Qs;n`pd-0Jbuje>xuqk4 zS_l{D&MyZ;1B2q$(M*F#} z?}>zwVv5`FqnOD*ZQE;FD>JYGKThXy>y$d7ah!1b&3fk6&jr?uLxe*1hgF%Sy$m*qBpjlGUi%X} z#n{B8P;&0|lY(@waL0qomoL}7{B=nb*d0{k0#{`neudM;ystG#Fua?^6M6p$@5N+USyI)9h8Gi0 z1~NqRnI+fgZ~vZlx^*8t0P+D@>`qk9tOC)ewCpGHD#tRySzkm=2c?W7AlckUza!-r!78K^q@2m?T>W|`EM-x=EdbAPHfAl{t|T%?uCo#@H+EH_sJ#B z0O*XXqei`P7jahQFoDxH*O7su%*4b*BvB|@;$np7At9}TcN|yub*87M%__IgfrU`H zLh#@sbYDtI%Usy{mnT=N^w4x~+*=PYt@3-WjuRDV=F8vUrz>w+x|{1(Jpr7ep6+f# zclQdv7`g)`Ma6F#nh~~+GnO?g)*GV*uuGRNm7TSbq`|M#WBn^)g0OwSa&5_wyP-Ot zsc(Yc6&|8>b66bYmlAM=RaPiVKg@YSLX-6zXnzt_8oE*jHPW_UqNLI zPC{(zw)_X>4Ch~o`JjFFu){mo!VYFdb?T7OuX~da_5#Q1!`EBfj?CdbbwG$hiOTV! z($dQRNgNKi@8ZYuz{b!e&$9hC`oG3(-;ftrUqw)84x^}}GKOtADuCS!3SP-;?(g)P ziB|9!#jn27IAN!(tFmZlXzWjbC`D|teznLp+peqRMGlYR+@GYu7sp+oxtRj2)$ZP* z4hZ?&)b!iN2Cul-SUqxX=y?UupEij`4X=WcC#>4t=ta=`vCyqQoKLA%8O7(azq=bl zn8Htx(n`myo2x8bCE+KV&Dh)GX7~vizJoOT5FNj%;v_$Q3Z# zn-6NPPsf>(2SL^agCGy`S4lVC@ldTiVu7O}VSg?Nx6w+-1(A#FQ3M1fBtqa7YTLa8 zY*qg)`(=T`q0KluikG(qbf%6IJYB7B4zE3FjhLtpVy*7)nh9XpRB#ufX0IUie?vE4 z&YHZtOnt5YZx4IFM4WaS?)$X9Df2gK0LB{AMD_7|g*&K327LxPH)ksc8hpVMn~_-j z(|>f*2Fg)|X#C3>1t1Jpog%q)dUX20u7u;P1nO4p2~L|_OC~F#zSXoM-PiU?1R!HE zPctQyl^Nm1#s)s$M(6x0riw>z@61mcH6IsVq@js3mlCfV#Yk*`{N`i&-}Lc=%S-C4 zpvVPB*7}n*<;%e#N3=g?6G6ZcrtY;PufU+8ck8W z@i=exUhQwvbu)t{k3*kiRHsKx<1xd@MWJI%a|ydu-u4ef8wSV{{iL($4qyFfsd$A1 z0xe!SUBv~#i!aW!*=;0KpLomDf3MT>kNI`4_n)v#-=n84{D6dlC)>qNXtih(bJc#5 zY@BjB=YEDg|KaF$u_EC8m*G&B?{Q3nmxJEj!N-%2JmO&?Kv-00n)pk8YXH9k)qA95 z((+jcv@8b*AS&vvTaA(9)ubIXF8+GEH6S<{>DW&^yt|<59nqi+QMa#X@P*>-RLQw< z-R^05IibxG>+OsR9gxw9KKtT<;6pdO@^hm6L+o1gdzXuXacNODYKLcOXdt_`_>!E#;QhTC z>D8#_?^M}!O_;vorpm5sF=RKh#(ezB$f0Hsyn^rF@aJilxrWP;q=5LXP2*#JlVeB) z>V~#fB1!toxR#a?h*mU{B%Ka-JWW1i9SK+zeB{i%Ig-F)?fFjP1n9Wxo2rj6cb-NNqa6ql5q#~t~n+lwfy<=u^@$V;2}7mb+z1ePxi4%5hqNElu~q(4Un% zUubCltp$KM0r*bu5ii$F<>UGgrO22R2 z1csY*$lWYDAl1>b)5-F719uk=7!R5tB#x_r9tP=QYIS8{C*f(t4ES+$-dOAM&a-wys_0gASmUXH@HBPO(v` zO??ExPhRd*(R`d4vZsmq-q=_^QIPcLq?`BQJ+X)Ld(&z^32kZ&1mYA`@sC;QK|p{v zCFuSQQM=z?a)Xb%9e#hgw=$>pGa)ficDEfms&Wy`?;6 z&b6JpC;92T{rN|xooJ7pd7+1=_*3LrK7XB$V7Q^pFWptp=8%pexN*K5Fs=QKb2wZ$ z;y8JJ&26TTh4$)xGmm=5U?p_%``bX9MHP8U2M2Nd!()vJNgH=osps@3hpO29=6ke- zAI=W_7o6JxIGx2GUePY1yg$9cTr+SwT5j-Zj)ehGSghki4LEOS}VEIMT0`+?xJRp2|$RbG5>? z$*(mdhl=R@nL`aX{3uz55?%9bkt8oyX07kIG;y&YzlY2^w2}WHFQc+|6v?*ZeSGaG zYY5|2_7iqkkVCdQpMBVb4Y?Iz2m11>zQYI%asje#cZHkS9)pU?M}}Vc{e!I5IdA8% z9>2jG1ve4Jez5F0%rbUk&<+=T9|CCngPihYpC4CsFqG|0@BOu!K}_ne!Ofj)QfAtq z7)YK%n>pd3BNBx`zv#jdu{$|hiknnO`9$d(7}TOc$H4m2;;>pxD{v6UzR-oAe_O-1f2Vacq#R$@FMRRGA?-K7 zo&zAyHy6!nE>5E#kNzICKfOvH*c>uG-UgR`pm>LJx0dS0Jf8G%J^yb)zkCD#9|_8# z+tj!^0KNZhT3QPlHX!rTD0x$OQ01Ra9Q->pHpaV82eL~~es=&!r_NGXs(I@+vKnUW$0M#=QAE&ubXJrO`*=S@Mjq^<8u2$ zPvj;~bEb6V+H~#Z*G^soa*m{hny{$omY?+}4lStpy{|Oi+mIFiy4T;^Wd20|n-gUH zN)0~%fB%naC!mUnIzE&#J!$D4y5IdA@?wsi)DuzfItve+-N(?%OS4qM>bTa|r6<20 z|BxdSKBTd!6A@h=t_Q=i%fC>*^L2#Rfe)7O#P8t2QSWkLT5k$%UYl&^&Z0+7+t@B^ zBqJqwW^(neV>|G2_1LDrZEJVxvU`QK6OPXu?EOSdj-~znTFVyYE{JgarEvA$-=yT* zgZ*^Z$Vt)QS^JVGox#RVwcX&(y~m4&6pjmn@*p2V!0-Rea{gV}_fy%ewl_|tHIZ03 z-%z1fdG*70;HO6)0|Fg=s}jv?+NUFG|mY9H)VF+gjVTK^?0X(Dr<$NP-{Z`Lhby2JcmW#dY-mF zF|_8-ze#qRf7SZGEwieeivA0#>(8Wxo?a$Vo8;|kd$&Fn}!KHjZI|tml@-CTGzWP<8Bev1L=b^q?M)tc` z@to@uM*?;3nIb)E(LE(>%O42>AGY>x&UD8=s3To{N==0|Vai3pu3DL5-4_0{zD66( z2X69n<(1Q!W#;v8^MV}gXFnh|k_NAXyU)5rD-fMr7ps7@tvvD%cN(_)_wPr*`?7-v z>goisdjNMrXjY)%j0YaaftVIOV7>5AmR}1xI-CoO79)@y5>oa@V}UEf*i|9*;eAPc znT)&{G%>k#dF?ovbr!^@HUG+|dD@bTHE9c$n7?Q36m!=5*P-r%^u(g=E%LM}Q`PiPxfB2_ z0X_jkD+q+&hq}_G<<*kX+A$3>z=xD`mlj#YaKci625)(_+eRvW;d(C&Gsz%Gq32x|l+dJ_B_;KF;_YwrH&Kke_AeJ@bY zyV(3KN|S<^xVz^~HIcVZ^URXQN&LkEWCxvU~R!y))LIYJWSB|3^H z3bT8s7#~{(9353f2<*()fG^bDra@i)z5~_>z0Rv1tH$Y9^@|P`2Z)`c?$S4j(>5rH zhWR}pPw(XhZ}*UvmiBu8+p~+UAU&NGk#;uX4wPow3V0;Zpt77E-t{!X)k%bhbx}I& zI=UoBNc5x?`LqJvriX6vZ{RIS^+h3TKlEQ+X}K<3Gog$L>(KLq@Aoz{`|b>~_%3D$ zSl86#ko*lbY9<0CWu=$4o&J;*C&3dnxM76oe8l?CABBwKi;dsB0sYcez_Ee(qTpPz ztYGu({&bNMR*65)4ULW0>u7`4BD4;OFZEjo5P24HJ|_b9RbXhyBV)sHab~eU*U5tk z9{xo_c)mCA`m=t}tpZs+J-wHV<}+E0LVUNv28K>Sctg9;T!ZJLo%c}%W-TX1VzDy{Wg8R(epY)p{lMRd*OZP;X3Wmc?rXfZ zOgGZ|Pj0-n2o)%6L*Lq3roZ$p&KikCgWfDvxwjfr3lKwsF9-TbuN^ z1CTX(x3&2g?qThWg0C6-H!p4mke)UIK=9u9v{vfj=O?y(u*t(F?b$Hb5|jr|R7qYA z1dm{%0bY5`wd$#AvzBMd=YYEh09A|BW}D{>X7Jft5i+o9vy9tEzL&4vpDY5<0Vsv* zdWHT0Fv6+MwcK0_@%Bu{1tD(gYLG;U`KiIz`IUYcbD)G7^D*YbTWfLjAwZx#o9lHBx5G(A7diZ&_f?c+m8 zcPu>v2#yPaW(@M}1GES;rpuW-FUDFMG+)i48XbGJ5>y!k{aswLyS_3cKNXsu*0U0F z9-m1hB5UVUNm>4m-+cQ+UN!F3Id{~#Y-ubXcsVNMB>!mB(~7$JTEZgd_*m|vzmBZx zd#ARZ-d>aioKFbxxYeI_@VS)gxuXCVKl}*~jFd2=p{Z&95%!}^K=pV9zggt#I=R(5 zi>+xrXJLM-LBKXLvdS3gC!ZX2`tD@Bjsg>DuJiL7Ji{xp$)&Wu&S*A_<}6$k1Q|Hn z_~JL+J*$Xo9N_m~1t3w)e4iGD)NyU3@>QY73$BOaCp2-I+HjwNj^S--Li@7z@$y@= zpuYxOnb7<~{6=|$Twv$)rknFvNXG%5QW|-#AD;YNEsz8?ash^H>(!sqxMP0b8_qJG z@+U-YmpUERVqHf=F?FVVhSg0bpZOoDGdk84Q^JN zXZ`qNnDVP%yEwIuFrGrX_1M+Lg;Sl54#*blVo~OnI)lHblABSEJEt0)34JiqxC)KC zYx|Fn+QHZ5c7gm!1(S8h9oyxvgYcO=m{9A!UI_+R?00u9LP@{qeA7%krD5SrqcL*A z33Wa#GiXa1BfcjqwQiz{YBex3+i1|#;p5}8g>tkS=>+`S(2m4$b(7U{&wEmHt#|1bI*)L!MGG zkl&xirQYdjS4)`IDPnPK2Rk`Ehgezh2P6NqeJ?2~(cjpz<H;E>At8vv& z<|oYb!uOz(s(OhB8h{09BeddwCgl~ z>IQxkxNg1gP4~snTQ}>x%@N)Ub6rnJ+|a)pl>)NpEjKH&H!d67Eiqo(45Pq^w{o4< z6K*q$LO&31z4lj|Lk{MJL7MdRIoQfq9;}ZJX15P^?wU`|0QFp*PhBM?)u~sgcesKG zM~hwS=H<4Itg!b*VNDmXJ%#wcA%~|4nEgk z%`%>maC|HqcxptKg+32(5dD}ykl+%G1W-!cB?$3G*?6BHtLU=S)xF0fL-GP@5W2J# z7TpO*z(XN8H`BR;f%m!{ad1gt;n1u6fPK!A-UsIUUQnYCO%xU*~)xTDRA| zT=R1^v^8qAK2IdlOdF*Z8HYRT6&D#d70r>bgyjK_z_okmWReeq&*%t#eSWj%R|KQ~ z;US=y2Pq%@^9T}Wkftony`8GTn^D*-mWrA#YYPiE@cG)B?e*n5z6_N!Aw}$&iH$Ye z_BoKC@Q4U;pS9;@R;^~=o~s=k9Ar*h{-|UIn8d5Hn~y?(9J>*Rhw7rWu5RquBIwnh z$3RZlqy(!l0hH^N#1I@AEuA(>;C#0(72V^~r{giz({CLa<1A>@)z)ZQktfm)o}4_( z@M?2*FEkDe%y)6w03ttmWBV3{IDUO?qfi$XmIG23Y>x~bYj@e4stO8GCeC=z9U#yL z^D%MYer8{5pNYMoYcWHb$)!UL+&aTGprZnSkp==8yGCwCK7d)N>tDo+NorohWu7}Q z_ty7O!N-04?4h~G9`TBxWqi7{{)yX$XIflINfrSNXQ*1H##Xx#Zu?({*(!~m-b zz|R~|%oW5Z*!M~+Br>fj4M(*TgSWLji zhdsFr;#Ud#xT4~+;YFRNPw;u5qi@~X$;BJY%XS|QhW^3*@NX$%B>(O?N~x0Q<~=1~3&gA!z~&ZDgj%+hY!_dZ4xDx{KJDV)K)}Jjf#uET z>vNjGDF4b=tT|MmozuxEE^fdsX0p!lE<^@-H89|=ezOXEJ))sy`p5zX-gd-~`i=_p zW=z*di|I35ne2!+-bfR@Np3J_Pc=rEoCHIF$Rh1qz%%IzvHfFH%4nN9W}sg*ogC$Q z5V*w1m|?5OQk*dVniOmEEpkAoimB%r&Ijt>pN1In>{v}?%y0~JWLnN2$MBsY7M3ID zgd2Uw6Nx=<6neBujB)%qd_v*pab2*(_lx$23E5#Ft#qlX@k5<-so}!|-PaQGgc zmMuYGvGFM>MKd!Nw{P7t@z4Z(axZW1L}2K$P|G6*IeI3ARfUEbo@s{G=C+VrK0%Ig z=c|niySn)vur&e~D&3ufas4FNFi~u)`$phOmq)i}wpL-0^TfgqpP@O*i}Y*J*kvZZ z!_aV?xJuuB$9d#<{vv2z$N%+szUf}Fbl&nXeLsF+aI%jlR-11|gzM!@{Hdg5f9x64 zYbOY1AbV!cI-2|3sL77mchr!PMV+|3Os^I5DpX`tFClRS%kSfBSybLy&2_AuvYRtS znA9RyIlH;-*Fxk*O$x3Qs82gb@e0h9Do0pX<3qn^{}PhU`<0fMF;NIy%dZ+Ra?Z=o z2lgAScy1kuII)0TyZEFe2k<$i;KL}`MK_jku$q<@wK@oJ2FeCx6acnqJ3AMNh=>H6 zAKeSs6Xs?!m4hg6@;8)w>cHC+98O*du;XS;UvZc=%uH7bGasg=%JbC>rl#hAk(I)+ zuv1M1a7`})gPLPMI>?+FT*%U=>o4+(ykAfy?RT?fBiz!(MJz5pzezB7%iQ0N*Ld2n zjyTS>npz^*_Pq~AptY*$FvdEdxNQSQJYr*z zrFuFmAy72ZJX0+gUoeh};~DkL zLVytE9com?hnLS%LpNT@)Va7KI`hgSL%N=4i6eUYW1Bm|Zy=NYOrv*gQxh^{i^DgV zKh|Jju~O+7IY2+pF}LUI114MC;`UuvSj*6DJn|*zO;fKEV~ll?K1AH&7uPWM7ncj6 ziAAIJ#N?LkvHS@YT*EPTJK>W!mqQA}RT`QLVmX21lg1_YL=Bm?MnL)n31iQsy_OCz zHV908ZI15z%$G=815?R1sH@A%i z9+g=GA~$^g{Li{AjPyrjwGG{%32tUrT~TP@e=)yV-kc<>m*+FNJ8Qmx@Ca(fDtJ80 z+<+beuj|b6OtFlF5X|xNKqSvr2#$QuLkOLZT}Fwy3c;8*{s96=Z?wmOQVLK-L3-^o z@zgcdcCmuoVjgj=I=VWS-PekV=mX0rt$vN(&7vlv%eb_29EYax=!oH}RI#hJu9<^L zlq?*@gKD>}t79F<5h3H4$VqVH1|v4C3|6FKrHEPLQ;HzP)|={?2EB+)P*KRi{hMV?^bS<~IxV^9_Ten}kE`b@YSKn%@03J9^v_#bS9kvfLnPfEspAP(k zKv6?}G-{{YrQ-ku15u*q_o+cM;46{4|I6*d8xbOL+F}2oCJK#p;w!{b3BLOYRH7pb zI2xAYVmm)KXD+DqH(UD+2ET3`-MV(~o{BXH_1klwm_eyg1;w<@8+SUpjJbNd@AzC% zfiqU?jppX72p}*IbX;TFAaM1fhsOFba?;T`lk(-0hB*~5aHO!tY@KC)<56avYx{5G zNKP#)$OJn9J^epoWI7;rSI%`lRrz{VkUv~#82r0Gs?EbxcewNr*IJ&jc_Jbq(}@mn zAB1eVS^uM)kDi#vL5I&sik`4HVeqIZPD@I!_15rU26iu-4!hIjR~<349U7aPEju`s z1CvFqDzhLLeX(}+n3GSjx$MRaKq&6td#7PY%d1(EmNFv-<7xr-x?{(@3C8M3U3#*a zk-&0T9utBf@o4}EF{q979kpL*kwA(949pL3Y}DJm#Hn6^9^UPOECK9Xlo}Zj$-}SZ zAx;8SexQVRll_^&=m*Oy%90J%TtzQ~#6GwSC3@}E9+%6X@$!!XSOt6#qo<`6rS$C! zXAvAO0Z04YiGpGKdV1n=O;9ebuJm)6=k8kzFIq*b#WBDv$9Ok=;X<(oT-{}&PJg~n zwb8LicDiWJ(GJt4Nu*9b2)_RHd$Y|F-%45xM}=Y--F~S&3?eu2jC5cFlo~n>3>wv6 z3Zjl2FVtI8OTi)j*wxIlijsec8b`P{Wi++L%YtnLWYvE=M}t${JNW>78!v-O{!NTqnpj5_+=W-znLC%l zmqM;v?kyP9?039@>-G=DI&U4OXwkAOn6nr)`6a-yN3 zgSm52QE9OVaLNT2I>CP~1qB?L#$~sQDg?u4C4m0L3XVZK7-P%Lomy>UfjdXxjein9 zS*2~im2g9@sRt>LUzaup%y*~y&jx-}y4PSSORdB9qNQ-xQ%lO!YK^Jn_Fr(ZH_1s*a?Q-_#mC!-&XpS=A z5I6uS#mZ(%#L`j*pKiTI7E*3hg%r4<7%o5kT#j}>Ovrt59+Qr<_=g|?oa>s)q(#+n ziI6204;KA8&@=WS;{K-AQPO@nE^|#ir2(GBMFALI(UqyFs*s&}9Xs;jA0`e3lza0_ z19c#d?A@`t>Diw-u^!&+j+pIZpDfMexH^`~SP(eDAbH%nziUT5G9U|bvt+_Wht7q| zeX~%QjW)>B%FX&1OK%ENc-V`26*?>{dLE)ufz{0_&KqD zli;_GV9yRT_n@lK0k=k&Tlm*%gmT}#w14tXekT3j9t_aOkP_HLB1@hca{{awbQ1Wk z(~8o-x&BLq6Lv+rlzJM`6`ogab*FcY33gl z%tf^ub<)Po(%fs2Zt`2;xsdCs;s$>G#rpFOy1dqR9aRc?eje>KsF{3wp= zKWhOH8ABsfiyq1*ZIadl=aWp}QFl?()HihY+?2>y6{1?ToxlfUmhLRpvRoC9Q`Xme z=H(j{^7Z6o1-ID9+J*w2n9_wago-EXi3Nu~G4--bsFVFP*i^Wzj40#!zSHjCnLU5$ zBd4m$x93R%fR&72OBt$Rpqr3n&)~=M#<)*a8_Br5-Y2mijdbzlov5nC4M@8*oSckK zj(`1qe$#KjU-0w9T(uFiM3a42@uV%u`nb1)-5}bl!?C@$;~ zDy*Q#k^-+$ zY+f?11iRmc@48W7Rq^c%E@qZ6ZCv+Z=n$+$t{CGUM2|0%W-&Ks%mta8+a^F-hILxN z!`2O-Q09GOFaW-M2I^v5yFDKKR@;bO|9yvtJE3^ooSDAumOo(5SAOS2kFLvAJu#oAw_*$`-hs-= z3;0ceGKlO8O;4(E&lOXJL0f}Vt^aHl7Xjb4^s=x;MMW7!U-muYWMHV&E$wApQmvwF05Y;>}GrV2c30 zk?6gX10b5O>)2Z9^mGA7j5tAvj57)GZ!BYx$#dHFVO5=fWuoV!BBpz=nBl!#wsQDQ zb*)Cr9Ef1%q^2@2uda6C2b-Mo5^Zf9`I*_9t*orr(@rVuR-O?5#MfQ43};D!q<#LV zRpfiY7kd@9F+9RZd~L6E+SHB+Ucvbrtg&26zcc&lx6OL*LC}PMy(W>gPuK_GMbCcW zzP}tB*%5soguG@x0hjYrM^;blU1tUeI-Bd0W1QAWmdm_NJ3l_uwP)CSmmS*Fa5}Gt z36wnVWM!et0Z?-tV>X)_Zm9RjmnAyL*lvJ?tCZ6D8|U!r83t@(}uhBi+J`Hl$<6pRvcmcwXah zHA0%<)oiJ-EXc$~$@P;N2)1;49ZTdVuvGM%|d1 z(&bra*};sujJPw2JxpOS#bb@e4U2y*VQB5uY@25CSzdk9No3M(`OPE#czGg3Ysm7z z>BaQ91Fuw2_hZ7wNh7b`$m7+O__D2+#Ufw}T@74}x8I$6)O@)2n~|_hz1RNDtL>zm zcyP+|-=$+TIS7Qi8hjbDAs7`XY+7gsybGuz!{=5QK!;9o=f{EPP_)cvL>@pnlSF!4wB)4O7ArA8@g%6l@Tw^_eUzpv}k z<1hNliZyi^7fnr(TdFdOA@N|_0}hVVDWKX`3EMYdWW??q#U?7X7hMqCryRze+8=i6 z=!6~pjJ5cE1_$e?=n(6Y*JGzJ1(vt_zf0VPWj;wNfa29goyF-%t1WNi)Qp6%@Zguv zRBPPs3^g4t(IBrn$40$Oz{E|$bNMV8FXCBq5cMb42Z2rF#S;zpfL}ADU%>9-6DXT2 zK~EMr(0h!Y57SEeN8sIB%f)*5Z)9Gicy9n4rCt$r%zd%o!xL~2@f@zFS2+gz?zja6GRCowC-pHs3_(@GTF$hB`W zCtmti8UjTWHJ@JGFiDhsci{b_U@J(b@W*JHl~{7FOJ``e0#$^Xb;4Rr+=XR};N;FC zCHJ|@@)M8waf=l1;PQ$NIvhi^GTzTNv;-3^K_zV|e zgJqj;<2+=k;lep? z{tGu<_M4uJK59P@sH=7fY7FJ~Y3N@M zzM+zODX7$%*n|vS9s(PN4?rmK_1eb68ynT2=d9;%NM zPH1a)U~zN28*|)%Sx(gC8@hy%yU+X(WA{KT=NlRI$tEXj z?)0ahiMO!BUs)FU|BBQaFB;(_ZI)+@G*?Ym%(O%O%zkAuN0kC`K6y zOgP_6F`Go7zS#3fqdfBc{B`6K?hNyVX6~YZfcb?oa?kaM&@OEEF_l}Duj%YpMatzp zU(c9BSLj*C$rr|KwwHV(aw>{iM5a}NsLINsTOFql;5igf{vMBW;rH_nzld}FPOG;j zJWyCs0lI936>PidVjD9Ak$Y-2!_6m#%qBP)Uz8@@pC-H|1o|RWLZrA(A(*apJIy|y z<=tv-*VPeIROg5JB;6`ZcX{TfVy>F5Q&u-c2W$oq&^QMpk(%hUu3#lW-lxMT-pgPIJTfhZLTY|2M23K zQt`(6su;1>12{Uywm);LIkdNHl}5z>RPL~r$*IIfm*pZm*>uvRq#W7ToiDKXw6;(3 zS3TS5!$!lThE@(b(@!d$+Kv<|X_~*Dl;q?jl$5km)8G(hDvbVr8u z-qhfI+@UouMDg@&nOmo8z&a9rMm;U0P8sEk@St-k(`&munNo|@ z)zd}OgwA_RRcb$;hX>=NoKNj68fE9|G;VN@3kW)d1-ZzxgT65y9|G0nE#tR1m3$Yu zR$@^oAv~7_;#HY$&v9fd_riL6clvU-jH4(Nk#i7|w=$e7n&arQUn3}I2KI1*w|)r` z>lN2{aE@r|UI!}}!TjdwZ+%RTjm0FS?Z|Tkt!+zW9a|cYaK#E`LbWj2P9Yx6o&0XN z#N?vy?~IM$RdeOevLKKunKbt17>JUoFszd4Bcx}IR7^(sbxrbcZVdihlc-NoKZOcv zc1NmiIaUBT%nl)Wlkvv#Dy;a|K!Ab4x>%pr6(M>MsC2==EFHM0D*a$l*LpN*qwQe~ zwjT9N#gm1}zYPloJy&dzcXq0sFf1=}4&C(7ehd9%^3B5EXUE8==w2xhZkUZY13_ak z1_=W6l^;&Q^u2qy8IcACOndIFn7h}-x(mqh-ct^T8M*5~0h$j$>_)G?_VHBm0jQP$ zVo$71^ers+%g;#3Dh*$JH+WE&MusqH9>S97UtItEgd?+YsJfa_YKT~E?_byNh@?N- zpVF0$Y8B4KC@KptDJl&riZC%Vy$iY+Lp23Xq9!*})UIarB^9bExVOV{W9O<$wq$^# z$Xpn|KVE~C0G9ed$6Q*JLIsaXuy@7zzJL44Ho0`UZ*R{8k+gZx#&EnO1YqQ#1mxT@ zd>iTY&tz#CR>At)m!s{Y*j;7)w#zra%DW2$JZqi(RXyEuDvodRJw#BUqM7OSzp)yS zx%I(N(?>cOYd*=i3kR`{AJ)Ll-Ntn~;gRy$QBP7ZW-T zPGEjM<<#t~e&2VW@^U71DiIPI7HFRESavlxg2oWtpXj$cT^Hy?M5r21KPhP~^%<*{ z+nxnzAM)Ok!U9vg+(TqQbGO5}y@qI`HwXSSxxbNcookb!N=vU1Zk;o%`%Uth=lVuJ3E&i-Q!1mxo^dQ}KuVqryRWULh3^V3=y+@9mS^!@-k zUzVPa{)3s%xthGmeU;qF*B6oAJ%|r5?B?WC;`))c!~#FP6_4}?A5|2x{r)im<@)J? znAJ6!|D!^URC}6A5Nx@}FqO@jEJZ*DFSf{_llglCgH%E zdMf^D0gp?M`X2cVdsD&p2v%_7qa2BQkPK)W<|6#L$1G8sG}W7<0{x#N^sMDz;3L0M z(S3-)4lZjoe{r>_(#i0Y+1zm5+!}~2EG-p2U1`C1{~iwDnfLF10-PfB?b}CA&Nnp< zSM1~DKa3>nbL5yxIb;nYge}a>Iss7-7@63;zDZ%@Y`lVWyj|z5y74g5jFqr#4dxyl z?2ooCih}dBv0?rSo^<3mEEokF0r}N~)>*yLKE|n?RkaHQFL?UTdmq>ydxl+msbHQa z|0df;Dkb;f>+XPizObVoB7W-N*UGD!d?KkJQ$G+W*)pMAg>R9DSBtswhx8tvvQ2Os@HY$)9qYiYmV~)54UdYRe;OaBab%XN7f9reN6|F>6Swc)XA0f5 zy9;KND!rGYZb&G!5Fdck3Hh5Jr%_B-M@@kP@Dzqtf-&JF#sX1=C2rIMv;Ax;Ct-jt z$wyyGVwOe9VWt;YkV!MC1#W;MriR095ZOj-Qr*YZtY9NGW8e25Q`8Od7CeIAm3wn# zuYdP_+(J6FFdh;Tn(=CXm&W4?Z&ZcSsV1Za5Ibba>hZ@J$yZp?2Qdq0&p(i^4!=*f zO{J(dNhfroL40|wMG~G(0%-K|89y`rMr3hfogTJ`#u0(t>*MF9GT`Fevrb=DN0U#S z>H70$PG8WsPgPH$K%Uq4+ghW96&{OJD><|L5HaUqS=Fdj>|Zf!B>z>WFTf{J!h8G3 z@%KdxcgJs}gJcA-vkN{e9N?P_Saa#~!NGdxiWIjD{y^zs;#$-tdZO{?(~u-LJ2;SA zwr~`%cM$Hcou6kOTZ)L7*?{SkT%=cJT*hmNa6Hx{6!gh=kBq)a`I~#BDcpFn+MD`K)TbJ;Xzf+7Zw&=J z_>)J09OMlk1Nr1`=bjJIY++pME`1>AF zdHGmY4At`N(bZqNGpA8L;$}n3J1SGy>tc^bS3^8QIYPZAe|^I`JlCfJsL9EFpUcx1GV7Yx*GSzL0`nGujl!6WVpylqd4L_eH}CL(6dP@ z|8VK*d@4#POe-!P=?swT<(D2KNrJG@1ObbtKDxg=F3>?|bkn(NK_2Hv`n}s|qd398 zjS5Ejb{B+jz755Fn!U0v{|pH{lWoIs zKLOkvZ8Llr@u`_vI99BAnDuX#9_eEo*i%K`dutGKZpEOgK+hZf#SgheHVy864ND>_ zD!3F}(Lc9keqOHEU(sX!vDO}i-o<(Q z;K2o{QuZ?X10|kQX}BNVwt5|`%`aNDMiXcONBtnS#rPbq`*#okNK$fCpsJU|l(h=* zQ!HnHA5pyy>;MkIAF~VjT>L}n_S+7P+4GL+gPxeLgEb4!w`t<*a&U_e>(*G!gUHCd=OG2@v9Y-^u|-krJ8$hQ@*7oE|JurrZVC9OL8`5DDRh$B%l$__$y>ApnC6t)WR*1(ApPsM zeI65AQh^cYg}QM}CP^Lgu)l1rfK%uvlIqLw`55Q*=Hy<+?v)&PWNH3DDkw8FJ4*Hc zRxqbPpiu|P=Vq^?1I_3C&-hfNpFz{R8%rtxL!~YvuR}c%$H}xOOWLe%rT0YQaa#&s5p+EtFJ9 z=Ue3Qr$qre26~#2?+}4U8hOi**gxNPOBJKclEFc9`JnMadq;yK&fBD}Qqsu#1(^?V z!z7O?xD)r%58X~u9pF%)N}=8)LEoxmNE|IA9ckW_M3OyPAHua~TC*I#kv;hSc6{mF z*g4)MdEuRCIK3hp!vMH8*TtKN@_}qtf%bg92zMsEbDg=an)(yuT5I#i$%G_Y;9eWsDy`LIc3V z%$8krbhL?yNqH?yJ67F`;BR6U@=DWY$my=h=V{Um7plqgJiwLK87Hnpe)>%VjlWWp6nepvyZKcKwOH4GL9vyab|C+`hv(}!F16%7F+)K-Ut1x3n?H>q!{_r znw#V&L%y3ohjVUqw0vF2S*jq4zz7#hnBik@5sLsQc4}nvwy$d4DtFP}xSJkxvm696 z)t;jvKd!HGtYc*Bw!}#KRZXYo>#ZGKc-cCKkpe;1K59Ek=Cc70DllLqAa?gSx`7iu zM4Um)Y3kB*G+$LP{Z-93ufN5XFJ|T~FIeXn9A!_i z4p&AEtq06mmHjg@mPh2*$c3oSo~zQ27B&cI3{Ho5UM@%FBF1sK2eZeXUt=Jd^FK{k_$=E?mFYtN?1)KlP^`t#phF z^m;PioG-}0tj6B2WxOhJ`9O0tXQiy(9vu^5DL*iWArWm;p?cG1Hvev0btWR_MKXWg z^%vim+OLyQ^DH}*37snI;z$c)IfS|z{w8Sq723=Xb|Ig2iI|4aM6=rQ@eJi*V651;Le+@7FN4qLvhbSZhvBs z`%jB&*~;rn4G#W?z|3O)2kkU|J)%)_ zrlDxOjabBF)p^%xzybQ`$w+to^L_lJUu-N(%(=D&8#rDJ7yEI_}@k1lYi0|F81H$jU*6xCHq7 z9skY+_;(QmK5(D@-3sJQ#Q$@(0+BjgW9g!g!xW&bbKdjtk)z3VKSujS@G>x+5J=8< zY*MeWQ-83(U3ymvF){wQ+Q)yM>*wT@Y)>MBf9K&jOXP`Dn$y6(bjpAih%1#gmh`&Zom zT+K101%c4oDGVxRXTb5-P~J!6!pN1^gl3N;l_+~SIg#OBQgm)6ilT@s-J=>GcYmrg zdo2?#{9JvkAcg@EE!zK#>d{hvP*^|!Rc_KgM_M*^VqiSZ-OhHWa%CVQb)-f|lUm_% zh`2p!3hN7HV?cp$)uulEuiB8sLaVQj>CMV5VD5jKOj9N%MUCTP`pznT`PO_GG4}kl z%64S|DSnZH0zHm0lK!s;$@^Td2}^to@y8g2>}IBdZit$h$YHHlr>c6w89jXrvGi;1 zG3PhUFyu45lag@5GT}%=TOd_Rp<4&;Q!_IkEBk21f7rIzYJYUopa+pOaH4Nthq%iE z_V@aX!F!t&q-4&9v=idiSsvc@9yr>U7>MQ|`Kh1lu!Z5*aZ&Ab?*m7cqXi`#sIzVS&jbv{JPyydYvKTh(S*G9Q@?TXu6`J^qo^IZ- zZ??;g*)(>O2FpaRAoTj=0?+=*VgC2C_}Y)qa)M>wJl0(gU)<2N_O3p}Z-l{~ygXJS zqrLkDG+fRIZ;xGbBdU8B298=K?)Rv)$R5DZB)s+^W3Rn&iIu6pzag+>w<-(b18|}d zj$H!xr>j{}Nl93c`HN2m4(;D>F;9bo;*XGHnjwVbywJCh7b|H#J-r;;2O(+c2xkvr z46D?H06&{QQ3Lf8C_q%Z=9MIeu6a2}&Me8n0cSSS=`-33T!kdA}O{lT z!-CbO#y$%0Yz!kYyV8y7M|SVBq9x6HJHRny7h|2z5Q95bisV1i z8cgQjxNBA+B~nWEY%MY>TX{_dh0=|SJfol2%8|vyEm9KUzogWE(WP0r_q)Sez3-w* zLYCo9L(e_`3o?tWdp<*AkYak8q!7?*u+4n`!sf*7qyB9K3MAn^Li|wi{-ucxS?PZk z%JAJPHS0E(nEs{InVt08b}CdQF;M;V2QQ!}58r(FaYCYF@{MfeX=GR^=9ccuM}P&| zZ-+&35h7^nc%3i1&<#CGZW4YLHkVRw>*|EsUVyk)U!e1e={H700!-|eBdQ7t6fjDpZljbXP9OCx-Wg&AQ*fe7*!X} zRV>zE`O#P^T$I>>mFN?bWy*8=zY9Hv@bSNy5XmDk{_C18;ZI3Pxsma}EpVD7WR7q5waInML2f5t(uLE;|l#Y3!xR?|0s`7H3HItW<*u zYG%m*zHOon5A;q=?e9TUO3xikuZKtNPYWLX3yy^lE?RtXRhb6z&z8=Z3@x|r+rCk- zi2NHeo__%8p|4x_Qdbl|SfvwZ7;6bS8+4ArjbHqx=*UDyCiuuv*QoeN{rb4uW7%M+ zJOkn}gbG5%I|~f`it@!-3;-LzID9i~tIV-^_h<24?zvNL(NR{hNf~ikh-4+I=^?hVwx{_pehMb6dMZ-h%k< z3yVuFiz@v*rWGtlaQ-fZQ3E}s#@vALfCh!#>dt&sobOPrG7A2ss|?Nj zRBEaId>0>&l2=lo5fi##OR$g&<`RRBBUz{7b<#sFSqA0|a>5mAn*0>sVV?8U7;|f$ zbFfGULy4!OeXtfH%!tHht>#n;M2!EO2^%akPc@y6?$(QP78E6cmH&T0^~anA|2I@$ zZ?qoDvQK-&vj{V*($ZI`P}6-7T=>rKdE@jy=>N#=;y(!n5u;(3uE_1Q55L8|2Wycq zvmGJS4_V)l?;oCT;*X~};FSUvgm!P*csAjkg-n26YaxO;8~oo(CI_1~Q_o-i=Yean z8pOPFX%G;x0O^FZ19OpHRVpPVJg}5j!fkO;QDuZ8Dc`A^jURi(jpoqTd4ypWox!je zkMr!^C?u7~wRrIbQYtDDAo_uffJRh(Gz5K{KOhzq5+V@Uy}lqpQows1!>-zZ4@`k` z-lZRvQoV!cv$bWpKAO)J0yL&2kUH@J($)O$wu02+S7Hz?DZuLkK}GNUCW+m|exVTs z(7O#^xbg8`xWBfXLcl|+U5J^wl(A2$Lwjv^}H0FdyJsl<8n|u+*%Zb z9*7YW^J!yGWjv7=UQ{R#f{QDyPwjc5KBMrNGb1|t<4R$|CT%DCI0l#w=SiwxBTegn zG=$nS|42TMrU^YYyIb1_FH7Zp4DqskJHi;qO(**LOB^E1X3W>0&-|}f= zkq&t7VP>_0fki02IiW0YGzEVqUtO}I#{O3g4L%{HAMB_n6Fda2l0;QO_bG^C*Mfx98z6sAcdgyW8Cd1YURh!;E13|9KcW7gbF{W>^9 zkdlOYrakS57TW4<%9=>6rm}J%7L~M0UmCZ|gdEgDZlLj{3IK4cFM~kPnNdM3p5#^| zy{Lc)s>dMjZtW3879HXLL4{u;`m*!Aca~iiGu{6H5>hp#I5`zOL$XZ*${?_1COR`fr(tQiB zM_hEWs;V8*3yk_nMMzu-ao>j5_%Q2QT!M2p>`E)R`FX!S?t&+8;(1sU5Ip3@qe5; zfw=>iAdmckn)>yyoUOE$voF?WY{2jLHQ0sg9G;vXP zP)1lR-6J9gzHp?Ne<3-wUX$cyzqzaCZx zNe*uTAxWaT|DysB5ujLGd?W8XD4;RhEz-(fZ45J#kTHa(YNPUG4DWqH0){evQi!%Z zp5V+<3fzOb;8>2H8DEd)0Cyfm4S?CjzIT&6?iR0u@t+bDjq$Bl?n_sNePJq)lCXxN zK^gjO?%&;4`a0 za!zQA_Bflx=EMcSRA>lJCWMhV$@-Gfibq=Y=YJu;ZKth3#2%OXUKhaGOab6myWI_W zM|l-WbZAx&>x|Be>;c4n!xcsFc9^Jn!1&S2t%Gv2%_&@w$O|)Jm(mTkylg_beb_yM zs~Aa}5P6oSzaMCqkp%qrSjEwEwo0_;1p$iJaR9n~pXsf70_2pC?Wtr*|3(AgZy=0! zhWX18AU_5kUT{|+8f}dfB571cM#S0K59AMD5Csqk*nfa{NmN5yYWJeq35?fX`$rcS z9?19susDBNPb4+uy~H&qjpN2$O1$&o=A!amrxNa(m1}?Jy5aXperv&040(4J{vO+gSN#yB z4dGv^Jg@+eM}_yMU9og>(O;J|jJ9Proka073>=;(1E@%;_0U5ci7O+;hOQ0D7ai)T$|d$=g!PsRW=)?>mp#xEOPf zQ`WpKJz(^`8g}~jKN>w>yd0R8%5KR$0gC^Fd;-)K+HM#y3b@hMNisAOo8@e$J~YnJSizDEpSo(9^yj!lxmh@lGmXUH|MO=DQ={-tgTxABo=F6> zi~G}4cB&uZ?wFN`hK+3Eu%B{q28-kiZ(}y<7(T7eZ(V{vYrmOD1P! zx#SsOf0oBTS(u!q?-vXk1KAn1m>MA9yCVVU&`m{?i@bBBj*11ZnE%d>PE!to8ccQV zk~zD#RVFI1e);-s z-Hv^TmvY-?+O5^rsn?TzO|^oP7|r|-mIpCe?5W^U+`;?6%K9QB;gfB5NnM~SeP=aD=nHajscmh!t1}_m9thH zwrbNg;4dPk(99M;RLsO-7B%JZybSPwlKLM@c#Qx#sRE-8Dcn?RcOXm_@N3_;;1G6G z+I_>AVcmLps7z@Anx@II0IEp$KqZQ>E~|IRBf1gz{;^(*3{(;7$2Pj$s%0h zOe{7)aHVs#F|lYP69|4i?e*NT7hTmB|A6zRjVl`%fZX%~!L3{M8(U3&!S+=VB>f8% z<#AjnD4n+;?sboLpRcuse0M2nk58vkKs4)Tn*$@71seC~dJDahaUd85)X&2*+{X{D zmBNQ#OT?kkj`^dR=OOfpLcQbgNi38du8jynvDM^JbV&)5*VO5%iR>@Pn zmT8gIpM5qbFtbdJQ(`y!N0&uLM9|_?%9P>$o-ej}?Ik$9A&o1ATEH*@f>@8GZZ2!u z_%I{L49Q+?%s>dt=Bqeo&G5iH=m){z?3M;FPP#Nw6^_4uE<#lLny}9aDEPct>9ySS zjEMp*5R+22Ncx%nsr2Z5ZpV2S5;ncME`1s4rnw{u{cN^*_y`d0@}&q;FZ6HCW8*yN z+akGJhrQ_YT-v`qRLi~iOIW#v7lxf(+@sX@1Ul)(;)ir0y$MG&cX^MetuJ8OfL+GQ z`JRO|cihb*5}9OGp)ca~K*J@`9Vv!b`V0shRwO7#Ls%)}63oW|`~?V7AxfabklWYH z9mEkQcR&PjK3lW(&?4zzratKy8ST3)B=cb~2(;Z>&RkULo!-cbxwvpdF)3Uv(quPl ztR9thY^jHRnZ>DzJicV5tga9|Ta^cawS24OpcP<85h$4e z(G(d8>NQRQzBWW}#&@b=e9DQ{Vs{a)@4{g77bc(a@QpMO@&K$^^P1zakr@Za*4p3X zK%mvev=ab5UZX`BhR2`cU!twafxtjD_U~jHbQ(yT;T8eyGZ5e_;T~F$Te7MH zP%Bas`iX=vJ0=Yqe-HIc%a)2lzr}awf4DmDpMmus6<>?GGgU_hIF5AUZ;j~e`!6P% zeqZJ+mR4Q$vcp*k7xQCYqk8-Fcw@rJhJ#flgxe1>*5R$cjo+$;R#R*eAS+jsB~B_S zDM7=i6O&ob0-_x22$BhFxE3J?V9jCEyvo;k{)<$Gze6WZ~77SKSv*Cl-P zXG&B*nkF?6?fZD7i(-8y$5V_hwh49jgcXf&WOxh(mU`*f{Xx3jG3 z7M%hAD?OskN*5O>AJ99SCn$cxA{!Hmn7uprJhfpM?O5o0lP3^CVX|_#eqy)ynA!oE zMLlGCvm^UQhqqliAu=C%Ekkt)*v*1v34uCRLruFt|Ej~>t(Y3&sdYe~4BMq7xYO=Q(Xd1EkQK|Ojk@zbjO$`qqw8|#b zWw0;J%62&`Gbz9I2g!8Ge<)g^kinyqjig=VdA2xe&*o{z6z&WY`ZqR14@PPNbPmox z7>d>py3u!n9oU&H*?W_}LpUfE+uDzjU-#dHi=ous#vuu3N-Mr%3R&7~jsdcl`wBe- zu|@yh?|$ckNDZOJI(SZh6NQTk2kaJkGFwiX{x{r&Nz*4$_dn=}?*C`pGAki+lP4F^1xl`AFtm(TJ;ZEVZ6Ple93?*X{#96{4xE6 zKu7FVXZMTdqO{P>wWvSLKDe=Q#09H5}#~}dS32=T|Sm@5bRQDcoXUJ{Fv??0C{_2 zjL&JSL4#E6=iM*4ax-+@`+{YsBK0myOB{V}Y1x)^n5|c3PP5?TB3$?zKI0 z-Wg8kfwH=52^+Cw(o4><@{*cA4n;jp>CO^cOR3Y|-w=4aFb?--YKtS><=>yYTwq;v z7y5_Fdge?mC_x0_h;A>LLG7wA-{rsfg@5ozA7JlxOQyL!gAE#m(J8~XZ z)K#^Z;e)Oq<$cL|Oq`a3*Efo_ZNki&6ds?oVZ{HgK=i+DP=_ zP7xI>Udd#-Eln`_6V$8vGMT=*Kj|GH)Fbsj>ezsaL6bQk7~^Phl?BUBZa`GcirH$Avi0p@MT7K-0-4eukwzaaUJ^dlmkSj z&-e}C3xE#qaxobyIZ=HC(nnpaN3ZWsi?L!b*+9B~*9R?z9<6po4OUqQPmi0hr;v(K zxfnoe9Wpx~DXhHBV!@;sO#3aSpLpd$j+XZ851wKATYDa5=8@j_6UuV*0==u#)0R_# zO5CXQ+7i9Vj_}upU0^cEZu>f530Y~o9UbomFm~kl#??bPpT#zSybsDZef7>(TFs+9 zhU_ip>t31BHmu67KoA?+Ub?V%CD@v7$@&ZS2^-CaLv*bxKMY`Fb`ehC?=%M}N|rR+ z#+a#y!Q+;xabAA!)M(I`fv+S@kR7K5}>}+UKn?$a4UX!7ksyuigA%Lm~&wxtKIf9N~kw!MZ+s zmX{sVzh^gdD;+@IO|vV0xvYIrEI*i(R_mbwMqc=wg&{bK8RxOUwJibSbI}i;zRSZ0 z6`c&qAC*bBtc1|_G&WasAIgc)z4~XpoTt&?*9JnM%*wo|z%n8g#{9>7t=Ar! zUiOoD)a%IWQ&%F)rsC{^V>dDyc4Z8U+=jj0&^x#l>*H88OGvmxJkdP`;j)ANEXa0d zEOt_VnDvkCbL++tB3CZSU&l1il+v~|xRnhormB1&qmTPFO1l@w2@}N$T+7>3;-$O| z@+==s-%fh!`F+y%q#)udjF+d>k&E_}59u9lHI)agl%6c2FYzfQP@V3~J5Ke^GDqpL1#rI$WS|VtuKJ|54WdrNXzH%SU#KUUr4oH;+ z14YXzX@&sB)^$^*qY=lKb}`#1uWtmHpBMsdvqa*jvKX2-PInX#bB8Y1Q&&0;ZkU{H<=v7jw^Dx>3y?aD zuZQYK2$C#lPP6Wt1iF2TwNs!lM;BA0i+d;ZIKhlRW3l70SqY$v%jCx4#+3$ecDfAD_kMZwvCn9Xb|KaSvs9F#(<%b3z&G zs8b`xSx28aB-=a>yD6RGW&uxJpHche-KM#xr#|gC9$m$|LeSouR{xQ$_o}_X7Vzg# z+d-o#guogzclPn|8z|#Ku&+jDmbj+M!;6UqO(D&#V3>stP~^kE-#VOQ8_{Ec&L|vp zpWds2Rzx6DGHQMFO~)v7&c<*4G<~GaD&ez~M;R>o%Pc)~VMN9?d!#eRr7}e10rNzr zmJtU{l`10;h<>|QcAC8wsIh&zs0uD#GH|Gk>HJ&rIXL=CzN#D${k^)9?T$u&23TLK zd%JQc6*|TWx0lPt6U~tirVn%F^)e_3zs-xDd-S4AOiFQlN9YL;+D~?Lsfd zsbti_&NoZ~yi`PiwSrCjbj73Lco#po>IA4bf7U>CHo|+6q|VGg!PXHL->u}~d^BF- z`11~5QWmX+@X~&N*^}qbA56O{F>nL%VPJO*ZGe}d}asucS3Be)V}{ec_vsB z{rU@{CjE0mtl2u?h@>->*TO$4VB=q`WP~@cr5Y-KA&MrtL8O&q;MVKZ|2z6F_tKIJ zrDq+2^j1jHnQl-v1Yok{<3Hx8zYjm&Js~Uqdnxj*(oTs zU`vOwv-Vuz>#6uLaU2EF*oZ#GE!7l>%QFj(1|~9#9~F z+Tj#nP||#s$g0UzBOz<%W-8fFajxxGlK>};1C!Tldm`#!E($$Q%vC|Ay_(597zp#P zxjXug_(fOX)GbhD!q{VNj3-z;X6K*AXCfR!W}99p9SP^N4bREk!UV;fS&%26*tdKC zN%bip{_-`jHzY;}$-na8JAv6f5lBrOO})FolHj9`QGnx=yVc)--!aMNw&9v0j-R|% z`CJ~CMZy>IKYR&f&Gr&1I-mF2R)M!G(NuMye!V-K2VN}`;I{9j%oTwtt+Td7)q$uG zq@>+U0)6aE~e-D_BKns0<*HwQIH5v12C*!nt9J%3^ zCBTfe>ECRU8T^J=o@E3?QlLU+GXB!egvZZ;_$^YOKA=rjbK= z*%cLE5n}fVX2||!SW$YuLRn;l%$|N1g8;F|nOGcK0?Fp~DN;#RL1i(L>GLeA{zk@9effU)gw##((S3pkwbOEilGlyDRTqxu>NqqL z%o+QZ?SGI}R^=lox({wlIpf=|vRKCoN`z2Wyx4z2RrRinf>1Q^#NYfD?K?-&oM|gU>j~zq9!orj+ zkE|bl8@&JjJij|aF zrII;rxTc$=&eJ)Hrs&IbiRznHLW+H^#QI&oY^_t?uPy|DeXsKrE=7be-{%I#Et*0| zu3BkUHu%=q4Un#Q`>DzIDE4q;7|dyrw(3R>aOP%<@^cViP~~tQ)q{p32JTu!p!0T^ zPg~AK3}%X~ABNQuliV&QZ|$eyGa(4xfM$L5C}!%pd6{JlGS)F0kL?4(Z!9p9jqAIC z=Dq=(ujryxUchHtaodiJ+LR>x&WZE7+dqQIL5RSW=r75;a~s`DuJ_<3qcPeHAo33W+r%0R3kyLYI*oeSvCL*oR*3|9EW6!djMoiRZo4fGOd0#R zc#N7{OX;QbM}r#V{is=Kq1u02_$I>3ywUD)G0i`yb?h63hCkrv&7}7NJQ8+!G5WOn zlt-Zq(|&-j?0ph8895D@U`Y*>Y-?PYTU~?7t6fKUlPxEXqi$}1-R_=u)%++#ouO3^ zD}UOE0g9VT%$B4>S{Hshj0ypakD1*W4}^@9FGF9gQ&{m^*w7H}5^8T(*Y7fMz8sco z6FO=Tlybm>>V+jiAcI}$S!}O%ZUmr7u%M)yYm4EQJ5yloghQ7hLg#Ip#HXx2d#N!( zr-BVe!LPe5Jow}zptWg6oSXia<}9(FC}wW=CBPE=qw3Hg=SgQA&=^%M+eV6;>BG@0 zoq=Ida=1$5cGoQHa)JRk*k@^-@E876;?{ag@b zqw7X>F=4f7wDCDJGs!qiyuMI%_KFvn^19x}=niW*oq?P*GHQN9Mlr(uvb8EeQa{VP zmX4v|0{*^eUABPz6)LFrOhd5kBgb=u5#RR6Zhf9U^8H4!NeMn~I(p=uzq9%OL*09T zHQ97)qbRT9YXMOalqT>hA}F9zqy-Vh3Iftg6hu0RNQcBu2NeMoAqXN!i?mQfY!Imd z1wsfA0qKMgLK4#d$@}g7?e99}I{W{xfA4b+7s-?7nR%wJS#z&7Yi224=dWiX4z~d* ze`D{tj!9aPMM+`fXLj{LsuPfQY2)J}B9ZgYimO%!nJwSz6<~Q!EM&a!KaUH z4qPR6;f;;o4>Lh(_xt~RVhM0TAk^N?ug$>FKU$r7VfJxpsMQR}+fc1OBz)-Zce6Jh z1+vXo48(qi+7|Pg+O<@akMx$1b-u7OkOIIC+dz}N;Al@j1g9j7Jjv;O?cp|S8SDN^ zh*!Xf+0IVwf<5ix}ZCa)N{s{jV3O z7hwHR0Azv;{I{ZjeDgx0x^_6mf5aIeSwF9PSRhdUN0H`Q2I7pbUAuN29LDdC2m{|{ z4x2j_L6^_ztQ!4Q^v_A6&^BCX=rdlU%{AB|4(b>TweU2{44JHf8 z6Z(8PcqTPCVtWb3uqpL12ghXYUnmbkG+eoGySuwM3a@S071J%z7tH~KdqW9jdkby! zr^w~cc+9K__jjiC8UJ)Sjdv;eu@3IiK(H<`zO(aYMzzgf2^|(=wW|6;H9$!c#EW#{ z=1uP_7EX01_9?=JdVyG(@LYZ8(Czr7KfmmmWRq<+JEIz@c}MM|O4T|C+A!#pw4ez! z6)X#AunNkjLtk%*iI&0Fw(%El`6<7I|W7u7Wrj}|0#sJ}@* ztp&IeKJwRdCuJFYBjgbB`*Cyg8m%<4+4cjMl}yZ<$9y2V^9J(q+9UBwkM^%dyU`hC^T`+n310aZhEn3 z=J?{^XT(Y0=SpGU+L|e^Gfhw2>h9aW&5!x#?n6&SzP!7T(Zbzt99qPnDTPsnBN~KUk64D9c#R;*)NW6ZPl`L8 z61tnTUc*|L*))NKH8#uwc3lzFcQ^Cu!V0m<+q9C!N(I8`4j`^n9NcZ`RrznzMhHCSTF_tud5Lp}j-lw}8i=`gi@_n`4m+ zm|PSu`sS@$$_5n6lddsJtpa`wxShl;;tf6E!0*UQtdZa zX#OdF1izC4JH;PRXnLzlxyq$*Gg0dfipG9%Gp3WI2`|Sx$lQJBPY2&?B49mk8AyAw9U@?SJ*Eq6ch?L&N+TwZV#B5-Ux^7ZI9zwSItZ`=ZvfaAGT*s!`*KmhvRy0#oW^0(<|B@ zwXpwd@0JHWx>E`lN$JH~$#oxontg10KQ%i}ju^fF;K4>YexzX<#_66l1hWmC``5rr zGnA_$A)$~xd-jN|YB#XPl)v=;5&;bp%DqxU_9BKKIdWvD)IQ%o zK}T}aK{821_it3aZ4dSeR(NMc*4i=i<+b8%keF|~OB%>$kD7eHHp)=0wlJFTY97=+ zN-bVIb8wGf!n4?M*5d$`scve=O9-RK9j@8%@?cnKaOQSq)BO;* z*9Oi=W>74C+9q4q!ZG$7g7=!<$o@<9VT<DTdlaaYUU551XE=syn-M`95Hv5tJjLzhz{x)n0$B{ z>2kb^%9D~$5*Wu@`6LS(7K@#fPd;T(Zf`zG`TAI%ttD?ZcqLK$aifcjA`JHtAz~3N1K_CkVOZpB!Sn^xnM%)zvnf-zWY!s$9z^iEaD zPondI!Rd%ycgH#${#{U+9@zZ%+8%{*T=`ZpFkGzjmEe7-&6= zj+6c8o}1mycMbn#nd+{Ufzjsw*u`^W<9~L4&VSuH6{z0-t{q7K-coXJe{LKAa!_x8 z_rR_th6IZDGxvHu{398${6{nIVW8k{d!1kA?F#3EuE(++T$){vo#xbzfK#F$Eo#E4 zzJ(QWmTbxGW<82PVq7*&?`_R5DA)*W6&xFGzokDm1l0HtRd%bR+G`R3Gm-1#yRBr@ z9V+*{di6@=UP{XLGmW2*ndTw^%MkkfduiyMCUWoHi#?Zd9e@6*X!n^KyaS7vlDG|E z9D9=DTz4`5-M45MHc%oF3fXQ%59oT56<29jX3npuKN2jBhw_zgujJ2G$@@b2ny|M= zkGaFH=5Xmqu%Z{S=6bu)bt6P@>gnr+>6~6%uW)Zz|NM5~d|qkqG1tST=?Z7fFK-8z zwl9yjodquG@62We6E(y$GnLd1ZldqlA#@`2y}KKn+VKQnPsv>oV`D+}KJ&5rKxKqs zCBZ(XHW#;o7jCdnJ*S!02QAy-zOlF5+;K8f8e`cOl6tN8e2eu&LVZ+fHl%JV90;a|4 z{=9sePtJ?4MM#jAqt1_pxFqLhF;IQ$1jC2MXB7M>5vA61cM{8E6U?rV2gXLA#h4}{ z``WMIB;q+br{iwab{|m8=qpVM0B;@P`JQz}nD~@e)aCtj3kK(JT#qm-p#c#K9V>dT zeZ(1H^TN?vXU}f3N4k^guYgO8qkx0IAo?YPetINen^aIGNYDZDlwvF9{D+>aNtoqD z#1!fE(WMpzf4Il=?8@UGj~i;m@TDTjI$pV^*30?)k3oudJM&s@MCT*~_z!$$(U+pFU?-Z0$WuyEYLd z(wN?SyZ#Atxsr_R3eF9TD_xO&Y39}zBh}&zZgk>Q^!qTld}ByHa1V z&gW1ESv)SRlvU(w|vkJ?A3O^;2q=vc_MV0HOoXdJLTvnb}}%s(Kw8yw`sh%d=da?V5eRL{L7<1 zWeo0?IO9aXltW5zUr8YGG7eoiK4%%ZunGTmVq{w;=Xx=?Jd6GuW@4xqULbAsVCe)~ zeaAQgkF>aT>yV9RgZQ9DdVw&`t5=B-Boz501^RnE!?bU&Ao-YfG}K^3h*tWeB9!S5 z7GH3#tAfkU+z9XZNfJOfLP_f=6%*DgHgsxd?RxzuDl@frT@OI00^0KSWje|1@HfQB z8NGp-&q7kap` zEVs#@v$)pWj7rS7o4ttnxv>`baXEbWuoj~BpD5#lr};Wx+5GIeFVMt&VIu8rkR4c( zM&IPaZh$GYmf61UC^8TXLS+2A}rk zZn%4x9}gK%8_OB*n-Q&w`6;WTf^4Ei7;hVyPqea2A{d;|CEm;6ExEexC z*5}_ky)sF%8I#;fg)|@DAytnq=@BcKL`jE)TffdG+hcuF;95Qh%`RQM-Fqg;HrC`f z1s7@F1S`F z>(1g(MZw39JG&x!Ph;?kLht}C-&S)&uL48@9LKRMYSI>eT0}8+uha_KnGPaahT{fA z5+V*e3GY8Bp9JSh6>7yU?E#=_yQ1MHszb_xBUk4pq=a`NwjHXSGzH(^4hN{_W$Q16oFm4lVNQQygNPjB6q>72}%6E^`f>!XdiyYhjr zN2wgW;P#Y#CsJDDI0aRxymC^v-N zhPjCsbEJO@6G9%W;wN@C<+cWY5z0UW4($_MpVA>#rbG4$Hv?a`&<3N;Fm^@A;9Vf) zWU|B_CDnk zs!T&m`_%pgD`>eDb^WW#_pAHpKI+*7Xm+b?8KgGY0KF!-Jt$U%%q5@hT|6 zln!=xFu87n$bmnF-dgVc^|wRh=YRX4J#QugyyyNu2An%9LSA0z+&iGM2ri|OT*S4t z2D=Y;TI`t7C+G4`2A?&AjQjjF_8m{+Ld&qbB(*=3l?{Zv;6)bpysNB~8q1ie@X0m_ zbaz_TADNCCtDL#QUP=yJpVJ-bL?LW!~UKoBCcy!H#Xdme!nvt*piuwoQln zg?2^X54U<9UuF=bA$S0Fo?8ZK+>Jj85*caqZsPnKicL{K4e!W|}o>p833fF@< zKGU1CHeoXZcW1_<`4aiMv*V4FR+dg6jV)-GUM%ACg_po8H}VmRRr8uJKXaPTN5H*e zxbFTAG~^PG2R(~8H_3N+#X<0l!>NmJ_e*W4bw}b&swn=1^thd^EC3`{f3A6 zAAJ|x+|-?opG=h8X~}46vcC&D+~Xbn_tgORQ`M-tm>(^j?L;9_0!p**27N0zm~kcq z(3?(yvFSm*f42od)pb(G*T$?Wgp}NNezD`Nj4x7f1lt_tMWG0u4Q0HDw#;$z3l@^- z``Ox8>bl4!=l)}H#|6H2#sZZJ0U*pVcmMcOvgq7QrknbVd3PXP|B0vNx6#t@o#2kl z^#vQxt;B~~E-1Qd3p$_GRb=Bn^yK2*u9&vOS_UpR2g9xm%#0cqMBn+?q}t;`P1PK- z7(l_MlIe|hJV|AWuvDK%TB`lOq4~2=r!k6v<-p+c6@85__;xncg?5dcUOW{zlccsd zv_L=bzTCx7k2AIdl<{?S5P9^gbhxoYyQh5X$Hm5QLS?v)*Vss-D(qNqWr39nmF_S@ zLGTrtbN{UhTy@XoTHl|}#wj;m=>|G`8E&CRqjd$HFI@l?+8M!`KlC(4nD@fTt9~0j z(C)~=WpqS$w*U+}l{wfR&^y>P`6`YJ%5BB8nx@&4QFyyaget zNrw}vy#faX!s1-WgP+wKy?v&_jk7^(mz>r;1tIYQ^6tH&{j&P9Q+@dI#J1+VvV|%u zuIn4)AJNZ8f(4A=>{Y}ar}PuA0Y6o9=dWgC-(ShO2w!?OA}DQl^Fmq_cy(oYfs!WL zS{dt9V)*Qf5BtF8VbbutVwVl0WsbdwMCL{>e5mrq<)OB^MXg^ZBquP)VxP|6{v^^Q zB+&*yzXxE}|&6pTBsH`*BL9S;08qIj10^ZQgkoks-_ssnmn>uAHc>n}~>qBWeV|LUNO zolV~RciSN2$o_%!7#Qdcr$J*MJ6tkdF>b9N9C2#Z{pQq(DBdjr9mB^5aM!6JKdB)r4FSV4~(-jpRTtm(hxr3)D7K6@% zw9)4WFZu00bUESG32zj)@27fYgR(5}9{Pg`)Ae5lQN}{=RqJm%Ci1oVX2)}9n9LmD zOV5YgTVtb+DtiE@q!$*&5B(#l0^gtS&%)+>)g7i*SvZ75h0W5xy$@XNZ3i{!ss^q- zz0)E5$gc1N<`QAIyu5rM)xFOHQaaR`H@o_gw?37Qooq|4u`mCA)V)Q2ac=H>^+M!< zHrTa_Ok=Ub86sOhJ>7%*)D**9&f4@=*hqC_%@Np2x8}*}u4Dd$-pJ6u(~>^wRQ(PG zV)?W=UDs@0stypkPX+g=D8<|3>7{k0vm#!A`N%w<+~-(qg&6-)HG22wmAbUFv`A{3 zbVm6j_vrZ|&fxj6bbDrt4|{F?8C&BcAdX)5SZdoG*gj84jNkm+k1w_u1;<(63;*lh z#@nXZ?$N%e2+BCnkA!tei1v)#{<@a}yPq^9|A}MakdyjSsvs_I_&3bNh8ox+E2 z#M`wVLHYC-1OSP+3XBGQ?#kCfH_kKXBz`@OhLl>(!>oMSrVX+jM#n@DE4GSmH~$C9 z{2N<5eI&9~M8tI0#>0T?UJyD$6!}X@=pOFBHDK=aOXHYuMr!2+Cv`t~p}&nT7&Tb~ zK@Og1Rc{^}oc#~uz1ME$eWKYi&{_o)hNbwL-@Cb}LJdb^a@cdv-ci3k~ zO2-S?nChsmW!V}c!dabT988EKfJf(gT=4*gm0>|OKgnF*^uGwe|4ZkX|BP60??yC5 zdcmm-tF&w_@eExW$x z;Sdn11hQ2{CNGa!1L>L>Yy9piokGvMJh#wkxxBFdAMF))$H77Ovnx}3C}wqBbD#$9 zrVHI-yrnK0J-(m~+Ac+g(z@_|DZ;%<5B3q}%4L>G4>}v?J^QBA07AdsUa!fS6kEi$ zP2ht3=vU9lfyoZg)s6qZwD)BG#yL2@u&kz9?6@3-XNE4K6Rpc;-`Qmyb9?P}r{f^u zN6{thZ$`S#Ob%be`8Vt7#j=>O1vdG-)xBpk;AM$mmQ4$%G{<>$8wCw5@fI`%wC;3X zSuP9eghh5`12C60Te=M1TVqf()-qDLVyUii z96Fv+wUA^5)68M69>c|(16q&Lq;yuU|7HSOKfl~@dQ+c&W#geVqg%HKp8KBX;>r_+ z_u(cr?+?<6{m-!7Dd7J7;8&kS*`S8EjMq_UsEct{Rlz^AoJElKOCaZY7wOIf|4=lh zMb&d~71x4h6c#V=A?M#^^7#F>^bzoA3{cDOJh^Kk6_A0S)gqDq+S3GsU0aGVrxSztoS_o}vdUnn)?^XOit75XzuX>)cQM{9 zGUC`uYkWIPXisAf<)x+~S<`l85nVj63|3Kot!X9oAc=0f{6bGGy`U6@ZWKuNzvLvy zoS+G&wn^VAw#?l>s{l7^shbt}4+Kwh;TW2p=XBPUs-UU%$SF6{<>LbK9P@o;*URx%KTrt_7Baou`^EB?%ML;k=0qn8++jp<<NuhpIr?tDD3APuaEnPhc_SQizg-gfQ#vL%?gr@GxozpHatPTkm|dni9YGl zbk`Rky`RtryL`Mb_;RNVw-|CAm5zjuxl*QBicV^M|p|1tcxE z@xHxdQrXSoSQ_%8EYWitvb)!q|0p5BvC+%+x958Al8UVQbz$XJN7{&4r_v@F(>f>( z=*V6ia|+p@n>g2HuWoJ`5 z4NioqcFJtJU_$*^7yk~+fjAj)TK#T#_$}HjE?qXbC8V2ipva!VS?$uq1z~uMx%qju zqHr~M_3m>&{Jb#Uy>Fa2Y&>SXbTzPp2Jv%qbE{A|({*s`Iottt_nB6tThEza_; zxg6ZAe6(8aZ_05nH@7nX_AY^-`8Yjx_G17`d^v0SlE2GE_}ZBau?gGBA}!~vNlTuK zK}@tnV{WzTxMM>P$&#>}lxQ*8(EEYz>etCpe~RRvcxio|>g6Y?(IH6vMxN_S!dnbM|0ot~;! zwBcbur7Ra%2yImbxgp-nw}&A%I6(?{I{S1%;xAG=80otFqFBhyaS9h|l2<*AM1}#s zvVvjGO-y~q8K3z!iF|o`X!7dLk%f>?=O;ZKMP#l~|2pY48q|;!A0~bi@G41Oi$(gw z3`D@K!>YL*NOc;onAAci)^Vwzc@lTTAW|vVPZMmwTM{xnVi25coh(;{Z)N4$d)i>L zQ&C;zJ}s(^8VEN!O~~=ed4Rw-%<9lD`ZPbrjXJt*c>M6-Jz?{-W|wv|UFqKWgXqvp z`oBXDfB}5mkiWirQpg)@&^XHVX^L$OU>Ah9y=|W#l~s#6@grFaHn3rTxVK2Jo#Y?; z%Dsh4hI=3RTaig&-d8Y~OM2N%u%+Yi^ zemv^_NyP=CobF?*bGrbeMy=%%EZWlzW1fWhOaOxOSX@%MWUO`>=8+q2xWT%H`%PQj z#rWygI^{o5p(`5u)uxPO0AEQ}IdCyrV$D>?S;{2T>`>w3jGY@mTjX6YEZrT#bvN3j zNaTFWuV)R9tFqs`s=cgcZ{PX!&e@k$Q&wV85UYGv?{kbYU1Oc!0?meAy?0>E=? zi^A&5<4=WshldG-HE`q2UaF}umc7Kf6bIY*X7uW~XhWU%6pU%O2WkR~k;6ybjIHAC zPR&{d^9uY2%QYaCOwF!P*skKPU?j1o&}Z+@cO6OSkI^?s*$dgmHuqbeBi>31gjY*<&Jci(VxUWImPeZ%&0)+o#`WOt7@V z-^4685`+&zamM&JQ!K5`aUTi`!_BzeL`H!yrXIy;YyyIcl_JufxHz=lGo_ppxgZevFGY-K30<2-B3e;$u6_e6Se; zZH|qFMa9^c+3Jv~>V2BwUaU@y!Bc_w=ITB0IhjgGDJaP)`kq$dmQg91Lx*O zxPss$qhwv0g=H&N`>?Lko9@GRGFq^Jyjq_0S+3kr(=iv+_h>Wi!C;_HWq*l0Cw6vISqtb#2ddk%K5&p?zrNK>8bQ< z*?bnf%N;hb$vP}}1TFZ`UjMr(zNQ#Ol7|Y`6l()DMLO>e+BtZ!m=4gmFtTa3gA@FK z-4G>MPHmyC%aLDIR%X43rbqvuLJoytt}Qm6fR^e2!Es3Od?uYEYmpR9KAu(IgL!AY z2o1(GhUa(17XYd8(mq%7;GOJx0rz%!F0b*2thVPMwi+L|xZRLq-P2A2U{lbVpAI38s&)l}ay-yvT~X+`(@{XUb+fXPmdco#kqE)R>mL) zYcnVVDyJTE#oP!*nJwOizd~TrUnDf>mHufK#oNu~wG`YQV{uwdoNn-DLVhnFjYS+u z*?Y#D=2*J_>$~O3r6q!-A>x#VvNEi0qOCowICmh1@C@4`BT-p;Xv;L+@O_J}vNFnu z+tnV1MTEGUn=eJPXEO(b6)cuN+iAxAOKQX!=<}XP9ymFBP85`V>4{G2Vw#EXEpxEd z0%lpxnB6sss&F%$gHBYH;;PLkjpDEc$D^n??C5v{fYSG z_*1TFb*J-5&@AmtFR`~X?5HhA4H$EtN6JVf{h>-X*|Ozk2><5;R-9SXpwe1tS!HL^ zeL-{mm_iMdS9(rRHq4mmqdP+CPZh1i5l)vh@)LQZGaXwOnR;on?=4f00>G@+ulK@1 z-b?_RP<=BWt30{>!PfIfd#a>$4@xh-(&*7%`Kazo_iKSX?Fx~2d$u``ALRu|1l#K^ zo{U96RC|qXcpWWZNW4B9p8b< zRgd=Lj6H+EnwbR`H7QXs^Jw|`_GqhiHlz4OHNGtqM;Q-~F<;w^n1M@5lF(#^V{>?5 z3!JJbK7X6=umZl+k6mISOWC}Rue0pDal2s;37f-1E~FYY`>_Z(2EOO;8HJ|290Q%z zv0hs?OInipsg;O6^d!7t>GKf08UeQ(q*y7K(CmKw{bG!PGAdwH26rXb`9j5Hr#Gmy zN`c<`NkMYL-1yy~rP!H|`Z0_?@oeK^HfS*xOi)@%LKwv^6IzZd7g!1NCe}oG8S%NN zczo;p?Vtk1_%($HtuXc}4lg+&GP);8NJZLHbQ(u4%kZTQNp!zt5#=SbawgY$=1kf} zyG;eph6G0*PB@C^HeN_a8#goKY^NZjJjT-f5oUWVMA?0zqXU4;cRIZt<9R&Hw)gF? z1S^cCMq4A*((vF(cWF^P${Uebm=$+SSy{Z9F%lUv|05w`xb?Ru`uxg(_Wt7IIk&h`YPtY8KEbsz<3iS2 zDXPM2@Y<8NFAa1&NJ*|zbi~rEuIjmK_83f+kvuvcqu@4o_F~i+erYl0TEke|r@;`0 z|5PSo*_d0$;c2$Ng8!6_SG-Nw~5&HN4xspR#q{^o_}3T>}vjS?detr>||2mZ_e#WVw@d>I1h=&<;jfwU>(d zp^2KY@1K?8Srd6}gRKd?ulCg0*t5$=gQICmNHg(ka4oMP#iW7HC%nk;rG?Jk0B3UY zFeE?<-s|wY_l*Jlse_VODdgqxMTxTuzg|^`!y3Fp>NGtBAMLoOpwA4+@4kvhN!`h3 zKUAyXUwtQ@r{<3d`AI)$3OxIPiW)q%%R1) zw@=!h*}xC9F$-qYpR4Whr!!&0)nr1;o$nO&*yZl%z>*sw?*z2tgPI)J*NSKU z<>q^P6I_aBGI6CSnwKPXxIL9xy`l17V`&2(wP4pb6K%V>VeIXG2+Y-}RV|r1#eo*@ z|Chu{wOOO>OxDGl)RYE0KX;Z!TG8cVoW7y5^7|#uhz5ik-oRAfWxC;>$zCYSLX~&08TJLfJzW>}c5f~k5}cfH!Frqv z_aZ#sz!{E}S-wiaUj{2=;&a1=>8E~S^RInaXCcls8a>_<{~1;7-k%ZjEB*9`A4!q( zp^zNS;LLw}Tv-f82bmy-A znJ@Aw-@QM|Y^w0;=BCyKwr~d7Z1CggS>7!O|Fe9@!mLh`PI4K-E`0)YQ(r4w)D2pc zefC?ZWQg~+MZIPkP*-U`@#takT%noNDePJ1NP=TbFa)2LOqD85?eBgVhO z^RXC8UW^#JHA#DqfBQTK3eEiK{YE}UuQE+-x9U>F*m!E0Z2Y*mMTI*uTk9kM%`$Il ze*JeZ0sadH(}wBm!HC>T)uLlFf1{q2ulxA=HUs|IRjzmY&!#%pk4O9e13!TiljACd zi`3KfP@o44PMKm5gM;U}#R^?|d)?pU!ptq+2ZND15p8hR%+bPDn8_0^ zXQt}ii{OZ3Z4BtzXH2g_TJBx}-Wy(Ty(r**gLpNgj1}tL1s4Cu$ePZzhYi_tg;Pz7 zmHq?l?-nM{jX6s-!nJohclZR*rFWD6KXfhbx+c zXL%8-unMv`BiiM{A#JQ&h7jHZm_AK!Zf>q=44qwe5Re2s64+acyL?>2DeIpv+l>i` zK`vv%%bT{{8Wg`9Wk;gX zl#IbD5*mU4I|dNXYlc26pkTYf=F)_O z1h;1Q5h{6Z4*X2qt=fJ9XJmU}OZTGHtK$cim4W31zF~R5)(U{gVg#(In%&5v&3b33 zS_N@ifa%G9q`ROU%ZMQ5=8jXV^?3@i_kw!a=P48Y5XU#XrA9Kqci$_a7UoT4 z_$#QVORG?-BN5b6%82D^0>T{2PhYntoGK65F~ORz-#jT+Gd@ zM|wQx^k-fqB2|ESbwyZ0UaFGv zBrr=!hYOf+tK&}qh1^oNUt1O{9^nIW$d!uVB4SscIexruADG`&R*r~IEtm|mi_gE$ zetINjrp|_Lf;_c<7Jhz1?WwhCrCOiPZkjB~LF!x5)Zf@92-o}aIE~vLi3)UvMs0}` zQjMoo)5l@ZT`h3c|bVMGtLTX#^Sq zp*(&$MrFw#Jz7Xg6)BnvE{Ex=!);KLc8g%yHPn*Bha!WkgFT&dds8X5gwJnwAV z&esO9y6J^dVL8~H{j%n^O zFd}67goLZ8+LO1{X4lIWrKdNXRJ>%)mim6*{yL3psr@7&+svoz%WTpm&8}Vn+rgiO zAE4(-8E9U@pbYK(rh+TqwzA z#*8sr>yMA~8KE3>5QkAbc>>{d`@5%HIiEqcYP*ilw8qSBgRal#2XEkxGws^}Sjhho z)%fcH@}?-=h}oas+B&cjA>awhNG1{|1;l!Y6f$}+_{ASE88z)Y9zQ_E=fP zxa*&Y!sclw6HfgK?Cg^>ao`f5ZAlPLS?9uzzmSFiHmj4Cjc%tZLQLLYezhxNJj7x& z3M(%unMx@J_rT^V-K{yC-fZT4i^sp_1Td-j+7q0IrcLMK%#GRwau6dC&ZgAaZ+>fZ z7j&f9O)sl@M_5eR{;sQv5e;;)9r?jI@C)H< z7f#6D4?euACHxhC_ea5*Fh11PDJ(H-uyw8=x!P!8T9uWU5cxBQV?s@WNC!iWe6PNu zi`m}dz4ci>d$FQizW?=C2+=7CR%?qRDs8FD*u(QF&Z|GO(@#~6-EV0eoDG&oZPrx0 zaLHxq!iLV#QI&8Rrf1y)o*4BgHd2%Hm5K zCSTr>s&y>u92_47rfu=D`im9yrF&o#^D~(&7%XRvaw1BelyM#B7j?`Nt z5HOQTdQ27zETZj1u(}^O6O?@N**(y*Qpi(j_sD4&uf#bN2aTM_%*4A2nGq<|nb!g? zN^L<8Zv2w{@X%u+@Q{?WWyHysK17pl%f)=pw5XcarrsfrBTx-AZpeGcUI?T z#Hi@wO3^W7IopdwxnAU+7(nk-714@DFW6zKD9yb9B60{L>lLKelENR3RUVga5~!&N zC~qNAbR3z)M#AXdc(7wNd{axqiWABPQ_`5>Rw!hz#!I^kJ)^7B5o`0TVBSzlJA)6n zLFQ1J%m}x*R7l|1{0(dBU0HJ1o|_B<$XS7B8V|D1Dsls|5chTKQqxU7k|H~emey$q z0ry^tJ{vB>MOlP&KzGAIoA$d}`PdPtcsM$`w_OF~jkvC~kDYN+okJS}mo1W{`tC=!UjJM^!ea`M7o`uJ zBXT9w@8y}yDb-=W{r=*8*8VMqZF|Tva-OqQf+ZiY{c9ut>hE~e@;EvMvzTVg7}jSD zd#abk<+B0Py;D@DqHGBPJ06ayrxjrq%Vf^LiHJMfMLrE%(=AeJV|aX%p@a07;@6N% z>3RDs$)$GIf_n&2pbG>C68&(x4OH5{gdq9<4QsS1i5biKF_b|U1`3F{qGh6%>DUzH zlsSkp*(WI(0sr-7D;wEULdUC?|G(&BVh56Jj|1$V~)-*lY+rdQ9t-icdS=rA8 zQGPcj{zO(nNi4Akj;t~e;KzC9g+o8KSysx=tsYsVykU*BPg_*7qNX@Ugvy{jLijcV z7lfn~vEZ#7V5}8nV%W+hB8QQ^@ykw#IN0jLkZ-SoD+0DxR6@(8Bzb9tQZ}ix@{~vm z#;=DG?F4UxykJ#RU}M-fU04BIa6XgicbNoiyDFoXsv6iYY$q`Ti*=%ICL;?D)@4AG z7#|idgb=xrla~xJRwk_T8jf0J;l#kQnrk;sB6a#4OG^l0U8NeNd0fOgh5zYsol)$~ z8h6Di>a))9PR;dBHzx%nzcToUtXYBHALi!4yo7|*^lMEjkT)a}2QY5cYGts) zu8ld1dSy+p5V@&CxC93@d(>p=y!<&@ADA`BOj7-EMv!~XU-v|(Wrma*ggwm}L`H+u z@?z}G&A%aGgFjVwW#c+~3VoMW;3nMro(~V;99!0-hWl@}?&)8!k!~brGX?o3+WlF%% zqB=30M)EK3h11f4%qf-vAvqCae}n=&D{KcOqS-LK7o1sT_o{SZHjI|}@yMcHdSTmmzUxY6b9IsQ8`tKA#0++B#u3yQmnm-%itaZNM6Jibu&7AzS^pf< z>-R^#QS1y}*lv@oWlFZe6aIpppsf1e8tDX1KMWJHNA$+vYMyjGuls~$YDk9nH5A#D z^+d`vM--~P9yhTK(vzi$Df~S_4rZ+yP6{CeY@$X#>p0zMVnh{6ejUbr1Ui4Mv2tmr z&345ex{3#eZMU4D=eOs})j+yc%-7+gWz|kttCG^2U(2Ud&GFzCGzI5TWx|}H#6fKV zNA?m8Iy&DQ$8N<=O|o;J1v=J{$X((a+E)4z$%_%~#gv#9oR{5`r~FtD#d8oOz-L>d z0=~Xpza7E6M;tP8h%cR0g%FTK_kkfTNB$yjq8t8-9`A7y2iNB698-VPXCxwpR6p^D z_%#eJ@JKo2WoATNGwG^((aa}|kb2y9m3%*qc;o|s6Qg-4Nqs!_{KI`oe`AE>QWC)$ z3Vw~zUCY2S=*zSu+VC4oDJkBS)396CaJYv~gZI$Oh9!ejyrG}e_^yC;vlpYZQ?7mH zO1GcbJPSWimvM{1It5MqaB(mlBG-1tG_;3TVg@&+1Z#L1-s!=4u0FZ&FwF~mbH?6l zoQYcMkUey8{_MBm*MgZ(*q>meYLi@VlLi~_0=ayUU?5=`5)%UXVDTabXv5Ql4mkRFN$FBC>E-Aa(L#Zbs zE#apq6-q`tJGm##jz)v+d4sthh?z;028u;bNHVS2#cPUn3SEu7+jUk*OlNkXwtb{E3 zi$3X(ee=QLv`PU<>hlr5lgyTqC9NNWQ{gAU=k9sWj$k5q@M4wiUkT4=X*Tn3 zr=VDxt&}^Ue&?897dNBh!1w+eB`J2_?eStIKR!B`LfHLyyovBjS=k*xkkkVWQ8dX8 zd(&hcAtK?VmYsaOyLIi)jhykAAySeRuO}X#6n`m8CykvWL5U!O5lf+sf0_x&`hcQ$ zjAJ#H<`hd5y<|VOw_8MW`qnHS93SP~-{#NyGhDnDEu00M3E+Gd>e7g*>bh^9VA8S6 zp2)sApqb~UZX!+e;x7i9v$~-}xOD963jayUObRhr=McsX0H}{x zUh}CbkDehN>O4mw9rU*yPz7q{-2I#nC?jcqj{#}riL=5S$h3`UZ;f#Z;g^*{@6tPD z{TvW2Z};}Q)1Yz=QtemrBxCfD@>+j{Lt2gj2G>j~{pIsP;wtK)$sbH009;K@SSR3y z&hd2yxB67w3eoWLFE9VC`kGL`{}u9hj{(eVDdNt{IJTTY)JHnUiKmgbbV$)c;khiG zvFX7@iA!S+$VNrGMdYlP{Brbxudf81?OHEbR=<`dTpj(hS;!-|HTMgATv>A!yh_;F zwaWIj`mLe)93X38n!NCe-%ZnV{Wg_H5ozQrf%z<}w{~Hnyxc&P9Suq+M3AWH9n@z! z@e=bWMW@inmZ=!oQaMYP^`AZ7_0d~)kWcQtJ}15qY8u*=g+>hx*6DUVyk08Rhm4)h zPF-mP*hrm&D<;VkKNMTQT)P&;@aAut1xGw7Tl<&hcn)`Xu=ZyHInKuOo{txLq!ny< zFgojHI-x%dyUhs!yB0vt8jFi|cMU9G{bso1%uB&vn_mg8Eej{R@YjNB9pqp1CzaV2 z=HF5!sUsP;+RLD5^gKJ`k}y`xT_wFB+R>8K!F(MDH~oXHg&S(NbN+cpZrP%i~rr66~v zS<7M)>w-%#B8kN~Lzq>~KJi55kb=uRIet-|M7+8_oQXba+#O*yyEc+-s4`AP(+Oeo z5@{mhpOrTCB_#Y4<^esC{K6S=KftdGhQ3%u`;{l1`&O<>NnDOAv(l_Em3N+#s|{~e zZldr?+L$8m9q%tv(5ZkYjR5|nC(xq^;1}^dL)Tk~~rQiW1T51VT zv(0I@r*hn}Y_6VvF-wyOAWk!G)`bs=;JcV}UASEbm{H7E!Kn%32iR|8lsT(PX-bf{ zeP!-(L9R3^Qt=}ni;S{*p0RVfvYBBU2ZJ#=5L;igzX{CiN3?0!zZ(<#$SO8@$JuYs zXU$&ccL{j(^>rQiV8fV>BIfuw74EtpjFwcD-dO*@e2xU3Hb%nTLI|=F<~RyCFd5e2 zj?B^wQRIj?b4p@z($uMI%`pl+U|11VUs9H%PO39J2Y2J_n~bzLzYA*;vZGDjhDIMP zsK+A^-0LYhMuj2!`o_iC#sI+3^h@Y$U;(pc31_Nx-!MU`A z#Y2jbMs|M7QRcz=kUon+5%L+J?DnxS8aS!E|E>37=7$3Q?Pc3cj}^I#!VNSBw#x~P z3q|DK)xc==VDY~5%G?`w|6-~3nY;){OD_j<;}4;ojrjHad={gg7ynJgSE6G3xM$t0 zma}j_iP(X)wIan&pTSyy$mSI=$gz^U)5$cd>RDD8>(6`VTzHfEn^z4ue$Os-`B<>knzqJ?x)u- zsPO`z6t=BR=I$e43V+7#YL0xi!^YR z%a@mzH|Lj>rl#85a}d-2>t|N`>r2kZOYc*hch+pV>K~iE;#MK>=tGC!kQHT(hHF-@ qUVYUW=oFzs4q7fABeaj_zdg%cy-Qwh+uVU}VeoYIb6Mw<&;$S)?|O9r diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi index 25669628e058abffcebfe723e413acb53f522a9c..85f7c22c349143336a3898b21098e014487c8890 100644 GIT binary patch delta 28814 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

    7yD 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 Tz%{f9fPONPiW2a*hW`Hpm^qeY delta 28834 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

    i5cd18*rzs7#1%MlXu# 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 T^|IM>0Q~zXAtzocs_*xIMh4nU From 8e53577ee732e5117426f6e11179a39b2516bdff Mon Sep 17 00:00:00 2001 From: Casper3667 <8396443+Casper3667@users.noreply.github.com> Date: Mon, 1 Jun 2026 12:36:57 +0200 Subject: [PATCH 18/68] Taj rebalance patch (#22451) This is based on requests from the taj lore team. A future PR will do more for the sensitive hearing as well, but the PR was growing by quite a lot so it was best to split it up. New: - Tajaran eyes can now extend their vision by 3 tiles while they stand still. - Taj can hear people whispering and talking into radios from 1 tiles further away, if they are listening intently. Bugfixes: - Flashbangs no longer fuck taj up as much unless they got intent listen active. - The message for autakh farseer eyes no longer gives the wrong message if it is disabled by moving. Balance & Change: - Taj have new heights. Before it was 150 to 190 cm - Hharar: 145-180 - M'sai: 155-175 - Zhan: 160-195 - The brute mod have been adjusted on tajara - Zhan: 10% -> 5% - Hharar: 20% -> 10% - M'sai: 30% -> 15% Backend stuff: - Action buttons were changed to accept lists, so multiple actions can be given to a single item. --- code/_onclick/hud/action.dm | 16 +++++++ code/game/atoms.dm | 12 +++++ code/game/objects/items.dm | 18 +++++-- .../items/weapons/grenades/flashbang.dm | 18 +++++-- .../carbon/human/species/outsider/revenant.dm | 1 + .../human/species/station/tajara/tajara.dm | 6 +-- .../station/tajara/tajaran_subspecies.dm | 8 +++- code/modules/mob/living/living_defense.dm | 47 +++++++++++++++---- code/modules/mob/living/say.dm | 3 ++ code/modules/mob/living/whisper.dm | 9 ++-- .../modules/organs/internal/species/tajara.dm | 42 +++++++++++++---- .../modules/organs/internal/species/vaurca.dm | 2 + code/modules/organs/subtypes/autakh.dm | 1 + html/changelogs/TajChange.yml | 11 +++++ 14 files changed, 162 insertions(+), 32 deletions(-) create mode 100644 html/changelogs/TajChange.yml diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index 69e323792aa..a5eb04343f3 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -284,6 +284,22 @@ check_flags = AB_CHECK_STUNNED|AB_CHECK_ALIVE|AB_CHECK_INSIDE button_icon_state = "night_eyes" +/datum/action/item_action/organ/night_eyes/Trigger() + if(!Checks()) + return + var/obj/item/organ/internal/eyes/night/target_eyes = target + target_eyes.night_vision() + +/datum/action/item_action/organ/extended_eyes + check_flags = AB_CHECK_STUNNED|AB_CHECK_ALIVE|AB_CHECK_INSIDE + button_icon_state = "night_eyes" + +/datum/action/item_action/organ/extended_eyes/Trigger() + if(!Checks()) + return + var/obj/item/organ/internal/eyes/night/target_eyes = target + target_eyes.extended_vision() + /datum/action/item_action/organ/night_eyes/rev check_flags = AB_CHECK_ALIVE|AB_CHECK_INSIDE button_icon_state = "rev_eyes" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 13fcc2b8e92..72ba517426e 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -543,6 +543,18 @@ if(src.z == H.z && get_dist(src, H) <= range) H.intent_listen(src, message) +/proc/get_intent_listeners(var/atom/source, var/range = 7, var/list/hearers = list()) + SHOULD_NOT_SLEEP(TRUE) + var/list/listeners = list() + if(air_sound(source)) + if(!length(hearers)) + hearers = get_hearers_in_view(range, source) + for(var/mob/living/carbon/human/H as anything in GLOB.intent_listener) + if((H in hearers)) + if(source.z == H.z && get_dist(source, H) <= range) + listeners += H + return listeners + /atom/movable/proc/dropInto(var/atom/destination) while(istype(destination)) var/atom/drop_destination = destination.onDropInto(src) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a98d7e1950c..a0f440f2516 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -136,6 +136,8 @@ var/zoomdevicename /// Boolean, `TRUE` if item is actively being used to zoom. For scoped guns and binoculars. var/zoom = FALSE + /// The message used when stopping looking through a pair of binoculars/scope + var/zoom_out_message /// Boolean, if item_state, lefthand, righthand, and worn sprite are all in one dmi var/contained_sprite = FALSE @@ -259,8 +261,16 @@ var/mob/m = loc m.drop_from_inventory(src, null) - if(!QDELETED(action)) + if(islist(action)) + var/list/action_list = action + for(var/i in 1 to action_list.len) + var/datum/action/A = action_list[i] + if(!QDELETED(A)) + QDEL_NULL(A) + action_list.Cut() + else if(!QDELETED(action)) QDEL_NULL(action) // /mob/living/proc/handle_actions() creates it, for ungodly reasons + action = null if(!QDELETED(hidden_uplink)) @@ -1005,9 +1015,11 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. M.client.pixel_x = 0 M.client.pixel_y = 0 - if(!cannotzoom) - if(show_zoom_message) + if(!cannotzoom && show_zoom_message) + if(!zoom_out_message) M.visible_message("[zoomdevicename ? "[M] looks up from \the [src.name]" : "[M] lowers \the [src.name]"].") + else + M.visible_message("[zoomdevicename ? "[M][zoom_out_message] \the [src.name]." : "[M][zoom_out_message]"]") if(ishuman(M)) var/mob/living/carbon/human/H = M diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index cd749b4f00e..b04398747aa 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -36,13 +36,21 @@ if(M.flash_act(ignore_inherent = TRUE)) M.Weaken(10) - // 1 - 9x/70 gives us 100% at zero, 87% at 1 turf, all the way to 10% at 7 - var/bang_intensity = 1 - (9 * get_dist(T, M) / 70) - M.noise_act(intensity = EAR_PROTECTION_MODERATE, damage_pwr = 10 * bang_intensity, deafen_pwr = 15 * (1 - bang_intensity)) + var/distance_to_grenade = get_dist(T, M) - if(M.get_hearing_sensitivity()) // we only stun if they've got sensitive ears + // 1 - 9x/70 gives us 100% at zero, 87% at 1 turf, all the way to 10% at 7 + var/bang_intensity = 1 - (9 * distance_to_grenade / 70) + + var/ear_damage = 10 * bang_intensity + var/deafen_damage = 15 * (1 - bang_intensity) + + + // we only stun if they've got sensitive ears and got it active as well as if it is close enough. + if(M.get_hearing_sensitivity() && astype(M, /mob/living/carbon/human)?.is_listening() && distance_to_grenade < 5) // checking for protection is handled by noise_act - M.noise_act(intensity = EAR_PROTECTION_MAJOR, stun_pwr = 2) + M.noise_act(intensity = EAR_PROTECTION_MAJOR, stun_pwr = 2, damage_pwr = ear_damage, deafen_pwr = deafen_damage) + else + M.noise_act(intensity = EAR_PROTECTION_MODERATE, damage_pwr = ear_damage, deafen_pwr = deafen_damage) M.disable_cloaking_device() M.update_icon() diff --git a/code/modules/mob/living/carbon/human/species/outsider/revenant.dm b/code/modules/mob/living/carbon/human/species/outsider/revenant.dm index b0b020a15e5..2a38a09bc5a 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/revenant.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/revenant.dm @@ -166,6 +166,7 @@ icon_state = "revenant_eyes" eye_emote = null vision_color = null + action_button_name = list("Activate Low Light Vision") default_action_type = /datum/action/item_action/organ/night_eyes/rev /obj/item/organ/internal/eyes/night/revenant/flash_act() diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm index 5b58a8692a2..3ab0ac68452 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajara.dm @@ -5,8 +5,8 @@ category_name = "Tajara" bodytype = BODYTYPE_TAJARA species_height = HEIGHT_CLASS_SHORT - height_min = 150 - height_max = 190 + height_min = 145 // human default: 145 + height_max = 180 // human default: 203 icobase = 'icons/mob/human_races/tajara/r_tajaran.dmi' deform = 'icons/mob/human_races/tajara/r_def_tajaran.dmi' preview_icon = 'icons/mob/human_races/tajara/tajaran_preview.dmi' @@ -27,7 +27,7 @@ darksight = 8 slowdown = -0.4 - brute_mod = 1.2 + brute_mod = 1.1 fall_mod = 0.5 grab_mod = 1.25 // Fur easy to cling onto diff --git a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm index deed857b277..bc6b87ed4e9 100644 --- a/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm +++ b/code/modules/mob/living/carbon/human/species/station/tajara/tajaran_subspecies.dm @@ -10,6 +10,8 @@ an easy path to education. Zhan-Khazan are in a transformative state in modern Tajaran society, \ but still deal with the many barriers from centuries of the caste system." species_height = HEIGHT_CLASS_TALL + height_min = 160 // taj default: 145 + height_max = 195 // taj default: 180 secondary_langs = list(LANGUAGE_SIIK_TAJR, LANGUAGE_DELVAHII) @@ -17,7 +19,7 @@ sprint_speed_factor = 0.55 standing_jump_range = 2 stamina = 100 // As opposed to 90 - brute_mod = 1.1 // Less Brute Damage + brute_mod = 1.05 // Less Brute Damage ethanol_resistance = 1 // Default value climb_coeff = 1.1 @@ -59,12 +61,14 @@ When these roles were shrunken down however, the M'sai commonly found themselves taking \ similar work to the Zhan-Khazan. As a result, the two races share much in common with their culture." species_height = HEIGHT_CLASS_AVERAGE + height_min = 155 // taj default: 145 + height_max = 175 // taj default: 180 slowdown = -0.6 sprint_speed_factor = 0.75 standing_jump_range = 3 stamina = 80 // As opposed to 90 - brute_mod = 1.3 // More Brute Damage + brute_mod = 1.15 // More Brute Damage ethanol_resistance = 0.7 // Species Default 0.9 maneuvers = list( diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 47edd11ff1d..65cddec66bb 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -503,19 +503,50 @@ A.Remove(src) for(var/obj/item/I in src) - if(I.action_button_name) + if(!I.action_button_name) + continue - //If the item_action object does not exist, try to create it + var/list/action_names = islist(I.action_button_name) ? I.action_button_name : list(I.action_button_name) + var/list/action_types = islist(I.default_action_type) ? I.default_action_type : list(I.default_action_type) + + if(action_names.len > 1) + if(!islist(I.action)) + I.action = I.action ? list(I.action) : list() + + var/list/actions_list = I.action + + for(var/i in 1 to action_names.len) + var/action_name = action_names[i] + if(!action_name) + continue + + var/datum/action/item_action = (i <= actions_list.len) ? actions_list[i] : null + + if(!item_action) + var/action_type = action_types.len >= i ? action_types[i] : action_types[1] + if(!action_type) + continue + + item_action = new action_type + actions_list.Add(item_action) + + item_action.name = action_name + item_action.SetTarget(I) + item_action.Grant(src) + + else if(!I.action) - //Try to use the default action type, if there is none, skip this implant - if(I.default_action_type) - I.action = new I.default_action_type + var/action_type = action_types.len ? action_types[1] : null + if(action_type) + I.action = new action_type else continue - I.action.name = I.action_button_name - I.action.SetTarget(I) - I.action.Grant(src) + var/datum/action/item_action = I.action + item_action.name = action_names[1] + item_action.SetTarget(I) + item_action.Grant(src) + return /mob/living/update_action_buttons() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 5658b3ed41d..caf2a24e2ba 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -330,6 +330,9 @@ var/list/channel_to_radio_key = new listening = get_hearers_in_view(message_range, src) + var/sensitive_listener = get_intent_listeners(src, message_range + 1) + listening = mergelists(listening, sensitive_listener, TRUE) + if(client) for (var/mob/player_mob in GLOB.player_list) if(!player_mob || player_mob.stat != DEAD || (player_mob in listening)) diff --git a/code/modules/mob/living/whisper.dm b/code/modules/mob/living/whisper.dm index 07a75cf42a5..cc5e294edf2 100644 --- a/code/modules/mob/living/whisper.dm +++ b/code/modules/mob/living/whisper.dm @@ -60,11 +60,14 @@ var/list/observers = list() var/list/all_in_range = hearers(watching_range, src) for(var/mob/M as anything in all_in_range) - if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) //Preventing duplicate messages to ghostear'd observers + // If they got sensitive hearing enabled, increase the whisper hearing range by one + var/sensitive = astype(M, /mob/living/carbon/human)?.is_listening() ? 1 : 0 + //Preventing duplicate messages to ghostear'd observers + if(M.stat == DEAD && M.client && (M.client.prefs.toggles & CHAT_GHOSTEARS)) continue - if(get_dist(src, M) <= message_range) //In range to hear + if(get_dist(src, M) <= (message_range + sensitive)) //In range to hear continue - else if(get_dist(src, M) <= eavesdropping_range) + else if(get_dist(src, M) <= (eavesdropping_range + sensitive)) if(M.stat == DEAD && M.client) observers += M else diff --git a/code/modules/organs/internal/species/tajara.dm b/code/modules/organs/internal/species/tajara.dm index 061fa190cab..48bc6617370 100644 --- a/code/modules/organs/internal/species/tajara.dm +++ b/code/modules/organs/internal/species/tajara.dm @@ -2,14 +2,16 @@ name = "light sensitive eyes" desc = "A pair of Tajaran eyes accustomed to the low light conditions of Adhomai." icon = 'icons/obj/organs/tajara_organs.dmi' - action_button_name = "Activate Low Light Vision" - default_action_type = /datum/action/item_action/organ/night_eyes + action_button_name = list("Activate Low Light Vision", "Extend vision") + default_action_type = list(/datum/action/item_action/organ/night_eyes, /datum/action/item_action/organ/extended_eyes) relative_size = 8 var/night_vision = FALSE var/datum/client_color/vision_color = /datum/client_color/monochrome var/datum/client_color/vision_mechanical_color = /datum/client_color/monochrome var/eye_emote = "'s eyes dilate!" var/allowed_model = PROSTHETIC_TESLA //what robotic model allows this eyes to use the night vision + var/cooldown = 30 + zoom_out_message = "'s eyes widens as they stop focusing ahead." /obj/item/organ/internal/eyes/night/Destroy() disable_night_vision() @@ -25,25 +27,49 @@ /obj/item/organ/internal/eyes/night/attack_self(var/mob/user) . = ..() + +/obj/item/organ/internal/eyes/night/proc/ability_check() if(owner.last_special > world.time) - return + return FALSE if(owner.stat || owner.paralysis || owner.stunned || owner.weakened) - return + return FALSE if(is_broken()) - return + return FALSE if(status & ORGAN_ROBOT) if(!robotic_check()) - return + return FALSE + owner.last_special = world.time + 20 + return TRUE + +/obj/item/organ/internal/eyes/night/proc/night_vision() + if(attack_self()) + return + if(!ability_check()) + return if(!night_vision) enable_night_vision() else disable_night_vision() - owner.last_special = world.time + 20 +/obj/item/organ/internal/eyes/night/proc/extended_vision() + if(attack_self()) + return + if(!ability_check()) + return + if(zoom) + owner.visible_message("[SPAN_BOLD("\The [owner]")]'s eyes widens as they stop focusing ahead.", range = 3) + else + owner.visible_message("[SPAN_BOLD("\The [owner]")]'s eyes begins to narrow as they focus on something in the distance.", range = 3) + if(!do_after(owner, 1.5 SECONDS)) + owner.visible_message("[SPAN_BOLD("\The [owner]")]'s eyes stop focusing.", range = 3) + return + owner.visible_message("[SPAN_BOLD("\The [owner]")]'s eyes narrows as their lenses shift to focus ahead.", range = 3) + + zoom(owner, 3, 7, FALSE, FALSE) /obj/item/organ/internal/eyes/night/proc/robotic_check(var/mob/user) if(robotize_type == allowed_model) @@ -89,7 +115,7 @@ show_message = FALSE break if(show_message && eye_emote) - owner.visible_message("[owner][eye_emote]") + owner.visible_message("[SPAN_BOLD("\The [owner]")][eye_emote]") night_vision = TRUE if(can_change_invisible()) diff --git a/code/modules/organs/internal/species/vaurca.dm b/code/modules/organs/internal/species/vaurca.dm index 5a2aa355f9f..aa38e35f771 100644 --- a/code/modules/organs/internal/species/vaurca.dm +++ b/code/modules/organs/internal/species/vaurca.dm @@ -3,6 +3,8 @@ desc = "A set of four vaurcaesian eyes, adapted to the low or no light tunnels of Sedantis." icon = 'icons/obj/organs/vaurca_organs.dmi' robotic_sprite = FALSE + action_button_name = list("Activate Low Light Vision") + default_action_type = list(/datum/action/item_action/organ/night_eyes) vision_color = /datum/client_color/vaurca vision_mechanical_color = /datum/client_color/monochrome eye_emote = "'s eyes gently shift." diff --git a/code/modules/organs/subtypes/autakh.dm b/code/modules/organs/subtypes/autakh.dm index bbb66b5d8c8..afcf7616c9c 100644 --- a/code/modules/organs/subtypes/autakh.dm +++ b/code/modules/organs/subtypes/autakh.dm @@ -190,6 +190,7 @@ action_button_icon = "hunterseye" cooldown = 30 activable = TRUE + zoom_out_message = " eyes whirrs loudly as the zoom lenses retract." /obj/item/organ/internal/augment/farseer_eye/attack_self(var/mob/user) . = ..() diff --git a/html/changelogs/TajChange.yml b/html/changelogs/TajChange.yml new file mode 100644 index 00000000000..f24d08b67d4 --- /dev/null +++ b/html/changelogs/TajChange.yml @@ -0,0 +1,11 @@ +author: TheGreyWolf + +delete-after: True + +changes: + - balance: "Tajara brute mods were changed from 10%, 20% and 30% for zhan, base tajara and m'sai to 5%, 10%, 15%." + - balance: "Flashbangs no longer stun tajara unless they have sensitive hearing on." + - rscadd: "The height difference between hharar, m'sai and zhan were tweaked to not be identical." + - rscadd: "Tajara eyes can now extend their vision, somewhat similarly to using a binocular." + - rscadd: "Tajara with sensitive hearing on can now hear whispers and people talking into radios from 2 turfs away." + - bugfix: "Fixed a bug with the autakh farseer eyes causing them to give the improper message if retracted by movement or other sources." From 1b54762d3650df0c4d558d71452d29deb4f2b26b Mon Sep 17 00:00:00 2001 From: Batrachophreno Date: Mon, 1 Jun 2026 06:46:56 -0400 Subject: [PATCH 19/68] Hardsuit fixes (#22519) Various fixes and cleanups for hardsuits following the rework. changes: - bugfix: "Adds additional safety checks to hardsuit deployment logic to better handle boot checks." - bugfix: "Hardsuit Health Analyzer module works again." - rscadd: "Adds 'Retract All Parts' verb for hardsuits." - rscdel: "Removes Vitals Scanner module; hardsuits which had this module by default have had it replaced with the Health Analzyer module." - rscdel: "Removes hardsuit Maneuvering Jets onmob sprites." --- .../components/medical/medicalAnalyzer.dm | 9 ++++ code/datums/uplink/hardsuits_and_modules.dm | 7 --- .../spacesuits/rig/modules/utility.dm | 47 ++++++++--------- code/modules/clothing/spacesuits/rig/rig.dm | 48 +++++++++++++++++- .../clothing/spacesuits/rig/rig_verbs.dm | 21 ++++++++ .../clothing/spacesuits/rig/suits/light.dm | 8 +-- html/changelogs/Bat-HardsuitFixes.yml | 8 +++ icons/mob/rig_modules.dmi | Bin 5740 -> 4399 bytes 8 files changed, 110 insertions(+), 38 deletions(-) create mode 100644 html/changelogs/Bat-HardsuitFixes.yml diff --git a/code/datums/components/medical/medicalAnalyzer.dm b/code/datums/components/medical/medicalAnalyzer.dm index 6fdb128836c..0a970b2e58f 100644 --- a/code/datums/components/medical/medicalAnalyzer.dm +++ b/code/datums/components/medical/medicalAnalyzer.dm @@ -84,6 +84,15 @@ reagent_results = list() return TRUE +/datum/component/health_analyzer/ui_status(mob/user, datum/ui_state/state) + var/obj/item/rig_module/containing_rig_module = owner.loc + if(!containing_rig_module) + return ..() + if(containing_rig_module?.holder?.wearer == user) + return UI_INTERACTIVE + + return UI_CLOSE + /datum/component/health_analyzer/proc/attack(mob/living/target_mob, mob/living/user, target_zone) sound_scan = TRUE diff --git a/code/datums/uplink/hardsuits_and_modules.dm b/code/datums/uplink/hardsuits_and_modules.dm index b2458049dd3..faf5c820eaa 100644 --- a/code/datums/uplink/hardsuits_and_modules.dm +++ b/code/datums/uplink/hardsuits_and_modules.dm @@ -104,13 +104,6 @@ path = /obj/item/rig_module/storage desc = "A small hardsuit mounted storage unit, capable of holding a few items." -/datum/uplink_item/item/hardsuit_modules/vitalscanner - name = "Vitals Tracker Module" - telecrystal_cost = 1 - bluecrystal_cost = 1 - path = /obj/item/rig_module/device/healthscanner/vitalscanner - desc = "A module that allows a hardsuit to scan the users vitals, and give readouts of them." - /datum/uplink_item/item/hardsuit_modules/basicinjector name = "Emergency Chemical Injector" telecrystal_cost = 2 diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index f81510d7289..6d76f923b3d 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -42,6 +42,15 @@ . = ..() +/obj/item/rig_module/device/proc/handle_device_engage(atom/target, mob/user) + var/resolved = target.attackby(device, user) + if(!resolved && device && target) + if(device.afterattack(target, user, TRUE)) + return TRUE + else + return FALSE + return TRUE + /obj/item/rig_module/device/healthscanner name = "health scanner module" desc = "A hardsuit-mounted health scanner." @@ -51,19 +60,25 @@ construction_cost = list("$glass" = 5250, DEFAULT_WALL_MATERIAL = 2500) construction_time = 300 - engage_string = "Run Self-Diagnostic" + engage_string = "Run Diagnostic" device_type = /obj/item/healthanalyzer category = MODULE_MEDICAL -/obj/item/rig_module/device/healthscanner/vitalscanner - name = "integrated vitals tracker" - desc = "A hardsuit-mounted vitals tracker." - interface_name = "vitals tracker" - interface_desc = "Shows an informative health readout of the user." +/obj/item/rig_module/device/healthscanner/engage(atom/target, mob/user) + if(!..() || !device) + return FALSE - category = MODULE_GENERAL + if(!target.Adjacent(user)) + return FALSE + + var/obj/item/healthanalyzer/our_device = device + if(!target || user == target) + our_device.attack_self(user) + return TRUE + + return handle_device_engage(target, user) /obj/item/rig_module/device/drill name = "hardsuit diamond drill mount" @@ -158,15 +173,6 @@ if("rfd_settings") our_device.attack_self(user) -/obj/item/rig_module/device/rfd_c/handle_device_engage(atom/target, mob/user) - var/resolved = target.attackby(device, user) - if(!resolved && device && target) - if(device.afterattack(target, user, TRUE)) - return TRUE - else - return FALSE - return TRUE - /obj/item/rig_module/device/rfd_c/engage(atom/target, mob/user) if(!..() || !device) return FALSE @@ -186,12 +192,6 @@ return handle_device_engage(target, user) -/obj/item/rig_module/device/proc/handle_device_engage(atom/target, mob/user) - var/resolved = target.attackby(device, user) - if(!resolved && device && target) - device.afterattack(target, user, TRUE) - return TRUE - /obj/item/rig_module/chem_dispenser name = "mounted chemical dispenser" desc = "A complex web of tubing and needles suitable for hardsuit use." @@ -477,9 +477,6 @@ construction_cost = list(DEFAULT_WALL_MATERIAL = 15000, MATERIAL_GLASS = 4250, MATERIAL_SILVER = 4250, MATERIAL_URANIUM = 5250) construction_time = 300 - suit_overlay_active = "maneuvering_active" - suit_overlay_inactive = "maneuvering_inactive" - interface_name = "maneuvering jets" interface_desc = "An inbuilt EVA maneuvering system that runs off the hardsuit air supply." diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index c2787e31c82..4a70736f1ab 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -100,6 +100,8 @@ var/malfunctioning = 0 var/malfunction_delay = 0 var/electrified = 0 + /// Ensures that you can't queue up multiple piece toggle commands at once and bug anything out. + var/piece_being_deployed = FALSE /// Rate at which the suit cell will passively use power when online. var/cell_draw_rate = CHARGE_DRAIN_DEFAULT @@ -842,6 +844,8 @@ return TRUE /obj/item/rig/proc/toggle_piece(var/piece, var/mob/initiator, var/deploy_mode) + if(piece_being_deployed) + return if(!usr || sealing || !cell || !cell.charge) return @@ -877,6 +881,7 @@ use_obj = chest check_slot = wearer.wear_suit + piece_being_deployed = TRUE if(use_obj) // Handle retracting the piece, if possible. if(check_slot == use_obj && deploy_mode != ONLY_DEPLOY) @@ -890,6 +895,7 @@ if(use_obj == boots && chest_slot == chest_obj) to_chat(wearer, SPAN_WARNING("The chest piece of the hardsuit must be retracted before you can retract your boots!")) sound_to(wearer, 'sound/machines/terminal/terminal_error.ogg') + piece_being_deployed = FALSE return if(check_slot == use_obj) @@ -904,16 +910,21 @@ // Handle deploying the piece, if possible. else if (deploy_mode != ONLY_RETRACT) if(check_slot && check_slot == use_obj) + piece_being_deployed = FALSE return TRUE if(!do_after(wearer, 8)) if(wearer) to_chat(wearer, SPAN_WARNING("You must remain still while the suit deploys its parts.")) + piece_being_deployed = FALSE return FALSE // If we're deploying the chest, we also try to deploy boots. If we can't also deploy boots, the entire thing fails. if(use_obj == chest) - if(!toggle_piece("boots", initiator, ONLY_DEPLOY)) + var/obj/item/boots_slot = wearer.shoes + var/obj/item/boots_obj = boots + if(boots_slot != boots_obj) to_chat(initiator, SPAN_DANGER("You are unable to deploy \the [piece] as the boots were unable to also deploy!")) playsound(src, 'sound/items/rfd_empty.ogg', 20, FALSE) + piece_being_deployed = FALSE return FALSE use_obj.forceMove(wearer) if(src.color) @@ -923,6 +934,7 @@ if(check_slot) to_chat(initiator, SPAN_DANGER("You are unable to deploy \the [piece] as \the [check_slot] [check_slot.gender == PLURAL ? "are" : "is"] in the way.")) playsound(src, 'sound/items/rfd_empty.ogg', 20, FALSE) + piece_being_deployed = FALSE return FALSE else to_chat(wearer, SPAN_NOTICE("Your [use_obj.name] [use_obj.gender == PLURAL ? "deploy" : "deploys"] swiftly.")) @@ -933,10 +945,42 @@ update_icon(TRUE) + piece_being_deployed = FALSE return TRUE /obj/item/rig/proc/deploy(mob/M,var/sealed) + var/mob/living/carbon/human/H = M + if(!H || !istype(H)) return + + if(H.back != src) + return + + if(sealed) + if(H.head) + var/obj/item/garbage = H.head + H.head = null + qdel(garbage) + + if(H.gloves) + var/obj/item/garbage = H.gloves + H.gloves = null + qdel(garbage) + + if(H.shoes) + var/obj/item/garbage = H.shoes + H.shoes = null + qdel(garbage) + + if(H.wear_suit) + var/obj/item/garbage = H.wear_suit + H.wear_suit = null + qdel(garbage) + + for(var/piece in list("helmet","gauntlets","boots",BP_CHEST)) + toggle_piece(piece, H, ONLY_DEPLOY) + +/obj/item/rig/proc/retract(mob/M,var/sealed) var/mob/living/carbon/human/H = M if(!H || !istype(H)) return @@ -966,7 +1010,7 @@ qdel(garbage) for(var/piece in list("helmet","gauntlets",BP_CHEST,"boots")) - toggle_piece(piece, H, ONLY_DEPLOY) + toggle_piece(piece, H, ONLY_RETRACT) /obj/item/rig/proc/null_wearer(var/mob/user) for(var/piece in list("helmet","gauntlets",BP_CHEST,"boots")) diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm index 42e6d4303e0..b5ed0d6e5ef 100644 --- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm +++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm @@ -130,6 +130,27 @@ deploy(wearer) +/obj/item/rig/verb/retract_suit() + set name = "Retract All Hardsuit Parts" + set desc = "Retracts helmet, gloves and boots." + set category = "Hardsuit.Core Functions" + set src = usr.contents + + if(!istype(wearer) || !wearer.back == src) + to_chat(usr, SPAN_WARNING("The hardsuit is not being worn.")) + return + + if(use_check_and_message(usr)) + return + + if(!check_suit_access(usr)) + return + + if(!check_power_cost(usr)) + return + + deploy(wearer) + /obj/item/rig/verb/toggle_seals_verb() set name = "Engage/Disengage Hardsuit" set desc = "Activates or deactivates your hardsuit." diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm index c0e55fe7fc3..208a5e9c053 100644 --- a/code/modules/clothing/spacesuits/rig/suits/light.dm +++ b/code/modules/clothing/spacesuits/rig/suits/light.dm @@ -223,7 +223,7 @@ boot_type = null initial_modules = list( - /obj/item/rig_module/device/healthscanner/vitalscanner, + /obj/item/rig_module/device/healthscanner, /obj/item/rig_module/chem_dispenser/offworlder, /obj/item/rig_module/storage ) @@ -278,7 +278,7 @@ ) initial_modules = list( - /obj/item/rig_module/device/healthscanner/vitalscanner, + /obj/item/rig_module/device/healthscanner, /obj/item/rig_module/chem_dispenser/offworlder, /obj/item/rig_module/actuators/combat, /obj/item/rig_module/chem_dispenser/combat @@ -293,7 +293,7 @@ /obj/item/rig/light/offworlder/frontier/equipped initial_modules = list( - /obj/item/rig_module/device/healthscanner/vitalscanner, + /obj/item/rig_module/device/healthscanner, /obj/item/rig_module/chem_dispenser/offworlder, /obj/item/rig_module/actuators/combat, /obj/item/rig_module/fabricator/energy_net, @@ -302,7 +302,7 @@ ) /obj/item/rig/light/offworlder/frontier/ninja initial_modules = list( - /obj/item/rig_module/device/healthscanner/vitalscanner, + /obj/item/rig_module/device/healthscanner, /obj/item/rig_module/chem_dispenser/offworlder, /obj/item/rig_module/actuators/combat, /obj/item/rig_module/fabricator/energy_net, diff --git a/html/changelogs/Bat-HardsuitFixes.yml b/html/changelogs/Bat-HardsuitFixes.yml new file mode 100644 index 00000000000..e00295b975b --- /dev/null +++ b/html/changelogs/Bat-HardsuitFixes.yml @@ -0,0 +1,8 @@ +author: Batrachophrenoboocosmomachia +delete-after: True +changes: + - bugfix: "Adds additional safety checks to hardsuit deployment logic to better handle boot checks." + - bugfix: "Hardsuit Health Analyzer module works again." + - rscadd: "Adds 'Retract All Parts' verb for hardsuits." + - rscdel: "Removes Vitals Scanner module; hardsuits which had this module by default have had it replaced with the Health Analzyer module." + - rscdel: "Removes hardsuit Maneuvering Jets onmob sprites." diff --git a/icons/mob/rig_modules.dmi b/icons/mob/rig_modules.dmi index f921263c7548734f37a188244eb494e8b9846691..a184129e69208ed8153558ace0eb977102b1a50b 100644 GIT binary patch literal 4399 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 U^g-v;;r|e$8!%|eb>~O_1$cKmP5=M^ literal 5740 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 From 752496d91fdab81a9bf15d2d81fd6bfd55dfe136 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Mon, 1 Jun 2026 11:04:34 -0400 Subject: [PATCH 20/68] Hard Del Tracking Tweaks (#22570) The typical hard del costs 300ms of time, but Hard Dels only get reported to the Sentry logs if they exceed 500ms, which only an extremely tiny minority of them ever get past. In actual practice we only need to ignore the hard dels that are under 200ms because only the two "Roundstart subsystem hard dels" will ever be below that number and can be ignored. ALL other hard dels should be reported with the details required to fix them, especially so that I can have actually usable information about what is causing them and what I need to fix. --- code/controllers/subsystems/garbage.dm | 14 +++++++++++++- ...hellfirejag-sentry-hard-del-tracking-tweaks.yml | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/hellfirejag-sentry-hard-del-tracking-tweaks.yml diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index 37e9b91fa51..9ec3886daa6 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -306,6 +306,18 @@ SUBSYSTEM_DEF(garbage) if (time > 0.1 SECONDS) postpone(time) + + // Standard sentry logging for hard dels other than the two subsystems that will always hard del every round + var/sentry_threshold = 0.25 SECONDS + if (time > sentry_threshold && SSsentry) + SSsentry.capture_message( + "Hard delete: [type]", + "warning", + "garbage", + tags = list("datum_type" = "[type]"), + extra = list("ref_id" = refID, "time_ms" = tick_usage, "details" = detail) + ) + var/threshold = 0.5 // Used to be CONFIG_GET(number/hard_deletes_overrun_threshold) if (threshold && (time > threshold SECONDS)) if (!(type_info.qdel_flags & QDEL_ITEM_ADMINS_WARNED)) @@ -318,7 +330,7 @@ SUBSYSTEM_DEF(garbage) "warning", "garbage", tags = list("datum_type" = "[type]"), - extra = list("ref_id" = refID, "time_ms" = tick_usage) + extra = list("ref_id" = refID, "time_ms" = tick_usage, "details" = detail) ) type_info.hard_deletes_over_threshold++ var/overrun_limit = 0 // Used to be CONFIG_GET(number/hard_deletes_overrun_limit) diff --git a/html/changelogs/hellfirejag-sentry-hard-del-tracking-tweaks.yml b/html/changelogs/hellfirejag-sentry-hard-del-tracking-tweaks.yml new file mode 100644 index 00000000000..29ad7772b7e --- /dev/null +++ b/html/changelogs/hellfirejag-sentry-hard-del-tracking-tweaks.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - rscadd: "Tweaked the hard delete logging sensitivity to correctly catch and record typical hard dels to the sentry logs. They will also now provide more usable information in order to help find where the memory leaks are coming from." From 5904a54288b46308c8c106053cb70336434c14d4 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 17:05:25 +0200 Subject: [PATCH 21/68] Fix null.update move icon() in handle_stamina (#22558) * Please describe the intent of your changes in a clear fashion. This PR fixes a runtime error: "Cannot execute null.update move icon().: proc name: handle stamina". The root cause was identified as a missing null check for `hud_used.move_intent` within the `handle_stamina` proc in `code/modules/mob/living/carbon/human/life.dm`. Specifically, at line 1598, the condition `if (client)` was insufficient. While a client might be present, the `hud_used` object or its `move_intent` property could be null during certain states (e.g., HUD initialization or teardown). The fix involves adding `&& hud_used && hud_used.move_intent` to the `if` condition, ensuring that `update_move_icon()` is only called when `hud_used.move_intent` is a valid object. This aligns with defensive programming patterns used elsewhere in the codebase for similar HUD element access. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. (No mapping changes in this PR) * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | (No new assets are included in this PR) Fixes SERVER-PROD-GK --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- code/modules/mob/living/carbon/human/life.dm | 2 +- html/changelogs/hellfirejag-stamina-runtime.yml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/hellfirejag-stamina-runtime.yml diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 0f0ee6832ac..6945a86f7a5 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1595,7 +1595,7 @@ stamina = min(max_stamina, stamina+regen) adjustNutritionLoss(stamina_recovery*0.09) adjustHydrationLoss(stamina_recovery*0.32) - if (client) + if (client && hud_used && hud_used.move_intent) hud_used.move_intent.update_move_icon(src) /mob/living/carbon/human/proc/update_oxy_overlay() diff --git a/html/changelogs/hellfirejag-stamina-runtime.yml b/html/changelogs/hellfirejag-stamina-runtime.yml new file mode 100644 index 00000000000..f1865cb9df4 --- /dev/null +++ b/html/changelogs/hellfirejag-stamina-runtime.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a runtime error related to the stamina bar." From 148d048bc8e930776bdc1557693a7cd6ee199507 Mon Sep 17 00:00:00 2001 From: "sentry[bot]" <39604003+sentry[bot]@users.noreply.github.com> Date: Mon, 1 Jun 2026 17:05:27 +0200 Subject: [PATCH 22/68] Fixes null.b_type error in handle_rejection (#22556) * Please describe the intent of your changes in a clear fashion. The `handle_rejection()` proc in `code/modules/organs/organ.dm` was attempting to access `owner.dna.b_type` without first verifying that `owner` or `owner.dna` were non-null. This could happen if an organ's `process()` chain continued to tick after the organ had been detached from its mob, leading to a runtime error. This change adds an early return guard `if(!owner || !owner.dna) return` at the beginning of the `handle_rejection()` proc. This prevents the null dereference and aligns the proc's behavior with similar checks found in `handle_germ_effects()`. * Please make sure that, in the case of mapping changes, you include images of these changes in the PR's description. * Please make sure to mark your PR as wip or review required by making a comment with !wip or !review required * If you include sprites/sounds/... (assets) that you have not created yourself specify the license and original author below. * Ensure that you also credit them in the appropriate location / changelog as specified in the contributor guidelines ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/example.dmi | ExamplePerson (Example Station) | CC0 | Fixes SERVER-PROD-CN --------- Co-authored-by: sentry[bot] <39604003+sentry[bot]@users.noreply.github.com> Co-authored-by: VMSolidus --- code/modules/organs/organ.dm | 36 ++++++++++--------- .../hellfirejag-organ-transplant-runtime.yml | 4 +++ 2 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 html/changelogs/hellfirejag-organ-transplant-runtime.yml diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index d175fb42c53..19c1e52e860 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -251,23 +251,25 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) /obj/item/organ/proc/handle_rejection() // Process unsuitable transplants. - if(dna) - if(!rejecting) - if(blood_incompatible(dna.b_type, owner.dna.b_type, species, owner.species)) - rejecting = 1 - else - rejecting++ //Rejection severity increases over time. - if(rejecting % 10 == 0) //Only fire every ten rejection ticks. - switch(rejecting) - if(1 to 50) - germ_level++ - if(51 to 200) - germ_level += rand(1,2) - if(201 to 500) - germ_level += rand(2,3) - if(501 to INFINITY) - germ_level += rand(3,5) - owner.reagents.add_reagent(/singleton/reagent/toxin, rand(1,2)) + if(!owner || !owner.dna || !dna) + return + + if(!rejecting && blood_incompatible(dna.b_type, owner.dna.b_type, species, owner.species)) + rejecting = 1 + return + + rejecting++ //Rejection severity increases over time. + if(rejecting % 10 == 0) //Only fire every ten rejection ticks. + switch(rejecting) + if(1 to 50) + germ_level++ + if(51 to 200) + germ_level += rand(1,2) + if(201 to 500) + germ_level += rand(2,3) + if(501 to INFINITY) + germ_level += rand(3,5) + owner.reagents.add_reagent(/singleton/reagent/toxin, rand(1,2)) /obj/item/organ/proc/receive_chem(chemical as obj) return 0 diff --git a/html/changelogs/hellfirejag-organ-transplant-runtime.yml b/html/changelogs/hellfirejag-organ-transplant-runtime.yml new file mode 100644 index 00000000000..4d42a97ba84 --- /dev/null +++ b/html/changelogs/hellfirejag-organ-transplant-runtime.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a runtime error in organ rejection." From 67d39b9ff7168e57356ef625a30560cb1100f41c Mon Sep 17 00:00:00 2001 From: Batrachophreno Date: Mon, 1 Jun 2026 14:28:42 -0400 Subject: [PATCH 23/68] Revert #22556 (#22574) Reverts #22556 (organ rejection changes). --- code/modules/organs/organ.dm | 36 +++++++++++++-------------- html/changelogs/Bat-RevertOrganPR.yml | 4 +++ 2 files changed, 21 insertions(+), 19 deletions(-) create mode 100644 html/changelogs/Bat-RevertOrganPR.yml diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 19c1e52e860..d175fb42c53 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -251,25 +251,23 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) /obj/item/organ/proc/handle_rejection() // Process unsuitable transplants. - if(!owner || !owner.dna || !dna) - return - - if(!rejecting && blood_incompatible(dna.b_type, owner.dna.b_type, species, owner.species)) - rejecting = 1 - return - - rejecting++ //Rejection severity increases over time. - if(rejecting % 10 == 0) //Only fire every ten rejection ticks. - switch(rejecting) - if(1 to 50) - germ_level++ - if(51 to 200) - germ_level += rand(1,2) - if(201 to 500) - germ_level += rand(2,3) - if(501 to INFINITY) - germ_level += rand(3,5) - owner.reagents.add_reagent(/singleton/reagent/toxin, rand(1,2)) + if(dna) + if(!rejecting) + if(blood_incompatible(dna.b_type, owner.dna.b_type, species, owner.species)) + rejecting = 1 + else + rejecting++ //Rejection severity increases over time. + if(rejecting % 10 == 0) //Only fire every ten rejection ticks. + switch(rejecting) + if(1 to 50) + germ_level++ + if(51 to 200) + germ_level += rand(1,2) + if(201 to 500) + germ_level += rand(2,3) + if(501 to INFINITY) + germ_level += rand(3,5) + owner.reagents.add_reagent(/singleton/reagent/toxin, rand(1,2)) /obj/item/organ/proc/receive_chem(chemical as obj) return 0 diff --git a/html/changelogs/Bat-RevertOrganPR.yml b/html/changelogs/Bat-RevertOrganPR.yml new file mode 100644 index 00000000000..be7c6a97876 --- /dev/null +++ b/html/changelogs/Bat-RevertOrganPR.yml @@ -0,0 +1,4 @@ +author: Batrachophrenoboocosmomachia +delete-after: True +changes: + - bugfix: "Reverts #22556 (organ rejection changes)." From dab83fc0c05e0e73cdb195df29f8d3514fe7f30f Mon Sep 17 00:00:00 2001 From: Greenjoe12345 <33647525+Greenjoe12345@users.noreply.github.com> Date: Mon, 1 Jun 2026 21:55:25 +0100 Subject: [PATCH 24/68] Adds some shirts (#22489) Adds clothing item versions of some existing shirts that were previously only in the undershirt selection next to underwear. Mostly graphic t-shirts. Also adds a cropped tank top, modified from the existing tank top. --- code/datums/underwear/undershirt.dm | 169 ------------------ .../preference_setup/loadout/items/shirts.dm | 40 +++++ code/modules/clothing/under/shirts/shirts.dm | 166 +++++++++++++++++ html/changelogs/Greenjoe - newshirts.yml | 58 ++++++ icons/mob/underwear.dmi | Bin 76184 -> 51989 bytes .../obj/item/clothing/under/shirt/shirts.dmi | Bin 6234 -> 34307 bytes 6 files changed, 264 insertions(+), 169 deletions(-) create mode 100644 html/changelogs/Greenjoe - newshirts.yml diff --git a/code/datums/underwear/undershirt.dm b/code/datums/underwear/undershirt.dm index 8867673f887..f3fd7e0d348 100644 --- a/code/datums/underwear/undershirt.dm +++ b/code/datums/underwear/undershirt.dm @@ -38,11 +38,6 @@ icon_state = "tank_midriff" has_color = TRUE -/datum/category_item/underwear/undershirt/tank_top_midriff_short - name = "Tank Top, Midriff Short" - icon_state = "tank_midriff_short" - has_color = TRUE - /datum/category_item/underwear/undershirt/tank_top_expedition name = "Tank Top, Expedition" icon_state = "tank_expedition" @@ -59,14 +54,6 @@ name = "Tank Top, Fleet Feminine" icon_state = "tank_fleet_fem" -/datum/category_item/underwear/undershirt/tank_top_fire - name = "Tank Top, Fire" - icon_state = "tank_fire" - -/datum/category_item/underwear/undershirt/tank_top_fire_fem - name = "Tank Top, Fire Feminine" - icon_state = "tank_fire_fem" - /datum/category_item/underwear/undershirt/tank_top_stripes name = "Tank Top, Stripes" icon_state = "tank_stripes" @@ -83,22 +70,6 @@ name = "Tank Top, Stripes Alt Feminine" icon_state = "tank_stripes_alt_fem" -/datum/category_item/underwear/undershirt/tank_top_sun - name = "Tank Top, Sun" - icon_state = "tank_sun" - -/datum/category_item/underwear/undershirt/tank_top_sun_fem - name = "Tank Top, Sun Feminine" - icon_state = "tank_sun_fem" - -/datum/category_item/underwear/undershirt/tank_top_sun_alt - name = "Tank Top, Sun Alt" - icon_state = "tank_sun_alt" - -/datum/category_item/underwear/undershirt/tank_top_sun_alt_fem - name = "Tank Top, Sun Alt Feminine" - icon_state = "tank_sun_alt_fem" - /datum/category_item/underwear/undershirt/tank_top_tight name = "Tank Top, Tight" icon_state = "tank_tight" @@ -137,95 +108,11 @@ icon_state = "undershirt_fem" has_color = TRUE -/datum/category_item/underwear/undershirt/undershirt_heart - name = "Undershirt, Heart" - icon_state = "heart" - -/datum/category_item/underwear/undershirt/undershirt_heart_fem - name = "Undershirt, Heart Feminine" - icon_state = "heart_fem" - -/datum/category_item/underwear/undershirt/undershirt_heart_echelon - name = "Undershirt, Heart Echelon" - icon_state = "heart_echelon" - -/datum/category_item/underwear/undershirt/undershirt_heart_echelon_fem - name = "Undershirt, Heart Echelon Feminine" - icon_state = "heart_echelon_fem" - -/datum/category_item/underwear/undershirt/shirt_love_nt - name = "Undershirt, I<3NT" - icon_state = "ilovent" - -/datum/category_item/underwear/undershirt/shirt_love_nt_fem - name = "Undershirt, I<3NT Feminine" - icon_state = "ilovent_fem" - /datum/category_item/underwear/undershirt/shirt name = "Shirt" icon_state = "shirt" has_color = TRUE -/datum/category_item/underwear/undershirt/shirt_alien - name = "Shirt, Alien" - icon_state = "shirt_alien" - -/datum/category_item/underwear/undershirt/shirt_band - name = "Shirt, Band" - icon_state = "shirt_band" - -/datum/category_item/underwear/undershirt/shirt_clown - name = "Shirt, Clown" - icon_state = "shirt_clown" - -/datum/category_item/underwear/undershirt/shirt_ian - name = "Shirt, Ian" - icon_state = "shirt_ian" - -/datum/category_item/underwear/undershirt/shirt_jersey - name = "Shirt, Blue Jersey" - icon_state = "shirt_jersey" - -/datum/category_item/underwear/undershirt/shirt_jersey_red - name = "Shirt, Red Jersey" - icon_state = "shirt_jersey_red" - -/datum/category_item/underwear/undershirt/shirt_meat - name = "Shirt, Meat" - icon_state = "shirt_meat" - -/datum/category_item/underwear/undershirt/shirt_scc - name = "Shirt, SCC" - icon_state = "shirt_scc" - -/datum/category_item/underwear/undershirt/shirt_scc_fem - name = "Shirt, SCC feminine" - icon_state = "shirt_scc_fem" - -/datum/category_item/underwear/undershirt/shirt_nt - name = "Shirt, NT" - icon_state = "shirt_nano" - -/datum/category_item/underwear/undershirt/shirt_nt_red - name = "Shirt, NT Red" - icon_state = "shirt_nano_red" - -/datum/category_item/underwear/undershirt/shirt_peace - name = "Shirt, Peace" - icon_state = "shirt_peace" - -/datum/category_item/underwear/undershirt/shirt_question - name = "Shirt, Question" - icon_state = "shirt_question" - -/datum/category_item/underwear/undershirt/shirt_skull - name = "Shirt, Skull" - icon_state = "shirt_skull" - -/datum/category_item/underwear/undershirt/shirt_ss13 - name = "Shirt, SS13" - icon_state = "shirt_ss13" - /datum/category_item/underwear/undershirt/shirt_blue_striped name = "Shirt, Blue Stripes" icon_state = "shirt_stripes" @@ -234,34 +121,10 @@ name = "Shirt, Blue Stripes Alt" icon_state = "shirt_stripes_alt" -/datum/category_item/underwear/undershirt/shirt_tiedye - name = "Shirt, Tiedye" - icon_state = "shirt_tiedye" - /datum/category_item/underwear/undershirt/shirt_tight name = "Shirt, Tight" icon_state = "tight" -/datum/category_item/underwear/undershirt/shirt_wing - name = "Shirt, Wing" - icon_state = "wing_shirt" - -/datum/category_item/underwear/undershirt/shirt_pinkblack - name = "Shirt, Pink-Black" - icon_state = "pinkblack_tshirt" - -/datum/category_item/underwear/undershirt/sport_shirt_blue - name = "Sport Shirt, Blue" - icon_state = "sportblue" - -/datum/category_item/underwear/undershirt/sport_shirt_green - name = "Sport Shirt, Green" - icon_state = "sportgreen" - -/datum/category_item/underwear/undershirt/sport_shirt_red - name = "Sport Shirt, Red" - icon_state = "sportred" - /datum/category_item/underwear/undershirt/shirt_army name = "Shirt, Army" icon_state = "shirt_army" @@ -286,38 +149,6 @@ name = "Shirt, Fleet Feminine" icon_state = "shirt_fleet_fem" -/datum/category_item/underwear/undershirt/shirt_zavodskoi - name = "Shirt, Zavodskoi Interstellar" - icon_state = "shirt_necropolis" - -/datum/category_item/underwear/undershirt/shirt_zavodskoi_fem - name = "Shirt, Zavodskoi Interstellar Feminine" - icon_state = "shirt_necropolis_fem" - -/datum/category_item/underwear/undershirt/shirt_epmc - name = "Shirt, EPMC" - icon_state = "shirt_epmc" - -/datum/category_item/underwear/undershirt/shirt_epmc_fem - name = "Shirt, EPMC Feminine" - icon_state = "shirt_epmc_fem" - -/datum/category_item/underwear/undershirt/bowlinga - name = "Bowling Shirt, Aqua" - icon_state = "bowlinga" - -/datum/category_item/underwear/undershirt/bowlingp - name = "Bowling Shirt, Pink" - icon_state = "bowlingp" - -/datum/category_item/underwear/undershirt/bowlingr - name = "Bowling Shirt, Red" - icon_state = "bowlingr" - -/datum/category_item/underwear/undershirt/bowlingw - name = "Bowling Shirt, White" - icon_state = "bowlingw" - /datum/category_item/underwear/undershirt/longjon name = "Long John Shirt" icon_state = "ljont" diff --git a/code/modules/client/preference_setup/loadout/items/shirts.dm b/code/modules/client/preference_setup/loadout/items/shirts.dm index 602dc228224..68ea6ca44b6 100644 --- a/code/modules/client/preference_setup/loadout/items/shirts.dm +++ b/code/modules/client/preference_setup/loadout/items/shirts.dm @@ -46,6 +46,9 @@ ABSTRACT_TYPE(/datum/gear/shirts) shirt["halter top"] = /obj/item/clothing/under/dressshirt/haltertop shirt["tank top"] = /obj/item/clothing/under/dressshirt/tanktop shirt["tank top, feminine"] = /obj/item/clothing/under/dressshirt/tanktop/feminine + shirt["tank top, cropped"] = /obj/item/clothing/under/dressshirt/tanktop/cropped + shirt["tank top, feminine cropped"] = /obj/item/clothing/under/dressshirt/tanktop/cropped/feminine + shirt["tank top, midriff"] = /obj/item/clothing/under/dressshirt/tanktop/midriff gear_tweaks += new /datum/gear_tweak/path(shirt) /datum/gear/shirts/stripes @@ -75,3 +78,40 @@ ABSTRACT_TYPE(/datum/gear/shirts) shirts["red silversun shirt"] = /obj/item/clothing/under/dressshirt/silversun/red shirts["random colored silversun shirt"] = /obj/item/clothing/under/dressshirt/silversun/random gear_tweaks += new /datum/gear_tweak/path(shirts) + +/datum/gear/shirts/precoloured + display_name = "pre-coloured shirt selection" + description = "A selection of pre-coloured and graphic shirts." + flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION + path = /obj/item/clothing/under/dressshirt/corgi + +/datum/gear/shirts/precoloured/New() + ..() + var/list/colouredshirts = list() + colouredshirts["corgi t-shirt"] = /obj/item/clothing/under/dressshirt/corgi + colouredshirts["heart t-shirt"] = /obj/item/clothing/under/dressshirt/heart + colouredshirts["heart t-shirt, alt"] = /obj/item/clothing/under/dressshirt/heart/alt + colouredshirts["I love NT t-shirt"] = /obj/item/clothing/under/dressshirt/lovent + colouredshirts["band t-shirt"] = /obj/item/clothing/under/dressshirt/band + colouredshirts["alien t-shirt"] = /obj/item/clothing/under/dressshirt/alien + colouredshirts["tie-dye t-shirt"] = /obj/item/clothing/under/dressshirt/tiedye + colouredshirts["skull t-shirt"] = /obj/item/clothing/under/dressshirt/skull + colouredshirts["sports t-shirt, blue"] = /obj/item/clothing/under/dressshirt/sport + colouredshirts["sports t-shirt, green"] = /obj/item/clothing/under/dressshirt/sport/green + colouredshirts["sports t-shirt, red"] = /obj/item/clothing/under/dressshirt/sport/red + colouredshirts["wing t-shirt"] = /obj/item/clothing/under/dressshirt/wing + colouredshirts["peace t-shirt"] = /obj/item/clothing/under/dressshirt/peace + colouredshirts["steak t-shirt"] = /obj/item/clothing/under/dressshirt/meat + colouredshirts["question mark t-shirt"] = /obj/item/clothing/under/dressshirt/questionmark + colouredshirts["white bowling t-shirt"] = /obj/item/clothing/under/dressshirt/bowling + colouredshirts["aqua bowling t-shirt"] = /obj/item/clothing/under/dressshirt/bowling/aqua + colouredshirts["purple bowling t-shirt"] = /obj/item/clothing/under/dressshirt/bowling/purple + colouredshirts["red bowling t-shirt"] = /obj/item/clothing/under/dressshirt/bowling/red + colouredshirts["blue jersey"] = /obj/item/clothing/under/dressshirt/jersey + colouredshirts["red jersey"] = /obj/item/clothing/under/dressshirt/jersey/red + colouredshirts["pink and black t-shirt"] = /obj/item/clothing/under/dressshirt/pinkblack + colouredshirts["blue NanoTrasen t-shirt"] = /obj/item/clothing/under/dressshirt/nanotrasen + colouredshirts["red NanoTrasen t-shirt"] = /obj/item/clothing/under/dressshirt/nanotrasen/red + colouredshirts["fire tank top"] = /obj/item/clothing/under/dressshirt/tanktop/fire + colouredshirts["sun tank top"] = /obj/item/clothing/under/dressshirt/tanktop/sun + gear_tweaks += new /datum/gear_tweak/path(colouredshirts) diff --git a/code/modules/clothing/under/shirts/shirts.dm b/code/modules/clothing/under/shirts/shirts.dm index f09e4c2ab9c..e26756aba28 100644 --- a/code/modules/clothing/under/shirts/shirts.dm +++ b/code/modules/clothing/under/shirts/shirts.dm @@ -175,6 +175,22 @@ icon_state = "tanktop_fem" item_state = "tanktop_fem" +/obj/item/clothing/under/dressshirt/tanktop/cropped + name = "cropped tank top" + desc = "A short, simple, cheap tank top." + icon_state = "tanktop_crop" + item_state = "tanktop_crop" + +/obj/item/clothing/under/dressshirt/tanktop/cropped/feminine + icon_state = "tanktop_crop_fem" + item_state = "tanktop_crop_fem" + +/obj/item/clothing/under/dressshirt/tanktop/midriff + name = "midriff tank top" + desc = "A very short tank top that only covers the chest." + icon_state = "tanktop_midriff" + item_state = "tanktop_midriff" + // Polo Shirts /obj/item/clothing/under/dressshirt/polo @@ -233,3 +249,153 @@ if(prob(50)) icon_state = "hawaii_red" color = color_rotation(rand(-11,12)*15) + + +//pre-coloured shirts + +/obj/item/clothing/under/dressshirt/corgi + name = "corgi t-shirt" + desc = "A t-shirt with a corgi on it, cute!" + icon_state = "tshirt_corgi" + item_state = "tshirt_corgi" + +/obj/item/clothing/under/dressshirt/heart + name = "heart t-shirt" + desc = "A t-shirt with a cartoon heart on it." + icon_state = "tshirt_heart" + item_state = "tshirt_heart" + +/obj/item/clothing/under/dressshirt/heart/alt + icon_state = "tshirt_heart_alt" + item_state = "tshirt_heart_alt" + +/obj/item/clothing/under/dressshirt/lovent + name = "\improper I love NT t-shirt" + desc = "A white t-shirt with the text \"I ❤ NT\" on it. Another way to show your love of NanoTrasen!" + icon_state = "tshirt_lovent" + item_state = "tshirt_lovent" + +/obj/item/clothing/under/dressshirt/band + name = "band t-shirt" + desc = "A t-shirt with the logo of a band on it." + icon_state = "tshirt_band" + item_state = "tshirt_band" + +/obj/item/clothing/under/dressshirt/alien + name = "alien t-shirt" + desc = "A t-shirt with a cartoon alien head on it. Doesn't really look like any known species." + icon_state = "tshirt_alien" + item_state = "tshirt_alien" + +/obj/item/clothing/under/dressshirt/tiedye + name = "tie-dye t-shirt" + desc = "A tie-dyed t-shirt with a rainbow swirl on it." + icon_state = "tshirt_tiedye" + item_state = "tshirt_tiedye" + +/obj/item/clothing/under/dressshirt/skull + name = "skull t-shirt" + desc = "A red t-shirt featuring a human skull, badass?" + icon_state = "tshirt_skull" + item_state = "tshirt_skull" + +/obj/item/clothing/under/dressshirt/sport + name = "blue sports t-shirt" + desc = "A t-shirt for sports. Takes you back to school PE days." + icon_state = "tshirt_sportblue" + item_state = "tshirt_sportblue" + +/obj/item/clothing/under/dressshirt/sport/green + name = "green sports t-shirt" + icon_state = "tshirt_sportgreen" + item_state = "tshirt_sportgreen" + +/obj/item/clothing/under/dressshirt/sport/red + name = "red sports t-shirt" + icon_state = "tshirt_sportred" + item_state = "tshirt_sportred" + +/obj/item/clothing/under/dressshirt/wing + name = "wing t-shirt" + desc = "A t-shirt with a cartoon wing printed on it." + icon_state = "tshirt_wing" + item_state = "tshirt_wing" + +/obj/item/clothing/under/dressshirt/peace + name = "peace t-shirt" + desc = "A white t-shirt with the symbol of peace on the front and back." + icon_state = "tshirt_peace" + item_state = "tshirt_peace" + +/obj/item/clothing/under/dressshirt/meat + name = "steak t-shirt" + desc = "A t-shirt with a cartoon steak on it. Tasty." + icon_state = "tshirt_meat" + item_state = "tshirt_meat" + +/obj/item/clothing/under/dressshirt/questionmark + name = "question mark t-shirt" + desc = "A t-shirt with a question mark on it? For some reason?" + icon_state = "tshirt_question" + item_state = "tshirt_question" + +/obj/item/clothing/under/dressshirt/bowling + name = "white bowling t-shirt" + desc = "A t-shirt for bowling." + icon_state = "tshirt_bowlingw" + item_state = "tshirt_bowlingw" + +/obj/item/clothing/under/dressshirt/bowling/aqua + name = "aqua bowling t-shirt" + icon_state = "tshirt_bowlinga" + item_state = "tshirt_bowlinga" + +/obj/item/clothing/under/dressshirt/bowling/purple + name = "purple bowling t-shirt" + icon_state = "tshirt_bowlingp" + item_state = "tshirt_bowlingp" + +/obj/item/clothing/under/dressshirt/bowling/red + name = "red bowling t-shirt" + icon_state = "tshirt_bowlingr" + item_state = "tshirt_bowlingr" + +/obj/item/clothing/under/dressshirt/jersey + name = "blue jersey" + desc = "A sports shirt with numbers on the back." + icon_state = "shirt_jersey" + item_state = "shirt_jersey" + +/obj/item/clothing/under/dressshirt/jersey/red + name = "red jersey" + icon_state = "shirt_jersey_red" + item_state = "shirt_jersey_red" + +/obj/item/clothing/under/dressshirt/pinkblack + name = "pink and black t-shirt" + desc = "A pink t-shirt with black sleeves." + icon_state = "tshirt_pinkblack" + item_state = "tshirt_pinkblack" + +/obj/item/clothing/under/dressshirt/nanotrasen + name = "blue NanoTrasen t-shirt" + desc = "A t-shirt with the letters \"NT\" printed on it." + icon_state = "tshirt_nt_blue" + item_state = "tshirt_nt_blue" + +/obj/item/clothing/under/dressshirt/nanotrasen/red + name = "red NanoTrasen t-shirt" + icon_state = "tshirt_nt_red" + item_state = "tshirt_nt_red" + +/obj/item/clothing/under/dressshirt/tanktop/fire + name = "fire tank top" + desc = "A tank top with a flame decal on it." + icon_state = "tanktop_fire" + item_state = "tanktop_fire" + +/obj/item/clothing/under/dressshirt/tanktop/sun + name = "sun tank top" + desc = "A tank top with a sun decal on it." + icon_state = "tanktop_sun" + item_state = "tanktop_sun" diff --git a/html/changelogs/Greenjoe - newshirts.yml b/html/changelogs/Greenjoe - newshirts.yml new file mode 100644 index 00000000000..570dcb62342 --- /dev/null +++ b/html/changelogs/Greenjoe - newshirts.yml @@ -0,0 +1,58 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: Greenjoe + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds clothing item versions of various undershirt items. They can be selected in the loadout. The undershirt versions of them are removed from the game. Some other undershirts are removed outright." diff --git a/icons/mob/underwear.dmi b/icons/mob/underwear.dmi index 1e4d937665ad64cc5eb6fc79a0cfc7ec6e50b1d7..6747884b5772d3707d4e82a12b7bbefceba97c07 100644 GIT binary patch literal 51989 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 RZwEmvj#!!%A9lL+zW_9H8=L?D literal 76184 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 Date: Mon, 1 Jun 2026 17:42:04 -0400 Subject: [PATCH 25/68] Analyzer bugfixes (#22575) Fixes health analyzers NOT mounted on hardsuits (handheld, observer) not displaying TGUI on scan due to casting runtime. Fixes unrelated bug with self-scanning not playing nice. --- code/datums/components/medical/medicalAnalyzer.dm | 4 +++- html/changelogs/Bat-Analyzer.yml | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Bat-Analyzer.yml diff --git a/code/datums/components/medical/medicalAnalyzer.dm b/code/datums/components/medical/medicalAnalyzer.dm index 0a970b2e58f..02610a1e22b 100644 --- a/code/datums/components/medical/medicalAnalyzer.dm +++ b/code/datums/components/medical/medicalAnalyzer.dm @@ -88,7 +88,7 @@ var/obj/item/rig_module/containing_rig_module = owner.loc if(!containing_rig_module) return ..() - if(containing_rig_module?.holder?.wearer == user) + else if(containing_rig_module) return UI_INTERACTIVE return UI_CLOSE @@ -113,6 +113,8 @@ user.visible_message("\The [user] stops scanning \the [target_mob].") /datum/component/health_analyzer/proc/attack_self(mob/user) + if(scan_title == "" || scan_title == null) + health_scan_mob(user, user, FALSE, sound_scan = sound_scan) ui_interact(user) owner.add_fingerprint(user) diff --git a/html/changelogs/Bat-Analyzer.yml b/html/changelogs/Bat-Analyzer.yml new file mode 100644 index 00000000000..e2f1bb926b0 --- /dev/null +++ b/html/changelogs/Bat-Analyzer.yml @@ -0,0 +1,5 @@ +author: Batrachophrenoboocosmomachia +delete-after: True +changes: + - bugfix: "Fixes non-hardsuit health analyzer runtime." + - bugfix: "Fixes hardsuit health analyzer not reliably self-scanning." From 8374bb3547897bfec8cae1d4e17e71e2a42e7112 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 2 Jun 2026 03:45:55 +0000 Subject: [PATCH 26/68] Automatic changelog compile [ci skip] --- html/changelogs/Bat-Analyzer.yml | 5 -- html/changelogs/Bat-HardsuitFixes.yml | 8 -- html/changelogs/Bat-RevertOrganPR.yml | 4 - html/changelogs/ElorgRHG-badge-tweak.yml | 13 --- html/changelogs/Greenjoe - newshirts.yml | 58 ------------- html/changelogs/TajChange.yml | 11 --- html/changelogs/archive/2026-06.yml | 86 +++++++++++++++++++ html/changelogs/hazelmouse-nitpicks.yml | 62 ------------- .../hellfirejag-artificier-runtime-fix.yml | 4 - .../hellfirejag-combitool-timer-runtime.yml | 4 - .../hellfirejag-dynamic-light-runtime.yml | 4 - .../hellfirejag-examine-turf-fix.yml | 4 - .../hellfirejag-explosive-implant-runtime.yml | 4 - .../hellfirejag-ipc-cable-fixes.yml | 4 - .../hellfirejag-mob-vars-cleanup.yml | 4 - .../hellfirejag-organ-transplant-runtime.yml | 4 - .../hellfirejag-protolathe-fixes.yml | 4 - ...irejag-sentry-hard-del-tracking-tweaks.yml | 4 - .../hellfirejag-stamina-runtime.yml | 4 - html/changelogs/hellfirejag-vines-bugfix.yml | 4 - html/changelogs/llywelwyn-crewarrival.yml | 4 - .../llywelwyn-self-recharge-modular.yml | 6 -- html/changelogs/mattatlas-ipcreworkfixes.yml | 65 -------------- 23 files changed, 86 insertions(+), 284 deletions(-) delete mode 100644 html/changelogs/Bat-Analyzer.yml delete mode 100644 html/changelogs/Bat-HardsuitFixes.yml delete mode 100644 html/changelogs/Bat-RevertOrganPR.yml delete mode 100644 html/changelogs/ElorgRHG-badge-tweak.yml delete mode 100644 html/changelogs/Greenjoe - newshirts.yml delete mode 100644 html/changelogs/TajChange.yml delete mode 100644 html/changelogs/hazelmouse-nitpicks.yml delete mode 100644 html/changelogs/hellfirejag-artificier-runtime-fix.yml delete mode 100644 html/changelogs/hellfirejag-combitool-timer-runtime.yml delete mode 100644 html/changelogs/hellfirejag-dynamic-light-runtime.yml delete mode 100644 html/changelogs/hellfirejag-examine-turf-fix.yml delete mode 100644 html/changelogs/hellfirejag-explosive-implant-runtime.yml delete mode 100644 html/changelogs/hellfirejag-ipc-cable-fixes.yml delete mode 100644 html/changelogs/hellfirejag-mob-vars-cleanup.yml delete mode 100644 html/changelogs/hellfirejag-organ-transplant-runtime.yml delete mode 100644 html/changelogs/hellfirejag-protolathe-fixes.yml delete mode 100644 html/changelogs/hellfirejag-sentry-hard-del-tracking-tweaks.yml delete mode 100644 html/changelogs/hellfirejag-stamina-runtime.yml delete mode 100644 html/changelogs/hellfirejag-vines-bugfix.yml delete mode 100644 html/changelogs/llywelwyn-crewarrival.yml delete mode 100644 html/changelogs/llywelwyn-self-recharge-modular.yml delete mode 100644 html/changelogs/mattatlas-ipcreworkfixes.yml diff --git a/html/changelogs/Bat-Analyzer.yml b/html/changelogs/Bat-Analyzer.yml deleted file mode 100644 index e2f1bb926b0..00000000000 --- a/html/changelogs/Bat-Analyzer.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Batrachophrenoboocosmomachia -delete-after: True -changes: - - bugfix: "Fixes non-hardsuit health analyzer runtime." - - bugfix: "Fixes hardsuit health analyzer not reliably self-scanning." diff --git a/html/changelogs/Bat-HardsuitFixes.yml b/html/changelogs/Bat-HardsuitFixes.yml deleted file mode 100644 index e00295b975b..00000000000 --- a/html/changelogs/Bat-HardsuitFixes.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: Batrachophrenoboocosmomachia -delete-after: True -changes: - - bugfix: "Adds additional safety checks to hardsuit deployment logic to better handle boot checks." - - bugfix: "Hardsuit Health Analyzer module works again." - - rscadd: "Adds 'Retract All Parts' verb for hardsuits." - - rscdel: "Removes Vitals Scanner module; hardsuits which had this module by default have had it replaced with the Health Analzyer module." - - rscdel: "Removes hardsuit Maneuvering Jets onmob sprites." diff --git a/html/changelogs/Bat-RevertOrganPR.yml b/html/changelogs/Bat-RevertOrganPR.yml deleted file mode 100644 index be7c6a97876..00000000000 --- a/html/changelogs/Bat-RevertOrganPR.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Batrachophrenoboocosmomachia -delete-after: True -changes: - - bugfix: "Reverts #22556 (organ rejection changes)." diff --git a/html/changelogs/ElorgRHG-badge-tweak.yml b/html/changelogs/ElorgRHG-badge-tweak.yml deleted file mode 100644 index 5cb244d2ab6..00000000000 --- a/html/changelogs/ElorgRHG-badge-tweak.yml +++ /dev/null @@ -1,13 +0,0 @@ -# Your name. -author: ElorgRHG - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - imageadd: "Tweaked the sprites for security badge accessories and added belt sprites for them." diff --git a/html/changelogs/Greenjoe - newshirts.yml b/html/changelogs/Greenjoe - newshirts.yml deleted file mode 100644 index 570dcb62342..00000000000 --- a/html/changelogs/Greenjoe - newshirts.yml +++ /dev/null @@ -1,58 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# - (fixes bugs) -# wip -# - (work in progress) -# qol -# - (quality of life) -# soundadd -# - (adds a sound) -# sounddel -# - (removes a sound) -# rscadd -# - (adds a feature) -# rscdel -# - (removes a feature) -# imageadd -# - (adds an image or sprite) -# imagedel -# - (removes an image or sprite) -# spellcheck -# - (fixes spelling or grammar) -# experiment -# - (experimental change) -# balance -# - (balance changes) -# code_imp -# - (misc internal code change) -# refactor -# - (refactors code) -# config -# - (makes a change to the config files) -# admin -# - (makes changes to administrator tools) -# server -# - (miscellaneous changes to server) -################################# - -# Your name. -author: Greenjoe - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "Adds clothing item versions of various undershirt items. They can be selected in the loadout. The undershirt versions of them are removed from the game. Some other undershirts are removed outright." diff --git a/html/changelogs/TajChange.yml b/html/changelogs/TajChange.yml deleted file mode 100644 index f24d08b67d4..00000000000 --- a/html/changelogs/TajChange.yml +++ /dev/null @@ -1,11 +0,0 @@ -author: TheGreyWolf - -delete-after: True - -changes: - - balance: "Tajara brute mods were changed from 10%, 20% and 30% for zhan, base tajara and m'sai to 5%, 10%, 15%." - - balance: "Flashbangs no longer stun tajara unless they have sensitive hearing on." - - rscadd: "The height difference between hharar, m'sai and zhan were tweaked to not be identical." - - rscadd: "Tajara eyes can now extend their vision, somewhat similarly to using a binocular." - - rscadd: "Tajara with sensitive hearing on can now hear whispers and people talking into radios from 2 turfs away." - - bugfix: "Fixed a bug with the autakh farseer eyes causing them to give the improper message if retracted by movement or other sources." diff --git a/html/changelogs/archive/2026-06.yml b/html/changelogs/archive/2026-06.yml index 598ab535592..8ed52b6ef04 100644 --- a/html/changelogs/archive/2026-06.yml +++ b/html/changelogs/archive/2026-06.yml @@ -4,3 +4,89 @@ behind the wall instead of drawing you on top of it. - code_imp: Adds a COMSIG_MOB_LYING_DOWN signal, sent when a mob transitions into lying down. +2026-06-02: + Batrachophrenoboocosmomachia: + - bugfix: 'Reverts #22556 (organ rejection changes).' + - bugfix: Fixes non-hardsuit health analyzer runtime. + - bugfix: Fixes hardsuit health analyzer not reliably self-scanning. + - bugfix: Adds additional safety checks to hardsuit deployment logic to better handle + boot checks. + - bugfix: Hardsuit Health Analyzer module works again. + - rscadd: Adds 'Retract All Parts' verb for hardsuits. + - rscdel: Removes Vitals Scanner module; hardsuits which had this module by default + have had it replaced with the Health Analzyer module. + - rscdel: Removes hardsuit Maneuvering Jets onmob sprites. + ElorgRHG: + - imageadd: Tweaked the sprites for security badge accessories and added belt sprites + for them. + Greenjoe: + - rscadd: Adds clothing item versions of various undershirt items. They can be selected + in the loadout. The undershirt versions of them are removed from the game. Some + other undershirts are removed outright. + Hellfirejag: + - rscdel: Removed a couple of completely vestigial global-ish mob vars to save on + memory and time. + - bugfix: Fixed a runtime error caused by giving any mob spell objects. + - bugfix: Fixed a runtime error caused by shift clicking a turf after logging out + and relogging. + - bugfix: Fixed some situations where an IPC datacable can get 'stuck'. + - bugfix: Fixed a runtime error caused by robotics consoles using a protolathe when + no circuit imprinter is connected. + - bugfix: Fixed a runtime error on objects caused by timers being created on objects + that are already being qdel'ed. + - rscadd: Tweaked the hard delete logging sensitivity to correctly catch and record + typical hard dels to the sentry logs. They will also now provide more usable + information in order to help find where the memory leaks are coming from. + - bugfix: Fixed a runtime error in organ rejection. + - bugfix: Fixed vines spamming runtime errors after they are 'damaged' by a player. + - bugfix: Fixed a runtime error related to the stamina bar. + - bugfix: Fixed a runtime regularly caused by flashlights. + - bugfix: Fixed a runtime error caused by explosive implants lying about being a + radio to the Radio Subsystem. + Llywelwyn: + - bugfix: Fake Crew Arrival Announcement uplink service now works even with an invalid + employer faction. + MattAtlas: + - bugfix: Synthetic external armour now deteriorates with the actual damage taken. + Previously, the calculation led to the armour instead taking less damage the + less it was blocked. + - bugfix: Fixing the synthetic endoskeleton now fixes the permanent paincrit effect + on IPCs. This was caused by the self preservation status being toggled when + the endoskeleton was destroyed, but it was never reset when the endoskeleton + was fixed. + - bugfix: Species components are now added and removed properly, meaning you can + switch from IPC to human and back and forth as a mercenary once more. + - bugfix: The Bishop internal PDA now uses your actual ID on your person as its + own ID. + - bugfix: Fixed the endoskeleton welder repair surgery. You can do this surgery + by using a welder while aiming chest and after having opened the chest fully. + - bugfix: The endoskeleton now takes damage from EMPs as well. This should make + them A LOT more effective against IPCs. + - qol: The posibrain will now show up in diagnostics. + - rscadd: Posibrains can now be destroyed by hitting them. This will completely + kill the IPC's consciousness! + TheGreyWolf: + - balance: Tajara brute mods were changed from 10%, 20% and 30% for zhan, base tajara + and m'sai to 5%, 10%, 15%. + - balance: Flashbangs no longer stun tajara unless they have sensitive hearing on. + - rscadd: The height difference between hharar, m'sai and zhan were tweaked to not + be identical. + - rscadd: Tajara eyes can now extend their vision, somewhat similarly to using a + binocular. + - rscadd: Tajara with sensitive hearing on can now hear whispers and people talking + into radios from 2 turfs away. + - bugfix: Fixed a bug with the autakh farseer eyes causing them to give the improper + message if retracted by movement or other sources. + hazelmouse: + - rscadd: Implemented a large revision of maintenance, in the hope of establishing + a more coherent style to be followed into the future. Expect slightly brighter + lighting and a more consistent use of decals. + - rscadd: Turrets now produce less light. + - rscadd: Telecommunications is no longer lit with blue lighting. + - rscadd: Several dark spots on the map are now better lit, including medical's + GTR and the INDRA chamber in engineering. + - rscadd: Implemented a few very ancillary changes to the Horizon's mapping outside + of maintenance, including adding tiles to all airlocks. + llywelwyn: + - bugfix: Modular energy guns with a reactor now self-recharge from assembly, instead + of only starting after the first shot is fired. diff --git a/html/changelogs/hazelmouse-nitpicks.yml b/html/changelogs/hazelmouse-nitpicks.yml deleted file mode 100644 index 7f982167cb8..00000000000 --- a/html/changelogs/hazelmouse-nitpicks.yml +++ /dev/null @@ -1,62 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# - (fixes bugs) -# wip -# - (work in progress) -# qol -# - (quality of life) -# soundadd -# - (adds a sound) -# sounddel -# - (removes a sound) -# rscadd -# - (adds a feature) -# rscdel -# - (removes a feature) -# imageadd -# - (adds an image or sprite) -# imagedel -# - (removes an image or sprite) -# spellcheck -# - (fixes spelling or grammar) -# experiment -# - (experimental change) -# balance -# - (balance changes) -# code_imp -# - (misc internal code change) -# refactor -# - (refactors code) -# config -# - (makes a change to the config files) -# admin -# - (makes changes to administrator tools) -# server -# - (miscellaneous changes to server) -################################# - -# Your name. -author: hazelmouse - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "Implemented a large revision of maintenance, in the hope of establishing a more coherent style to be followed into the future. Expect slightly brighter lighting and a more consistent use of decals." - - rscadd: "Turrets now produce less light." - - rscadd: "Telecommunications is no longer lit with blue lighting." - - rscadd: "Several dark spots on the map are now better lit, including medical's GTR and the INDRA chamber in engineering." - - rscadd: "Implemented a few very ancillary changes to the Horizon's mapping outside of maintenance, including adding tiles to all airlocks." diff --git a/html/changelogs/hellfirejag-artificier-runtime-fix.yml b/html/changelogs/hellfirejag-artificier-runtime-fix.yml deleted file mode 100644 index adfd63f28c1..00000000000 --- a/html/changelogs/hellfirejag-artificier-runtime-fix.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a runtime error caused by giving any mob spell objects." diff --git a/html/changelogs/hellfirejag-combitool-timer-runtime.yml b/html/changelogs/hellfirejag-combitool-timer-runtime.yml deleted file mode 100644 index 8fbb59129e9..00000000000 --- a/html/changelogs/hellfirejag-combitool-timer-runtime.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a runtime error on objects caused by timers being created on objects that are already being qdel'ed." diff --git a/html/changelogs/hellfirejag-dynamic-light-runtime.yml b/html/changelogs/hellfirejag-dynamic-light-runtime.yml deleted file mode 100644 index 81ef6582cc2..00000000000 --- a/html/changelogs/hellfirejag-dynamic-light-runtime.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a runtime regularly caused by flashlights." diff --git a/html/changelogs/hellfirejag-examine-turf-fix.yml b/html/changelogs/hellfirejag-examine-turf-fix.yml deleted file mode 100644 index 4d6e6dea3e6..00000000000 --- a/html/changelogs/hellfirejag-examine-turf-fix.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a runtime error caused by shift clicking a turf after logging out and relogging." diff --git a/html/changelogs/hellfirejag-explosive-implant-runtime.yml b/html/changelogs/hellfirejag-explosive-implant-runtime.yml deleted file mode 100644 index 12be4df3528..00000000000 --- a/html/changelogs/hellfirejag-explosive-implant-runtime.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a runtime error caused by explosive implants lying about being a radio to the Radio Subsystem." diff --git a/html/changelogs/hellfirejag-ipc-cable-fixes.yml b/html/changelogs/hellfirejag-ipc-cable-fixes.yml deleted file mode 100644 index 4b87bbc629d..00000000000 --- a/html/changelogs/hellfirejag-ipc-cable-fixes.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed some situations where an IPC datacable can get 'stuck'." diff --git a/html/changelogs/hellfirejag-mob-vars-cleanup.yml b/html/changelogs/hellfirejag-mob-vars-cleanup.yml deleted file mode 100644 index d8eb3baeff8..00000000000 --- a/html/changelogs/hellfirejag-mob-vars-cleanup.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - rscdel: "Removed a couple of completely vestigial global-ish mob vars to save on memory and time." diff --git a/html/changelogs/hellfirejag-organ-transplant-runtime.yml b/html/changelogs/hellfirejag-organ-transplant-runtime.yml deleted file mode 100644 index 4d42a97ba84..00000000000 --- a/html/changelogs/hellfirejag-organ-transplant-runtime.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a runtime error in organ rejection." diff --git a/html/changelogs/hellfirejag-protolathe-fixes.yml b/html/changelogs/hellfirejag-protolathe-fixes.yml deleted file mode 100644 index 8b0fe0bdb6b..00000000000 --- a/html/changelogs/hellfirejag-protolathe-fixes.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a runtime error caused by robotics consoles using a protolathe when no circuit imprinter is connected." diff --git a/html/changelogs/hellfirejag-sentry-hard-del-tracking-tweaks.yml b/html/changelogs/hellfirejag-sentry-hard-del-tracking-tweaks.yml deleted file mode 100644 index 29ad7772b7e..00000000000 --- a/html/changelogs/hellfirejag-sentry-hard-del-tracking-tweaks.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - rscadd: "Tweaked the hard delete logging sensitivity to correctly catch and record typical hard dels to the sentry logs. They will also now provide more usable information in order to help find where the memory leaks are coming from." diff --git a/html/changelogs/hellfirejag-stamina-runtime.yml b/html/changelogs/hellfirejag-stamina-runtime.yml deleted file mode 100644 index f1865cb9df4..00000000000 --- a/html/changelogs/hellfirejag-stamina-runtime.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a runtime error related to the stamina bar." diff --git a/html/changelogs/hellfirejag-vines-bugfix.yml b/html/changelogs/hellfirejag-vines-bugfix.yml deleted file mode 100644 index ff64a418ccf..00000000000 --- a/html/changelogs/hellfirejag-vines-bugfix.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed vines spamming runtime errors after they are 'damaged' by a player." diff --git a/html/changelogs/llywelwyn-crewarrival.yml b/html/changelogs/llywelwyn-crewarrival.yml deleted file mode 100644 index 348d8a48c3a..00000000000 --- a/html/changelogs/llywelwyn-crewarrival.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Llywelwyn -delete-after: True -changes: - - bugfix: "Fake Crew Arrival Announcement uplink service now works even with an invalid employer faction." diff --git a/html/changelogs/llywelwyn-self-recharge-modular.yml b/html/changelogs/llywelwyn-self-recharge-modular.yml deleted file mode 100644 index 0ca2ce76226..00000000000 --- a/html/changelogs/llywelwyn-self-recharge-modular.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: llywelwyn - -delete-after: True - -changes: - - bugfix: "Modular energy guns with a reactor now self-recharge from assembly, instead of only starting after the first shot is fired." diff --git a/html/changelogs/mattatlas-ipcreworkfixes.yml b/html/changelogs/mattatlas-ipcreworkfixes.yml deleted file mode 100644 index fd0a6f31a46..00000000000 --- a/html/changelogs/mattatlas-ipcreworkfixes.yml +++ /dev/null @@ -1,65 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# - (fixes bugs) -# wip -# - (work in progress) -# qol -# - (quality of life) -# soundadd -# - (adds a sound) -# sounddel -# - (removes a sound) -# rscadd -# - (adds a feature) -# rscdel -# - (removes a feature) -# imageadd -# - (adds an image or sprite) -# imagedel -# - (removes an image or sprite) -# spellcheck -# - (fixes spelling or grammar) -# experiment -# - (experimental change) -# balance -# - (balance changes) -# code_imp -# - (misc internal code change) -# refactor -# - (refactors code) -# config -# - (makes a change to the config files) -# admin -# - (makes changes to administrator tools) -# server -# - (miscellaneous changes to server) -################################# - -# Your name. -author: MattAtlas - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Synthetic external armour now deteriorates with the actual damage taken. Previously, the calculation led to the armour instead taking less damage the less it was blocked." - - bugfix: "Fixing the synthetic endoskeleton now fixes the permanent paincrit effect on IPCs. This was caused by the self preservation status being toggled when the endoskeleton was destroyed, but it was never reset when the endoskeleton was fixed." - - bugfix: "Species components are now added and removed properly, meaning you can switch from IPC to human and back and forth as a mercenary once more." - - bugfix: "The Bishop internal PDA now uses your actual ID on your person as its own ID." - - bugfix: "Fixed the endoskeleton welder repair surgery. You can do this surgery by using a welder while aiming chest and after having opened the chest fully." - - bugfix: "The endoskeleton now takes damage from EMPs as well. This should make them A LOT more effective against IPCs." - - qol: "The posibrain will now show up in diagnostics." - - rscadd: "Posibrains can now be destroyed by hitting them. This will completely kill the IPC's consciousness!" From 667e8d39845586116ffa9e4f0f96705177c8ef7c Mon Sep 17 00:00:00 2001 From: Matt Atlas Date: Tue, 2 Jun 2026 19:06:59 +0200 Subject: [PATCH 27/68] Gives admins the storyteller Narrate Panel. (#22551) As per title --------- Co-authored-by: Matt Atlas --- code/modules/admin/admin.dm | 7 +++ code/modules/admin/admin_verbs.dm | 4 +- code/modules/nano/modules/narrate_panel.dm | 21 +++---- .../mattatlas-adminstorynarrate.yml | 58 +++++++++++++++++++ 4 files changed, 79 insertions(+), 11 deletions(-) create mode 100644 html/changelogs/mattatlas-adminstorynarrate.yml diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 285bc8ea8ac..86bc426af60 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1453,3 +1453,10 @@ var/global/enabled_spooking = 0 to_world(FONT_LARGE(EXAMINE_BLOCK_ODYSSEY(SPAN_NOTICE("The scenario canonicity has been changed to [SPAN_BOLD(canonicity)] by an administrator.")))) log_and_message_admins("has set the Odyssey canonicity to [canonicity]", usr) feedback_add_details("admin_verb","SEOC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/admins/proc/open_narrate_panel() + set category = "Special Verbs.Narration/Messaging" + set name = "Narrate Panel" + + var/datum/tgui_module/narrate_panel/NP = new /datum/tgui_module/narrate_panel(usr) + NP.ui_interact(usr) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 080c60966ce..528a490c641 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -106,7 +106,8 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list( /client/proc/toggle_aooc, /client/proc/force_away_mission, /client/proc/alooc, - /client/proc/create_portal + /client/proc/create_portal, + /datum/admins/proc/open_narrate_panel )) GLOBAL_LIST_INIT(admin_verbs_ban, list( @@ -430,6 +431,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/force_away_mission, /client/proc/profiler_start, /client/proc/create_portal, + /datum/admins/proc/open_narrate_panel )) GLOBAL_LIST_INIT(admin_verbs_mod, list( diff --git a/code/modules/nano/modules/narrate_panel.dm b/code/modules/nano/modules/narrate_panel.dm index 03bc127bc02..6f91eea21eb 100644 --- a/code/modules/nano/modules/narrate_panel.dm +++ b/code/modules/nano/modules/narrate_panel.dm @@ -16,49 +16,50 @@ if(.) return - var/mob/abstract/ghost/ghost = ui.user - if(!istype(ghost)) + var/mob/abstract/ghost/narrate_user = ui.user + var/is_admin = check_rights(R_ADMIN, user = ui.user) + if(!istype(narrate_user) && !is_admin) return FALSE if(action == "narrate") var/narrate_text = sanitizeSafe(params["narrate_text"]) if(!length(narrate_text)) - to_chat(ghost, SPAN_WARNING("No text was supplied!")) + to_chat(narrate_user, SPAN_WARNING("No text was supplied!")) return FALSE var/narrate_style = params["narrate_style"] if(!narrate_style) - to_chat(ghost, SPAN_WARNING("No text style was supplied!")) + to_chat(narrate_user, SPAN_WARNING("No text style was supplied!")) return FALSE var/narrate_size = text2num(params["narrate_size"]) if(!isnum(narrate_size)) - to_chat(ghost, SPAN_WARNING("No text size was supplied!")) + to_chat(narrate_user, SPAN_WARNING("No text size was supplied!")) return FALSE var/narrate_range = text2num(params["narrate_range"]) if(!isnum(narrate_range)) - to_chat(ghost, SPAN_WARNING("No narrate range was supplied!")) + to_chat(narrate_user, SPAN_WARNING("No narrate range was supplied!")) return FALSE var/narrate_location = params["narrate_location"] if(!narrate_location) - to_chat(ghost, SPAN_WARNING("No narrate location was supplied!")) + to_chat(narrate_user, SPAN_WARNING("No narrate location was supplied!")) return FALSE var/list/mobs_to_message = list() switch(narrate_location) if("View") - for(var/mob/M in get_hearers_in_view(narrate_range, ghost)) + for(var/mob/M in get_hearers_in_view(narrate_range, narrate_user)) mobs_to_message |= M if("Range") - for(var/mob/M in get_hearers_in_range(narrate_range, ghost)) + for(var/mob/M in get_hearers_in_range(narrate_range, narrate_user)) mobs_to_message |= M if("Z-Level") for(var/mob/M in GLOB.player_list) - if(GET_Z(M) == ghost.z) + if(GET_Z(M) == narrate_user.z) mobs_to_message |= M if("Global") diff --git a/html/changelogs/mattatlas-adminstorynarrate.yml b/html/changelogs/mattatlas-adminstorynarrate.yml new file mode 100644 index 00000000000..2f6da3b52de --- /dev/null +++ b/html/changelogs/mattatlas-adminstorynarrate.yml @@ -0,0 +1,58 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: MattAtlas + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - admin: "Added the Storyteller narrate panel for admins." From edb5889ebed25998f359cddfe36fc6c82df8e583 Mon Sep 17 00:00:00 2001 From: FenodyreeAv Date: Tue, 2 Jun 2026 21:36:30 +0100 Subject: [PATCH 28/68] Fixes Longbow shells exploding when mechs pick them up (#22580) Fixes #22578 Longbow attackby now calls it's parent, which made them explode because mech clamps are more than force 10. --- code/modules/overmap/ship_weaponry/_ship_ammunition.dm | 7 +++++-- html/changelogs/LongbowMechFix-Fenodyree.yml | 7 +++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/LongbowMechFix-Fenodyree.yml diff --git a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm index b55b125dd2b..5487794a2d7 100644 --- a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm +++ b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm @@ -66,8 +66,11 @@ /obj/item/ship_ammunition/attackby(obj/item/attacking_item, mob/user) if(attacking_item.force > 10 && (ammunition_flags & SHIP_AMMO_FLAG_VERY_FRAGILE)) - log_and_message_admins("[user] has caused the cookoff of [src] by attacking it with [attacking_item]!", user) - cookoff(FALSE) + if(istype(attacking_item, /obj/item/mecha_equipment/clamp)) + return ..() + else + log_and_message_admins("[user] has caused the cookoff of [src] by attacking it with [attacking_item]!", user) + cookoff(FALSE) else if(attacking_item.tool_behaviour == TOOL_PEN) var/obj/item/pen/P = attacking_item diff --git a/html/changelogs/LongbowMechFix-Fenodyree.yml b/html/changelogs/LongbowMechFix-Fenodyree.yml new file mode 100644 index 00000000000..a50080c7429 --- /dev/null +++ b/html/changelogs/LongbowMechFix-Fenodyree.yml @@ -0,0 +1,7 @@ +author: Fenodyree + +delete-after: True + +changes: + - bugfix: "Fixes Longbow shells exploding when mechs pick them up." + From 9c74683b1ff410c36d2b6bd83a44d73d18b96a5f Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 3 Jun 2026 03:55:17 +0000 Subject: [PATCH 29/68] Automatic changelog compile [ci skip] --- html/changelogs/LongbowMechFix-Fenodyree.yml | 7 --- html/changelogs/archive/2026-06.yml | 5 ++ .../mattatlas-adminstorynarrate.yml | 58 ------------------- 3 files changed, 5 insertions(+), 65 deletions(-) delete mode 100644 html/changelogs/LongbowMechFix-Fenodyree.yml delete mode 100644 html/changelogs/mattatlas-adminstorynarrate.yml diff --git a/html/changelogs/LongbowMechFix-Fenodyree.yml b/html/changelogs/LongbowMechFix-Fenodyree.yml deleted file mode 100644 index a50080c7429..00000000000 --- a/html/changelogs/LongbowMechFix-Fenodyree.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Fenodyree - -delete-after: True - -changes: - - bugfix: "Fixes Longbow shells exploding when mechs pick them up." - diff --git a/html/changelogs/archive/2026-06.yml b/html/changelogs/archive/2026-06.yml index 8ed52b6ef04..d65211af8d1 100644 --- a/html/changelogs/archive/2026-06.yml +++ b/html/changelogs/archive/2026-06.yml @@ -90,3 +90,8 @@ llywelwyn: - bugfix: Modular energy guns with a reactor now self-recharge from assembly, instead of only starting after the first shot is fired. +2026-06-03: + Fenodyree: + - bugfix: Fixes Longbow shells exploding when mechs pick them up. + MattAtlas: + - admin: Added the Storyteller narrate panel for admins. diff --git a/html/changelogs/mattatlas-adminstorynarrate.yml b/html/changelogs/mattatlas-adminstorynarrate.yml deleted file mode 100644 index 2f6da3b52de..00000000000 --- a/html/changelogs/mattatlas-adminstorynarrate.yml +++ /dev/null @@ -1,58 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# - (fixes bugs) -# wip -# - (work in progress) -# qol -# - (quality of life) -# soundadd -# - (adds a sound) -# sounddel -# - (removes a sound) -# rscadd -# - (adds a feature) -# rscdel -# - (removes a feature) -# imageadd -# - (adds an image or sprite) -# imagedel -# - (removes an image or sprite) -# spellcheck -# - (fixes spelling or grammar) -# experiment -# - (experimental change) -# balance -# - (balance changes) -# code_imp -# - (misc internal code change) -# refactor -# - (refactors code) -# config -# - (makes a change to the config files) -# admin -# - (makes changes to administrator tools) -# server -# - (miscellaneous changes to server) -################################# - -# Your name. -author: MattAtlas - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - admin: "Added the Storyteller narrate panel for admins." From 7b0974dae35d55c794071ebfd0adfbfadb03043c Mon Sep 17 00:00:00 2001 From: hazelrat <83198434+hazelrat@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:14:34 +0100 Subject: [PATCH 30/68] Removes an erroneous scrubber (#22579) This demon hid under a disposals tube. It is exorcised. --- html/changelogs/hazelmouse-demon.yml | 58 ++++++++++++++++++++++++++++ maps/sccv_horizon/sccv_horizon.dmm | 12 +----- 2 files changed, 59 insertions(+), 11 deletions(-) create mode 100644 html/changelogs/hazelmouse-demon.yml diff --git a/html/changelogs/hazelmouse-demon.yml b/html/changelogs/hazelmouse-demon.yml new file mode 100644 index 00000000000..f82aada4f67 --- /dev/null +++ b/html/changelogs/hazelmouse-demon.yml @@ -0,0 +1,58 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: hazelmouse + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Removed an erroneous scrubber in the bar." diff --git a/maps/sccv_horizon/sccv_horizon.dmm b/maps/sccv_horizon/sccv_horizon.dmm index 7b790f1d712..89be93f03e4 100644 --- a/maps/sccv_horizon/sccv_horizon.dmm +++ b/maps/sccv_horizon/sccv_horizon.dmm @@ -118593,16 +118593,6 @@ /obj/structure/machinery/portable_atmospherics/canister/empty/carbon_dioxide, /turf/simulated/floor/plating, /area/horizon/engineering/reactor/indra/office) -"pvs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/spline/fancy/wood, -/obj/structure/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/horizon/service/bar) "pvw" = ( /obj/effect/floor_decal/industrial/warning{ dir = 4 @@ -282285,7 +282275,7 @@ ejL ezA wUG pRL -pvs +eGN faY fui jrl From 8f9c3f6e8273c79b81f1d9221d0778cf4cc8b4c5 Mon Sep 17 00:00:00 2001 From: lew <82828093+Llywelwyn@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:14:36 +0100 Subject: [PATCH 31/68] Fixes colour preview chips in character setup (#22576) fixes #22289 - bugfix: "Colour chips in character setup are correctly coloured again." this only worked previously because byond's ie version was so old it didn't care, afaik also the circles in the loadout i just didnt get a picture image --- code/modules/client/preference_setup/loadout/gear_tweaks.dm | 4 ++-- code/modules/client/preference_setup/preference_setup.dm | 2 +- html/changelogs/llywelwyn-loadout-colour-preview.yml | 4 ++++ 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/llywelwyn-loadout-colour-preview.yml diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 998ac37606b..825bbb91554 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -58,7 +58,7 @@ Color adjustment ..() /datum/gear_tweak/color/get_contents(var/metadata) - return "Color: " + return "Color: " /datum/gear_tweak/color/get_default() return valid_colors ? valid_colors[1] : COLOR_GRAY @@ -104,7 +104,7 @@ Alpha adjustment GLOBAL_DATUM_INIT(gear_tweak_accent_color, /datum/gear_tweak/color/accent, new()) /datum/gear_tweak/color/accent/get_contents(var/metadata) - return "Accent Color: " + return "Accent Color: " /datum/gear_tweak/color/accent/tweak_item(var/obj/item/I, var/metadata, var/mob/living/carbon/human/H) if(valid_colors && !(metadata in valid_colors)) diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm index 46f4ef5d959..e677108ab8b 100644 --- a/code/modules/client/preference_setup/preference_setup.dm +++ b/code/modules/client/preference_setup/preference_setup.dm @@ -9,7 +9,7 @@ #define SQL_PREFERENCES 0x2 // General-purpose helper for drawing a colored box. -#define HTML_RECT(color) " 

     " +#define HTML_RECT(color) " 
     " // A bit of a hack to allow unit testing of category items. #ifdef UNIT_TEST diff --git a/html/changelogs/llywelwyn-loadout-colour-preview.yml b/html/changelogs/llywelwyn-loadout-colour-preview.yml new file mode 100644 index 00000000000..24f6e683bfc --- /dev/null +++ b/html/changelogs/llywelwyn-loadout-colour-preview.yml @@ -0,0 +1,4 @@ +author: Llywelwyn +delete-after: True +changes: + - bugfix: "Colour chips in character setup are correctly coloured again." From 7799ea735509df3f7ddf0b2319a4ec7006e93bcc Mon Sep 17 00:00:00 2001 From: lew <82828093+Llywelwyn@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:15:08 +0100 Subject: [PATCH 32/68] Probably fixes most of the random map test failures (#22571) ran tests on a loop for like 2 hours while i was doin bits and had no failures. granted this one will immediately fail for some other indiscernible reason im sure 1. generate_landing() creates a clearing landmark which has a late_initialize() to qdel anything it overlaps with. usually it doesn't overlap with things, but if there's a failure to find an appropriate landing site, it will just pop it down anywhere. this means it happens significantly more on more compact sites, like the listening outpost which seems to fail frequently 2. test runs before gc tick so qdelled stuff has a null location and is still found `in world` 3. tests loop for `door in world` and find doors at a null location, which obviously has a null turf, so the test fails 4. in the firedoor test this causes a runtime too because of a missing assertion there are probably more reasons map tests fail given they've been failing for years but this seems to fix a major cause of them - code_imp: "Door tests skip qdeleted doors, so they should no longer intermittently fail when landing zone generation clears a ruin." --- code/unit_tests/map_tests.dm | 5 +++++ html/changelogs/llywelwyn-maptest-deleted-doors.yml | 4 ++++ 2 files changed, 9 insertions(+) create mode 100644 html/changelogs/llywelwyn-maptest-deleted-doors.yml diff --git a/code/unit_tests/map_tests.dm b/code/unit_tests/map_tests.dm index 017d0678876..178c3768f96 100644 --- a/code/unit_tests/map_tests.dm +++ b/code/unit_tests/map_tests.dm @@ -159,6 +159,8 @@ var/checks = 0 var/failed_checks = 0 for(var/obj/structure/machinery/door/airlock/A in world) + if(QDELETED(A)) + continue var/turf/T = get_turf(A) checks++ TEST_ASSERT_NOTNULL(T, "A turf does not exist under the door at [A.x],[A.y],[A.z]") @@ -180,8 +182,11 @@ var/checks = 0 var/failed_checks = 0 for(var/obj/structure/machinery/door/firedoor/F in world) + if(QDELETED(F)) + continue var/turf/T = get_turf(F) checks++ + TEST_ASSERT_NOTNULL(T, "A turf does not exist under the firedoor at [F.x],[F.y],[F.z]") var/firelock_increment = 0 for(var/obj/structure/machinery/door/firedoor/FD in T) firelock_increment += 1 diff --git a/html/changelogs/llywelwyn-maptest-deleted-doors.yml b/html/changelogs/llywelwyn-maptest-deleted-doors.yml new file mode 100644 index 00000000000..7d15800d332 --- /dev/null +++ b/html/changelogs/llywelwyn-maptest-deleted-doors.yml @@ -0,0 +1,4 @@ +author: Llywelwyn +delete-after: True +changes: + - code_imp: "Door tests skip qdeleted doors, so they should no longer intermittently fail when landing zone generation clears a ruin." From 201592f6bd254400f04b23075eff91fec3fc0dbe Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 3 Jun 2026 11:15:56 -0400 Subject: [PATCH 33/68] Mob Destroy Refactoring (#22573) Refactoring the entire destroy proc path from Mob Human all the way down to Atom while trying to find the causes for the damn mob human hard deletes. This PR comprehensively reorganizes every single stray snowflake var used by /atom/ all the way to /mob/living/carbon/human, and makes sure that every var that COULD store a reference, is now cleared during the entirety of the Mob Destroy() parent hierarchy. This may very well be the end of the lag war. In total, I've hunted down and cleared 39 hanging references between /atom and /mob/living/carbon/human --------- Signed-off-by: VMSolidus --- code/ZAS/Airflow.dm | 6 - code/ZAS/Phoron.dm | 2 - code/__HELPERS/unsorted.dm | 5 - code/_onclick/click.dm | 4 - code/_onclick/click_handling.dm | 9 -- code/_onclick/hud/hud.dm | 56 ++++---- code/_onclick/hud/screen_objects.dm | 4 +- code/controllers/subsystems/job.dm | 3 - code/controllers/subsystems/mob_ai.dm | 3 - .../controllers/subsystems/virtual_reality.dm | 5 - code/datums/langchat/langchat.dm | 11 -- code/game/atom/_atom.dm | 28 +++- code/game/atoms_movable.dm | 11 +- code/game/gamemodes/cult/cultify/mob.dm | 5 - .../endgame/supermatter_cascade/portal.dm | 5 - .../gamemodes/technomancer/instability.dm | 7 - code/game/objects/effects/effect_system.dm | 4 - code/game/objects/objs.dm | 9 ++ code/modules/admin/admin_attack_log.dm | 4 - code/modules/client/client_color.dm | 5 - .../client/preference_setup/origin/origin.dm | 4 - .../spacesuits/rig/modules/computer.dm | 3 - code/modules/detectivework/tools/rag.dm | 8 -- code/modules/emotes/definitions/_mob.dm | 4 - .../modules/ghostroles/spawner/human/human.dm | 4 - code/modules/hallucinations/mob.dm | 4 - code/modules/mob/abstract/freelook/eye.dm | 3 - code/modules/mob/abstract/ghost/ghost.dm | 3 +- .../mob/abstract/ghost/observer/observer.dm | 29 ++-- code/modules/mob/animations.dm | 10 -- code/modules/mob/living/carbon/carbon.dm | 11 +- .../mob/living/carbon/carbon_defines.dm | 9 +- .../mob/living/carbon/human/diona_gestalt.dm | 4 - code/modules/mob/living/carbon/human/human.dm | 36 ++--- .../mob/living/carbon/human/human_defines.dm | 53 +++++-- .../mob/living/carbon/human/human_organs.dm | 7 - code/modules/mob/living/carbon/human/life.dm | 8 -- .../mob/living/carbon/human/update_icons.dm | 4 - code/modules/mob/living/default_language.dm | 3 - code/modules/mob/living/life.dm | 3 - code/modules/mob/living/living.dm | 32 ++--- code/modules/mob/living/living_defines.dm | 24 ++++ code/modules/mob/living/living_maneuvers.dm | 4 - code/modules/mob/login.dm | 3 - code/modules/mob/mob.dm | 132 ++++++++++++------ code/modules/mob/mob_defines.dm | 79 +++++++++++ code/modules/multiz/movement.dm | 3 - code/modules/nano/nanoexternal.dm | 3 - code/modules/organs/blood.dm | 2 - code/modules/organs/pain.dm | 3 - .../projectiles/targeting/targeting_mob.dm | 7 - code/modules/psionics/mob/mob.dm | 3 - code/modules/radiation/radiation.dm | 4 - .../finds/finds_talkingitem.dm | 3 - code/modules/shareddream/dream_entry.dm | 7 - code/modules/surgery/surgery.dm | 4 +- code/modules/tgui/external.dm | 7 - .../hellfirejag-mob-destroy-refactoring.yml | 12 ++ 58 files changed, 383 insertions(+), 345 deletions(-) create mode 100644 html/changelogs/hellfirejag-mob-destroy-refactoring.yml diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm index 132f34f96b5..766f5810afc 100644 --- a/code/ZAS/Airflow.dm +++ b/code/ZAS/Airflow.dm @@ -2,7 +2,6 @@ Contains helper procs for airflow, handled in /connection_group. */ -/mob/var/tmp/last_airflow_stun = 0 /mob/proc/airflow_stun() if(stat == 2) return 0 @@ -60,11 +59,6 @@ Contains helper procs for airflow, handled in /connection_group. if(4,5) if(n < GLOB.vsc.airflow_medium_pressure) return 0 -/atom/movable/var/tmp/turf/airflow_dest -/atom/movable/var/tmp/airflow_speed = 0 -/atom/movable/var/tmp/airflow_time = 0 -/atom/movable/var/tmp/last_airflow = 0 - /atom/movable/proc/AirflowCanMove(n) return 1 diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm index d554c7a9d33..bb76edb4c62 100644 --- a/code/ZAS/Phoron.dm +++ b/code/ZAS/Phoron.dm @@ -20,8 +20,6 @@ GLOBAL_DATUM_INIT(contamination_overlay, /image, image('icons/effects/contaminat ///Does being in sleeping gas cause you to hallucinate? var/N2O_HALLUCINATION = TRUE -/obj/var/contaminated = 0 - /obj/item/proc/can_contaminate() if(item_flags & ITEM_FLAG_PHORON_GUARD) return FALSE diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 0f1515c4ffd..9fc9da65ddd 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -623,11 +623,6 @@ Turf and target are seperate in case you want to teleport some distance from a t if (progbar) qdel(progbar) -/// Integer. Unique sequential ID from the `do_after` proc used to validate `DO_USER_UNIQUE_ACT` flag checks. -/mob/var/do_unique_user_handle = 0 -/// The mob currently interacting with the atom during a `do_after` timer. Used to validate `DO_TARGET_UNIQUE_ACT` flag checks. -/atom/var/mob/do_unique_target_user - /** * Timed actions involving one mob user and (optionally) one target. * diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index da088571bec..ae783d2aa6a 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -3,10 +3,6 @@ ~Sayu */ -// 1 decisecond click delay (above and beyond mob/next_move) -/mob/var/next_click = 0 - - /** * Before anything else, defer these calls to a per-mobtype handler. This allows us to * remove istype() spaghetti code, but requires the addition of other handler procs to simplify it. diff --git a/code/_onclick/click_handling.dm b/code/_onclick/click_handling.dm index 286905a12e9..5098404d7f6 100644 --- a/code/_onclick/click_handling.dm +++ b/code/_onclick/click_handling.dm @@ -11,15 +11,6 @@ if(!click_handlers) { \ click_handlers += new/datum/click_handler/default(src) \ } -/** - * LAZYLIST (Instances of `/datum/click_handler`). Click handlers for this mob that should intercept and handle click - * calls. - * - * The 'topmost'/'active' click handler for the mob is the handler currently at index `1`. By default, this will be - * `/datum/click_handler/default`. - */ -/mob/var/list/click_handlers - // In the mob code, because otherwise it's a redefinition // /mob/Destroy() // QDEL_LIST(click_handlers) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index b097111884d..14c1882fa69 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -5,11 +5,6 @@ GLOBAL_DATUM_INIT(global_hud, /datum/global_hud, new) GLOBAL_LIST(global_huds) -/datum/hud/var/atom/movable/screen/grab_intent -/datum/hud/var/atom/movable/screen/hurt_intent -/datum/hud/var/atom/movable/screen/disarm_intent -/datum/hud/var/atom/movable/screen/help_intent - /datum/global_hud var/atom/movable/screen/vr_control var/atom/movable/screen/druggy @@ -111,12 +106,11 @@ GLOBAL_LIST(global_huds) O.layer = IMPAIRED_LAYER O.mouse_opacity = MOUSE_OPACITY_TRANSPARENT -/* - The hud datum - Used to show and hide huds for all the different mob types, - including inventories and item quick actions. -*/ - +/** + * The hud datum + * Used to show and hide huds for all the different mob types, + * including inventories and item quick actions. + */ /datum/hud ///The mob that possesses the HUD var/mob/mymob @@ -136,12 +130,21 @@ GLOBAL_LIST(global_huds) ///Boolean, if the action buttons are hidden var/action_buttons_hidden = FALSE + /* + STOP ADDING SNOWFLAKE HUD ELEMENTS LIKE /datum/hud/var/atom/movable/screen/help_intent + IN DIFFERENT FILES ENTIRELY. IF YOU ARE ADDING A NEW HUD ELEMENT TO THIS, PUT IT IN THIS FILE UNDER THIS LIST, + AND INCLUDE A QDEL_NULL() FOR IT IN THE DESTROY PROC. + */ var/atom/movable/screen/blobpwrdisplay var/atom/movable/screen/blobhealthdisplay var/atom/movable/screen/r_hand_hud_object var/atom/movable/screen/l_hand_hud_object var/atom/movable/screen/action_intent var/atom/movable/screen/movement_intent/move_intent + var/atom/movable/screen/grab_intent + var/atom/movable/screen/hurt_intent + var/atom/movable/screen/disarm_intent + var/atom/movable/screen/help_intent var/list/adding var/list/other @@ -177,26 +180,27 @@ GLOBAL_LIST(global_huds) ..() /datum/hud/Destroy() - grab_intent = null - hurt_intent = null - disarm_intent = null - help_intent = null - blobpwrdisplay = null - blobhealthdisplay = null - r_hand_hud_object = null - l_hand_hud_object = null - action_intent = null - move_intent = null - adding = null - other = null - hotkeybuttons = null -// item_action_list = null // ? mymob = null + QDEL_NULL(blobpwrdisplay) + QDEL_NULL(blobhealthdisplay) + QDEL_NULL(r_hand_hud_object) + QDEL_NULL(l_hand_hud_object) + QDEL_NULL(action_intent) + QDEL_NULL(move_intent) + QDEL_NULL(grab_intent) + QDEL_NULL(hurt_intent) + QDEL_NULL(disarm_intent) + QDEL_NULL(help_intent) + + adding?.Cut() + other?.Cut() + QDEL_LIST(hotkeybuttons) QDEL_LIST_ASSOC_VAL(plane_masters) QDEL_LIST_ASSOC_VAL(plane_master_controllers) + QDEL_NULL(hide_actions_toggle) - . = ..() + return ..() /datum/hud/proc/hidden_inventory_update() if(!mymob) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index d3725ee8186..5e8fe70050f 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -26,10 +26,10 @@ /atom/movable/screen/Destroy(force = FALSE) master = null screen_loc = null - if(hud?.mymob?.client) + if(length(hud?.mymob?.client?.screen)) hud.mymob.client.screen -= src hud = null - . = ..() + return ..() /// Screen elements are always on top of the players screen and don't move so yes they are adjacent /atom/movable/screen/Adjacent(atom/neighbor, atom/target, atom/movable/mover) diff --git a/code/controllers/subsystems/job.dm b/code/controllers/subsystems/job.dm index ae9441b7b63..58f5246fc9e 100644 --- a/code/controllers/subsystems/job.dm +++ b/code/controllers/subsystems/job.dm @@ -410,9 +410,6 @@ SUBSYSTEM_DEF(jobs) Debug("ER/([H]): Completed.") return H -/mob/living/carbon/human - var/tmp/centcomm_despawn_timer - /mob/living/proc/centcomm_timeout() if (!istype(get_area(src), /area/centcom/spawning)) return FALSE diff --git a/code/controllers/subsystems/mob_ai.dm b/code/controllers/subsystems/mob_ai.dm index fff49cc8e96..2f13e380797 100644 --- a/code/controllers/subsystems/mob_ai.dm +++ b/code/controllers/subsystems/mob_ai.dm @@ -66,9 +66,6 @@ SUBSYSTEM_DEF(mob_ai) mutexes -= mob_weakref -/mob - var/thinking_enabled = FALSE - /** * Perform AI logic for a mob, called by the AI subsystem * diff --git a/code/controllers/subsystems/virtual_reality.dm b/code/controllers/subsystems/virtual_reality.dm index 6a818b22028..be73e30bdae 100644 --- a/code/controllers/subsystems/virtual_reality.dm +++ b/code/controllers/subsystems/virtual_reality.dm @@ -55,11 +55,6 @@ SUBSYSTEM_DEF(virtualreality) if(bound && network) bounded[network].Remove(bound) - -/mob - var/mob/living/vr_mob = null // In which mob is our mind - var/mob/living/old_mob = null // Which mob is our old mob - /// Return to original body /mob/proc/body_return() set name = "Return to Body" diff --git a/code/datums/langchat/langchat.dm b/code/datums/langchat/langchat.dm index 213e2c13fe3..12e231581af 100644 --- a/code/datums/langchat/langchat.dm +++ b/code/datums/langchat/langchat.dm @@ -27,17 +27,6 @@ #define langchat_client_enabled(M) (M && M.client && M.client.prefs && (M.client.prefs.toggles_secondary & FLOATING_MESSAGES)) -/* - * Duplicate vars and logic created for untranslated images for the sake of getting an untranslated langchat to display for listeners who do not understand - * the language being spoken. Someone could certainly think of cleaner ways to do this, but for want of a better solution right now, it has been implemented - * in this rote manner to make it easier to strip out in future if it needs replaced. - */ - -/atom/var/image/langchat_image -/atom/var/image/langchat_image_untranslated -/atom/var/list/mob/langchat_listeners -/atom/var/list/mob/langchat_listeners_untranslated - /// Hides the images, if they exist. Do not null the langchat images; they are rotated when the mob is buckled or proned to maintain text orientation. /atom/proc/langchat_drop_images() if(langchat_listeners) diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index 7d222ab3698..a5237effb0f 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -138,19 +138,31 @@ /// This atom's cache of overlays that can only be removed explicitly, like C4. Do not manipulate directly- See SSoverlays. var/list/atom_protected_overlay_cache + /// The mob currently interacting with the atom during a `do_after` timer. Used to validate `DO_TARGET_UNIQUE_ACT` flag checks. + var/mob/do_unique_target_user + + /* + * Duplicate vars and logic created for untranslated images for the sake of getting an untranslated langchat to display for listeners who do not understand + * the language being spoken. Someone could certainly think of cleaner ways to do this, but for want of a better solution right now, it has been implemented + * in this rote manner to make it easier to strip out in future if it needs replaced. + */ + + var/image/langchat_image + var/image/langchat_image_untranslated + var/list/mob/langchat_listeners + var/list/mob/langchat_listeners_untranslated + /atom/Destroy(force) if(opacity) updateVisibility(src) - if(reagents) - QDEL_NULL(reagents) + QDEL_NULL(reagents) // Checking length(overlays) before cutting has significant speed benefits if(length(overlays)) overlays.Cut() - if(light) - QDEL_NULL(light) + QDEL_NULL(light) if(smoothing_flags & SMOOTH_QUEUED) SSicon_smooth.remove_from_queues(src) @@ -167,8 +179,12 @@ // The component is attached to us normaly and will be deleted elsewhere orbiters = null - - . = ..() + do_unique_target_user = null + QDEL_NULL(langchat_image) + QDEL_NULL(langchat_image_untranslated) + langchat_listeners?.Cut() + langchat_listeners_untranslated?.Cut() + return ..() /atom/proc/handle_ricochet(obj/projectile/ricocheting_projectile) var/turf/p_turf = get_turf(ricocheting_projectile) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 681524ddcc3..0d05808d007 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -87,6 +87,11 @@ /// Whether this atom should have its dir automatically changed when it moves. Setting this to FALSE allows for things such as directional windows to retain dir on moving without snowflake code all of the place. var/set_dir_on_move = TRUE + var/tmp/turf/airflow_dest + var/tmp/airflow_speed = 0 + var/tmp/airflow_time = 0 + var/tmp/last_airflow = 0 + /atom/movable/Initialize(mapload, ...) . = ..() update_emissive_blocker() @@ -114,14 +119,11 @@ QDEL_LAZYLIST(contained_mobs) - . = ..() - for(var/movable_content in contents) qdel(movable_content) //Pretend this is moveToNullspace() moveToNullspace() - loc = null //This absolutely must be after moveToNullspace() //We rely on Entered and Exited to manage this list, and the copy of this list that is on any /atom/movable "Containers" @@ -150,6 +152,9 @@ QDEL_NULL(light) QDEL_NULL(static_light) + airflow_dest = null + loc = null + return ..() /atom/movable/proc/moveToNullspace() . = TRUE diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm index 7a303018c70..b519ab7e836 100644 --- a/code/game/gamemodes/cult/cultify/mob.dm +++ b/code/game/gamemodes/cult/cultify/mob.dm @@ -1,8 +1,3 @@ -/mob - //thou shall always be able to see the Geometer of Blood - var/image/narsimage = null - var/image/narglow = null - /mob/proc/cultify() return diff --git a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm index e4f45ab6fe4..1f8f63d9361 100644 --- a/code/game/gamemodes/endgame/supermatter_cascade/portal.dm +++ b/code/game/gamemodes/endgame/supermatter_cascade/portal.dm @@ -54,11 +54,6 @@ spawn (0) AM.singularity_pull(src, src.current_size) - -/mob - //thou shall always be able to see the rift - var/image/riftimage = null - /mob/proc/see_rift(var/obj/singularity/narsie/large/exit/R) var/turf/T_mob = get_turf(src) if((R.z == T_mob.z) && (get_dist(R,T_mob) <= (R.consume_range+10)) && !(R in view(T_mob))) diff --git a/code/game/gamemodes/technomancer/instability.dm b/code/game/gamemodes/technomancer/instability.dm index 9357fefb54f..c8ba4c842d5 100644 --- a/code/game/gamemodes/technomancer/instability.dm +++ b/code/game/gamemodes/technomancer/instability.dm @@ -8,13 +8,6 @@ #define TECHNOMANCER_INSTABILITY_PRECISION 0.1 // Instability is rounded to this. #define TECHNOMANCER_INSTABILITY_MIN_GLOW 10 // When above this number, the entity starts glowing, affecting others. - -/mob/living - atom_flags = CRITICAL_ATOM - var/instability = 0 - var/last_instability = 0 // Used to calculate instability delta. - var/last_instability_event = null // most recent world.time that something bad happened due to instability. - // Proc: adjust_instability() // Parameters: 0 // Description: Does nothing, because inheritance. diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 751f1ed62a0..068eccaa700 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -14,10 +14,6 @@ would spawn and follow the beaker, even if it is carried or thrown. pass_flags = PASSTABLE | PASSGRILLE blocks_emissive = EMISSIVE_BLOCK_GENERIC -/obj/effect/Destroy() - QDEL_NULL(reagents) - return ..() - /datum/effect/effect/system var/number = 3 var/cardinals = 0 diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 2107d72de22..73dbb9594dc 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -108,6 +108,15 @@ var/persistant_objects_expiration_time_days = PERSISTENT_DEFAULT_EXPIRATION_DAYS /* END PERSISTENCE VARS */ + /// for easy reference of talking atoms + var/datum/talking_atom/talking_atom + + /// Whether this object has been contaminated by atmos gasses like chlorine or phoron. + var/contaminated = FALSE + + /// Allow overriding rad resistance. + var/rad_resistance_modifier = 1 + /obj/Initialize(mapload, ...) . = ..() if(maxhealth) diff --git a/code/modules/admin/admin_attack_log.dm b/code/modules/admin/admin_attack_log.dm index e1c1ba975fa..60c835a286b 100644 --- a/code/modules/admin/admin_attack_log.dm +++ b/code/modules/admin/admin_attack_log.dm @@ -1,7 +1,3 @@ -/mob/var/mob/lastattacker = null -/mob/var/mob/lastattacked = null -/mob/var/attack_log = list() - /proc/log_and_message_admins(var/message as text, var/mob/user = usr, var/turf/location) var/turf/T = location ? location : (user ? get_turf(user) : null) if(T) diff --git a/code/modules/client/client_color.dm b/code/modules/client/client_color.dm index d844bada8fb..f7ae91979d9 100644 --- a/code/modules/client/client_color.dm +++ b/code/modules/client/client_color.dm @@ -4,11 +4,6 @@ var/override = FALSE //If set to override we will stop multiplying the moment we get here. NOTE: Priority remains, if your override is on position 4, the other 3 will still have a say. var/disability = FALSE -/mob - var/list/client_colors = list() - - - /* Adds an instance of color_type to the mob's client_colors list color_type - a typepath (subtyped from /datum/client_color) diff --git a/code/modules/client/preference_setup/origin/origin.dm b/code/modules/client/preference_setup/origin/origin.dm index 292fe98f2cf..4dbf1e70907 100644 --- a/code/modules/client/preference_setup/origin/origin.dm +++ b/code/modules/client/preference_setup/origin/origin.dm @@ -1,7 +1,3 @@ -/mob/living/carbon/human - var/singleton/origin_item/culture/culture - var/singleton/origin_item/origin/origin - /datum/category_item/player_setup_item/origin name = "Origin" sort_order = 1 diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index a4f6736deca..dbbb30a26ae 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -25,9 +25,6 @@ module.holder.ui_interact(usr) -/mob - var/get_rig_stats = 0 - /obj/item/rig_module/ai_container name = "IIS module" desc = "An integrated intelligence system module suitable for most hardsuits." diff --git a/code/modules/detectivework/tools/rag.dm b/code/modules/detectivework/tools/rag.dm index c56c604b5d5..70a6b591f14 100644 --- a/code/modules/detectivework/tools/rag.dm +++ b/code/modules/detectivework/tools/rag.dm @@ -1,11 +1,3 @@ -/mob - var/bloody_hands = null - var/datum/weakref/bloody_hands_mob - var/track_footprint = 0 - var/list/feet_blood_DNA - var/track_footprint_type - var/footprint_color - /obj/item/clothing/gloves var/transfer_blood = 0 var/datum/weakref/bloody_hands_mob diff --git a/code/modules/emotes/definitions/_mob.dm b/code/modules/emotes/definitions/_mob.dm index 9e33236aa5f..32b359b13d8 100644 --- a/code/modules/emotes/definitions/_mob.dm +++ b/code/modules/emotes/definitions/_mob.dm @@ -1,7 +1,3 @@ -/mob - var/list/default_emotes = list() - var/list/usable_emotes = list() - /mob/proc/update_emotes(var/skip_sort) usable_emotes.Cut() for(var/emote in default_emotes) diff --git a/code/modules/ghostroles/spawner/human/human.dm b/code/modules/ghostroles/spawner/human/human.dm index 13152e9e5dc..fbbd7971199 100644 --- a/code/modules/ghostroles/spawner/human/human.dm +++ b/code/modules/ghostroles/spawner/human/human.dm @@ -200,7 +200,3 @@ M.ghost_spawner = WEAKREF(src) return M - -/// Used for cryo to free up a slot when a ghost cryos. -/mob/living/carbon/human - var/datum/weakref/ghost_spawner diff --git a/code/modules/hallucinations/mob.dm b/code/modules/hallucinations/mob.dm index c9c9b12e069..cdcefd5cd83 100644 --- a/code/modules/hallucinations/mob.dm +++ b/code/modules/hallucinations/mob.dm @@ -1,7 +1,3 @@ -/mob/living/carbon - var/next_hallucination = 0 //Hallucination spam limit var - var/list/hallucinations = list() //Hallucinations currently affecting the mob. Not to be confused with singular "hallucination" which is a NUM variable like confused/drowsy/eye_blind etc - //Hallucinated Hearing /mob/living/carbon/hear_say(var/message, var/verb = "says", var/datum/language/language, var/alt_name = "",var/italics = 0, var/mob/speaker, var/sound/speech_sound, var/sound_vol) if(hallucination >= 60 && prob(1)) diff --git a/code/modules/mob/abstract/freelook/eye.dm b/code/modules/mob/abstract/freelook/eye.dm index 0e95bf88024..45d637a6955 100644 --- a/code/modules/mob/abstract/freelook/eye.dm +++ b/code/modules/mob/abstract/freelook/eye.dm @@ -122,9 +122,6 @@ return return loc -/mob - var/mob/abstract/eye/eyeobj - /mob/proc/EyeMove(n, direct) if(!eyeobj) return diff --git a/code/modules/mob/abstract/ghost/ghost.dm b/code/modules/mob/abstract/ghost/ghost.dm index d06f26e5afe..21470976270 100644 --- a/code/modules/mob/abstract/ghost/ghost.dm +++ b/code/modules/mob/abstract/ghost/ghost.dm @@ -6,7 +6,7 @@ /// This variable generally controls whether a ghost has restrictions on where it can go or not (ex. if the ghost can bypass holy places). var/has_ghost_restrictions = TRUE /// If the ghost has antagHUD. - var/antagHUD = 0 + var/antagHUD = FALSE /// Necessary for seeing wires. var/obj/item/multitool/ghost_multitool /// The POI we're orbiting. @@ -22,6 +22,7 @@ /mob/abstract/ghost/Destroy() QDEL_NULL(ghost_multitool) + orbiting_ref = null return ..() /mob/abstract/ghost/Topic(href, href_list) diff --git a/code/modules/mob/abstract/ghost/observer/observer.dm b/code/modules/mob/abstract/ghost/observer/observer.dm index 23d974a1f3f..4a29695a996 100644 --- a/code/modules/mob/abstract/ghost/observer/observer.dm +++ b/code/modules/mob/abstract/ghost/observer/observer.dm @@ -22,17 +22,17 @@ /// This variable is set to 1 when you enter the game as an observer. Remains null if you died in the game and are a ghost. Not reliable for admins; they change mobs a lot. var/started_as_observer /// If the ghost has enabled antagHUD. - var/has_enabled_antagHUD = 0 + var/has_enabled_antagHUD = FALSE /// If the ghost has enabled medHUD. - var/medHUD = 0 + var/medHUD = FALSE /// If this is an adminghost. - var/admin_ghosted = 0 + var/admin_ghosted = FALSE /// If this ghost has enabled chat anonymization. - var/anonsay = 0 + var/anonsay = FALSE /// If the ghost can be seen through cult shenanigans. - var/is_manifest = 0 + var/is_manifest = FALSE /// Cooldown for ghost abilities, such as move_item(). - var/ghost_cooldown = 0 + var/ghost_cooldown = FALSE /mob/abstract/ghost/observer/Initialize(mapload, mob/body) . = ..() @@ -87,12 +87,21 @@ src.LoadComponent(/datum/component/health_analyzer/observer) /mob/abstract/ghost/observer/Destroy() - if(client) + // Handling client images + if(client && length(client.images)) for(var/image/I in client.images) - if(I.loc == src) - qdel(I) + // Something deleted the image, clear it and move on. + if (!istype(I) || QDELETED(I)) + client.images -= I + continue + + if(I.loc != src) + continue + + qdel(I) + client.images -= I + QDEL_NULL(hud) - mind = null return ..() /mob/abstract/ghost/observer/proc/initialise_postkey(set_timers = TRUE) diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm index 2a66bc58a38..80c4bba9af9 100644 --- a/code/modules/mob/animations.dm +++ b/code/modules/mob/animations.dm @@ -7,10 +7,6 @@ currently only humans get dizzy value of dizziness ranges from 0 to 1000 below 100 is not dizzy */ - -/mob/var/dizziness = 0//Carbon -/mob/var/is_dizzy = 0 - /mob/proc/make_dizzy(var/amount) if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy return @@ -43,8 +39,6 @@ note dizziness decrements automatically in the mob's Life() proc. client.pixel_y = 0 // jitteriness - copy+paste of dizziness -/mob/var/is_jittery = 0 -/mob/var/jitteriness = 0//Carbon /mob/proc/make_jittery(var/amount) return @@ -69,10 +63,6 @@ note dizziness decrements automatically in the mob's Life() proc. pixel_x = old_x pixel_y = old_y - -//handles up-down floaty effect in space and zero-gravity -/mob/var/is_floating = FALSE - /mob/proc/update_floating() if(anchored || buckled_to) set_floating(FALSE) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index ad677045d20..0354370bb2c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -39,14 +39,19 @@ . = 1 /mob/living/carbon/Destroy() - QDEL_NULL(touching) + species = null + QDEL_NULL(handcuffed) + QDEL_NULL(legcuffed) + QDEL_NULL(op_stage) + chem_doses?.Cut() QDEL_NULL(bloodstr) - QDEL_NULL(dna) + QDEL_NULL(touching) QDEL_NULL(breathing) // Delete and null a direct list of references to our internal organs (such as brain, lungs, heart, etc). QDEL_LIST(internal_organs) // Null an Associative list of String = Reference to the same organs. - internal_organs_by_name = null + internal_organs_by_name?.Cut() + QDEL_LIST(hallucinations) return ..() /mob/living/carbon/rejuvenate() diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 5835789e1e1..12f41aec587 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -50,7 +50,9 @@ /// Map organ names to organs. var/list/organs_by_name = list() - /// So internal organs have less ickiness too. + /// List of references to all internal organs + var/list/internal_organs = list() + /// Associative List of "name" = ref var/list/internal_organs_by_name = list() var/list/stasis_sources = list() @@ -58,3 +60,8 @@ /// For special cases where something permanently removes a mob's ability to feel pain. var/pain_immune = FALSE + /// Hallucination spam limit var + var/next_hallucination = 0 + /// Hallucinations currently affecting the mob. Not to be confused with singular "hallucination" which is a NUM variable like confused/drowsy/eye_blind etc + var/list/hallucinations = list() + var/shock_stage = 0 diff --git a/code/modules/mob/living/carbon/human/diona_gestalt.dm b/code/modules/mob/living/carbon/human/diona_gestalt.dm index 1f6085d19e0..ed09e03829e 100644 --- a/code/modules/mob/living/carbon/human/diona_gestalt.dm +++ b/code/modules/mob/living/carbon/human/diona_gestalt.dm @@ -7,10 +7,6 @@ #define COLD_DAMAGE_LEVEL_2 1.5 #define COLD_DAMAGE_LEVEL_3 3 -/mob/living/carbon/human - var/datum/dionastats/DS - - /mob/living/carbon/human/proc/setup_gestalt() composition_reagent = /singleton/reagent/nutriment //Dionae aren't animals, so eating them doesn't give animal protein setup_dionastats() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e706b97817f..abbf39d2328 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -4,21 +4,12 @@ voice_name = "unknown" icon = 'icons/mob/human.dmi' icon_state = "body_m_s" - mob_size = 9 //Based on average weight of a human - - var/pronouns = NEUTER - - /// Used so species that need special items (autoinhalers for vaurca/RMT for offworlders) don't get them twice when they shouldn't. - var/species_items_equipped - - var/list/hud_list[11] - /// To check if we've need to roll for damage on movement while an item is imbedded in us. - var/embedded_flag - /// This is very not good, but it's much much better than calling get_rig() every update_canmove() call. - var/obj/item/rig/wearing_rig - /// Pref holder for the speech bubble style. - var/speech_bubble_type + mob_bump_flag = HUMAN + mob_push_flags = ~HEAVY + mob_swap_flags = ~HEAVY + light_system = MOVABLE_LIGHT + blocks_emissive = EMISSIVE_BLOCK_NONE /mob/living/carbon/human/Initialize(mapload, var/new_species = null) if(!dna) @@ -105,7 +96,7 @@ set_default_attack(species.unarmed_attacks[1]) /mob/living/carbon/human/Destroy(force) - ghost_spawner = null + QDEL_NULL(ghost_spawner) //Srom (Shared Dreaming) srom_pulled_by = null @@ -118,9 +109,9 @@ // It's actually the set of all Limbs (left arm, head, leg leg, etc) we have. We Qdel and null the set of all limbs, which is unique to /human. QDEL_LIST(organs) // Then also null the associative list of those same limbs, which contains the same references. - organs_by_name = null - bad_internal_organs = null - bad_external_organs = null + QDEL_LIST_ASSOC_VAL(organs_by_name) + bad_internal_organs?.Cut() + bad_external_organs?.Cut() QDEL_NULL(vessel) @@ -150,13 +141,14 @@ //Yes this is shit, but since someone had the brillant mind to use images for this, we must suffer if(length(hud_list)) for(var/image/hud_overlay/an_hud_overlay in hud_list) - if(an_hud_overlay.owner) - an_hud_overlay.owner.client?.images -= an_hud_overlay + if(length(an_hud_overlay.owner?.client?.images)) + an_hud_overlay.owner.client.images -= an_hud_overlay an_hud_overlay.owner = null qdel(an_hud_overlay) - hud_list = null + hud_list.Cut() - . = ..() + wearing_rig = null + return ..() /mob/living/carbon/human/can_devour(atom/movable/victim, var/silent = FALSE) if(!should_have_organ(BP_STOMACH)) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index fc14e29f070..1b8abf87e12 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -1,8 +1,4 @@ /mob/living/carbon/human - light_system = MOVABLE_LIGHT - - blocks_emissive = EMISSIVE_BLOCK_NONE - // Tail Style var/tail_style = null @@ -103,10 +99,6 @@ var/list/gunshot_residue var/pulling_punches // Are you trying not to hurt your opponent? - mob_bump_flag = HUMAN - mob_push_flags = ~HEAVY - mob_swap_flags = ~HEAVY - var/flash_protection = 0 // Total level of flash protection var/equipment_tint_total = 0 // Total level of visualy impairing items var/equipment_darkness_modifier // Darkvision modifier from equipped items @@ -134,3 +126,48 @@ var/triage_tag = TRIAGE_NONE var/lobotomized = FALSE //additional check for isAdvancedToolUser that can be set manually by things + + var/list/organs = list() + + ///Container for blood and BLOOD ONLY. Do not transfer other chems here. + var/datum/reagents/vessel + + /// Used for cryo to free up a slot when a ghost cryos. + var/datum/weakref/ghost_spawner + + var/next_stance_collapse = 0 + + var/datum/dionastats/DS + + var/oxygen_alert = 0 + var/phoron_alert = 0 + var/co2_alert = 0 + var/fire_alert = 0 + var/pressure_alert = 0 + var/temperature_alert = 0 + + var/datum/weakref/srom_pulled_by + var/datum/weakref/srom_pulling + + /// Our set of "raw" overlays that can be modified, but cannot be directly applied to the mob without preprocessing. + var/list/overlays_raw[TOTAL_LAYERS] + /// store what the body last looked like, so we only have to update it if something changed + var/previous_damage_appearance + + var/singleton/origin_item/culture/culture + var/singleton/origin_item/origin/origin + + var/tmp/centcomm_despawn_timer + + var/pronouns = NEUTER + + /// Used so species that need special items (autoinhalers for vaurca/RMT for offworlders) don't get them twice when they shouldn't. + var/species_items_equipped + + var/list/hud_list[11] + /// To check if we've need to roll for damage on movement while an item is imbedded in us. + var/embedded_flag + /// This is very not good, but it's much much better than calling get_rig() every update_canmove() call. + var/obj/item/rig/wearing_rig + /// Pref holder for the speech bubble style. + var/speech_bubble_type diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index d16844dd3fd..5b69458befd 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -4,10 +4,6 @@ eyes.update_colour() regenerate_icons() -/mob/living/carbon/var/list/internal_organs = list() -/mob/living/carbon/var/shock_stage = 0 -/mob/living/carbon/human/var/list/organs = list() - /mob/living/carbon/human/proc/recheck_bad_external_organs() var/damage_this_tick = getToxLoss() var/arterial_check = 0 @@ -57,9 +53,6 @@ if (W.infection_check()) W.germ_level += 1 -/mob/living/carbon/human - var/next_stance_collapse = 0 - /mob/living/carbon/human/proc/handle_stance() // Don't need to process any of this if they aren't standing anyways // unless their stance is damaged, and we want to check if they should stay down diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 6945a86f7a5..c830fca13f2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -45,14 +45,6 @@ ///The maximum dose that can be received, above this level all further radiation is taken as damage directly to the body, ignoring armor. Very rapidly fatal. #define RADIATION_MAX_DOSE 1000 -/mob/living/carbon/human - var/oxygen_alert = 0 - var/phoron_alert = 0 - var/co2_alert = 0 - var/fire_alert = 0 - var/pressure_alert = 0 - var/temperature_alert = 0 - /mob/living/carbon/human/Life(seconds_per_tick, times_fired) if (transforming) return diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 8dc14551d51..d4b4ee2e3b2 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -100,10 +100,6 @@ There are several things that need to be remembered: ret.layer = layer return ret -/mob/living/carbon/human - var/list/overlays_raw[TOTAL_LAYERS] // Our set of "raw" overlays that can be modified, but cannot be directly applied to the mob without preprocessing. - var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed - // Updates overlays from overlays_raw. /mob/living/carbon/human/update_icon() if (QDELETED(src)) diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm index f44357ea871..28b082eb80c 100644 --- a/code/modules/mob/living/default_language.dm +++ b/code/modules/mob/living/default_language.dm @@ -1,6 +1,3 @@ -/mob/living - var/datum/language/default_language - /mob/living/verb/set_default_language_verb() set name = "Set Default Language" set category = "IC.Language" diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 69d198e9096..3de7757607b 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -196,9 +196,6 @@ /mob/living/proc/handle_hud_icons_health() return -/mob/living - var/datum/weakref/last_weather - /mob/living/proc/is_outside() var/turf/T = loc return istype(T) && T.is_outside() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index c31ee8eb46d..73f60ce1c45 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -53,9 +53,6 @@ default behaviour is: return TRUE return FALSE -/mob/living - var/tmp/last_push_notif - /mob/living/Collide(atom/movable/target_movable_atom) if(now_pushing || !loc) return @@ -922,19 +919,17 @@ default behaviour is: AddElement(/datum/element/connect_loc, loc_connections) /mob/living/Destroy() + cameraFollow = null + if (length(actions)) + for (var/datum/action/action in actions) + action.Remove(src) + actions -= action - //Aiming overlay + QDEL_NULL(stamina_bar) + QDEL_LIST(auras) + QDEL_NULL(psi) QDEL_NULL(aiming) QDEL_LIST(aimed_at_by) - - //Psi complexus - QDEL_NULL(psi) - - if(vr_mob) - vr_mob = null - if(old_mob) - old_mob = null - //Remove contained mobs if(loc) for(var/mob/M in contents) @@ -943,12 +938,11 @@ default behaviour is: for(var/mob/M in contents) qdel(M) - QDEL_NULL(reagents) - - if(auras) - for(var/a in auras) - remove_aura(a) - + prepared_maneuver = null + available_maneuvers?.Cut() + default_language = null + QDEL_NULL(z_eye) + QDEL_NULL(last_weather) return ..() /mob/living/proc/nervous_system_failure() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 032446b4ad7..e661e1d9b44 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -102,3 +102,27 @@ /// Time since last weather effect var/weather_cooldown_time = 0 + + var/datum/psi_complexus/psi + + ///The obj to overlay on the aim target + var/obj/aiming_overlay/aiming + + ///A list of mobs the target is being aimed at by + var/list/aimed_at_by + + var/singleton/maneuver/prepared_maneuver + var/list/available_maneuvers = list() + + var/datum/language/default_language + + var/atom/movable/z_observer/z_eye + + atom_flags = CRITICAL_ATOM + var/instability = 0 + var/last_instability = 0 // Used to calculate instability delta. + var/last_instability_event = null // most recent world.time that something bad happened due to instability. + + var/datum/weakref/last_weather + + var/tmp/last_push_notif diff --git a/code/modules/mob/living/living_maneuvers.dm b/code/modules/mob/living/living_maneuvers.dm index 75bc69d6bfb..42cc448b7d4 100644 --- a/code/modules/mob/living/living_maneuvers.dm +++ b/code/modules/mob/living/living_maneuvers.dm @@ -1,7 +1,3 @@ -/mob/living - var/singleton/maneuver/prepared_maneuver - var/list/available_maneuvers = list() - /mob/living/begin_falling(var/lastloc, var/below) if(throwing) return diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 1c03b4b14f7..13db1a0ba53 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -25,9 +25,6 @@ message_admins(SPAN_WARNING("Notice:
    [key_name_admin(src)] has the same [matches] as [key_name_admin(M)] (no longer logged in). "), 1) log_access("Notice: [key_name(src)] has the same [matches] as [key_name(M)] (no longer logged in).") -/mob - var/client/my_client // Need to keep track of this ourselves, since by the time Logout() is called the client has already been nulled - /** * Currently marked as SHOULD_NOT_OVERRIDE. * diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c6047f49c92..95aa9ac0709 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1,32 +1,90 @@ /mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game. MOB_STOP_THINKING(src) - // Tell any mobs touching us that they're not pulling us anymore. - stop_pulling() // Delete and null the grab objects that are touching this mob. QDEL_LIST(grabbed_by) GLOB.mob_list -= src GLOB.dead_mob_list -= src GLOB.living_mob_list -= src GLOB.player_list -= src - unset_machine() QDEL_NULL(hud_used) + QDEL_NULL(cells) + QDEL_NULL(flash) + QDEL_NULL(blind) + QDEL_NULL(hands) + QDEL_NULL(pullin) + QDEL_NULL(purged) + QDEL_NULL(internals) + QDEL_NULL(oxygen) + QDEL_NULL(paralysis_indicator) + QDEL_NULL(i_select) + QDEL_NULL(m_select) + QDEL_NULL(toxin) + QDEL_NULL(bodytemp) + QDEL_NULL(healths) + QDEL_NULL(throw_icon) + QDEL_NULL(nutrition_icon) + QDEL_NULL(hydration_icon) + QDEL_NULL(pressure) + QDEL_NULL(damageoverlay) + QDEL_NULL(pain) + QDEL_NULL(item_use_icon) + QDEL_NULL(radio_use_icon) + QDEL_NULL(gun_move_icon) + QDEL_NULL(gun_setting_icon) + QDEL_NULL(unique_action_icon) + QDEL_NULL(toggle_firing_mode) + QDEL_NULL(energy_display) + QDEL_NULL(instability_display) + QDEL_NULL(up_hint) + QDEL_NULL(robot_pain) QDEL_LIST(spell_masters) - remove_screen_obj_references() - if(client) for(var/atom/movable/AM in client.screen) - qdel(AM) + if (!QDELING(AM)) + qdel(AM) client.screen = list() - if (mind) - mind.handle_mob_deletion(src) + mind?.handle_mob_deletion(src) + mind = null - for(var/cc in client_colors) - qdel(cc) + QDEL_NULL(ability_master) + QDEL_NULL(zone_sel) + machine = null - client_colors = null + pulling?.pulledby = null + pulling = null + pullin?.icon_state = "pull0" + pullin = null + + QDEL_LIST(client_colors) + additional_vision_handlers?.Cut() + pinned?.Cut() + QDEL_LIST(embedded) + languages?.Cut() + holo = null + l_hand = null + r_hand = null + back = null + internal = null + s_active = null + wear_mask = null + QDEL_NULL(dna) + QDEL_NULL(LAssailant) + spell_list?.Cut() + lastarea = null + control_object = null + teleop = null + listed_turf = null item_verbs = null + // This is a nested assoc list, which must be cleared outside-in + if (length(progressbars)) + for (var/location in progressbars) + for (var/ref in progressbars[location]) + qdel(ref) + progressbars.Cut() + + QDEL_NULL(typing_indicator) //Added this to prevent nonliving mobs from ghostising //The only non 'living' mobs are: @@ -44,11 +102,21 @@ var/atom/movable/AM = src.loc LAZYREMOVE(AM.contained_mobs, src) - QDEL_NULL(ability_master) - - if(click_handlers) - QDEL_LIST(click_handlers) - + QDEL_LIST(click_handlers) + vr_mob = null + old_mob = null + lastattacker = null + lastattacked = null + QDEL_NULL(pointing_effect) + QDEL_LIST(open_nanouis) + QDEL_LIST(tgui_open_uis) + QDEL_NULL(narsimage) + QDEL_NULL(narglow) + QDEL_NULL(riftimage) + QDEL_NULL(bloody_hands_mob) + QDEL_NULL(eyeobj) + QDEL_NULL(bg) + my_client = null return ..() /mob/New() @@ -56,32 +124,6 @@ GenerateTag() return ..() -/mob/proc/remove_screen_obj_references() - flash = null - blind = null - hands = null - pullin = null - purged = null - internals = null - oxygen = null - i_select = null - m_select = null - toxin = null - bodytemp = null - healths = null - throw_icon = null - nutrition_icon = null - hydration_icon = null - pressure = null - damageoverlay = null - pain = null - item_use_icon = null - gun_move_icon = null - gun_setting_icon = null - spell_masters = null - zone_sel = null - -/mob/var/should_add_to_mob_list = TRUE /mob/Initialize(mapload) . = ..() if(should_add_to_mob_list) @@ -400,8 +442,6 @@ if(!. && iscarbon(loc) && isturf(loc.loc)) // We're inside someone, let us examine still. return TRUE -/mob/var/obj/effect/decal/point/pointing_effect = null//Spam control, can only point when the previous pointer qdels - /mob/verb/pointed(atom/A as mob|obj|turf in view()) set name = "Point To" set category = "Object" @@ -730,8 +770,8 @@ if(pulling) pulling.pulledby = null pulling = null - if(pullin) - pullin.icon_state = "pull0" + if(pullin) + pullin.icon_state = "pull0" /mob/proc/start_pulling(var/atom/movable/AM) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 5e4a78c799c..b908ced793a 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -276,3 +276,82 @@ /// A assoc lazylist of to_chat notifications, key = string message, value = world time integer var/list/message_notifications + + var/mob/living/vr_mob = null // In which mob is our mind + var/mob/living/old_mob = null // Which mob is our old mob + + /** + * LAZYLIST (Instances of `/datum/click_handler`). Click handlers for this mob that should intercept and handle click + * calls. + * + * The 'topmost'/'active' click handler for the mob is the handler currently at index `1`. By default, this will be + * `/datum/click_handler/default`. + */ + var/list/click_handlers + + var/should_add_to_mob_list = TRUE + + /// Integer. Unique sequential ID from the `do_after` proc used to validate `DO_USER_UNIQUE_ACT` flag checks. + var/do_unique_user_handle = 0 + + var/mob/lastattacker = null + var/mob/lastattacked = null + var/attack_log = list() + + /// Spam control, can only point when the previous pointer qdels + var/obj/effect/decal/point/pointing_effect = null + + /// 1 decisecond click delay (above and beyond mob/next_move) + var/next_click = 0 + + var/dizziness = 0//Carbon + var/is_dizzy = 0 + var/is_jittery = 0 + var/jitteriness = 0//Carbon + + //handles up-down floaty effect in space and zero-gravity + var/is_floating = FALSE + + // Used by the Nano UI Manager (/datum/SSnanoui) to track UIs opened by this mob + var/list/open_nanouis = list() + + var/last_pain_message = "" + var/next_pain_time = 0 + + /** + * global + * + * Tracks open UIs for a user. + */ + var/list/tgui_open_uis = list() + + var/tmp/last_airflow_stun = 0 + + //thou shall always be able to see the Geometer of Blood + var/image/narsimage = null + var/image/narglow = null + + //thou shall always be able to see the rift + var/image/riftimage = null + + var/list/client_colors = list() + + var/bloody_hands = null + var/datum/weakref/bloody_hands_mob + var/track_footprint = 0 + var/list/feet_blood_DNA + var/track_footprint_type + var/footprint_color + + var/mob/abstract/eye/eyeobj + + var/mob/living/brain_ghost/bg + + var/list/default_emotes = list() + var/list/usable_emotes = list() + + var/client/my_client // Need to keep track of this ourselves, since by the time Logout() is called the client has already been nulled + + var/get_rig_stats = 0 + + var/thinking_enabled = FALSE diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 7545f3b0fba..d548bbc22e3 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -782,9 +782,6 @@ /mob/fall_get_specs(levels_fallen) return list(mob_size, throw_range) -/mob/living - var/atom/movable/z_observer/z_eye - /atom/movable/z_observer name = "" simulated = FALSE diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index 23987d4af75..c87b6a44b3c 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -35,6 +35,3 @@ */ /datum/proc/nanoui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/ui_state/state = GLOB.default_state) return - -// Used by the Nano UI Manager (/datum/SSnanoui) to track UIs opened by this mob -/mob/var/list/open_nanouis = list() diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index ef21e37f1fa..a6e31aeb2c0 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -2,8 +2,6 @@ BLOOD SYSTEM ****************************************************/ -/mob/living/carbon/human/var/datum/reagents/vessel //Container for blood and BLOOD ONLY. Do not transfer other chems here. - //Initializes blood vessels /mob/living/carbon/human/proc/make_blood() if(vessel) diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index e9171af43c5..135c4e9264f 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -3,9 +3,6 @@ animate(pain, alpha = target, time = 15, easing = ELASTIC_EASING) animate(pain, alpha = 0, time = 20) -/mob/var/last_pain_message = "" -/mob/var/next_pain_time = 0 - // message is the custom message to be displayed // power decides how much painkillers will stop the message // force means it ignores anti-spam timer diff --git a/code/modules/projectiles/targeting/targeting_mob.dm b/code/modules/projectiles/targeting/targeting_mob.dm index 564d9ecd876..1a8792e439e 100644 --- a/code/modules/projectiles/targeting/targeting_mob.dm +++ b/code/modules/projectiles/targeting/targeting_mob.dm @@ -1,10 +1,3 @@ -/mob/living - ///The obj to overlay on the aim target - var/obj/aiming_overlay/aiming - - ///A list of mobs the target is being aimed at by - var/list/aimed_at_by - /mob/verb/toggle_gun_mode() set name = "Toggle Gun Mode" set desc = "Begin or stop aiming." diff --git a/code/modules/psionics/mob/mob.dm b/code/modules/psionics/mob/mob.dm index dddb4da3b50..336ce6a444e 100644 --- a/code/modules/psionics/mob/mob.dm +++ b/code/modules/psionics/mob/mob.dm @@ -1,6 +1,3 @@ -/mob/living - var/datum/psi_complexus/psi - /mob/living/proc/set_psi_rank(var/rank, var/defer_update, var/temporary) if(HAS_TRAIT(src, TRAIT_PSIONICALLY_DEAF)) to_chat(src, SPAN_WARNING("Something tingles in your head.")) diff --git a/code/modules/radiation/radiation.dm b/code/modules/radiation/radiation.dm index 9e52c54b5a2..f913946eeb3 100644 --- a/code/modules/radiation/radiation.dm +++ b/code/modules/radiation/radiation.dm @@ -58,10 +58,6 @@ SSradiation.resistance_cache[src] = (length(contents) + 1) cached_rad_resistance = (density ? material.weight / RADIATION_MATERIAL_RESISTANCE_DIVISOR : 0) -/obj - /// Allow overriding rad resistance. - var/rad_resistance_modifier = 1 - /** * Retrieves the atom's current radiation level. By default, this will return `loc.get_rads()`. * diff --git a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm index 11282354d88..955b891d8be 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_talkingitem.dm @@ -4,9 +4,6 @@ // This could be extended to atoms, but it's bad enough as is // I genuinely tried to Add and Remove them from var and proc lists, but just couldn't get it working -//for easy reference -/obj/var/datum/talking_atom/talking_atom - /datum/talking_atom var/list/heard_words = list() var/last_talk_time = 0 diff --git a/code/modules/shareddream/dream_entry.dm b/code/modules/shareddream/dream_entry.dm index a9a11bbae60..b22259c5d57 100644 --- a/code/modules/shareddream/dream_entry.dm +++ b/code/modules/shareddream/dream_entry.dm @@ -1,13 +1,6 @@ ///A list of `/turf` where the Srom is located, and people entering the shared dream (presumably Skrells sleeping) will be casted to GLOBAL_LIST_EMPTY_TYPED(dream_entries, /turf) -/mob - var/mob/living/brain_ghost/bg - -/mob/living/carbon/human - var/datum/weakref/srom_pulled_by - var/datum/weakref/srom_pulling - /mob/living/carbon/human/proc/handle_shared_dreaming(var/force_wakeup = FALSE) SHOULD_NOT_SLEEP(TRUE) if(is_psi_blocked(src)) // Can't enter the dream if the caster is blocked from RECEIVING. It's a two-way street. diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 5d4d4550e6c..a005022e313 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -193,5 +193,5 @@ var/list/in_progress = list() /datum/surgery_status/Destroy(force) - in_progress = null - . = ..() + in_progress?.Cut() + return ..() diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index bcd97a91245..61468e8e10d 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -129,13 +129,6 @@ */ /datum/var/list/tgui_shared_states -/** - * global - * - * Tracks open UIs for a user. - */ -/mob/var/list/tgui_open_uis = list() - /** * global * diff --git a/html/changelogs/hellfirejag-mob-destroy-refactoring.yml b/html/changelogs/hellfirejag-mob-destroy-refactoring.yml new file mode 100644 index 00000000000..3855a8bcce0 --- /dev/null +++ b/html/changelogs/hellfirejag-mob-destroy-refactoring.yml @@ -0,0 +1,12 @@ +author: Hellfirejag + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - bugfix: "Comprehensively destroyed an extremely large number of niche hard dels across the entire Atom-Human Hierarchy." From 7df972f47000b652b77996421cfaa90db77dcbfc Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 3 Jun 2026 11:16:05 -0400 Subject: [PATCH 34/68] Worms Hard Del (#22569) Simple fix for the Worm King spamming hard deletes. --- code/modules/mob/living/simple_animal/hostile/sarlacc.dm | 6 +++--- html/changelogs/hellfirejag-worm-harddel.yml | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/hellfirejag-worm-harddel.yml diff --git a/code/modules/mob/living/simple_animal/hostile/sarlacc.dm b/code/modules/mob/living/simple_animal/hostile/sarlacc.dm index b639175bcee..cea4f67c70e 100644 --- a/code/modules/mob/living/simple_animal/hostile/sarlacc.dm +++ b/code/modules/mob/living/simple_animal/hostile/sarlacc.dm @@ -135,9 +135,8 @@ /mob/living/simple_animal/hostile/greatworm/Destroy() SSmobs.greatworms -= src - if(sarlacc) - qdel(sarlacc) - sarlacc = null + QDEL_NULL(sarlacc) + QDEL_LIST(active_tentacles) return ..() /mob/living/simple_animal/hostile/greatworm/Life(seconds_per_tick, times_fired) @@ -289,6 +288,7 @@ /mob/living/simple_animal/hostile/lesserworm/Destroy() if(originator) originator.active_tentacles -= src + originator = null return ..() /mob/living/simple_animal/hostile/lesserworm/proc/Penetrate() diff --git a/html/changelogs/hellfirejag-worm-harddel.yml b/html/changelogs/hellfirejag-worm-harddel.yml new file mode 100644 index 00000000000..0be8f591bed --- /dev/null +++ b/html/changelogs/hellfirejag-worm-harddel.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed a hard delete caused by worm monsters." From 6a88cb3a1927161cd011cc5ba2d43c9c425ba59a Mon Sep 17 00:00:00 2001 From: lew <82828093+Llywelwyn@users.noreply.github.com> Date: Wed, 3 Jun 2026 16:24:15 +0100 Subject: [PATCH 35/68] Fixes bold/italics rendering in emotes and saved chatlog MIME type (#22577) format_emote has to come first, otherwise it will re-encode the markup into literals. however, the langchat_message does not want to have format_emote called on it. ergo, we have to either process the markup twice, once for each path, or we have to accept that one of the two will not support bold/italics. the perf from doing it twice is completely inconsequential image - bugfix: "Saved chat logs are now written with the correct text/html file type." - bugfix: "Emote markup like *bold* and /italics/ once again renders in chat instead of showing literal tags." --- code/modules/emotes/emote_mob.dm | 4 ++-- html/changelogs/llywelwyn-chatlog.yml | 5 +++++ tgui/packages/tgui-panel/chat/renderer.js | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 html/changelogs/llywelwyn-chatlog.yml diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 2143ccb6b3f..11909b383b7 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -159,9 +159,9 @@ if (message) log_emote("[name]/[key] : [message]") - message = process_chat_markup(message, list("~", "_")) - var/langchat_message = message + var/langchat_message = process_chat_markup(message, list("~", "_")) message = format_emote(src, message) + message = process_chat_markup(message, list("~", "_")) var/list/emote_viewers = list() if(m_type == VISIBLE_MESSAGE) visible_message(message, show_observers = do_show_observers) diff --git a/html/changelogs/llywelwyn-chatlog.yml b/html/changelogs/llywelwyn-chatlog.yml new file mode 100644 index 00000000000..9ea22710d6c --- /dev/null +++ b/html/changelogs/llywelwyn-chatlog.yml @@ -0,0 +1,5 @@ +author: Llywelwyn +delete-after: True +changes: + - bugfix: "Saved chat logs are now written with the correct text/html file type." + - bugfix: "Emote markup like *bold* and /italics/ once again renders in chat instead of showing literal tags." diff --git a/tgui/packages/tgui-panel/chat/renderer.js b/tgui/packages/tgui-panel/chat/renderer.js index 59a1d0cddf0..c9dadc9ba16 100644 --- a/tgui/packages/tgui-panel/chat/renderer.js +++ b/tgui/packages/tgui-panel/chat/renderer.js @@ -616,7 +616,7 @@ class ChatRenderer { + '\n' + '\n'; // Create and send a nice blob - const blob = new Blob([pageHtml], { type: 'text/plain' }); + const blob = new Blob([pageHtml], { type: 'text/html' }); const timestamp = new Date() .toISOString() .substring(0, 19) From f66007e324084d8af1ff8aeacb860967866cd926 Mon Sep 17 00:00:00 2001 From: FenodyreeAv Date: Wed, 3 Jun 2026 16:24:32 +0100 Subject: [PATCH 36/68] Modlaser fixes (#22550) Fixes the easy stuff from: #22545 The only real balance change, dropped improvement per variable by 50%. Should have been like this from the start, but I mistakenly assumed no one would even reach close to the cap. Makes repairs with welders go through .use_tool, fixes not needing welding goggles and adds nice sparky visuals. Much more robust handling of improvable variables, negatives don't break improvement assignment now. Fixes improvement cap, missed a *100 to convert from decimal to percentage. Fixes improvement potential being assigned to things that couldn't be upgraded. Fixes the Gatling mod upgrading fire delay (pretty useless on something with a 3 second warmup) Fixes the weapon analyzer print out showing completely incorrect numbers. Fixes the weapon analyzer eating your combitool and being indestructible. Gives some more feedback on why things can and can't be upgraded. --- code/__DEFINES/modular_guns.dm | 4 +- .../projectiles/guns/energy/modular.dm | 56 +++++++++++- .../modules/projectiles/modular/laser_base.dm | 87 +++++++++++++++---- .../projectiles/modular/laser_components.dm | 2 +- code/modules/research/weaponsanalyzer.dm | 12 ++- html/changelogs/Fenodyree-ModlaserFixes.yml | 17 ++++ 6 files changed, 150 insertions(+), 28 deletions(-) create mode 100644 html/changelogs/Fenodyree-ModlaserFixes.yml diff --git a/code/__DEFINES/modular_guns.dm b/code/__DEFINES/modular_guns.dm index 8a268ea1c14..162908f45b2 100644 --- a/code/__DEFINES/modular_guns.dm +++ b/code/__DEFINES/modular_guns.dm @@ -8,9 +8,9 @@ ///The maximum improvement that can be applied to a weapon component. #define IMPROVEMENT_CAP 100 ///The maximum increase an individual variable can recieve over it's initial value. -#define INCREASE_CAP 2 +#define INCREASE_CAP 1.5 ///The maximum decrease an individual variable can recieve under it's initial value. -#define DECREASE_CAP 0.2 +#define DECREASE_CAP 0.5 ///All improvements are multiplied by this value, tweak down if they are too strong, up if they are too weak. #define IMPROVEMENT_MULTIPLIER 1 diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm index fb2ed61252a..9d3c7701d3c 100644 --- a/code/modules/projectiles/guns/energy/modular.dm +++ b/code/modules/projectiles/guns/energy/modular.dm @@ -387,9 +387,12 @@ while(improvement_potential > 0 && damaged_components.len) var/list/upgradable_components = list() - for(var/obj/item/laser_components/component in damaged_components) - if(component.total_improved < IMPROVEMENT_CAP) - upgradable_components += component + for(var/obj/item/laser_components/component in damaged_components) //Only give it improvement potential if it's damaged. + if((component.total_improved + component.improvement_potential) < IMPROVEMENT_CAP) //Only give it improvement potential if it doesn't have enough to hit cap. + if(component.increasable_stats.len || component.decreaseable_stats.len) //Don't give it to components with nothing to improve. + upgradable_components += component + else + damaged_components.Remove(component) //If a component has reached the improvement cap, it can't be improved anymore. if(!upgradable_components.len) to_chat(user, SPAN_WARNING("There's nothing to improve on the components of this gun.")) @@ -527,10 +530,55 @@ return 1 /obj/item/gun/energy/laser/prototype/get_print_info() - . = ..(FALSE) + . = "" + + var/l_modified_damage = 1 / max(1, burst - 1) + var/l_modified_max_shots = 1 + for(var/i in list(capacitor, focusing_lens, modulator) + gun_mods) + var/obj/item/laser_components/l_component = i + if(!l_component) + continue + + if(l_component.damage != 0) + l_modified_damage *= l_component.damage + if(l_component.shots != 0) + l_modified_max_shots *= l_component.shots + + var/obj/projectile/P = new projectile_type + . += "Max Shots: [round(l_modified_max_shots)]
    " + . += "Recharge Type: [self_recharge ? "self recharging" : "not self recharging"]
    " + if(self_recharge) + . += "Recharge Time: [initial(recharge_time)]
    " + . += "
    Primary Projectile
    " + . += "Damage: [round(min(60, l_modified_damage), 1)]
    " + . += "Damage Type: [initial(P.damage_type)]
    " + . += "Blocked by Armor Type: [initial(P.check_armor)]
    " + . += "Stuns: [initial(P.stun) ? "true" : "false"]
    " + if(initial(P.shrapnel_type)) + var/obj/shrapnel = new P.shrapnel_type + . += "Shrapnel Type: [shrapnel.name]
    " + . += "Armor Penetration: [initial(P.armor_penetration)]%
    " + . += "Burst: [burst]
    " + . += "Reliability: [reliability]
    " + + if(secondary_projectile_type) + var/obj/projectile/P_second = new secondary_projectile_type + . += "
    Secondary Projectile
    " + . += "Damage: [initial(P_second.damage)]
    " + . += "Damage Type: [initial(P_second.damage_type)]
    " + . += "Blocked by Armor Type: [initial(P_second.check_armor)]
    " + . += "Stuns: [initial(P_second.stun) ? "true" : "false"]
    " + if(initial(P_second.shrapnel_type)) + var/obj/shrapnel_second = new P_second.shrapnel_type + . += "Shrapnel Type: [shrapnel_second.name]
    " + . += "Armor Penetration: [initial(P_second.armor_penetration)]%
    " + + . += "
    " for(var/i in list(capacitor, focusing_lens, modulator) + gun_mods) var/obj/item/laser_components/l_component = i + if(!l_component) + continue . += "
    Component Name: [initial(l_component.name)]

    " var/l_repair_name = initial(l_component.repair_item.name) ? initial(l_component.repair_item.name) : "nothing" diff --git a/code/modules/projectiles/modular/laser_base.dm b/code/modules/projectiles/modular/laser_base.dm index ac7f1810f8e..f960a7cbf5c 100644 --- a/code/modules/projectiles/modular/laser_base.dm +++ b/code/modules/projectiles/modular/laser_base.dm @@ -42,7 +42,13 @@ condition = reliability /obj/item/laser_components/proc/handle_improvement(var/skill_level, var/mob/user) - while (improvement_potential > 0) + + if (total_improved >= IMPROVEMENT_CAP) + to_chat(user, SPAN_NOTICE("You don't see any way to improve \the [src] any further.")) + improvement_potential = 0 + return + + while (improvement_potential > 0 && total_improved < IMPROVEMENT_CAP) var/improvement = min(abs(improvement_potential / 100), 0.2) //Caps improvement from a single repair to 20%. This spreads the effect out across multiple stats var/stat_direction = 1 @@ -66,8 +72,20 @@ break //No stats to improve, it shouldn't be possible to have improvement potential and no stats to improve, but just in case. if (stat_name in src.vars) + var/initial_value = initial(src.vars[stat_name]) improvement_potential -= improvement * 100 //Decreases improvement potential before any skill modifiers. + if (initial_value < 0) //If the stat begins negative, such as base_malus for heat vents, handle comparisons by sign. + if (stat_direction > 0 && src.vars[stat_name] >= (initial_value * DECREASE_CAP)) + continue + if (stat_direction < 0 && src.vars[stat_name] <= (initial_value * INCREASE_CAP)) + continue + else + if (src.vars[stat_name] >= (initial_value * INCREASE_CAP) && stat_direction > 0) //It is possible to waste improvement potential by hitting the cap on a stat, this is fine, it should be harder to improve a component that's already of high quality. + continue + if (src.vars[stat_name] <= (initial_value * DECREASE_CAP) && stat_direction < 0) + continue + switch(skill_level ? skill_level : 6) if(-INFINITY to 2) improvement *= (rand(-5, -1) / 10) //Always damage it. @@ -80,21 +98,37 @@ if(6 to INFINITY) improvement *= (rand(8, 12) / 10) - if (src.vars[stat_name] > (initial(src.vars[stat_name]) * INCREASE_CAP) && stat_direction > 0) //It is possible to waste improvement potential by hitting the cap on a stat, this is fine, it should be harder to improve a component that's already of high quality. - continue - if (src.vars[stat_name] < (initial(src.vars[stat_name]) * DECREASE_CAP) && stat_direction < 0) - continue - - src.vars[stat_name] += stat_direction * abs(initial(src.vars[stat_name]) * improvement) //Adds improvement % of the initial value to the stat. + src.vars[stat_name] += stat_direction * abs(initial_value * improvement) //Adds improvement % of the initial value to the stat. if (improvement > 0) - to_chat(user, SPAN_NOTICE("Your careful repairs to \the [src] [stat_direction > 0 ? "increase" : "decrease"] its [replacetext(stat_name, "_", " ")] by [improvement * 100] percent!")) - total_improved += improvement + total_improved += improvement * 100 + if (initial_value < 0) + if (stat_direction > 0 && src.vars[stat_name] >= initial_value * DECREASE_CAP) + to_chat(user, SPAN_NOTICE("Your repairs to \the [src] have improved its [replacetext(stat_name, "_", " ")] as far as you think is possible.")) + else if (stat_direction < 0 && src.vars[stat_name] <= initial_value * INCREASE_CAP) + to_chat(user, SPAN_NOTICE("Your repairs to \the [src] have improved its [replacetext(stat_name, "_", " ")] as far as you think is possible.")) + else + to_chat(user, SPAN_NOTICE("Your careful repairs to \the [src] [stat_direction > 0 ? "increase" : "decrease"] its [replacetext(stat_name, "_", " ")] by [improvement * 100] percent!")) + else + if(src.vars[stat_name] >= initial_value * INCREASE_CAP && stat_direction > 0) + to_chat(user, SPAN_NOTICE("Your repairs to \the [src] have improved its [replacetext(stat_name, "_", " ")] as far as you think is possible.")) + else if(src.vars[stat_name] <= initial_value * DECREASE_CAP && stat_direction < 0) + to_chat(user, SPAN_NOTICE("Your repairs to \the [src] have improved its [replacetext(stat_name, "_", " ")] as far as you think is possible.")) + else + to_chat(user, SPAN_NOTICE("Your careful repairs to \the [src] [stat_direction > 0 ? "increase" : "decrease"] its [replacetext(stat_name, "_", " ")] by [improvement * 100] percent!")) + else if (improvement == 0) to_chat(user, SPAN_NOTICE("Your repairs to \the [src], don't seem to improve it, but at least you didn't make it worse.")) else to_chat(user, SPAN_WARNING("Your repairs to \the [src] end up damaging it!")) + else + break //The stat to improve isn't on this component, something went wrong with the lists of stats or the component itself. + + if (total_improved > IMPROVEMENT_CAP) + improvement_potential = 0 + to_chat(user, SPAN_NOTICE("You have improved \the [src] as much as you can.")) + /obj/item/laser_components/get_examine_text(mob/user, distance, is_adjacent, infix, suffix) . = ..() if(distance > 1) @@ -150,9 +184,21 @@ if (condition == 0 && malus == base_malus) to_chat(user, SPAN_WARNING("\The [src] is not damaged.")) return ..() - to_chat(user, SPAN_WARNING("You begin repairing \the [src].")) + var/skill_level = (GET_SKILL_LEVEL(user, FIREARMS_SKILL_COMPONENT) + GET_SKILL_LEVEL(user, RESEARCH_SKILL_COMPONENT)) - if(do_after(user, rand(2 SECONDS, 6 SECONDS), src, DO_UNIQUE) && repair_module(attacking_item, skill_level, user)) + + if(attacking_item.tool_behaviour == TOOL_WELDER) + var/obj/item/weldingtool/WT = attacking_item + if(WT.isOn() && WT.use_tool(src, user, rand(2 SECONDS, (10 - skill_level) SECONDS), volume = 50) && WT.use(0, user) && repair_module(attacking_item, skill_level, user)) + user.visible_message( + SPAN_WARNING("[user] begins repairing \the [src]."), + SPAN_NOTICE("You begin repairing \the [src]."), + "You hear a welding torch on metal." + ) + else + to_chat(user, SPAN_WARNING("You fail to repair \the [src].")) + + else if(do_after(user, rand(2 SECONDS, (10 - skill_level) SECONDS), src, DO_UNIQUE) && repair_module(attacking_item, skill_level, user)) //Used if the repair item is not a tool. to_chat(user, SPAN_NOTICE("You repair \the [src].")) else to_chat(user, SPAN_WARNING("You fail to repair \the [src].")) @@ -189,7 +235,7 @@ return if(malus == base_malus) return 0 - if(W.use(2)) + if(W.use(1)) //Welders burn fuel while active handle_improvement(skill_level, user) malus = max(malus - 5, base_malus) return 1 @@ -332,8 +378,10 @@ var/success = FALSE if(!istype(A)) return ..() - if(!ready_to_craft) - to_chat(user, SPAN_WARNING("You cannot modify \the [src] by hand, you need to use a weapons analyzer.")) + + var/skill_level = (GET_SKILL_LEVEL(user, FIREARMS_SKILL_COMPONENT) + GET_SKILL_LEVEL(user, RESEARCH_SKILL_COMPONENT)) + if(!ready_to_craft && skill_level < 5) + to_chat(user, SPAN_WARNING("You cannot modify \the [src] by hand at your current skill level, you need to use a weapons analyzer.")) return if(ismodifier(A) && gun_mods.len < modifier_cap) @@ -389,9 +437,7 @@ /obj/item/laser_assembly/proc/finish() - var/obj/structure/machinery/r_n_d/weapons_analyzer/an = analyzer.resolve() - if(!an) - return FALSE + var/obj/structure/machinery/r_n_d/weapons_analyzer/an = analyzer ? analyzer.resolve() : null var/obj/item/gun/energy/laser/prototype/A = new /obj/item/gun/energy/laser/prototype A.icon_state = icon_state @@ -410,8 +456,11 @@ mod.forceMove(A) if(mod.gun_overlay) A.underlays += mod.gun_overlay - A.forceMove(an) - an.item = A + if(an) + A.forceMove(an) + an.item = A + else + A.forceMove(get_turf(src)) A.updatetype() A.try_recharge() A.pin = null diff --git a/code/modules/projectiles/modular/laser_components.dm b/code/modules/projectiles/modular/laser_components.dm index f0483690043..3d22b02e776 100644 --- a/code/modules/projectiles/modular/laser_components.dm +++ b/code/modules/projectiles/modular/laser_components.dm @@ -303,7 +303,7 @@ accuracy = -1 icon_state = "rotating_lens" increasable_stats = list() - decreaseable_stats = list("fire_delay", "chargetime") + decreaseable_stats = list("burst_delay", "chargetime") /obj/item/laser_components/modifier/scope name = "telescopic sight" diff --git a/code/modules/research/weaponsanalyzer.dm b/code/modules/research/weaponsanalyzer.dm index 1f0421a5e15..8b30ceee471 100644 --- a/code/modules/research/weaponsanalyzer.dm +++ b/code/modules/research/weaponsanalyzer.dm @@ -23,6 +23,13 @@ var/mob/living/carbon/human/H = user + if(default_deconstruction_screwdriver(user, attacking_item)) + return TRUE + if(default_deconstruction_crowbar(user, attacking_item)) + return TRUE + if(default_part_replacement(user, attacking_item)) + return TRUE + if(istype(attacking_item, /obj/item/gun)) check_swap(user, attacking_item) item = attacking_item @@ -55,7 +62,8 @@ addtimer(CALLBACK(src, PROC_REF(reset)), 15) process = TRUE update_icon() - + else if(istype(attacking_item, /obj/item/combitool)) + return else if(attacking_item) check_swap(user, attacking_item) item = attacking_item @@ -120,7 +128,7 @@ if(istype(item, /obj/item/laser_assembly)) var/obj/item/laser_assembly/A = item A.update_icon() - icon_state = process ? "[icon_state]_working" : "[icon_state]_on" + icon_state = process ? "[icon_state]_working" : "[icon_state]_on" Icon_used = new /icon(item.icon, item.icon_state) else if(item) icon_state = "[icon_state]_on" diff --git a/html/changelogs/Fenodyree-ModlaserFixes.yml b/html/changelogs/Fenodyree-ModlaserFixes.yml new file mode 100644 index 00000000000..a908d9e4700 --- /dev/null +++ b/html/changelogs/Fenodyree-ModlaserFixes.yml @@ -0,0 +1,17 @@ +author: Fenodyree + +delete-after: True + +changes: + - bugfix: "Fixes modular lasers improvement cap." + - bugfix: "Fixes negative initial values being handled incorrectly." + - bugfix: "Fixes some repair edge cases." + - bugfix: "Fixes welding repairs not needing eye protection." + - bugfix: "Fixes gattling laser mod having the wrong improvable variables." + - bugfix: "Fixes the weapon analyzer printout calculating modlaser stats incorrectly." + - bugfix: "Fixes high skill users not being able to field repair modlasers." + - bugfix: "Fixes the weapon analyzer ripping your combitool out of your hand." + - bugfix: "Fixes the weapon analyzer not being deconstructable." + - balance: "Drops the per var improvement cap by 50%, multiplicative scaling is no joke." + + From 504913cfc834fd807cc6eea62eab5145bea66492 Mon Sep 17 00:00:00 2001 From: Casper3667 <8396443+Casper3667@users.noreply.github.com> Date: Wed, 3 Jun 2026 18:29:05 +0200 Subject: [PATCH 37/68] Anatomy Skill take 2 (#22481) A continuation of https://github.com/Aurorastation/Aurora.3/pull/22354 with permission from the original author. The primary changes between the two are more things being visible with no skill as well as some changes to how arterial bleedings are shown. Also a custom pain message if you touch yourself somewhere that hurts, like with broken bones. Original PR description: > This PR provides a relatively simple first implementation for the Anatomy skill, which I have intended to be more broadly useful for any character, beyond just medical characters. The first use of Anatomy skill is for when examining your own injuries, your ranks in the skill determine both the time it takes to self-examine, as well as the quality of the information provided. Previously the injury check was instantaneous, now it takes 5 seconds to perform at its baseline, and all the way down to 1.25 seconds at maximum rank in the skill. > > No ranks in Anatomy: > image > High ranks in Anatomy: > image --------- Signed-off-by: VMSolidus Signed-off-by: Casper3667 <8396443+Casper3667@users.noreply.github.com> Co-authored-by: VMSolidus Co-authored-by: Matt Atlas --- code/datums/skills/occupational/medical.dm | 30 ++++- code/modules/mob/living/carbon/carbon.dm | 108 ++++++++++++++---- html/changelogs/hellfirejag-anatomy-skill.yml | 4 + 3 files changed, 119 insertions(+), 23 deletions(-) create mode 100644 html/changelogs/hellfirejag-anatomy-skill.yml diff --git a/code/datums/skills/occupational/medical.dm b/code/datums/skills/occupational/medical.dm index c749937dd0c..2b2010142bb 100644 --- a/code/datums/skills/occupational/medical.dm +++ b/code/datums/skills/occupational/medical.dm @@ -69,12 +69,38 @@ /singleton/skill/anatomy name = "Anatomy" - description = "Not currently implemented." + description = "Governs the speed at which you can check yourself for injuries, as well as the quality of the information obtained when doing so." maximum_level = SKILL_LEVEL_PROFESSIONAL - uneducated_skill_cap = SKILL_LEVEL_TRAINED + uneducated_skill_cap = SKILL_LEVEL_PROFESSIONAL category = /singleton/skill_category/occupational subcategory = SKILL_SUBCATEGORY_MEDICAL component_type = ANATOMY_SKILL_COMPONENT + skill_level_descriptions = alist( + SKILL_LEVEL_UNFAMILIAR = "You have zero training or knowledge of anatomy.
    " \ + + " - You can only distinguish visible damage like cuts and burns.", + SKILL_LEVEL_FAMILIAR = "You have minimal training on the basics of anatomy.
    " \ + + "You can diagnose the following conditions:
    " \ + + " - External injuries.
    " \ + + " - Limb dislocation.
    " \ + + " - Simple bleeds.", + SKILL_LEVEL_TRAINED = "You have years of formal training and experience with anatomy.
    " \ + + "You can diagnose the following conditions:
    " \ + + " - External injuries at a high level of detail.
    " \ + + " - Limb dislocation.
    " \ + + " - Broken bones.
    " \ + + " - Distinguish between simple bleeds and severed arteries.
    " \ + + " - Limb necrosis.
    " \ + + " - Tag injuries by triage priority.", + SKILL_LEVEL_PROFESSIONAL = "You have extensive training and experience with anatomy.
    " \ + + "You can diagnose the following conditions at the highest level of detail:
    " \ + + " - External injuries at a high level of detail.
    " \ + + " - Limb dislocation.
    " \ + + " - Broken bones.
    " \ + + " - Distinguish between simple bleeds and severed arteries.
    " \ + + " - Limb necrosis.
    " \ + + " - Tag injuries by triage priority." + ) + required = TRUE /singleton/skill/forensics name = "Forensics" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 0354370bb2c..08d6660d9fd 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -220,52 +220,118 @@ var/mob/living/carbon/human/H = src src.visible_message( SPAN_NOTICE("[src] examines [src.get_pronoun("himself")]."), \ - SPAN_NOTICE("You check yourself for injuries.") \ + SPAN_NOTICE("You start checking yourself for injuries.") \ ) + var/anatomy = GET_SKILL_LEVEL(M, ANATOMY_SKILL_COMPONENT) + if (!do_after(M, 5 SECONDS * (1 / (anatomy ? anatomy : 1)))) + to_chat(M, SPAN_WARNING("You must stand still to examine yourself for injuries.")) + return + + // Set to vanilla-equivalent for people without the skill. + if(!anatomy) + anatomy = 2 + var/painful_check = FALSE for(var/obj/item/organ/external/org in H.organs) var/list/status = list() var/brutedamage = org.brute_dam var/burndamage = org.burn_dam + + // Basic Anatomy 1: All the obvious stuff + // Damaged and missing limbs switch(brutedamage) - if(1 to 20) - status += "bruised" - if(20 to 40) - status += "wounded" - if(40 to INFINITY) - status += "mangled" + if(1 to 10) + status += (anatomy < 3 ? "bruised" : "superficially cut") + if(10 to 25) + status += (anatomy < 3 ? "wounded" : "moderately injured") + if(25 to 50) + status += (anatomy < 3 ? "badly injured" : "significantly injured") + if(50 to 75) + status += (anatomy < 3 ? "severely injured" : "mangled and difficult to move") + if(75 to 100) + status += (anatomy < 3 ? "extremely injured" : SPAN_DANGER("horribly mangled, and it feels like it may give out at any moment")) + if(100 to INFINITY) + status += (anatomy < 3 ? "critically injured" : SPAN_DANGER("ruined beyond recognition, and you can barely feel it at all")) switch(burndamage) if(1 to 10) - status += "numb" - if(10 to 40) - status += "blistered" - if(40 to INFINITY) - status += "peeling away" + status += (anatomy < 3 ? "numb" : "lightly burned") + if(10 to 25) + status += (anatomy < 3 ? "blistered" : "moderately burned") + if(25 to 50) + status += (anatomy < 3 ? "peeling away" : "marked by notable partial-thickness burns") + if(50 to 75) + status += (anatomy < 3 ? "visibly charred" : "covered in extensive partial-thickness burns") + if(75 to 100) + status += (anatomy < 3 ? "like black leather" : SPAN_DANGER("burned down to deadened, leathery tissue and looks close to being unrecoverable")) + if(100 to INFINITY) + status += (anatomy < 3 ? "like charcoal" : SPAN_DANGER("charred beyond recognition and may be beyond saving")) if(org.is_stump()) status += SPAN_DANGER("MISSING") if(org.status & ORGAN_MUTATED) status += "weirdly shapen" - if(org.dislocated == 2) - status += "dislocated" - if(org.status & ORGAN_BROKEN) - status += "hurts when touched" - if(org.status & ORGAN_DEAD) - status += "is necrotic" if(!org.is_usable()) status += "dangling uselessly" - if(org.status & ORGAN_BLEEDING) - status += SPAN_DANGER("bleeding") + // End of basic Anatomy 1. + + // Advanced Anatomy 1: Slightly harder. + // Dislocation + // Broken limbs + // Regular and arterial bleeding are vague + // Necrotic is vague + if(org.dislocated == 2) + status += (anatomy >= 2 ? "dislocated" : "hanging oddly") + if(org.status & ORGAN_BROKEN) + status += (anatomy < 3 ? "hurts when touched" : "broken") + painful_check = TRUE + // Anatomy 2 can't distinguish between regular bleeding and arterial. + // Bleeding without arterial + if(anatomy < 3 && ((org.status & ORGAN_BLEEDING) && !(org.status & ORGAN_ARTERY_CUT))) + status += "bleeding" + // Bleeding and arterial + else if(anatomy < 3 && ((org.status & ORGAN_BLEEDING) && (org.status & ORGAN_ARTERY_CUT))) + status += SPAN_DANGER("gushing with blood") + // Arterial without bleeding + else if(anatomy < 3 && (!(org.status & ORGAN_BLEEDING) && (org.status & ORGAN_ARTERY_CUT))) + if(!(org.status & (ORGAN_DEAD | ORGAN_BROKEN))) + status += "hurts when touched" + painful_check = TRUE + status += "swelled and has darkly discolored spots" + + if(anatomy < 3 && (org.status & ORGAN_DEAD)) + status += "feels numb and pale" + // End of advanced Anatomy 1. + + // Anatomy 3: Descriptions start to get more medical. + // Necrotic and arterials are plainly visible + // Bleeding gets an extra description + if(anatomy >= 3) + if(org.status & ORGAN_DEAD) + status += (anatomy < 4 ? "possibly necrotic" : "visible discoloration of skin that indicates tissue necrosis") + // Bleeding & arterial + if((org.status & ORGAN_BLEEDING) && (org.status & ORGAN_ARTERY_CUT)) + status += SPAN_DANGER("spraying blood from a severed artery") + // bleeding and no arterial + else if((org.status & ORGAN_BLEEDING) && !(org.status & ORGAN_ARTERY_CUT)) + status += "bandage-ably cut" + // arterial and no bleeding + else if(!(org.status & ORGAN_BLEEDING) && (org.status & ORGAN_ARTERY_CUT)) + status += SPAN_DANGER("swollen from an internal arterial bleed") + // End of Anatomy 3 + var/output = "" if(length(status)) output = "My [org.name] is [SPAN_WARNING("[english_list(status)].")]" else - output = "My [org.name] feels [SPAN_NOTICE("OK.")]" + output = (anatomy < 3 ? "My [org.name] feels [SPAN_NOTICE("OK.")]" : "My [org.name] has [SPAN_NOTICE("no visible signs of injuries.")]") if(length(org.implants)) output += " [SPAN_WARNING("I can feel something inside it.")]" to_chat(src, output) + if(painful_check) + custom_pain("Pain jolts through your body", 10, FALSE, null, TRUE) + if((isskeleton(H)) && (!H.w_uniform) && (!H.wear_suit)) H.play_xylophone() else diff --git a/html/changelogs/hellfirejag-anatomy-skill.yml b/html/changelogs/hellfirejag-anatomy-skill.yml new file mode 100644 index 00000000000..04b9661a5cf --- /dev/null +++ b/html/changelogs/hellfirejag-anatomy-skill.yml @@ -0,0 +1,4 @@ +author: Hellfirejag, TheGreyWolf +delete-after: True +changes: + - rscadd: "Implemented the Anatomy skill. Anatomy determines the quality of information received when medically examining your own injuries." From fb3189f54276d3a880fdff64baf7c6904804d160 Mon Sep 17 00:00:00 2001 From: c#min7 Date: Wed, 3 Jun 2026 17:37:37 +0100 Subject: [PATCH 38/68] New Reade accent icon (#22562) switches out the Reade accent icon for a new one. instead of random purple splotches, we have the light blue gas giant reade ### Asset Licenses The following assets that **have not** been created by myself are included in this PR: | Path | Original Author | License | | --- | --- | --- | | icons/accent_tags.dmi _reade_ | louiseisnthome | CC0 | --- html/changelogs/kermit-reade-accent-icon.yml | 7 +++++++ icons/accent_tags.dmi | Bin 29765 -> 29882 bytes 2 files changed, 7 insertions(+) create mode 100644 html/changelogs/kermit-reade-accent-icon.yml diff --git a/html/changelogs/kermit-reade-accent-icon.yml b/html/changelogs/kermit-reade-accent-icon.yml new file mode 100644 index 00000000000..7d48272ba2e --- /dev/null +++ b/html/changelogs/kermit-reade-accent-icon.yml @@ -0,0 +1,7 @@ +################################ +author: kermit, louiseisnthome + +delete-after: True + +changes: + - imageadd: "Changes the Reade accent icon from purple splodges to one that represents the gas giant." diff --git a/icons/accent_tags.dmi b/icons/accent_tags.dmi index 897ffbb79c14abde29b90a893cdfb971c44eb57d..b533246d20fc8fd2d36c99c96e6f6dfdc16fc5dd 100644 GIT binary patch delta 8480 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 O0000f1zFg delta 8362 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 Date: Wed, 3 Jun 2026 17:52:13 +0100 Subject: [PATCH 39/68] Ship combat rework (#22566) Makes ship combat significantly more destructive (and a bit deadlier), especially with non-explosive projectiles. **Additions:** - A shell that penetrates a solid (dense) structure will cause spalling. This spall does 2-30 damage, depending on range and has a high embed chance. These embedded chunks are large enough to be ripped out by hand. (But you probably shouldn't). The pilot's suit has 30 ballistic armor, so a prepared bridge crew can survive a lot of spall. - Adds a gun that shoots any ship weapon that admins can spawn. Useful for testing, or for adminbus where they don't want to have to spawn a whole overmap ship. - Made several structures destructible, vending machines, computer frames, grilles (these were just bugged) and watertanks (and their children). These structures could just block infinite shots and were common enough to serve as effective armor for the horizon. These now spawn shrapnel (of their material if it's set), in addition to sheets of steel when destroyed. - Added support for negative maim chance. This allows chosen projectiles to be prevented from decapitating. No more accidentally gibbing the bridge crew's heads. (Unless they get hit with something really really big). **Balance:** - All non-explosive anti ship rounds got significant buffs. Typically 2-3x Anti-Material numbers. - Armour piercing anti-ship rounds got massively increased penetration stats. Typically 4-8 from 1-2. - Doors now get destroyed in less hits, if they are hit by anti-material projectiles. Hits to destroy -= Antimaterial / 2 - Francisca frag shells now shoot less fragments but deal more damage. 394 projectiles for every shot was a bit laggy, now it's only 280. **Shields:** Shields now take more power. 13-14 megawatts for a 10 strength shield. Just inside the ship's generation capacity with both the INDRA and Supermatter running. Instead of deleting any projectile they are hit by, shields now have different failure modes. - Firstly, a piercing projectile has it's penetration reduced by the shield strength. Eg A shot that would go through 10 walls, only penetrates 4 after going through a 6 strength shield. - Secondly, a projectile has it's damage multiplied by 1 - shield strength / 10, then has shield strength subtracted from it's damage. Eg. A damage 100 projectile, hitting a 5 strength shield, has it's damaged reduced to 50, (100 * 0.5), then to 45. (50-5) - Thirdly, an explosive projectile (that does not penetrate per the first step) does not explode, but instead deals it's full damage to the shield. Hits to the shield now also damage the field itself, not just the shield tile. As such, a very big hit on the shield can bring the whole thing down, requiring an engineer to reset it. Shields can now be upgraded with research components. Additionally, shield generators can now support more than one capacitor. The roundstart capacitor on the Horizon is only good enough to support a 6 strength shield. The upgrades increase efficiency, strength loss over time and charge speed. **Overmap Targetting** Previously, shells would spawn within 20 tiles of their target and aim directly forwards. This was bugged for shots with burst, which would instead all aim inwards and mostly miss. This is the reason the Grauwolf (in addition to the explosion bug below) and Fransisca felt so useless, only one of every shell in a burst would hit. Shots now spawn at the map edge, based on the orientation of the projectile and ship. Diagonals are now accounted for. Shots are then aimed directly at the target selected on the console, with 3 degrees of dispersion. **Bugfixes:** - Fixes lots of explosions that didn't pass a turf to the explosions subsystem. This caused the explosion not to happen if the thing hit got qdeled before the subsystem could get the turf to spawn the explosion on. - Embedded shrapnel no longer gets the initial projectile name, this prevents it getting named shrapnelshrapnel. - Fixes a bunch of projectile piercing bugs, mostly with grilles and windows. Shots now go past window frames without hitting them. - Fixes shields not having a click delay when attacked. --------- Signed-off-by: FenodyreeAv Co-authored-by: Matt Atlas --- code/__DEFINES/_flags.dm | 2 + code/__DEFINES/ship_weapons.dm | 1 + code/__HELPERS/turfs.dm | 2 + .../subsystems/initialization/atlas.dm | 111 ++++++----- .../circuitboards/machinery/shieldgen.dm | 11 +- .../items/weapons/grenades/fragmentation.dm | 28 ++- .../objects/items/weapons/material/shards.dm | 5 + code/game/objects/structures.dm | 10 +- code/game/objects/structures/_machinery.dm | 2 + .../objects/structures/full_window_frame.dm | 6 + code/game/objects/structures/grille.dm | 5 +- .../machinery/computer/buildandrepair.dm | 2 + .../structures/machinery/doors/door.dm | 2 +- .../structures/machinery/vending/_vending.dm | 19 ++ code/game/objects/structures/window.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 5 +- .../mob/living/carbon/human/human_powers.dm | 2 +- .../living/simple_animal/hostile/adhomai.dm | 2 +- .../simple_animal/hostile/space_fauna.dm | 2 +- code/modules/organs/organ_external.dm | 8 +- .../overmap/ship_weaponry/_ship_ammunition.dm | 93 ++++++++- .../projectiles/_overmap_projectiles.dm | 159 ++++++++++----- .../ship_weaponry/weaponry/autocannon.dm | 12 +- .../overmap/ship_weaponry/weaponry/blaster.dm | 4 +- .../overmap/ship_weaponry/weaponry/bruiser.dm | 10 +- .../overmap/ship_weaponry/weaponry/coilgun.dm | 4 +- .../ship_weaponry/weaponry/francisca.dm | 12 +- .../ship_weaponry/weaponry/grauwolf.dm | 11 +- .../ship_weaponry/weaponry/lammergeier.dm | 4 +- .../ship_weaponry/weaponry/leviathan.dm | 4 +- .../ship_weaponry/weaponry/light_coilgun.dm | 4 +- .../overmap/ship_weaponry/weaponry/longbow.dm | 7 +- .../ship_weaponry/weaponry/nephilim.dm | 3 +- .../projectiles/guns/energy/special.dm | 101 ++++++++++ code/modules/projectiles/projectile.dm | 6 +- code/modules/projectiles/projectile/beams.dm | 2 +- .../modules/projectiles/projectile/bullets.dm | 10 +- code/modules/projectiles/projectile/energy.dm | 2 +- .../modules/projectiles/projectile/special.dm | 12 +- .../psionics/abilities/hollow_purple.dm | 2 +- code/modules/reagents/reagent_dispenser.dm | 26 +++ code/modules/shieldgen/_energy_field.dm | 23 +-- code/modules/shieldgen/energy_field.dm | 67 ++++++- code/modules/shieldgen/shield_capacitor.dm | 74 +++++-- code/modules/shieldgen/shield_gen.dm | 184 ++++++++++++++---- code/modules/shieldgen/shield_gen_external.dm | 12 ++ .../changelogs/Fenodyree-ShipCombatRework.yml | 16 ++ .../tgui/interfaces/ShieldCapacitor.tsx | 10 +- .../tgui/interfaces/ShieldGenerator.tsx | 9 +- 49 files changed, 859 insertions(+), 251 deletions(-) create mode 100644 html/changelogs/Fenodyree-ShipCombatRework.yml diff --git a/code/__DEFINES/_flags.dm b/code/__DEFINES/_flags.dm index 79d9e700376..fecfb93bb32 100644 --- a/code/__DEFINES/_flags.dm +++ b/code/__DEFINES/_flags.dm @@ -56,6 +56,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define PASSDOORHATCH (1<<15) #define PASSTRACE (1<<16) //Used by turrets in the check_trajectory proc to target mobs hiding behind certain things (such as closets) #define PASSRAILING (1<<17) +/// Allows you to pass over energy shields, these also have additional handling for blocking projectiles in their on_hit(). +#define PASSSHIELD (1<<18) //Movement Types #define GROUND (1<<0) diff --git a/code/__DEFINES/ship_weapons.dm b/code/__DEFINES/ship_weapons.dm index 0d9035029bf..4e3726744aa 100644 --- a/code/__DEFINES/ship_weapons.dm +++ b/code/__DEFINES/ship_weapons.dm @@ -23,6 +23,7 @@ #define SHIP_AMMO_IMPACT_HE "high explosive" #define SHIP_AMMO_IMPACT_PROBE "sensor probe" #define SHIP_AMMO_IMPACT_FMJ "full metal jacket" +#define SHIP_AMMO_IMPACT_FRAG "fragmentation" #define SHIP_AMMO_IMPACT_AP "armour-piercing" #define SHIP_AMMO_IMPACT_LASER "laser" #define SHIP_AMMO_IMPACT_BUNKERBUSTER "bunker-buster" diff --git a/code/__HELPERS/turfs.dm b/code/__HELPERS/turfs.dm index f93e5bbdc31..5e7be94c355 100644 --- a/code/__HELPERS/turfs.dm +++ b/code/__HELPERS/turfs.dm @@ -50,6 +50,8 @@ turfs += T if(turfs.len) return pick(turfs) + else + return null ///Returns a turf based on text inputs, original turf and viewing client /proc/parse_caught_click_modifiers(list/modifiers, turf/origin, client/viewing_client) diff --git a/code/controllers/subsystems/initialization/atlas.dm b/code/controllers/subsystems/initialization/atlas.dm index 3f0eae924bf..d14a5adab22 100644 --- a/code/controllers/subsystems/initialization/atlas.dm +++ b/code/controllers/subsystems/initialization/atlas.dm @@ -23,37 +23,50 @@ SUBSYSTEM_DEF(atlas) /** * Note that the dirs here are REVERSE because they're used for entry points, so it'd be the dir facing starboard for example. * These are strings because otherwise the list indexes would be out of bounds. Thanks BYOND. + * + * SOUTH = 1, NORTH = 2, WEST = 4, EAST = 8, + * NORTH-EAST = 5, SOUTH-EAST = 6, NORTH-WEST = 9, SOUTH-WEST = 10, */ var/list/naval_to_dir = list( - "1" = list( + "1" = list( //Ship Fore is facing North. (These are reversed, a shot travelling south would enter from the north.) "starboard" = WEST, "port" = EAST, "fore" = SOUTH, - "aft" = NORTH + "aft" = NORTH, + "aft-starboard" = NORTH|WEST, + "fore-starboard" = SOUTH|WEST, + "aft-port" = NORTH|EAST, + "fore-port" = SOUTH|EAST ), - "2" = list( + "2" = list( //Ship Fore is facing South. "starboard" = EAST, "port" = WEST, "fore" = NORTH, - "aft" = SOUTH + "aft" = SOUTH, + "aft-starboard" = SOUTH|EAST, + "fore-starboard" = NORTH|EAST, + "aft-port" = SOUTH|WEST, + "fore-port" = NORTH|WEST ), - "4" = list( + "4" = list( //Ship Fore is facing West. "starboard" = NORTH, "port" = SOUTH, "fore" = WEST, - "aft" = EAST + "aft" = EAST, + "aft-starboard" = EAST|NORTH, + "fore-starboard" = WEST|NORTH, + "aft-port" = EAST|SOUTH, + "fore-port" = WEST|SOUTH ), - "4" = list( - "starboard" = NORTH, - "port" = SOUTH, - "fore" = WEST, - "aft" = EAST - ), - "8" = list( + "8" = list( //Ship Fore is facing East. "starboard" = SOUTH, "port" = NORTH, "fore" = EAST, - "aft" = WEST + "aft" = WEST, + "aft-starboard" = WEST|SOUTH, + "fore-starboard" = EAST|SOUTH, + "aft-port" = WEST|NORTH, + "fore-port" = EAST|NORTH ) ) @@ -62,49 +75,49 @@ SUBSYSTEM_DEF(atlas) "1" = "aft", "2" = "fore", "4" = "port", - "5" = "port", - "6" = "port", + "5" = "aft-port", + "6" = "fore-port", "8" = "starboard", - "9" = "starboard", - "10" = "starboard" + "9" = "aft-starboard", + "10" = "fore-starboard" ), "2" = list( "1" = "fore", "2" = "aft", "4" = "starboard", - "5" = "starboard", - "6" = "starboard", + "5" = "fore-starboard", + "6" = "aft-starboard", "8" = "port", - "9" = "port", - "10" = "port" + "9" = "fore-port", + "10" = "aft-port" ), "4" = list( "1" = "starboard", "2" = "port", "4" = "aft", - "5" = "starboard", - "6" = "port", + "5" = "starboard-aft", + "6" = "port-aft", "8" = "fore", - "9" = "starboard", - "10" = "port" + "9" = "starboard-fore", + "10" = "port-fore" ), "5" = list( //northeast - "1" = "starboard", - "2" = "port", - "4" = "port", + "1" = "aft-starboard", + "2" = "fore-port", + "4" = "aft-port", "5" = "aft", "6" = "port", - "8" = "starboard", + "8" = "fore-starboard", "9" = "starboard", "10" = "fore" ), "6" = list( //southeast - "1" = "starboard", - "2" = "port", - "4" = "starboard", + "1" = "fore-starboard", + "2" = "aft-port", + "4" = "aft-starboard", "5" = "starboard", "6" = "aft", - "8" = "port", + "8" = "fore-port", "9" = "fore", "10" = "port" ), @@ -112,31 +125,31 @@ SUBSYSTEM_DEF(atlas) "1" = "port", "2" = "starboard", "4" = "fore", - "5" = "port", - "6" = "starboard", + "5" = "port-fore", + "6" = "starboard-fore", "8" = "aft", - "9" = "port", - "10" = "starboard" + "9" = "port-aft", + "10" = "starboard-aft" ), "9" = list( //northwest - "1" = "port", - "2" = "starboard", - "4" = "port", + "1" = "aft-port", + "2" = "fore-starboard", + "4" = "fore-port", "5" = "port", - "6" = "fore", - "8" = "starboard", + "6" = "aft-starboard", + "8" = "fore", "9" = "aft", "10" = "starboard" ), "10" = list( //southwest - "1" = "port", - "2" = "starboard", - "4" = "starboard", + "1" = "fore-port", + "2" = "aft-starboard", + "4" = "fore-starboard", "5" = "fore", "6" = "starboard", - "8" = "port", - "9" = "port", - "10" = "aft" + "8" = "aft-port", + "9" = "aft", + "10" = "port" ) ) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm index 99848dc4245..cdd3219aa4a 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/shieldgen.dm @@ -4,7 +4,9 @@ build_path = /obj/structure/machinery/shield_gen/external origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3) req_components = list( - "/obj/item/stock_parts/manipulator/pico" = 2, + "/obj/item/stock_parts/manipulator" = 2, + "/obj/item/stock_parts/micro_laser" = 2, + "/obj/item/stock_parts/capacitor" = 2, "/obj/item/stock_parts/subspace/transmitter" = 1, "/obj/item/stock_parts/subspace/crystal" = 1, "/obj/item/stock_parts/subspace/amplifier" = 1, @@ -17,7 +19,9 @@ build_path = /obj/structure/machinery/shield_gen origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3) req_components = list( - "/obj/item/stock_parts/manipulator/pico" = 2, + "/obj/item/stock_parts/manipulator" = 2, + "/obj/item/stock_parts/micro_laser" = 2, + "/obj/item/stock_parts/capacitor" = 2, "/obj/item/stock_parts/subspace/transmitter" = 1, "/obj/item/stock_parts/subspace/crystal" = 1, "/obj/item/stock_parts/subspace/amplifier" = 1, @@ -30,7 +34,8 @@ build_path = /obj/structure/machinery/shield_capacitor origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4) req_components = list( - "/obj/item/stock_parts/manipulator/pico" = 2, + "/obj/item/stock_parts/capacitor" = 4, + "/obj/item/stock_parts/micro_laser" = 1, "/obj/item/stock_parts/subspace/filter" = 1, "/obj/item/stock_parts/subspace/treatment" = 1, "/obj/item/stock_parts/subspace/analyzer" = 1, diff --git a/code/game/objects/items/weapons/grenades/fragmentation.dm b/code/game/objects/items/weapons/grenades/fragmentation.dm index bb12f49253d..cc87cc1be8d 100644 --- a/code/game/objects/items/weapons/grenades/fragmentation.dm +++ b/code/game/objects/items/weapons/grenades/fragmentation.dm @@ -1,8 +1,29 @@ -/proc/fragem(var/source,var/fragx,var/fragy,var/light_dam,var/flash_dam,var/p_dam,var/p_range,var/can_cover=TRUE,var/shard_range = 50) +/** + * Fragem works by shooting a projectile containing fragments at every tile in a circle around it. + * + * Source is the tile the projectiles spawn on. + * + * fragx and fragy are the upper and lower bounds of the random number of fragments produced. + * + * light_dam and flash_dam are the parameters for the explosion produced by the grenade. light_dam is the radius of minor explosive damage, flash_dam is the radius of the flash effect. + * + * p_dam is the damage of each individual fragments. + * + * p_range is the distance each projectile travels before losing a fragment. When a projectile loses all of its fragments, it is deleted. + * + * can_cover determines if a mob can lie on the source turf to absorb most of the fragments. + * + * shard_range is the maximum range of the projectiles produced by the fragem. This is separate from p_range to allow for projectiles that lose fragments over distance but have a hard maximum range. Default 50 + * + * spread_range is the radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern. Default 7 + * + * maim_rate is the bonus for projectiles to decapitate or gib limbs. Negative values reduce this chance, positive values increase it. There is a minimum maim multiplier of 0.1, see handle_limb_gibbing for details. + */ +/proc/fragem(var/source,var/fragx,var/fragy,var/light_dam,var/flash_dam,var/p_dam,var/p_range,var/can_cover=TRUE,var/shard_range = 50,var/spread_range = 7,var/maim_rate) var/turf/O = get_turf(source) var/fragger = rand(fragx,fragy) explosion(O, -1, -1, light_dam, flash_dam) - var/list/target_turfs = getcircle(O, 7) + var/list/target_turfs = getcircle(O, spread_range) var/fragments_per_projectile = round(fragger/target_turfs.len) for(var/turf/T in target_turfs) @@ -12,9 +33,10 @@ P.damage = p_dam P.pellets = fragments_per_projectile P.range_step = p_range + if (maim_rate) + P.maim_rate = maim_rate P.range = shard_range P.name = "shrapnel" - P.preparePixelProjectile(T, get_turf(source)) P.firer = source P.fired_from = source diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm index 2303abaf704..94d48999bd5 100644 --- a/code/game/objects/items/weapons/material/shards.dm +++ b/code/game/objects/items/weapons/material/shards.dm @@ -106,6 +106,11 @@ /obj/item/material/shard/shrapnel/Initialize(newloc, material_key) . = ..(loc, MATERIAL_STEEL) +/obj/item/material/shard/shrapnel/large/Initialize(newloc, material_key) //Shrapnel large enough to be removed by hand. Used by ship weapons. + . = ..(loc, MATERIAL_STEEL) + icon_state = "large" + w_class = WEIGHT_CLASS_NORMAL + /obj/item/material/shard/shrapnel/flechette/Initialize(newloc, material_key) . = ..(loc, MATERIAL_TITANIUM) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index fb2705f1b10..05ee754b08e 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -95,9 +95,13 @@ else dismantle_material = get_material() if(should_use_health && health <= 0) - build_amt /= rand(2, 4) //if the structure is destroyed by damage, it will yield less materials - for(var/i = 1 to build_amt) - dismantle_material.place_sheet(loc) + build_amt /= rand(2, 4) //if the structure is destroyed by damage, it will yield less materials. + build_amt = max(1, min(build_amt, 5)) //Bound between 5 and 1, as shards don't stack into sheets. + for(var/i = 1 to build_amt) + dismantle_material.place_shard(loc) + else + for(var/i = 1 to build_amt) + dismantle_material.place_sheet(loc) qdel(src) /obj/structure/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit) diff --git a/code/game/objects/structures/_machinery.dm b/code/game/objects/structures/_machinery.dm index f08c063abce..54099d1d51b 100644 --- a/code/game/objects/structures/_machinery.dm +++ b/code/game/objects/structures/_machinery.dm @@ -250,6 +250,8 @@ Class Procs: for(var/i = 1 to 2) if(prob(50)) metal_to_spawn++ + else + new /obj/item/material/shard(current_turf, DEFAULT_WALL_MATERIAL) if(metal_to_spawn) new /obj/item/stack/material/steel(get_turf(src), metal_to_spawn) if(!should_use_health) diff --git a/code/game/objects/structures/full_window_frame.dm b/code/game/objects/structures/full_window_frame.dm index dbe0d2a3ee4..9e4e414d438 100644 --- a/code/game/objects/structures/full_window_frame.dm +++ b/code/game/objects/structures/full_window_frame.dm @@ -6,6 +6,7 @@ maxhealth = OBJECT_HEALTH_MEDIUM color = COLOR_GRAY20 build_amt = 4 + pass_flags_self = PASSRAILING layer = WINDOW_FRAME_LAYER anchored = TRUE density = TRUE @@ -59,6 +60,11 @@ return TRUE return FALSE +/obj/structure/window_frame/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit) + . = ..() + if(. != BULLET_ACT_HIT) + return . + /obj/structure/window_frame/attackby(obj/item/attacking_item, mob/user) if((attacking_item.tool_behaviour == TOOL_SCREWDRIVER) && (istype(loc, /turf/simulated) || anchored)) if(has_glass_installed) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index f02cea9d467..65a82cc687e 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -159,6 +159,9 @@ var/damage = hitting_projectile.get_structure_damage() var/passthrough = 0 + if(piercing_hit) + return BULLET_ACT_FORCE_PIERCE //Shots that would have penetrated anyway don't get the damage reduction or chance to not penetrate. + if(!damage) return BULLET_ACT_BLOCK @@ -181,7 +184,7 @@ passthrough = 1 if(passthrough) - . = BULLET_ACT_HIT + . = BULLET_ACT_FORCE_PIERCE damage = between(0, (damage - hitting_projectile.damage)*(hitting_projectile.damage_type == DAMAGE_BRUTE? 0.4 : 1), 10) //if the bullet passes through then the grille avoids most of the damage add_damage(damage * 0.2) diff --git a/code/game/objects/structures/machinery/computer/buildandrepair.dm b/code/game/objects/structures/machinery/computer/buildandrepair.dm index 6a394a3ac97..9a863b95b79 100644 --- a/code/game/objects/structures/machinery/computer/buildandrepair.dm +++ b/code/game/objects/structures/machinery/computer/buildandrepair.dm @@ -8,6 +8,8 @@ icon_state = "0" build_amt = 5 var/state = 0 + maxhealth = OBJECT_HEALTH_MEDIUM + var/obj/item/circuitboard/circuit = null /obj/structure/computerframe/attackby(obj/item/attacking_item, mob/user) diff --git a/code/game/objects/structures/machinery/doors/door.dm b/code/game/objects/structures/machinery/doors/door.dm index 74a8e74cbfc..1de42cda807 100644 --- a/code/game/objects/structures/machinery/doors/door.dm +++ b/code/game/objects/structures/machinery/doors/door.dm @@ -256,7 +256,7 @@ // Emitter Blasts - these will eventually completely destroy the door, given enough time. if (damage > 90) - destroy_hits-- + destroy_hits -= (1 * hitting_projectile.anti_materiel_potential) if (destroy_hits <= 0) visible_message(SPAN_DANGER("\The [src.name] disintegrates!")) switch (hitting_projectile.damage_type) diff --git a/code/game/objects/structures/machinery/vending/_vending.dm b/code/game/objects/structures/machinery/vending/_vending.dm index a91013fcf10..5c6517d5783 100644 --- a/code/game/objects/structures/machinery/vending/_vending.dm +++ b/code/game/objects/structures/machinery/vending/_vending.dm @@ -63,6 +63,7 @@ density = 1 clicksound = SFX_BUTTON manufacturer = "idris" + maxhealth = OBJECT_HEALTH_HIGH // Every vending machine has one of these. /// `icon_state` when off. Defined on init. @@ -358,6 +359,24 @@ return return +/obj/structure/machinery/vending/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon) + var/turf/current_turf = get_turf(src) + if(current_turf) + var/list/stocked_products = list() + for(var/datum/data/vending_product/product in product_records) + if(product.amount > 0) + stocked_products += product + + var/items_to_drop = rand(1, 5) + while(items_to_drop-- > 0 && length(stocked_products)) + var/datum/data/vending_product/product = pick(stocked_products) + new product.product_path(current_turf) + product.amount-- + if(product.amount < 1) + stocked_products -= product + + . = ..() + /obj/structure/machinery/vending/emag_act(var/remaining_charges, var/mob/user) if (!emagged) src.emagged = 1 diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index ae4bd4de385..2cad8a5c5a4 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -114,7 +114,7 @@ if(. != BULLET_ACT_HIT) return . - add_damage(proj_damage) + add_damage(proj_damage, hitting_projectile.damage_flags(), hitting_projectile.damage_type, hitting_projectile.armor_penetration, hitting_projectile) /obj/structure/window/ex_act(severity) switch(severity) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index abbf39d2328..ab9eff1bfc8 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1429,14 +1429,15 @@ blood_color = null return 1 -/mob/living/carbon/human/get_visible_implants(var/class = 0) +/mob/living/carbon/human/get_visible_implants(var/class = 0) //Default class 0, class 1 is tiny objects, so class 0 will show everything. var/list/visible_implants = list() for(var/obj/item/organ/external/organ in src.organs) for(var/obj/item/O in organ.implants) if(!istype(O,/obj/item/implant) && (O.w_class > class) && !istype(O,/obj/item/material/shard/shrapnel)) visible_implants += O - + if(istype(O,/obj/item/material/shard/shrapnel) && (O.w_class > class + 2)) //If the shrapnel is larger than class 2 (small), it is visible. + visible_implants += O return(visible_implants) /mob/living/carbon/human/embedded_needs_process() diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 8b94f6fe909..d117a220282 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -541,7 +541,7 @@ sleep(10) playsound(src, 'sound/items/countdown.ogg', 125, 1) sleep(20) - explosion(src, -1, 1, 5) + explosion(get_turf(src), -1, 1, 5) src.gib() /mob/living/carbon/human/proc/hivenet() diff --git a/code/modules/mob/living/simple_animal/hostile/adhomai.dm b/code/modules/mob/living/simple_animal/hostile/adhomai.dm index e49647b5a7d..2e56f87dbf3 100644 --- a/code/modules/mob/living/simple_animal/hostile/adhomai.dm +++ b/code/modules/mob/living/simple_animal/hostile/adhomai.dm @@ -177,4 +177,4 @@ /obj/projectile/beam/tesla/plasmageist/on_hit(atom/target, blocked, def_zone) . = ..() if(isliving(target)) - explosion(target, -1, 0, 2) + explosion(get_turf(target), -1, 0, 2) diff --git a/code/modules/mob/living/simple_animal/hostile/space_fauna.dm b/code/modules/mob/living/simple_animal/hostile/space_fauna.dm index ed8cef6a75c..079214b7a7a 100644 --- a/code/modules/mob/living/simple_animal/hostile/space_fauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/space_fauna.dm @@ -254,7 +254,7 @@ return /mob/living/simple_animal/hostile/carp/bloater/proc/explode() - explosion(src, -1, 1, 2) + explosion(get_turf(src), -1, 1, 2) src.gib() /mob/living/simple_animal/hostile/carp/old diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index e75fbc3331c..bab91b6c150 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -594,13 +594,13 @@ if(W.w_class >= w_class && (dam_flags & DAMAGE_FLAG_EDGE)) edge_eligible = TRUE - if(!blunt_eligible && edge_eligible && (brute >= max_damage / (DROPLIMB_THRESHOLD_EDGE + maim_bonus_to_add))) + if(!blunt_eligible && edge_eligible && (brute >= max_damage / max((DROPLIMB_THRESHOLD_EDGE + maim_bonus_to_add), 0.1))) droplimb(0, DROPLIMB_EDGE) - else if(burn >= max_damage / ((dam_flags & DAMAGE_FLAG_LASER ? DROPLIMB_THRESHOLD_DESTROY_PROJECTILE : DROPLIMB_THRESHOLD_DESTROY) + maim_bonus_to_add)) + else if(burn >= max_damage / max((dam_flags & DAMAGE_FLAG_LASER ? DROPLIMB_THRESHOLD_DESTROY_PROJECTILE : DROPLIMB_THRESHOLD_DESTROY) + maim_bonus_to_add, 0.1)) droplimb(0, DROPLIMB_BURN) - else if(blunt_eligible && brute >= max_damage / ((dam_flags & DAMAGE_FLAG_BULLET ? DROPLIMB_THRESHOLD_DESTROY_PROJECTILE : DROPLIMB_THRESHOLD_DESTROY) + maim_bonus_to_add)) + else if(blunt_eligible && brute >= max_damage / max((dam_flags & DAMAGE_FLAG_BULLET ? DROPLIMB_THRESHOLD_DESTROY_PROJECTILE : DROPLIMB_THRESHOLD_DESTROY) + maim_bonus_to_add, 0.1)) droplimb(0, DROPLIMB_BLUNT) - else if(brute >= max_damage / (DROPLIMB_THRESHOLD_TEAROFF + maim_bonus_to_add)) + else if(brute >= max_damage / max((DROPLIMB_THRESHOLD_TEAROFF + maim_bonus_to_add), 0.1)) droplimb(0, DROPLIMB_EDGE) /obj/item/organ/external/heal_damage(brute, burn, internal = 0, robo_repair = 0) diff --git a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm index 5487794a2d7..25c7efec515 100644 --- a/code/modules/overmap/ship_weaponry/_ship_ammunition.dm +++ b/code/modules/overmap/ship_weaponry/_ship_ammunition.dm @@ -211,7 +211,7 @@ P.dir = S.dir P.icon_state = overmap_icon_state P.speed = get_speed() - P.entry_target = entry_point + P.submap_target = entry_point forceMove(P) log_and_message_admins("A projectile ([name]) has entered the Overmap! (JMP)") return TRUE @@ -227,11 +227,87 @@ anti_materiel_potential = 3 impact_sounds = list(BULLET_IMPACT_MEAT = SOUNDS_BULLET_MEAT, BULLET_IMPACT_METAL = SOUNDS_BULLET_METAL) accuracy = 100 - projectile_piercing = PASSMOB|PASSDOORS|PASSGLASS|PASSCLOSEDTURF|PASSWINDOW|PASSMACHINE|PASSBLOB|PASSFLAPS|PASSVEHICLE //It's a ship weapon let it try to penetrate everything. + projectile_piercing = PASSGLASS|PASSGRILLE|PASSBLOB|PASSMOB|PASSCLOSEDTURF|PASSMACHINE|PASSSTRUCTURE|PASSFLAPS|PASSDOORS|PASSVEHICLE|PASSWINDOW|PASSSHIELD //It's a ship weapon let it try to penetrate everything. pierce_decay_damage = 0.95 //Ship weapon projectiles don't lose much damage on pierce by default, but this can be set per projectile. + ///This is passed to explosion(), it is stored here for when projectiles hit shields and need to damage the shield as if they had exploded. + var/list/explosion_strength = list(0, 0, 0) + ///The last thing this projectile pierced. Used for spalling effects in on_hit() + var/atom/last_thing_pierced = null var/obj/item/ship_ammunition/ammo var/primed = FALSE - var/hit_target = FALSE //First target we hit. Used to report if a hit was successful. + ///First target we hit. Used to report if a hit was successful. + var/hit_target = FALSE + +/obj/projectile/ship_ammo/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) //When the projectile moves from a dense tile to a non-dense tile. + . = ..() + if(last_thing_pierced) + var/turf/entered_turf = isturf(loc) ? loc : get_turf(loc) + if(!(entered_turf.check_density(FALSE, TRUE))) //Checks for mobs so we don't spawn spalling inside the poor bridge crew, getting hit by the shell is bad enough. + handle_spalling(entered_turf, movement_dir, last_thing_pierced) + last_thing_pierced = null + +/** + * This creates a cone of shrapnel whenever a projectile pierces something dense and then crosses into a non-dense turf. + * This means that it won't spawn all the shrapnel inside the next thing it penetrates, to simulate spalling. + * All of of the projectile stats are set custom here, in future it might be good to set them dynmically based on the material of the thing pierced. + * Too many things don't have a material set, so that will have to wait. + */ +/obj/projectile/ship_ammo/proc/handle_spalling(atom/source, shrapnel_dir, thing_pierced) + set waitfor = FALSE + + src.visible_message(SPAN_DANGER("Huge chunks of shrapnel spray out from \the [thing_pierced] as \the [src] punches through!")) + + var/turf/O = get_turf(src) + var/list/target_turfs = list() + target_turfs += get_step(O, shrapnel_dir) + target_turfs += get_step(O, turn(shrapnel_dir, -45)) + target_turfs += get_step(O, turn(shrapnel_dir, 45)) + target_turfs += get_step(get_step(O, turn(shrapnel_dir, -45)), shrapnel_dir) + target_turfs += get_step(get_step(O, turn(shrapnel_dir, 45)), shrapnel_dir) + + for(var/turf/T in target_turfs) + var/obj/projectile/bullet/pellet/fragment/spall/P + if(istype(thing_pierced, /obj/structure/window)) + P = new /obj/projectile/bullet/pellet/fragment/spall/glass(O) + else if(istype(thing_pierced, /obj/structure/grille) || istype(thing_pierced, /obj/structure/window_frame)) + P = new /obj/projectile/bullet/pellet/fragment/spall/metalrod(O) + else if(istype(thing_pierced, /obj/structure/machinery/door/airlock)) + var/obj/structure/machinery/door/airlock/D = thing_pierced + if(D.window_material && D.window_material == SSmaterials.get_material_by_name(MATERIAL_GLASS)) + P = new /obj/projectile/bullet/pellet/fragment/spall/glass(O) + else + P = new /obj/projectile/bullet/pellet/fragment/spall(O) + else + P = new /obj/projectile/bullet/pellet/fragment/spall(O) + P.preparePixelProjectile(T, src) + P.firer = src + P.fired_from = thing_pierced + P.fire() + return TRUE + +/obj/projectile/bullet/pellet/fragment/spall + damage = 2 //Between 30 and 3 damage, depending on how close you are. Pilot suits are 30 ballistic armour, so they should survive a lot of spall. + pellets = 15 + armor_penetration = 10 + range_step = 1 + range = 15 + embed_chance = 80 //Make the people hit pull big chunks of shrapnel out by hand. + maim_rate = -1 //We don't want this to decapitate people in the unlucky event they get hit by the shell (or shell explosion) directly, then more shrapnel afterwards. + anti_materiel_potential = 2 //Enough to break windows. + name = "spall" + shrapnel_type = /obj/item/material/shard/shrapnel/large + +/obj/projectile/bullet/pellet/fragment/spall/glass + damage = 1 + armor_penetration = 5 + name = "glass" + shrapnel_type = /obj/item/material/shard + +/obj/projectile/bullet/pellet/fragment/spall/metalrod + damage = 3 + armor_penetration = 15 + name = "metal rod" + shrapnel_type = /obj/item/stack/rods /obj/projectile/ship_ammo/Destroy() ammo = null @@ -261,6 +337,14 @@ ) if(ammo && ammo.origin) ammo.origin.signal_hit(hit_data) + + if(istype(target, /turf/simulated/wall) || istype(target, /obj/structure/machinery/door)) //Stores the last thing we pierced for spalling purposes. + last_thing_pierced = target + else if (istype(target, /obj/structure)) //If it is a structure on a dense turf, that uses health, + if (target.should_use_health) + var/turf/T = get_turf(target) + if (T.check_density(FALSE, TRUE)) + last_thing_pierced = target return ..() /obj/projectile/ship_ammo/proc/on_translate(var/turf/entry_turf, var/target_turf) //This proc is called when the projectile enters a new ship's overmap zlevel. @@ -273,6 +357,5 @@ pellet.ammo.origin = ammo.origin pellet.ammo.impact_type = ammo.impact_type pellet.dir = dir - var/turf/front_turf = get_step(pellet, pellet.dir) - pellet.preparePixelProjectile(target_turf, front_turf) + pellet.preparePixelProjectile(target_turf, pellet, deviation = 3) //Deviation can be tuned. These spawn at the map edge so small deviations matter a lot. pellet.fire() diff --git a/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm b/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm index 271d704536c..49d6243b9cc 100644 --- a/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm +++ b/code/modules/overmap/ship_weaponry/projectiles/_overmap_projectiles.dm @@ -9,8 +9,8 @@ var/obj/item/ship_ammunition/ammunition /// The target is the actual overmap object we're hitting. var/atom/target - /// The entry target is where the projectile itself is going to spawn in world. - var/obj/entry_target + /// The submap target is passed by the targetting console, it is the landmark selected on that console. This is the point on the submap (eg. The Horizon's Bridge) that the projectile will aim for when it enters. + var/obj/submap_target var/range = OVERMAP_PROJECTILE_RANGE_MEDIUM var/current_range_counter = 0 // A projectile with 0 speed does not move. Note that this is the 'lag' variable on walk_towards! Lower speed is better. @@ -65,81 +65,132 @@ /obj/effect/overmap/projectile/Destroy() ammunition = null target = null - entry_target = null - walk(src, 0) + submap_target = null return ..() +///Gets the turf the projectile should enter on. If it's diagnonal it spawns in the corner, if it's orthogonal it spawns on the map edge relative to the target landmark. +/obj/effect/overmap/projectile/proc/get_entry_turf(atom/target_landmark, direction) + var/turf/target = locate(target_landmark.x, target_landmark.y, target_landmark.z) + if(!target_landmark || !target) + return 0 + + switch(direction) + if(NORTH|WEST) + target = get_ranged_target_turf(locate(1, world.maxy, target.z), direction, max(8, 2 * ammunition.burst)) //We offset the target turf from the edge by 8 (one screen), or twice the burst size. Bursts get their positions randomized up to twice the burst size. + if(NORTH|EAST) + target = get_ranged_target_turf(locate(world.maxx, world.maxy, target.z), direction, max(8, 2 * ammunition.burst)) + if(SOUTH|WEST) + target = get_ranged_target_turf(locate(1, 1, target.z), direction, max(8, 2 * ammunition.burst)) + if(SOUTH|EAST) + target = get_ranged_target_turf(locate(world.maxx, 1, target.z), direction, max(8, 2 * ammunition.burst)) + if(NORTH) + target = get_ranged_target_turf(locate(target.x, world.maxy, target.z), direction, max(8, 2 * ammunition.burst)) + if(SOUTH) + target = get_ranged_target_turf(locate(target.x, 1, target.z), direction, max(8, 2 * ammunition.burst)) + if(EAST) + target = get_ranged_target_turf(locate(world.maxx, target.y, target.z), direction, max(8, 2 * ammunition.burst)) + if(WEST) + target = get_ranged_target_turf(locate(1, target.y, target.z), direction, max(8, 2 * ammunition.burst)) + return target + /obj/effect/overmap/projectile/proc/prepare_for_entry() moving = FALSE entering = FALSE walk(src, 0) +///Checks if we can hit the thing we just bumped into. If we can, do the initial setup for the projectile entering the submab and continue. /obj/effect/overmap/projectile/proc/check_entry() . = FALSE if(!ammunition) return var/turf/T = get_turf(src) for(var/obj/effect/overmap/A in T) - if(ammunition && A == ammunition.origin) + if(ammunition && A == ammunition.origin) //Don't collide with the thing that fired us. continue if(istype(A, /obj/effect/overmap/visitable)) var/obj/effect/overmap/visitable/V = A - if((V.check_ownership(entry_target)) || (V == target)) //Target spotted! + if((V.check_ownership(submap_target)) || (V == target)) //If the visitable is owned by the target landmark, or is the target itself, we can hit it. + var/turf/target_turf = get_turf(submap_target) + var/obj/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type + prepare_for_entry() + widowmaker.ammo = ammunition + qdel(ammunition.original_projectile) //No longer needed. + ammunition.original_projectile = widowmaker + widowmaker.primed = TRUE + if(istype(V, /obj/effect/overmap/visitable/sector/exoplanet) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_PLANETS)) - . = TRUE - //Manually stopping because this proc needs to sleep for a bit. - prepare_for_entry() - var/obj/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type - widowmaker.ammo = ammunition - qdel(ammunition.original_projectile) //No longer needed. - var/turf/laze = get_turf(entry_target) - ammunition.original_projectile = widowmaker - playsound(laze, 'sound/weapons/gunshot/ship_weapons/orbital_travel.ogg', 60) - laze.visible_message(SPAN_DANGER("A bright star is getting closer from the sky...!")) - sleep(11 SECONDS) //Let the sound play! - widowmaker.primed = TRUE - widowmaker.forceMove(entry_target) - widowmaker.on_hit(laze, is_landmark_hit = TRUE) - log_and_message_admins("A projectile ([name]) has entered a z-level at [entry_target.name]! (JMP)") - say_dead_direct("A projectile ([name]) has entered a z-level at [entry_target.name]!") - qdel(widowmaker) - qdel(src) - else if(istype(V, /obj/effect/overmap/visitable) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_VISITABLES)) - . = TRUE - if(istype(V, /obj/effect/overmap/visitable/ship)) - var/obj/effect/overmap/visitable/ship/VS = V - if(istype(ammunition.origin, /obj/effect/overmap/visitable/ship)) - var/naval_heading = SSatlas.headings_to_naval["[VS.dir]"]["[ammunition.heading]"] - var/corrected_heading = SSatlas.naval_to_dir["[VS.fore_dir]"][naval_heading] - ammunition.heading = corrected_heading - else //if it's not a ship it doesn't have a fore direction, so we need to autocorrect - ammunition.heading = entry_target.dir - prepare_for_entry() - var/obj/projectile/ship_ammo/widowmaker = new ammunition.original_projectile.type - widowmaker.ammo = ammunition - qdel(ammunition.original_projectile) //No longer needed. - ammunition.original_projectile = widowmaker - widowmaker.primed = TRUE - var/turf/entry_turf_initial = get_ranged_target_turf(entry_target, REVERSE_DIR(entry_target.dir), 20) - var/entry_dir_choice = (dir & NORTH) || (dir & SOUTH) ? list(EAST, WEST) : list(NORTH, SOUTH) - var/turf/entry_turf = get_ranged_target_turf(entry_turf_initial, entry_dir_choice, 5) - widowmaker.forceMove(entry_turf) - widowmaker.dir = ammunition.heading - var/turf/target_turf = get_step(widowmaker, widowmaker.dir) - widowmaker.on_translate(entry_turf, target_turf) - log_and_message_admins("A projectile ([widowmaker.name]) has entered a z-level at [entry_target.name], with direction [dir2text(widowmaker.dir)]! (JMP)") - say_dead_direct("A projectile ([widowmaker.name]) has entered a z-level at [entry_target.name], with direction [dir2text(widowmaker.dir)]!") - widowmaker.preparePixelProjectile(target_turf, entry_turf) - widowmaker.fired_from = src - widowmaker.fire() - qdel(src) - if(istype(A, /obj/effect/overmap/event)) + return check_entry_exoplanet(widowmaker, target_turf, target_turf) + else if(istype(V, /obj/effect/overmap/visitable/ship) && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_VISITABLES)) + return check_entry_ship(widowmaker, target_turf, V) + else if(ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_VISITABLES) + return check_entry_visitable(widowmaker, target_turf) + + if(istype(A, /obj/effect/overmap/event)) //Check hazards last, in case a ship is hiding in a hazard. var/obj/effect/overmap/event/EV = A if(EV.can_be_destroyed && (ammunition.overmap_behaviour & SHIP_AMMO_CAN_HIT_HAZARDS)) . = TRUE qdel(EV) qdel(src) +///Handle bombardment of planets. Spawn the shot in a random open tile near the target and fire the projectile at it. If there is no open tile, call on_hit directly. This allows non-explosive weapons to strafe targets. +/obj/effect/overmap/projectile/proc/check_entry_exoplanet(obj/projectile/ship_ammo/widowmaker, turf/entry_turf, turf/laze) + . = TRUE + playsound(laze, 'sound/weapons/gunshot/ship_weapons/orbital_travel.ogg', 60) + laze.visible_message(SPAN_DANGER("A bright star is getting closer from the sky...!")) + sleep(11 SECONDS) //Let the sound play! + var/turf/nearest_valid_turf + + if (!(nearest_valid_turf = get_random_turf_in_range(entry_turf, 1, 5, TRUE, FALSE))) //Get a random empty turf between 1 and 5 tiles away from the target, if this fails call on_hit directly on the target turf. + widowmaker.forceMove(submap_target) + widowmaker.on_hit(laze, is_landmark_hit = TRUE) + log_and_message_admins("A ([widowmaker.name]) landed at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name]! (JMP)") + say_dead_direct("A ([widowmaker.name]) landed at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name]!") + qdel(widowmaker) + qdel(src) + + else //If there's an empty turf, spawn our projectile there and aim it at the target. + widowmaker.on_translate(entry_turf, nearest_valid_turf) + log_and_message_admins("A ([widowmaker.name]) landed at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name]! (JMP)") + say_dead_direct("A ([widowmaker.name]) landed at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name]!") + widowmaker.preparePixelProjectile(nearest_valid_turf, entry_turf) + widowmaker.fired_from = src + widowmaker.fire() + qdel(src) + +//Handle hitting ships. This requires translating the projectile's direction to account for the relative rotation of the ship. The projectile then spawns at the edge of the map, aimed at the target landmark. +/obj/effect/overmap/projectile/proc/check_entry_ship(obj/projectile/ship_ammo/widowmaker, turf/target_turf, obj/effect/overmap/visitable/ship/VS) + var/shot_direction = src.dir + var/naval_heading = SSatlas.headings_to_naval["[VS.dir]"]["[shot_direction]"] + var/corrected_heading = SSatlas.naval_to_dir["[VS.fore_dir]"][naval_heading] + shot_direction = corrected_heading + + var/turf/entry_turf = get_entry_turf(submap_target, REVERSE_DIR(shot_direction)) + widowmaker.forceMove(entry_turf) + widowmaker.dir = shot_direction + widowmaker.on_translate(entry_turf, target_turf) + log_and_message_admins("A ([widowmaker.name]) arrived [naval_heading] of \the [target] at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name], with direction [dir2text(shot_direction)]! (JMP)") + say_dead_direct("A ([widowmaker.name]) arrived [naval_heading] of \the [target] at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name], with direction [dir2text(shot_direction)]! (JMP)") + widowmaker.preparePixelProjectile(target_turf, entry_turf) + widowmaker.fired_from = src + widowmaker.fire() + qdel(src) + return TRUE + +///Handle hitting visitables that can't spin, such as asteroids and stations. Otherwise identical to hitting a ship. +/obj/effect/overmap/projectile/proc/check_entry_visitable(obj/projectile/ship_ammo/widowmaker, turf/target_turf) + var/shot_direction = src.dir + var/turf/entry_turf = get_entry_turf(submap_target, REVERSE_DIR(shot_direction)) + widowmaker.forceMove(entry_turf) + widowmaker.dir = shot_direction + widowmaker.on_translate(entry_turf, target_turf) + log_and_message_admins("A ([widowmaker.name]) flew in at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name], with direction [dir2text(shot_direction)]! (JMP)") + say_dead_direct("A ([widowmaker.name]) flew in at ([entry_turf.x], [entry_turf.y], [entry_turf.z]) aimed at [submap_target.name], with direction [dir2text(shot_direction)]! (JMP)") + widowmaker.preparePixelProjectile(target_turf, entry_turf) + widowmaker.fired_from = src + widowmaker.fire() + qdel(src) + return TRUE + /obj/effect/overmap/projectile/proc/move_to() if(isnull(target) || !speed) walk(src, 0) diff --git a/code/modules/overmap/ship_weaponry/weaponry/autocannon.dm b/code/modules/overmap/ship_weaponry/weaponry/autocannon.dm index 89102b085c0..bb0263de5d0 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/autocannon.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/autocannon.dm @@ -47,7 +47,7 @@ icon = 'icons/obj/guns/ship/ship_ammo_autocannon.dmi' icon_state = "autocannon_frag" overmap_icon_state = "cannon_salvo" - impact_type = SHIP_AMMO_IMPACT_HE + impact_type = SHIP_AMMO_IMPACT_FRAG ammunition_flags = SHIP_AMMO_FLAG_INFLAMMABLE|SHIP_AMMO_FLAG_VERY_HEAVY caliber = SHIP_CALIBER_60MM burst = 8 @@ -59,7 +59,8 @@ icon_state = "small" damage = 100 armor_penetration = 60 - penetrating = 3 + penetrating = 8 + anti_materiel_potential = 6 /obj/projectile/ship_ammo/autocannon/he name = "60mm HE shell" @@ -67,6 +68,7 @@ damage = 80 armor_penetration = 30 penetrating = 0 // Explodes on the hull. + explosion_strength = list(0, 2, 3) /obj/projectile/ship_ammo/autocannon/frag name = "60mm fragmentation shell" @@ -77,8 +79,8 @@ /obj/projectile/ship_ammo/autocannon/he/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() - explosion(target, 0, 2, 3) + explosion(get_turf(target), explosion_strength[1], explosion_strength[2], explosion_strength[3]) /obj/projectile/ship_ammo/autocannon/frag/on_hit(atom/target, blocked, def_zone, is_landmark_hit) - fragem(target, 70, 70, 1, 2, 15, 5, TRUE) - ..() + fragem(src, 70, 70, 1, 2, 12, 4, TRUE, spread_range = 5) //Targets 5 tiles around the impact site and shoots a projectile at them. + . = ..() diff --git a/code/modules/overmap/ship_weaponry/weaponry/blaster.dm b/code/modules/overmap/ship_weaponry/weaponry/blaster.dm index 0cc3a9036f9..1b3895c9daa 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/blaster.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/blaster.dm @@ -27,14 +27,16 @@ damage = 10000 armor_penetration = 1000 penetrating = 1 + explosion_strength = list(2, 5, 7) /obj/projectile/ship_ammo/blaster/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() + var/turf/epicenter = get_turf(target) if(ismob(target)) var/mob/M = target M.visible_message(SPAN_DANGER("\The [src] disintegrates [M]'s chest and blasts them into pieces!")) if(isturf(target) || isobj(target)) - explosion(target, 2, 5, 7) + explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3]) /obj/structure/machinery/ammunition_loader/blaster name = "mining blaster loader" diff --git a/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm b/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm index 5fe533279db..8768efada21 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/bruiser.dm @@ -119,10 +119,11 @@ damage = 150 armor_penetration = 75 penetrating = 0 + explosion_strength = list(1, 3, 6) /obj/projectile/ship_ammo/bruiser/he/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() - explosion(target, 1, 3, 6) + explosion(get_turf(target), explosion_strength[1], explosion_strength[2], explosion_strength[3]) /obj/projectile/ship_ammo/bruiser/real/he name = "178mm shell" @@ -130,6 +131,7 @@ damage = 350 armor_penetration = 125 penetrating = 0 + explosion_strength = list(3, 6, 8) /obj/projectile/ship_ammo/bruiser/real/ap name = "178mm shell" @@ -137,6 +139,7 @@ damage = 250 armor_penetration = 250 penetrating = 2 + explosion_strength = list(0, 2, 4) /obj/projectile/ship_ammo/bruiser/real/canister damage = 40 @@ -157,10 +160,11 @@ /obj/projectile/ship_ammo/bruiser/real/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() + var/turf/epicenter = get_turf(target) if(ammo.impact_type == SHIP_AMMO_IMPACT_HE) - explosion(target, 3, 6, 8) + explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3]) if(ammo.impact_type == SHIP_AMMO_IMPACT_AP) - explosion(target, 0, 2, 4) + explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3]) /obj/projectile/ship_ammo/bruiser/real/beehive/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() diff --git a/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm b/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm index 0de2ab9bebf..1e5f9f88a9b 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/coilgun.dm @@ -27,14 +27,16 @@ damage = 10000 armor_penetration = 1000 penetrating = 50 + explosion_strength = list(1, 5, 3) /obj/projectile/ship_ammo/coilgun/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() + var/turf/epicenter = get_turf(target) if(ismob(target)) var/mob/M = target M.visible_message(SPAN_DANGER("\The [src] blows [M]'s chest apart and punches straight through!")) if(isturf(target) || isobj(target)) - explosion(target, 1, 5, 3) + explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3]) /obj/structure/machinery/ammunition_loader/sol icon_state = "ammo_loader_sol" diff --git a/code/modules/overmap/ship_weaponry/weaponry/francisca.dm b/code/modules/overmap/ship_weaponry/weaponry/francisca.dm index 128686d24e2..26f8660a9d9 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/francisca.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/francisca.dm @@ -42,7 +42,7 @@ name_override = "40mm FRAG burst" desc = "A box of fragmentation shells for use in a Francisca rotary gun." icon_state = "box_inc" - impact_type = SHIP_AMMO_IMPACT_HE + impact_type = SHIP_AMMO_IMPACT_FRAG projectile_type_override = /obj/projectile/ship_ammo/francisca/frag /obj/projectile/ship_ammo/francisca @@ -50,20 +50,24 @@ icon_state = "small" damage = 50 armor_penetration = 50 - penetrating = 2 + penetrating = 3 + anti_materiel_potential = 10 /obj/projectile/ship_ammo/francisca/ap name = "40mm AP shell" damage = 30 armor_penetration = 100 - penetrating = 4 + penetrating = 8 + anti_materiel_potential = 8 /obj/projectile/ship_ammo/francisca/frag name = "40mm FRAG shell" + icon_state = "small" damage = 30 armor_penetration = 50 penetrating = 1 + anti_materiel_potential = 6 /obj/projectile/ship_ammo/francisca/frag/on_hit(atom/target, blocked, def_zone, is_landmark_hit) - fragem(src, 70, 70, 1, 2, 10, 4, TRUE) + fragem(src, 70, 70, 1, 2, 12, 4, TRUE, spread_range = 5) //Targets 5 tiles around the impact site and shoots a projectile at them. . = ..() diff --git a/code/modules/overmap/ship_weaponry/weaponry/grauwolf.dm b/code/modules/overmap/ship_weaponry/weaponry/grauwolf.dm index d9d26b16b43..058a128c32e 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/grauwolf.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/grauwolf.dm @@ -36,16 +36,21 @@ damage = 100 armor_penetration = 50 penetrating = 0 + anti_materiel_potential = 6 + explosion_strength = list(0, 2, 4) /obj/projectile/ship_ammo/grauwolf/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() + var/turf/epicenter = get_turf(target) if(ammo && ammo.impact_type == SHIP_AMMO_IMPACT_HE) - explosion(target, 0, 2, 4) + explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3]) else - explosion(target, 0, 1, 2) + explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3]) /obj/projectile/ship_ammo/grauwolf/ap name = "armor-piercing flak" damage = 50 armor_penetration = 50 - penetrating = 2 + penetrating = 8 + anti_materiel_potential = 8 + explosion_strength = list(0, 1, 2) diff --git a/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm b/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm index 73d858354bf..8ffe1792590 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/lammergeier.dm @@ -26,14 +26,16 @@ damage = 10000 armor_penetration = 1000 penetrating = 1 + explosion_strength = list(3, 6, 8) /obj/projectile/ship_ammo/lammergeier/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() + var/turf/epicenter = get_turf(target) if(ismob(target)) var/mob/M = target M.visible_message(SPAN_DANGER("\The [src] blows [M]'s chest apart and punches straight through!")) if(isturf(target) || isobj(target)) - explosion(target, 3, 6, 8) + explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3]) /obj/structure/machinery/ammunition_loader/lammergeier name = "typhoon cannon loader" diff --git a/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm b/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm index 98dc9afa324..cd8dc95be6a 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/leviathan.dm @@ -159,10 +159,10 @@ M.visible_message(SPAN_DANGER("[M] evaporates as they are engulfed by the beam!")) M.dust() return - explosion(target, 6, 6, 6) + explosion(get_turf(target), 6, 6, 6) else target.visible_message(SPAN_DANGER("A giant, purple laser descends from the sky!")) - explosion(target, 30, 30, 30) + explosion(get_turf(target), 30, 30, 30) /obj/structure/machinery/zat_lever name = "activation lever" diff --git a/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm b/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm index f3d9e570948..e60ba2924c8 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/light_coilgun.dm @@ -28,11 +28,13 @@ damage = 10000 armor_penetration = 1000 penetrating = 1 + explosion_strength = list(2, 3, 4) /obj/projectile/ship_ammo/coilgun/light/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() + var/turf/epicenter = get_turf(target) if(ismob(target)) var/mob/M = target M.visible_message(SPAN_DANGER("\The [src] blows [M]'s chest apart and punches straight through!")) if(isturf(target) || isobj(target)) - explosion(target, 2, 3, 4) + explosion(epicenter, explosion_strength[1], explosion_strength[2], explosion_strength[3]) diff --git a/code/modules/overmap/ship_weaponry/weaponry/longbow.dm b/code/modules/overmap/ship_weaponry/weaponry/longbow.dm index 02a7815b8f9..51d469aa739 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/longbow.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/longbow.dm @@ -26,6 +26,7 @@ /obj/projectile/ship_ammo/longbow/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() + var/turf/epicenter = get_turf(target) if(ismob(target)) var/mob/M = target M.visible_message(SPAN_DANGER("\The [src] blows [M] apart and punches straight through!")) @@ -39,13 +40,13 @@ qdel(target) penetrated = TRUE else - explosion(target, 4, 8, 12) + explosion(epicenter, 4, 8, 12) qdel(src) if(SHIP_AMMO_IMPACT_HE) - explosion(target, 6, 8, 10) + explosion(epicenter, 6, 8, 10) if(SHIP_AMMO_IMPACT_BUNKERBUSTER) target.visible_message(SPAN_DANGER("\The [src] punches straight through \the [target]!")) - explosion(target, 1, 2, 4) + explosion(epicenter, 1, 2, 4) target.ex_act(1) if(!QDELING(target) && target.density) qdel(target) diff --git a/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm b/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm index f7eab092117..2d910fc41c8 100644 --- a/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm +++ b/code/modules/overmap/ship_weaponry/weaponry/nephilim.dm @@ -50,6 +50,7 @@ damage = 40 armor_penetration = 40 penetrating = 0 + explosion_strength = list(0, 2, 3) /obj/projectile/ship_ammo/nephilim/ap @@ -60,4 +61,4 @@ /obj/projectile/ship_ammo/nephilim/he/on_hit(atom/target, blocked, def_zone, is_landmark_hit) . = ..() - explosion(target, 0, 2, 3) + explosion(get_turf(target), explosion_strength[1], explosion_strength[2], explosion_strength[3]) diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index ecddd1499a9..a6399f6af36 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -60,6 +60,8 @@ var/obj/projectile/energy/floramut/gene/projectile = . projectile.gene = gene +//*ADMIN SPAWN ONLY*/ + /obj/item/gun/energy/meteorgun name = "meteor gun" desc = "For the love of god, make sure you're aiming this the right way!" @@ -88,6 +90,105 @@ slot_flags = SLOT_BELT can_turret = FALSE +/obj/item/gun/energy/admin_ship_weapon + name = "ship artillery testing gun" + desc = "If you are holding this, admin-help, this fires ship-weapon bullets for testing purposes." + icon = 'icons/obj/guns/meteor_gun.dmi' + icon_state = "meteor_gun" + item_state = "meteor_gun" + slot_flags = SLOT_BELT + fire_sound='sound/weapons/gunshot/ship_weapons/flak_fire.ogg' + projectile_type = /obj/projectile/ship_ammo/autocannon + sel_mode = 1 + accuracy = 1 + max_shots = 1000 + self_recharge = TRUE + recharge_time = 5 + charge_meter = 0 + can_switch_modes = FALSE + + firemodes = list( + // Autocannon + list(mode_name="autocannon", burst=1, projectile_type=/obj/projectile/ship_ammo/autocannon), + list(mode_name="autocannon frag", burst=1, projectile_type=/obj/projectile/ship_ammo/autocannon/frag), + list(mode_name="autocannon he", burst=1, projectile_type=/obj/projectile/ship_ammo/autocannon/he), + // Blaster + list(mode_name="blaster", burst=1, projectile_type=/obj/projectile/ship_ammo/blaster), + // Bruiser + list(mode_name="bruiser canister", burst=1, projectile_type=/obj/projectile/ship_ammo/bruiser), + list(mode_name="bruiser flechette", burst=1, projectile_type=/obj/projectile/ship_ammo/bruiser/flechette), + list(mode_name="bruiser he", burst=1, projectile_type=/obj/projectile/ship_ammo/bruiser/he), + // Coilgun + list(mode_name="coilgun", burst=1, projectile_type=/obj/projectile/ship_ammo/coilgun), + list(mode_name="light coilgun", burst=1, projectile_type=/obj/projectile/ship_ammo/coilgun/light), + // Francisca + list(mode_name="francisca fmj", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca), + list(mode_name="francisca ap", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca/ap), + list(mode_name="francisca frag", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca/frag), + // Grauwolf + list(mode_name="grauwolf he", burst=1, projectile_type=/obj/projectile/ship_ammo/grauwolf), + list(mode_name="grauwolf ap", burst=1, projectile_type=/obj/projectile/ship_ammo/grauwolf/ap), + // Lammergeier + list(mode_name="lammergeier", burst=1, projectile_type=/obj/projectile/ship_ammo/lammergeier), + // Leviathan + list(mode_name="leviathan", burst=1, projectile_type=/obj/projectile/ship_ammo/leviathan), + // Longbow + list(mode_name="longbow ap", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow), + list(mode_name="longbow he", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow), + list(mode_name="longbow bunkerbuster", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow), + // Nephilim + list(mode_name="nephilim he", burst=1, projectile_type=/obj/projectile/ship_ammo/nephilim), + list(mode_name="nephilim ap", burst=1, projectile_type=/obj/projectile/ship_ammo/nephilim/ap), + ) + +/obj/item/gun/energy/admin_ship_weapon/consume_next_projectile() //Longbow ammo has warhead data that can't simply be set in the firemodes. + var/obj/projectile/ship_ammo/projectile = ..() + if(!projectile) + return projectile + + var/datum/firemode/current_mode = firemodes[sel_mode] + var/obj/item/ship_ammunition/loaded_ammo + switch(current_mode?.name) + if("longbow ap") + loaded_ammo = new /obj/item/ship_ammunition/longbow/preset_ap() + projectile.penetrating = 1 + if("longbow he") + loaded_ammo = new /obj/item/ship_ammunition/longbow/preset_he() + if("longbow bunkerbuster") + loaded_ammo = new /obj/item/ship_ammunition/longbow/preset_bb() + projectile.penetrating = 3 + + if(!loaded_ammo) + return projectile + + loaded_ammo.forceMove(projectile) + projectile.ammo = loaded_ammo + projectile.name = loaded_ammo.name + projectile.desc = loaded_ammo.desc + return projectile + +/obj/item/gun/energy/admin_ship_weapon/attack_self(mob/user) //So admins can shoot this at the ship from out of sight. + toggle_scope(2.0, user) + +/obj/item/gun/energy/admin_ship_weapon/crew + name = "horizon artillery testing gun" + desc = "If you are holding this, admin-help, this fires the horizon's guns" + + firemodes = list( + // Francisca + list(mode_name="francisca fmj", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca), + list(mode_name="francisca ap", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca/ap), + list(mode_name="francisca frag", burst=1, projectile_type=/obj/projectile/ship_ammo/francisca/frag), + // Grauwolf + list(mode_name="grauwolf he", burst=1, projectile_type=/obj/projectile/ship_ammo/grauwolf), + list(mode_name="grauwolf ap", burst=1, projectile_type=/obj/projectile/ship_ammo/grauwolf/ap), + // Longbow + list(mode_name="longbow ap", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow), + list(mode_name="longbow he", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow), + list(mode_name="longbow bunkerbuster", burst=1, projectile_type=/obj/projectile/ship_ammo/longbow), + ) + +//*END OF ADMIN SPAWN ONLY*// /obj/item/gun/energy/mindflayer name = "mind flayer" diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 07fe18585a0..8a012fcc23e 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -78,7 +78,7 @@ var/pierce_chance = 0 /// 0-1 multiplier, the projectile's damage is modified by multiplying this after each pierce. var/pierce_decay_damage = 0.7 - ///Used to determine whether or not to apply embed chances on hit. + ///Used to determine whether or not to apply embed chances on hit, also used in ship weapons for spalling. var/last_hit_pierced = FALSE /// If objects are below this layer, we pass through them. var/hit_threshhold = PROJECTILE_HIT_THRESHHOLD_LAYER @@ -1220,8 +1220,8 @@ var/obj/item/SP = new shrapnel_type(organ) SP.edge = TRUE SP.sharp = TRUE - SP.name = (name != "shrapnel") ? "[initial(name)] shrapnel" : "shrapnel" - SP.desc += " It looks like it was fired from [fired_from]." + SP.name = (name != "shrapnel") ? "[name] shrapnel" : "shrapnel" + SP.desc += " It looks like it came from from \a [fired_from]." SP.forceMove(organ) organ.embed(SP) return SP diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 7ce3d1727d5..f0f945fb636 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -397,7 +397,7 @@ M.emitter_blasts_taken += 1 else if(prob(33)) M.emitter_blasts_taken += 1 - explosion(target, -1, 0, 2) + explosion(get_turf(target), -1, 0, 2) . = ..() /obj/projectile/beam/thermaldrill diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index be1db6e3506..4d2a7d12837 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -481,7 +481,7 @@ /obj/projectile/bullet/gauss/highex/on_hit(atom/target, blocked, def_zone) . = ..() - explosion(target, -1, 0, 2) + explosion(get_turf(target), -1, 0, 2) if(ismovable(target)) var/atom/movable/T = target var/throwdir = get_dir(firer,target) @@ -502,7 +502,7 @@ armor_penetration = 5 /obj/projectile/bullet/cannonball/explosive/on_hit(atom/target, blocked, def_zone) - explosion(target, -1, 1, 2) + explosion(get_turf(target), -1, 1, 2) . = ..() /obj/projectile/bullet/nuke @@ -518,7 +518,7 @@ if(ishuman(mob)) mob.apply_damage(250, DAMAGE_RADIATION, damage_flags = DAMAGE_FLAG_DISPERSED) new /obj/effect/temp_visual/nuke(target.loc) - explosion(target,2,5,9) + explosion(get_turf(target),2,5,9) . = ..() /obj/projectile/bullet/shard @@ -542,7 +542,7 @@ var/heavy_impact_range = 1 /obj/projectile/bullet/recoilless_rifle/on_hit(atom/target, blocked, def_zone) - explosion(target, -1, heavy_impact_range, 2) + explosion(get_turf(target), -1, heavy_impact_range, 2) . = ..() /obj/projectile/bullet/peac @@ -562,7 +562,7 @@ /obj/projectile/bullet/peac/on_hit(atom/target, blocked, def_zone) . = ..() - explosion(target, devastation_range, heavy_impact_range, light_impact_range) + explosion(get_turf(target), devastation_range, heavy_impact_range, light_impact_range) /obj/projectile/bullet/peac/he name = "high-explosive missile" diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 091df069b5d..a19652b52be 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -115,7 +115,7 @@ if(ismob(target)) var/mob/M = target M.gib() - explosion(target, -1, 0, 5) + explosion(get_turf(target), -1, 0, 5) . = ..() /obj/projectile/energy/bfg/New() diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index bab1b6e2fcb..8c9d8bd4c8b 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -76,7 +76,7 @@ edge = TRUE /obj/projectile/bullet/gyro/on_hit(atom/target, blocked, def_zone) - explosion(target, -1, 0, 2) + explosion(get_turf(target), -1, 0, 2) . = ..() /obj/projectile/bullet/gyro/law @@ -87,7 +87,7 @@ /obj/projectile/bullet/gyro/law/on_hit(atom/target, blocked, def_zone) . = ..() - explosion(target, -1, 0, 2) + explosion(get_turf(target), -1, 0, 2) var/obj/T = target var/throwdir = get_dir(firer,target) T.throw_at(get_edge_target_turf(target, throwdir),3,3) @@ -215,7 +215,7 @@ edge = TRUE /obj/projectile/bullet/trod/on_hit(atom/target, blocked, def_zone) - explosion(target, 0, 0, 4) + explosion(get_turf(target), 0, 0, 4) . = ..() /obj/projectile/chameleon @@ -235,7 +235,7 @@ penetrating = 1 /obj/projectile/bullet/cannon/on_hit(atom/target, blocked, def_zone) - explosion(target, 1, 2, 3, 3) + explosion(get_turf(target), 1, 2, 3, 3) . = ..() //magic @@ -256,7 +256,7 @@ damage_type = DAMAGE_BURN /obj/projectile/magic/fireball/on_hit(atom/target, blocked, def_zone) - explosion(target, 0, 0, 4) + explosion(get_turf(target), 0, 0, 4) . = ..() /obj/projectile/magic/teleport //literaly bluespace crystal code, because i am lazy and it seems to work @@ -301,7 +301,7 @@ /obj/item/missile/throw_impact(atom/hit_atom) if(primed) - explosion(hit_atom, 0, 1, 2, 4) + explosion(get_turf(hit_atom), 0, 1, 2, 4) qdel(src) else ..() diff --git a/code/modules/psionics/abilities/hollow_purple.dm b/code/modules/psionics/abilities/hollow_purple.dm index 75cf907b339..5bf9f9a8f85 100644 --- a/code/modules/psionics/abilities/hollow_purple.dm +++ b/code/modules/psionics/abilities/hollow_purple.dm @@ -77,7 +77,7 @@ if(target != firer) var/mob/M = target M.gib() - explosion(target, 5, 5, 5) + explosion(get_turf(target), 5, 5, 5) . = ..() // /obj/projectile/hollow_purple/after_move() diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 7ca35691a6f..20beaa5d926 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -12,6 +12,7 @@ var/capacity = 1000 var/can_tamper = TRUE var/is_leaking = FALSE + maxhealth = OBJECT_HEALTH_HIGH /obj/structure/reagent_dispensers/mechanics_hints(mob/user, distance, is_adjacent) . += ..() @@ -97,6 +98,15 @@ var/splash_amount = min(amount_per_transfer_from_this,60) //Hard limit of 60 per process reagents.trans_to_turf(get_turf(src),splash_amount) +/obj/structure/reagent_dispensers/on_death(damage, damage_flags, damage_type, armor_penetration, obj/weapon) + if(!should_use_health) + return FALSE + if(reagents.total_volume > 0) + var/splash_area = max(1, round(sqrt(reagents.total_volume / 60.0))) //Splash roughly 60u on every turf. + reagents.splash_area(get_turf(src), splash_area, reagents.total_volume) + visible_message(SPAN_WARNING("As \the [src] is destroyed, it spills [reagents.get_primary_reagent_name()] everywhere!")) + dismantle() + //Fire extinguisher tank /obj/structure/reagent_dispensers/extinguisher @@ -255,6 +265,8 @@ amount_per_transfer_from_this = 45 can_tamper = FALSE reagents_to_add = list(/singleton/reagent/capsaicin/condensed = 1000) + maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass. + material = MATERIAL_GLASS /obj/structure/reagent_dispensers/virusfood name = "virus food dispenser" @@ -265,6 +277,8 @@ density = 0 can_tamper = FALSE reagents_to_add = list(/singleton/reagent/nutriment/virusfood = 1000) + maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass. + material = MATERIAL_GLASS /obj/structure/reagent_dispensers/acid name = "sulphuric acid dispenser" @@ -275,6 +289,8 @@ density = 0 can_tamper = FALSE reagents_to_add = list(/singleton/reagent/acid = 1000) + maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass. + material = MATERIAL_GLASS /obj/structure/reagent_dispensers/peppertank/luminol name = "luminol dispenser" @@ -282,6 +298,8 @@ icon_state = "luminoltank" amount_per_transfer_from_this = 50 reagents_to_add = list(/singleton/reagent/luminol = 1000) + maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass. + material = MATERIAL_GLASS /obj/structure/reagent_dispensers/peppertank/spacecleaner name = "cleaner dispenser" @@ -289,6 +307,8 @@ icon_state = "cleanertank" amount_per_transfer_from_this = 250 reagents_to_add = list(/singleton/reagent/spacecleaner = 1000) + maxhealth = OBJECT_HEALTH_VERY_LOW //Made of glass. + material = MATERIAL_GLASS //Water Cooler @@ -305,6 +325,8 @@ reagents_to_add = list(/singleton/reagent/water = 500) var/cups = 12 var/cup_type = /obj/item/reagent_containers/food/drinks/sillycup + maxhealth = OBJECT_HEALTH_LOW //Made of plastic. + material = MATERIAL_PLASTIC /obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/user) if(cups > 0) @@ -348,6 +370,8 @@ desc = "An empty keg." icon_state = "keg" amount_per_transfer_from_this = 10 + maxhealth = OBJECT_HEALTH_LOW //Made of wood + material = MATERIAL_WOOD /obj/structure/reagent_dispensers/keg/attackby(obj/item/attacking_item, mob/user) if (istype(attacking_item, /obj/item/stack/rods)) @@ -479,6 +503,8 @@ icon_state = "chemical_barrel" amount_per_transfer_from_this = 300 reagents_to_add = list(/singleton/reagent/radioactive_waste = 1000) + maxhealth = OBJECT_HEALTH_VERY_HIGH //Made of plasteel, because it's dangerous to break. + material = MATERIAL_PLASTEEL /obj/structure/reagent_dispensers/antagonist_hints(mob/user, distance, is_adjacent) . += ..() diff --git a/code/modules/shieldgen/_energy_field.dm b/code/modules/shieldgen/_energy_field.dm index bf74e5c8f50..4040952b431 100644 --- a/code/modules/shieldgen/_energy_field.dm +++ b/code/modules/shieldgen/_energy_field.dm @@ -5,11 +5,11 @@ /// The actual strength of the field. var/field_strength = 0 /// Current strengthening rate of a single field. - var/strengthen_rate = 0.2 - /// Maximum rate by which an energy field can be strengthened. - var/max_strengthen_rate = 0.5 - /// The percentage of the shield strength that needs to be replaced each second - var/dissipation_rate = 0.030 + var/strengthen_rate = 0.1 + /// Maximum rate by which an energy field can be strengthened. This is set by shield components in RefreshComponents, the initial rate with standard components is 0.5 (2 Manipulators, Rating 1: give 0.1 each) + var/max_strengthen_rate = 0.3 + /// The percentage of the shield strength that needs to be replaced each second. This is modified by shield components in RefreshComponents, the initial rate with standard components is 0.030. (2 Micro Lasers, Rating 1: subtract 0.003 each) + var/dissipation_rate = 0.036 /// An energy field will dissipate by at least this rate in renwicks per field tile (otherwise field would never dissipate completely as dissipation is a percentage) var/min_dissipation = 0.01 /// Our target field strength. @@ -18,8 +18,8 @@ var/max_field_strength = 10 /// The time passed since the last "fail", AKA losing charge faster than you can replenish it. var/time_since_fail = 100 - /// How many renwicks per watt. - var/energy_conversion_rate = 0.00006 + /// How many renwicks per watt. This is modified by shield components in RefreshComponents, the initial rate with standard components is 0.00005 (2 Capacitors, Rating 1: give 0.00001 each) + var/energy_conversion_rate = 0.00003 /// If the field is strong, then the energy field objects will turn dense. var/strong_field = FALSE @@ -32,6 +32,7 @@ * @assumed_charge: the charge that is given to this energy field. You have to get the required energy first, if you want a balanced field. */ /datum/energy_field/proc/handle_strength(assumed_charge = 0) + assumed_charge = max(assumed_charge, 0) if(length(field)) time_since_fail++ //the amount of renwicks that the generator can add this tick, over the entire field @@ -40,7 +41,7 @@ var/renwick_increase_per_field = total_renwick_increase / length(field) //per field tile var/renwick_upkeep_per_field = max(field_strength * dissipation_rate, min_dissipation) var/amount_to_strengthen = renwick_increase_per_field - renwick_upkeep_per_field - field_strength = min(field_strength + amount_to_strengthen, max_field_strength) + field_strength = max(min(field_strength + amount_to_strengthen, max_field_strength), 0) if(field_strength < 1) if(strong_field) @@ -61,7 +62,7 @@ var/required_energy = 0 if(length(field)) var/renwick_upkeep_per_field = max(field_strength * dissipation_rate, min_dissipation) - var/target_renwick_increase = min(target_field_strength - field_strength, strengthen_rate) + renwick_upkeep_per_field //per field tile + var/target_renwick_increase = max(min(target_field_strength - field_strength, strengthen_rate) + renwick_upkeep_per_field, 0) //per field tile required_energy = length(field) * target_renwick_increase / energy_conversion_rate return required_energy @@ -100,8 +101,8 @@ data["average_field"] = round(field_strength, 0.01) data["progress_field"] = (target_field_strength ? round(100 * field_strength / target_field_strength, 0.1) : "NA") - data["power_take"] = round(length(field) * max(field_strength * dissipation_rate, min_dissipation) / energy_conversion_rate) - data["shield_power"] = round(length(field) * min(strengthen_rate, target_field_strength - field_strength) / energy_conversion_rate) + data["power_take"] = round(length(field) * max(field_strength * dissipation_rate, min_dissipation) / energy_conversion_rate / 1000) //Divide by 100 to convert to kW + data["shield_power"] = round(max(length(field) * min(strengthen_rate, target_field_strength - field_strength) / energy_conversion_rate / 1000, 0)) //Divide by 100 to convert to kW data["strengthen_rate"] = (strengthen_rate * 10) data["max_strengthen_rate"] = (max_strengthen_rate * 10) data["target_field_strength"] = target_field_strength diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm index 3c9de1eefaf..574e13da3b8 100644 --- a/code/modules/shieldgen/energy_field.dm +++ b/code/modules/shieldgen/energy_field.dm @@ -18,6 +18,7 @@ var/ticks_recovering = 10 /// If strength goes is 1 or above, this is set to TRUE, this is to prevent flickering and animate being called constantly var/is_strong = FALSE + pass_flags_self = PASSSHIELD //Currently only ship weapons have this flag. atmos_canpass = CANPASS_ALWAYS @@ -42,6 +43,7 @@ energy_field.remove_individual_field(src) /obj/effect/energy_field/attackby(obj/item/attacking_item, mob/user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) user.do_attack_animation(src, attacking_item) if(attacking_item.force < 10) user.visible_message(SPAN_WARNING("[user] harmlessly attacks \the [src] with \the [attacking_item]."), @@ -65,17 +67,76 @@ damage_field(0.5 + severity) /obj/effect/energy_field/bullet_act(obj/projectile/hitting_projectile, def_zone, piercing_hit) - . = ..() + + var/initial_damage = hitting_projectile.get_structure_damage() + /** + * The shield has three possible interactions with a projectile: + * + * If the projectile is piercing (penetrating >= 1 and pierce_flags = PASSSHIELD), the shield will decrease what it can subsequently penetrate. + * The projectile will have it's pierces increased by half the shield's strength. If a projectile's pierces is greater than it's penetrating, it stops. + * + * Eg. A penetrating 10 shot hits a strength 10 shield. It will subsequently go through 4 additional walls (10/2 = 5, +1 for the shield tile), instead of the 10 it would originally. + */ + if(piercing_hit) + hitting_projectile.pierces += round((energy_field.field_strength / 2)) + if(hitting_projectile.pierces < hitting_projectile.penetrating) + visible_message(SPAN_WARNING("\The [src] flickers and fails as it is penetrated by the \the [hitting_projectile].")) + damage_field(initial_damage / 20) //The shield takes less damage if it is penetrated like this. + return BULLET_ACT_FORCE_PIERCE + + /** + * A projectile without pass_flags = PASSSHIELD will have its damage reduced by the shield, if its damage is reduced to zero it is blocked. + * A strong projectile hitting a weak shield will penetrate it. A strength 10 field will always block a projectile. + * The projectile's damage is multiplied by 1 minus the shield's strength divided by 10, then the shield's strength is subtracted from it's damage. + * + * Eg. A 50 damage projectile hits a 5 strength shield. (damage multiplier: 1 - 5/10 = 0.5), (shot damage: = 50 * 0.5 = 25), (final damage: 25 - 5 = 20). Penetrates. + * Therefore the shot would continue on, but only deal 20 damage when it hits. + * + * Eg. A 50 damage projectile hits a 9 strength shield. (damage multiplier: 1 - 9/10 = 0.1), (shot damage: = 50 * 0.1 = 5), (final damage: 5 - 9 = -4). Blocked. + */ + if(energy_field.field_strength < 10) //A strength 10 field will always block a projectile. Without modifications to the engines, one or more upgraded SMES units, or upgrades from research the Horizon cannot generate a field of strength 10 that covers the whole ship. + hitting_projectile.damage *= 1 - max(0, energy_field.field_strength / 10) + hitting_projectile.damage -= energy_field.field_strength + if(hitting_projectile.damage >= 0) + damage_field(initial_damage / 10) + visible_message(SPAN_WARNING("\The [src] flashes and depletes the [hitting_projectile]'s energy, but doesn't fully block it.")) + return BULLET_ACT_FORCE_PIERCE + else + visible_message(SPAN_WARNING("\The [src] shimmers and absorbs \the [hitting_projectile].")) + return BULLET_ACT_BLOCK + + /** + * An explosive projectile that fails to penetrate will be deleted before it can explode. + * All explosive ship weapons also have high damage, so this only really matters on a strength 10 shield. + * If the projectile is explosive, it deals whatever damage that explosion would have done to the shield. + */ + if(istype(hitting_projectile, /obj/projectile/ship_ammo)) + var/obj/projectile/ship_ammo/explosive_projectile = hitting_projectile + if(explosive_projectile.explosion_strength[3] || explosive_projectile.explosion_strength[2] || explosive_projectile.explosion_strength[1]) + for(var/obj/effect/energy_field/shield_tile in energy_field.field) + var/distance = get_dist(src, shield_tile) + if(distance <= explosive_projectile.explosion_strength[1]) + shield_tile.damage_field(3) + else if(distance <= explosive_projectile.explosion_strength[2]) + shield_tile.damage_field(2) + else if(distance <= explosive_projectile.explosion_strength[3]) + shield_tile.damage_field(1) + // explosive_projectile.explosion_strength = list(0, 0, 0) // Set the explosion strength to 0. + visible_message(SPAN_WARNING("\The [src] shimmers and absorbs \the [hitting_projectile].")) + return BULLET_ACT_BLOCK + + damage_field(initial_damage / 10) + + . = ..() //If we get down here fall back on normal piercing calculations, for normal projectiles hitting shields. if(. != BULLET_ACT_HIT) return . - damage_field(hitting_projectile.get_structure_damage() / 10) - /obj/effect/energy_field/proc/damage_field(var/severity) if(!severity) return damage += severity + energy_field.field_strength = max(energy_field.field_strength - (severity / length(energy_field.field)), 0) if(!(datum_flags & DF_ISPROCESSING)) // Start processing ONLY when we're damaged. Through processing, we're going to slowly climb back up to field strength. diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm index 5bbd8d2f3e1..990438e4851 100644 --- a/code/modules/shieldgen/shield_capacitor.dm +++ b/code/modules/shieldgen/shield_capacitor.dm @@ -14,13 +14,33 @@ var/stored_charge = 0 var/last_stored_charge = 0 var/time_since_fail = 100 - var/max_charge = 2e7 //20 MJ - var/max_charge_rate = 9000000 //9 MW + ///How much energy the capacitor can store, value is in Joules, displayed in the UI as MJ. This value is calculated in RefreshParts() based on the components used, the value listed here is what base components provides, changing the value only here will not do anything. + var/max_charge = 20 MEGA //200 MJ + ///How much energy the capacitor can absorb per second, value is in Watts, displayed in the UI as MW. This value is calculated in RefreshParts() based on the components used, the value listed here is what base components provides, changing the value only here will not do anything. + var/max_charge_rate = 9 MEGA WATTS //9 MW var/locked = FALSE - var/charge_rate = 100000 //100 kW + var/charge_rate = 100 KILO WATTS //100 kW var/obj/structure/machinery/shield_gen/owned_gen + component_types = list( + /obj/item/circuitboard/shield_cap, + /obj/item/stock_parts/capacitor = 4, + /obj/item/stock_parts/micro_laser = 1, + /obj/item/stock_parts/subspace/filter = 1, + /obj/item/stock_parts/subspace/treatment = 1, + /obj/item/stock_parts/subspace/analyzer = 1, + /obj/item/stock_parts/console_screen = 1, + /obj/item/stack/cable_coil = 5 + ) + +/obj/structure/machinery/shield_capacitor/upgrade_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Upgraded capacitors will increase capacity." + . += SPAN_NOTICE(" - The current capacity is [max_charge / 1e6] MJ") + . += "Upgraded microlasers will increase the charging rate." + . += SPAN_NOTICE(" - The current maximum charge rate is [max_charge_rate / 1e6] MW") + /obj/structure/machinery/shield_capacitor/Initialize() ..() return INITIALIZE_HINT_LATELOAD @@ -29,8 +49,9 @@ . = ..() for(var/obj/structure/machinery/shield_gen/possible_gen in range(1, src)) if(get_dir(src, possible_gen) == dir) - possible_gen.owned_capacitor = src - break + if(possible_gen.attach_capacitor(src)) + owned_gen = possible_gen + break /obj/structure/machinery/shield_capacitor/emag_act(var/remaining_charges, var/mob/user) if(prob(75)) @@ -40,8 +61,26 @@ updateDialog() spark(src, 5, GLOB.alldirs) +/obj/structure/machinery/shield_capacitor/RefreshParts() + ..() + max_charge = 0 + max_charge_rate = 6 MEGA WATTS //9 MW after base components. 15 MW with full upgrades. + + for(var/obj/item/stock_parts/P in component_parts) + if(iscapacitor(P)) + max_charge += P.rating * 5 MEGA + else if(ismicrolaser(P)) + max_charge_rate += P.rating * 3 MEGA WATTS + /obj/structure/machinery/shield_capacitor/attackby(obj/item/attacking_item, mob/user) + if(default_part_replacement(user, attacking_item)) + return TRUE + else if(default_deconstruction_screwdriver(user, attacking_item)) + return TRUE + else if(default_deconstruction_crowbar(user, attacking_item)) + return TRUE + if(istype(attacking_item, /obj/item/card/id)) if(allowed(user)) locked = !locked @@ -55,14 +94,14 @@ if(anchored) for(var/obj/structure/machinery/shield_gen/gen in range(1, src)) - if(get_dir(src, gen) == src.dir && !gen.owned_capacitor) - owned_gen = gen - owned_gen.owned_capacitor = src - owned_gen.updateDialog() + if(get_dir(src, gen) == src.dir) + if(gen.attach_capacitor(src)) + owned_gen = gen + break else - if(owned_gen && owned_gen.owned_capacitor == src) - owned_gen.owned_capacitor = null - owned_gen = null + if(owned_gen) + owned_gen.detach_capacitor(src) + owned_gen = null else ..() @@ -83,10 +122,10 @@ data["locked"] = locked data["active"] = active data["time_since_fail"] = time_since_fail - data["charge_rate"] = charge_rate - data["stored_charge"] = stored_charge - data["max_charge"] = max_charge - data["max_charge_rate"] = max_charge_rate + data["charge_rate"] = charge_rate / 1000 //UI expects kW + data["stored_charge"] = round(stored_charge / 1e6, 0.1) //UI expects MJ + data["max_charge"] = max_charge / 1e6 //UI expects MJ + data["max_charge_rate"] = max_charge_rate / 1000 //UI expects kW return data /obj/structure/machinery/shield_capacitor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) @@ -101,7 +140,8 @@ active = !active . = TRUE if("charge_rate") - charge_rate = between(10000, params["charge_rate"], max_charge_rate) + // UI sends kW; convert to W and clamp. + charge_rate = between(0 KILO WATTS, round(params["charge_rate"]) * 1000, max_charge_rate) . = TRUE /obj/structure/machinery/shield_capacitor/process() diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm index 74444065f45..7665d807b47 100644 --- a/code/modules/shieldgen/shield_gen.dm +++ b/code/modules/shieldgen/shield_gen.dm @@ -25,23 +25,52 @@ var/field_radius = 3 /// Maximum field radius. var/max_field_radius = 100 - /// The shield capacitor attached to this shield generator. - var/obj/structure/machinery/shield_capacitor/owned_capacitor + /// The shield capacitors attached to this shield generator. + var/list/owned_capacitors = list() /// If this shield generator supports multi-z. var/multiz = TRUE + ///How much the manipulator rating increases the maximum field strengthen rate. This increases how fast the shield can strengthen, allowing it to recover faster. + var/manipulator_bonus = 0.1 //Maximum recovery rate with base components is 0.5 renwicks per second, with maxed out manipulators it's 0.9 renwicks per second. + ///How much the capacitor rating increases the field conversion rate. This increases the efficiency of converting power into shield strength, decreasing all shield power costs. + var/capacitor_bonus = 0.000005 + ///How much the micro laser rating decreased the field dissipation rate. This reduces the amount of shield strength lost per tick, reducing the shield upkeep. + var/micro_laser_bonus = 0.002 + + component_types = list( + /obj/item/circuitboard/shield_gen, + /obj/item/stock_parts/manipulator = 2, + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stock_parts/capacitor = 2, + /obj/item/stock_parts/subspace/transmitter = 1, + /obj/item/stock_parts/subspace/crystal = 1, + /obj/item/stock_parts/subspace/amplifier = 1, + /obj/item/stock_parts/console_screen = 1, + /obj/item/stack/cable_coil = 5 + ) /obj/structure/machinery/shield_gen/Initialize() - for(var/obj/structure/machinery/shield_capacitor/possible_cap in range(1, src)) - if(get_dir(possible_cap, src) == possible_cap.dir) - owned_capacitor = possible_cap - break + owned_capacitors = list() + for(var/obj/structure/machinery/shield_capacitor/possible_cap in range(1, src)) //Attach nearby capacitors + attach_capacitor(possible_cap) energy_field = new(src, get_shielded_turfs()) . = ..() /obj/structure/machinery/shield_gen/Destroy() - owned_capacitor = null + for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors) //Detach any owned capacitors + detach_capacitor(cap) + owned_capacitors = list() return ..() +/obj/structure/machinery/shield_gen/upgrade_hints(mob/user, distance, is_adjacent) + . += ..() + . += "Upgraded manipulators will increase the maximum field strengthen rate." + . += SPAN_NOTICE("\t- The current maximum field strengthen rate is [energy_field.max_strengthen_rate] renwicks per second.") + . += "Upgraded capacitors will increase the field conversion rate." + . += SPAN_NOTICE("\t- The current field conversion efficiency increase is: [(initial(energy_field.energy_conversion_rate) + (2 * capacitor_bonus)) / energy_field.energy_conversion_rate * 100]%") + . += "Upgraded micro lasers will decrease the energy field dispersion rate." + . += SPAN_NOTICE("\t- The current field dissipation rate decrease is: [(initial(energy_field.dissipation_rate) - (2 * micro_laser_bonus)) / energy_field.dissipation_rate * 100]%") + + /obj/structure/machinery/shield_gen/emag_act(var/remaining_charges, var/mob/user) if(prob(75)) locked = !locked @@ -52,6 +81,13 @@ spark(src, 5, GLOB.alldirs) /obj/structure/machinery/shield_gen/attackby(obj/item/attacking_item, mob/user) + if(default_part_replacement(user, attacking_item)) + return TRUE + else if(default_deconstruction_screwdriver(user, attacking_item)) + return TRUE + else if(default_deconstruction_crowbar(user, attacking_item)) + return TRUE + if(istype(attacking_item, /obj/item/card/id)) if(allowed(user)) locked = !locked @@ -66,24 +102,41 @@ if(active) toggle() if(anchored) + // Attach nearby capacitors wrenching down the shield + owned_capacitors = list() for(var/obj/structure/machinery/shield_capacitor/cap in range(1, src)) - if(cap.owned_gen) - continue - if(get_dir(cap, src) == cap.dir && cap.anchored) - owned_capacitor = cap - owned_capacitor.owned_gen = src - break + attach_capacitor(cap) else - if(owned_capacitor && owned_capacitor.owned_gen == src) - owned_capacitor.owned_gen = null - owned_capacitor = null + // Detach any owned capacitors when unwrenching + for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors) + detach_capacitor(cap) + owned_capacitors = list() else ..() +/obj/structure/machinery/shield_gen/RefreshParts() + ..() + var/max_strengthen_rate_increase = 0 + var/energy_conversion_rate_increase = 0 + var/dissipation_rate_decrease = 0 + + for(var/obj/item/stock_parts/P in component_parts) + if(ismanipulator(P)) + max_strengthen_rate_increase += P.rating + else if(iscapacitor(P)) + energy_conversion_rate_increase += P.rating + else if(ismicrolaser(P)) + dissipation_rate_decrease += P.rating + + if(energy_field) + energy_field.max_strengthen_rate = initial(energy_field.max_strengthen_rate) + (max_strengthen_rate_increase * manipulator_bonus) + energy_field.energy_conversion_rate = initial(energy_field.energy_conversion_rate) + (energy_conversion_rate_increase * capacitor_bonus) + energy_field.dissipation_rate = max(0, initial(energy_field.dissipation_rate) - (dissipation_rate_decrease * micro_laser_bonus)) + energy_field.strengthen_rate = min(energy_field.strengthen_rate, energy_field.max_strengthen_rate) ///If the strengthen rate got decreased and the current strengthen rate is now above the max, reduce it to the max. + /obj/structure/machinery/shield_gen/attack_ai(mob/user) if(!ai_can_interact(user)) return - return attack_hand(user) /obj/structure/machinery/shield_gen/attack_hand(mob/user) if(stat & BROKEN) @@ -98,22 +151,38 @@ to_chat(user, SPAN_WARNING("The device needs to be bolted to the ground first.")) return else - if(owned_capacitor) - if(!((owned_capacitor in range(1, src)) && get_dir(owned_capacitor, src) == owned_capacitor.dir && owned_capacitor.anchored)) - if(owned_capacitor.owned_gen == src) - owned_capacitor.owned_gen = null - owned_capacitor = null - if(!owned_capacitor) + for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors) //Make sure the capacitors weren't blown up + if(!(cap in range(1, src)) || get_dir(cap, src) != cap.dir || !cap.anchored) + if(cap && cap.owned_gen == src) + cap.owned_gen = null + owned_capacitors -= cap + if(!owned_capacitors || owned_capacitors.len == 0) // Try to attach any valid adjacent capacitors for(var/obj/structure/machinery/shield_capacitor/cap in range(1, src)) - if(cap.owned_gen) - continue - if(get_dir(cap, src) == cap.dir && cap.anchored) - owned_capacitor = cap - owned_capacitor.owned_gen = src - updateDialog() - break + attach_capacitor(cap) return ui_interact(user) +/obj/structure/machinery/shield_gen/proc/attach_capacitor(obj/structure/machinery/shield_capacitor/cap) + if(!cap || cap.owned_gen || !cap.anchored) + return FALSE + if(!(cap in range(1, src)) || get_dir(cap, src) != cap.dir) + return FALSE + if(!owned_capacitors) + owned_capacitors = list() + owned_capacitors += cap + cap.owned_gen = src + updateDialog() + return TRUE + +/obj/structure/machinery/shield_gen/proc/detach_capacitor(obj/structure/machinery/shield_capacitor/cap) + if(!cap) + return FALSE + if(owned_capacitors && (cap in owned_capacitors)) + owned_capacitors -= cap + if(cap.owned_gen == src) + cap.owned_gen = null + updateDialog() + return TRUE + /obj/structure/machinery/shield_gen/process() if(active) if(!anchored) @@ -128,15 +197,41 @@ energy_field.handle_strength(assumed_charge) /** - * Called whenever the field needs to take charge from the capacitor. + * Called whenever the field needs to take charge from attached capacitors. */ /obj/structure/machinery/shield_gen/proc/assume_charge(required_energy) - if(!owned_capacitor || !owned_capacitor.active) + if(!owned_capacitors || owned_capacitors.len == 0) return 0 - var/assumed_charge = min(owned_capacitor.stored_charge, required_energy) - assumed_charge = max(assumed_charge, 0) - owned_capacitor.stored_charge -= assumed_charge - return assumed_charge + var/list/active_capacitors = list() + var/available_charge = 0 + for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors) //Loop through capacitors that can provide charge + if(!cap || !cap.active || cap.stored_charge <= 0) + continue + active_capacitors += cap + available_charge += cap.stored_charge + + if(!active_capacitors.len || available_charge <= 0) //If we have no capacitors, or they're not charged stop + return 0 + + var/assumed_charge = min(available_charge, required_energy) + if(assumed_charge >= available_charge) + for(var/obj/structure/machinery/shield_capacitor/cap in active_capacitors) + cap.stored_charge = 0 + return assumed_charge + + var/remaining = assumed_charge + for(var/i = 1, i <= active_capacitors.len, i++) + var/obj/structure/machinery/shield_capacitor/cap = active_capacitors[i] + var/took = (i == active_capacitors.len) ? remaining : round(assumed_charge * (cap.stored_charge / available_charge)) + took = min(took, cap.stored_charge, remaining) + if(took <= 0) + continue + cap.stored_charge -= took + remaining -= took + if(remaining <= 0) + break + + return assumed_charge - remaining /obj/structure/machinery/shield_gen/ex_act(var/severity) if(active) @@ -145,12 +240,18 @@ /obj/structure/machinery/shield_gen/proc/toggle() if(!active) - if(!owned_capacitor) + if(!owned_capacitors || owned_capacitors.len == 0) balloon_alert_to_viewers("no capacitor") return - else if(!owned_capacitor?.active) - balloon_alert_to_viewers("capacitor offline") - return + else + var/has_active = FALSE + for(var/obj/structure/machinery/shield_capacitor/cap in owned_capacitors) + if(cap && cap.active) + has_active = TRUE + break + if(!has_active) + balloon_alert_to_viewers("capacitors offline") + return active = !active update_icon() if(active) @@ -213,7 +314,8 @@ /obj/structure/machinery/shield_gen/ui_data(mob/user) var/list/data = list() - data["owned_capacitor"] = !!owned_capacitor + data["owned_capacitor"] = length(owned_capacitors) + data["owned_capacitor_count"] = length(owned_capacitors) data["active"] = active data["time_since_fail"] = energy_field ? energy_field.time_since_fail : 0 data["multiz"] = multiz diff --git a/code/modules/shieldgen/shield_gen_external.dm b/code/modules/shieldgen/shield_gen_external.dm index 1467af01a87..b157521d9b9 100644 --- a/code/modules/shieldgen/shield_gen_external.dm +++ b/code/modules/shieldgen/shield_gen_external.dm @@ -4,6 +4,18 @@ /obj/structure/machinery/shield_gen/external name = "hull shield generator" + component_types = list( + /obj/item/circuitboard/shield_gen_ex, + /obj/item/stock_parts/manipulator = 2, + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stock_parts/capacitor = 2, + /obj/item/stock_parts/subspace/transmitter = 1, + /obj/item/stock_parts/subspace/crystal = 1, + /obj/item/stock_parts/subspace/amplifier = 1, + /obj/item/stock_parts/console_screen = 1, + /obj/item/stack/cable_coil = 5 + ) + //Search for space turfs within range that are adjacent to a simulated turf. /obj/structure/machinery/shield_gen/external/get_shielded_turfs() var/list/out = list() diff --git a/html/changelogs/Fenodyree-ShipCombatRework.yml b/html/changelogs/Fenodyree-ShipCombatRework.yml new file mode 100644 index 00000000000..be4dda086d9 --- /dev/null +++ b/html/changelogs/Fenodyree-ShipCombatRework.yml @@ -0,0 +1,16 @@ +author: Fenodyree + +delete-after: True + +changes: + - rscadd: "Adds spalling when a projectile punches from a solid turf to an open turf. These are big chunks of shrapnel with low damage and high embed chance." + - rscadd: "Adds an admin only gun that fires ship weapon ammo." + - rscadd: "Makes several indestructible structures breakable: vending machines, computer frames, window frames and watertanks. They now also leave behind shrapnel instead of just steel sheets." + - rscadd: "Adds a negative maim chance, which reduces the chance of decapitation or limb loss." + - balance: "Reworks shields, they take more power and are generally weaker. In exchange they now block explosions and each generator can be upgraded with research components, in addition to accepting multiple capacitors." + - balance: "All non-exoplosive ship projectiles got buffs. All projectiles got additional anti-material. Armour piercing shells now penetrate many more things." + - balance: "Reworked overmap targetting. Shots now spawn on the map edge and aim at their target, instead of spawning near their target and aiming straight forwards." + - bugfix: "Fixes explosive projectiles destroying the thing they hit before the explosion can happen, causing them not to explode." + - bugfix: "Fixes projectiles not penetrating windows, because they hit the window frame which was indestructible." + - bugfix: "Fixes shrapnel getting misnamed, or named twice." + - bugfix: "Fixes shields having no click delay when attacked with melee weapons." diff --git a/tgui/packages/tgui/interfaces/ShieldCapacitor.tsx b/tgui/packages/tgui/interfaces/ShieldCapacitor.tsx index 5247d06608a..1f969faf5da 100644 --- a/tgui/packages/tgui/interfaces/ShieldCapacitor.tsx +++ b/tgui/packages/tgui/interfaces/ShieldCapacitor.tsx @@ -76,7 +76,7 @@ export const CapacitorWindow = (props, context) => { minValue={0} maxValue={data.max_charge} > - {data.stored_charge} / {data.max_charge} J + {data.stored_charge} / {data.max_charge} MJ @@ -84,10 +84,12 @@ export const CapacitorWindow = (props, context) => { value={data.charge_rate} minValue={0} maxValue={data.max_charge_rate} - step={10000} + step={100} stepPixelSize={3} - onDrag={(e, v) => act('charge_rate', { charge_rate: v })} - unit="W" + onDrag={(e, v) => + act('charge_rate', { charge_rate: Math.round(v) }) + } + unit="kW" /> diff --git a/tgui/packages/tgui/interfaces/ShieldGenerator.tsx b/tgui/packages/tgui/interfaces/ShieldGenerator.tsx index 306b6a550eb..deca4f407fa 100644 --- a/tgui/packages/tgui/interfaces/ShieldGenerator.tsx +++ b/tgui/packages/tgui/interfaces/ShieldGenerator.tsx @@ -5,6 +5,7 @@ import { Window } from '../layouts'; export type ShieldData = { owned_capacitor: BooleanLike; + owned_capacitor_count: number; active: BooleanLike; time_since_fail: number; multiz: BooleanLike; @@ -38,9 +39,9 @@ export const ShieldGenerator = (props, context) => { } > - + {data.owned_capacitor ? ( - Connected + Connected ({data.owned_capacitor_count}) ) : ( Not Found )} @@ -64,10 +65,10 @@ export const ShieldGenerator = (props, context) => { {data.average_field} Renwick ({data.progress_field}%) - {data.power_take} W + {data.power_take} kW - {data.shield_power} W + {data.shield_power} kW

    From bf1196e6f12fb826c250027a3a0909ddbd2c0f22 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 3 Jun 2026 14:20:24 -0400 Subject: [PATCH 40/68] High Gun Skill Fix (#22587) This fixes a math error that caused sufficiently high firearms skill to wrap back around to less accurate guns. The fix is pretty simple, if the calculated dispersion (in degrees) is a negative number, it instead becomes 0. The dispersion math downstream of this effectively treats dispersion as a magnitude, meaning -15 degrees of dispersion was the same thing as 15 degrees, when the intended interaction was "Having -15 degrees of dispersion offsets the penalty from less accurate guns". --- code/modules/projectiles/gun.dm | 2 +- html/changelogs/hellfirejag-dispersion-fix.yml | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/hellfirejag-dispersion-fix.yml diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index eea1678057d..ee43a4339f2 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -461,7 +461,7 @@ ABSTRACT_TYPE(/obj/item/gun) break var/acc = burst_accuracy[min(i, burst_accuracy.len)] - accuracy_decrease - var/disp = dispersion[min(i, dispersion.len)] + dispersion_increase + var/disp = max(0, dispersion[min(i, dispersion.len)] + dispersion_increase) process_accuracy(projectile, user, target, acc, disp) if(pointblank) diff --git a/html/changelogs/hellfirejag-dispersion-fix.yml b/html/changelogs/hellfirejag-dispersion-fix.yml new file mode 100644 index 00000000000..89ff62f264c --- /dev/null +++ b/html/changelogs/hellfirejag-dispersion-fix.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed negative dispersion (from high gun skill) sometimes wrapping back around to inaccurate guns again." From e9744f091c6dcd8fd96e60e933e9685fd7e4b750 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 3 Jun 2026 17:30:10 -0400 Subject: [PATCH 41/68] Fix Some More Mob Deletions (#22588) Fixes a few cases I missed of references that should have been nulled instead of deleted. --- code/modules/mob/living/carbon/human/human.dm | 2 +- code/modules/mob/living/living.dm | 4 ++-- code/modules/mob/mob.dm | 15 +++++++-------- ...lfirejag-clear-some-overlyaggressive-nulls.yml | 4 ++++ 4 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 html/changelogs/hellfirejag-clear-some-overlyaggressive-nulls.yml diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index ab9eff1bfc8..363485acba8 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -96,7 +96,7 @@ set_default_attack(species.unarmed_attacks[1]) /mob/living/carbon/human/Destroy(force) - QDEL_NULL(ghost_spawner) + ghost_spawner = null //Srom (Shared Dreaming) srom_pulled_by = null diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 73f60ce1c45..b4faa5b04eb 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -929,7 +929,7 @@ default behaviour is: QDEL_LIST(auras) QDEL_NULL(psi) QDEL_NULL(aiming) - QDEL_LIST(aimed_at_by) + aimed_at_by?.Cut() //Remove contained mobs if(loc) for(var/mob/M in contents) @@ -942,7 +942,7 @@ default behaviour is: available_maneuvers?.Cut() default_language = null QDEL_NULL(z_eye) - QDEL_NULL(last_weather) + last_weather = null return ..() /mob/living/proc/nervous_system_failure() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 95aa9ac0709..452ccef59c9 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1,5 +1,9 @@ /mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game. MOB_STOP_THINKING(src) + pulling?.pulledby = null + pulling = null + pullin?.icon_state = "pull0" + pullin = null // Delete and null the grab objects that are touching this mob. QDEL_LIST(grabbed_by) GLOB.mob_list -= src @@ -52,12 +56,7 @@ QDEL_NULL(zone_sel) machine = null - pulling?.pulledby = null - pulling = null - pullin?.icon_state = "pull0" - pullin = null - - QDEL_LIST(client_colors) + client_colors = null additional_vision_handlers?.Cut() pinned?.Cut() QDEL_LIST(embedded) @@ -70,7 +69,7 @@ s_active = null wear_mask = null QDEL_NULL(dna) - QDEL_NULL(LAssailant) + LAssailant = null spell_list?.Cut() lastarea = null control_object = null @@ -113,7 +112,7 @@ QDEL_NULL(narsimage) QDEL_NULL(narglow) QDEL_NULL(riftimage) - QDEL_NULL(bloody_hands_mob) + bloody_hands_mob = null QDEL_NULL(eyeobj) QDEL_NULL(bg) my_client = null diff --git a/html/changelogs/hellfirejag-clear-some-overlyaggressive-nulls.yml b/html/changelogs/hellfirejag-clear-some-overlyaggressive-nulls.yml new file mode 100644 index 00000000000..a38860898c7 --- /dev/null +++ b/html/changelogs/hellfirejag-clear-some-overlyaggressive-nulls.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - bugfix: "Fixed some references being deleted instead of nulled." From 96f67ce52437fedfd3145a8fefacab9fddd58e1d Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 4 Jun 2026 03:50:25 +0000 Subject: [PATCH 42/68] Automatic changelog compile [ci skip] --- html/changelogs/Fenodyree-ModlaserFixes.yml | 17 ------ .../changelogs/Fenodyree-ShipCombatRework.yml | 16 ----- html/changelogs/archive/2026-06.yml | 56 ++++++++++++++++++ html/changelogs/hazelmouse-demon.yml | 58 ------------------- html/changelogs/hellfirejag-anatomy-skill.yml | 4 -- ...ejag-clear-some-overlyaggressive-nulls.yml | 4 -- .../changelogs/hellfirejag-dispersion-fix.yml | 4 -- .../hellfirejag-mob-destroy-refactoring.yml | 12 ---- html/changelogs/hellfirejag-worm-harddel.yml | 4 -- html/changelogs/kermit-reade-accent-icon.yml | 7 --- html/changelogs/llywelwyn-chatlog.yml | 5 -- .../llywelwyn-loadout-colour-preview.yml | 4 -- .../llywelwyn-maptest-deleted-doors.yml | 4 -- 13 files changed, 56 insertions(+), 139 deletions(-) delete mode 100644 html/changelogs/Fenodyree-ModlaserFixes.yml delete mode 100644 html/changelogs/Fenodyree-ShipCombatRework.yml delete mode 100644 html/changelogs/hazelmouse-demon.yml delete mode 100644 html/changelogs/hellfirejag-anatomy-skill.yml delete mode 100644 html/changelogs/hellfirejag-clear-some-overlyaggressive-nulls.yml delete mode 100644 html/changelogs/hellfirejag-dispersion-fix.yml delete mode 100644 html/changelogs/hellfirejag-mob-destroy-refactoring.yml delete mode 100644 html/changelogs/hellfirejag-worm-harddel.yml delete mode 100644 html/changelogs/kermit-reade-accent-icon.yml delete mode 100644 html/changelogs/llywelwyn-chatlog.yml delete mode 100644 html/changelogs/llywelwyn-loadout-colour-preview.yml delete mode 100644 html/changelogs/llywelwyn-maptest-deleted-doors.yml diff --git a/html/changelogs/Fenodyree-ModlaserFixes.yml b/html/changelogs/Fenodyree-ModlaserFixes.yml deleted file mode 100644 index a908d9e4700..00000000000 --- a/html/changelogs/Fenodyree-ModlaserFixes.yml +++ /dev/null @@ -1,17 +0,0 @@ -author: Fenodyree - -delete-after: True - -changes: - - bugfix: "Fixes modular lasers improvement cap." - - bugfix: "Fixes negative initial values being handled incorrectly." - - bugfix: "Fixes some repair edge cases." - - bugfix: "Fixes welding repairs not needing eye protection." - - bugfix: "Fixes gattling laser mod having the wrong improvable variables." - - bugfix: "Fixes the weapon analyzer printout calculating modlaser stats incorrectly." - - bugfix: "Fixes high skill users not being able to field repair modlasers." - - bugfix: "Fixes the weapon analyzer ripping your combitool out of your hand." - - bugfix: "Fixes the weapon analyzer not being deconstructable." - - balance: "Drops the per var improvement cap by 50%, multiplicative scaling is no joke." - - diff --git a/html/changelogs/Fenodyree-ShipCombatRework.yml b/html/changelogs/Fenodyree-ShipCombatRework.yml deleted file mode 100644 index be4dda086d9..00000000000 --- a/html/changelogs/Fenodyree-ShipCombatRework.yml +++ /dev/null @@ -1,16 +0,0 @@ -author: Fenodyree - -delete-after: True - -changes: - - rscadd: "Adds spalling when a projectile punches from a solid turf to an open turf. These are big chunks of shrapnel with low damage and high embed chance." - - rscadd: "Adds an admin only gun that fires ship weapon ammo." - - rscadd: "Makes several indestructible structures breakable: vending machines, computer frames, window frames and watertanks. They now also leave behind shrapnel instead of just steel sheets." - - rscadd: "Adds a negative maim chance, which reduces the chance of decapitation or limb loss." - - balance: "Reworks shields, they take more power and are generally weaker. In exchange they now block explosions and each generator can be upgraded with research components, in addition to accepting multiple capacitors." - - balance: "All non-exoplosive ship projectiles got buffs. All projectiles got additional anti-material. Armour piercing shells now penetrate many more things." - - balance: "Reworked overmap targetting. Shots now spawn on the map edge and aim at their target, instead of spawning near their target and aiming straight forwards." - - bugfix: "Fixes explosive projectiles destroying the thing they hit before the explosion can happen, causing them not to explode." - - bugfix: "Fixes projectiles not penetrating windows, because they hit the window frame which was indestructible." - - bugfix: "Fixes shrapnel getting misnamed, or named twice." - - bugfix: "Fixes shields having no click delay when attacked with melee weapons." diff --git a/html/changelogs/archive/2026-06.yml b/html/changelogs/archive/2026-06.yml index d65211af8d1..44cea9c341e 100644 --- a/html/changelogs/archive/2026-06.yml +++ b/html/changelogs/archive/2026-06.yml @@ -95,3 +95,59 @@ - bugfix: Fixes Longbow shells exploding when mechs pick them up. MattAtlas: - admin: Added the Storyteller narrate panel for admins. +2026-06-04: + Fenodyree: + - bugfix: Fixes modular lasers improvement cap. + - bugfix: Fixes negative initial values being handled incorrectly. + - bugfix: Fixes some repair edge cases. + - bugfix: Fixes welding repairs not needing eye protection. + - bugfix: Fixes gattling laser mod having the wrong improvable variables. + - bugfix: Fixes the weapon analyzer printout calculating modlaser stats incorrectly. + - bugfix: Fixes high skill users not being able to field repair modlasers. + - bugfix: Fixes the weapon analyzer ripping your combitool out of your hand. + - bugfix: Fixes the weapon analyzer not being deconstructable. + - balance: Drops the per var improvement cap by 50%, multiplicative scaling is no + joke. + - rscadd: Adds spalling when a projectile punches from a solid turf to an open turf. + These are big chunks of shrapnel with low damage and high embed chance. + - rscadd: Adds an admin only gun that fires ship weapon ammo. + - rscadd: 'Makes several indestructible structures breakable: vending machines, + computer frames, window frames and watertanks. They now also leave behind shrapnel + instead of just steel sheets.' + - rscadd: Adds a negative maim chance, which reduces the chance of decapitation + or limb loss. + - balance: Reworks shields, they take more power and are generally weaker. In exchange + they now block explosions and each generator can be upgraded with research components, + in addition to accepting multiple capacitors. + - balance: All non-exoplosive ship projectiles got buffs. All projectiles got additional + anti-material. Armour piercing shells now penetrate many more things. + - balance: Reworked overmap targetting. Shots now spawn on the map edge and aim + at their target, instead of spawning near their target and aiming straight forwards. + - bugfix: Fixes explosive projectiles destroying the thing they hit before the explosion + can happen, causing them not to explode. + - bugfix: Fixes projectiles not penetrating windows, because they hit the window + frame which was indestructible. + - bugfix: Fixes shrapnel getting misnamed, or named twice. + - bugfix: Fixes shields having no click delay when attacked with melee weapons. + Hellfirejag: + - bugfix: Fixed a hard delete caused by worm monsters. + - bugfix: Fixed negative dispersion (from high gun skill) sometimes wrapping back + around to inaccurate guns again. + - bugfix: Comprehensively destroyed an extremely large number of niche hard dels + across the entire Atom-Human Hierarchy. + - bugfix: Fixed some references being deleted instead of nulled. + Hellfirejag, TheGreyWolf: + - rscadd: Implemented the Anatomy skill. Anatomy determines the quality of information + received when medically examining your own injuries. + Llywelwyn: + - bugfix: Saved chat logs are now written with the correct text/html file type. + - bugfix: Emote markup like *bold* and /italics/ once again renders in chat instead + of showing literal tags. + - code_imp: Door tests skip qdeleted doors, so they should no longer intermittently + fail when landing zone generation clears a ruin. + - bugfix: Colour chips in character setup are correctly coloured again. + hazelmouse: + - bugfix: Removed an erroneous scrubber in the bar. + kermit, louiseisnthome: + - imageadd: Changes the Reade accent icon from purple splodges to one that represents + the gas giant. diff --git a/html/changelogs/hazelmouse-demon.yml b/html/changelogs/hazelmouse-demon.yml deleted file mode 100644 index f82aada4f67..00000000000 --- a/html/changelogs/hazelmouse-demon.yml +++ /dev/null @@ -1,58 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# - (fixes bugs) -# wip -# - (work in progress) -# qol -# - (quality of life) -# soundadd -# - (adds a sound) -# sounddel -# - (removes a sound) -# rscadd -# - (adds a feature) -# rscdel -# - (removes a feature) -# imageadd -# - (adds an image or sprite) -# imagedel -# - (removes an image or sprite) -# spellcheck -# - (fixes spelling or grammar) -# experiment -# - (experimental change) -# balance -# - (balance changes) -# code_imp -# - (misc internal code change) -# refactor -# - (refactors code) -# config -# - (makes a change to the config files) -# admin -# - (makes changes to administrator tools) -# server -# - (miscellaneous changes to server) -################################# - -# Your name. -author: hazelmouse - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Removed an erroneous scrubber in the bar." diff --git a/html/changelogs/hellfirejag-anatomy-skill.yml b/html/changelogs/hellfirejag-anatomy-skill.yml deleted file mode 100644 index 04b9661a5cf..00000000000 --- a/html/changelogs/hellfirejag-anatomy-skill.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag, TheGreyWolf -delete-after: True -changes: - - rscadd: "Implemented the Anatomy skill. Anatomy determines the quality of information received when medically examining your own injuries." diff --git a/html/changelogs/hellfirejag-clear-some-overlyaggressive-nulls.yml b/html/changelogs/hellfirejag-clear-some-overlyaggressive-nulls.yml deleted file mode 100644 index a38860898c7..00000000000 --- a/html/changelogs/hellfirejag-clear-some-overlyaggressive-nulls.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed some references being deleted instead of nulled." diff --git a/html/changelogs/hellfirejag-dispersion-fix.yml b/html/changelogs/hellfirejag-dispersion-fix.yml deleted file mode 100644 index 89ff62f264c..00000000000 --- a/html/changelogs/hellfirejag-dispersion-fix.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed negative dispersion (from high gun skill) sometimes wrapping back around to inaccurate guns again." diff --git a/html/changelogs/hellfirejag-mob-destroy-refactoring.yml b/html/changelogs/hellfirejag-mob-destroy-refactoring.yml deleted file mode 100644 index 3855a8bcce0..00000000000 --- a/html/changelogs/hellfirejag-mob-destroy-refactoring.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: Hellfirejag - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - bugfix: "Comprehensively destroyed an extremely large number of niche hard dels across the entire Atom-Human Hierarchy." diff --git a/html/changelogs/hellfirejag-worm-harddel.yml b/html/changelogs/hellfirejag-worm-harddel.yml deleted file mode 100644 index 0be8f591bed..00000000000 --- a/html/changelogs/hellfirejag-worm-harddel.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - bugfix: "Fixed a hard delete caused by worm monsters." diff --git a/html/changelogs/kermit-reade-accent-icon.yml b/html/changelogs/kermit-reade-accent-icon.yml deleted file mode 100644 index 7d48272ba2e..00000000000 --- a/html/changelogs/kermit-reade-accent-icon.yml +++ /dev/null @@ -1,7 +0,0 @@ -################################ -author: kermit, louiseisnthome - -delete-after: True - -changes: - - imageadd: "Changes the Reade accent icon from purple splodges to one that represents the gas giant." diff --git a/html/changelogs/llywelwyn-chatlog.yml b/html/changelogs/llywelwyn-chatlog.yml deleted file mode 100644 index 9ea22710d6c..00000000000 --- a/html/changelogs/llywelwyn-chatlog.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Llywelwyn -delete-after: True -changes: - - bugfix: "Saved chat logs are now written with the correct text/html file type." - - bugfix: "Emote markup like *bold* and /italics/ once again renders in chat instead of showing literal tags." diff --git a/html/changelogs/llywelwyn-loadout-colour-preview.yml b/html/changelogs/llywelwyn-loadout-colour-preview.yml deleted file mode 100644 index 24f6e683bfc..00000000000 --- a/html/changelogs/llywelwyn-loadout-colour-preview.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Llywelwyn -delete-after: True -changes: - - bugfix: "Colour chips in character setup are correctly coloured again." diff --git a/html/changelogs/llywelwyn-maptest-deleted-doors.yml b/html/changelogs/llywelwyn-maptest-deleted-doors.yml deleted file mode 100644 index 7d15800d332..00000000000 --- a/html/changelogs/llywelwyn-maptest-deleted-doors.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Llywelwyn -delete-after: True -changes: - - code_imp: "Door tests skip qdeleted doors, so they should no longer intermittently fail when landing zone generation clears a ruin." From 2bc651205a07ac75f640adf7fac147f1ecafeed3 Mon Sep 17 00:00:00 2001 From: Birigilis Date: Thu, 4 Jun 2026 12:42:25 +0300 Subject: [PATCH 43/68] Decreases the TC-cost of shotgun slugs (#22563) Shotguns are very cool but they sadly do not perform that well. Shotguns are overshadowed by all other weapon types (SMGs, ARs and even some pistols), and the only viable ammunition that makes shotguns viable (slugs) is incredibly expensive to get as an antag. This PR adds a new ammunition box to the uplink that includes 8 slugs for only 2 TC, and also reduces the TC cost of the assault shotgun's magazines to more reasonable amounts. --------- Co-authored-by: bovvv --- code/datums/uplink/ammunition.dm | 14 +++--- html/changelogs/Birigilis-PR-#22563.yml | 58 +++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 html/changelogs/Birigilis-PR-#22563.yml diff --git a/code/datums/uplink/ammunition.dm b/code/datums/uplink/ammunition.dm index 3d4fa95a9be..c20e75fb3eb 100644 --- a/code/datums/uplink/ammunition.dm +++ b/code/datums/uplink/ammunition.dm @@ -123,11 +123,11 @@ path = /obj/item/ammo_magazine/super_heavy desc = "A spare magazine, for the super heavy K2557 pistol." -/datum/uplink_item/item/ammo/shotgun_slug - name = "Shotgun Slug" - telecrystal_cost = 1 - path = /obj/item/ammo_casing/shotgun - desc = "A shotgun slug." +/datum/uplink_item/item/ammo/shotgun_slugs + name = "Box of Slug Shells" + telecrystal_cost = 2 + path = /obj/item/storage/box/shells/slugs + desc = "Contains eight shotgun slug shells." /datum/uplink_item/item/ammo/tungsten_ammo_box name = "Tungsten Ammo Box" @@ -137,13 +137,13 @@ /datum/uplink_item/item/ammo/slug_magazine name = "Slug Magazine" - telecrystal_cost = 8 + telecrystal_cost = 2 path = /obj/item/ammo_magazine/assault_shotgun desc = "A magazine for an assault shotgun, loaded with slug shells." /datum/uplink_item/item/ammo/buckshot_magazine name = "Buckshot Magazine" - telecrystal_cost = 4 + telecrystal_cost = 1 path = /obj/item/ammo_magazine/assault_shotgun/shells desc = "A magazine for an assault shotgun, loaded with buckshot shells." diff --git a/html/changelogs/Birigilis-PR-#22563.yml b/html/changelogs/Birigilis-PR-#22563.yml new file mode 100644 index 00000000000..694304b44f4 --- /dev/null +++ b/html/changelogs/Birigilis-PR-#22563.yml @@ -0,0 +1,58 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: Baldos + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - balance: "Added a new box to the uplink that contains 8 shotgun slugs for 2 TC, and reduced the cost of Assault Shotgun's magazines." From cb981d44ce739a7160a05901e277f60f5a3a91d0 Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Thu, 4 Jun 2026 05:43:58 -0400 Subject: [PATCH 44/68] Mindblanker Tweaks (#22553) This was kind of a harsh mechanic to surprise players with, and turns out it doesn't feel that great to tell them "Surprise your skill points don't matter here". So this PR tweaks the "Empathy Penalty" from Mindblanker and PsiProtect pills to 'only' cut the morale modifier from those skills in half, rather than fully negating it. --- code/datums/components/psionics/psiblock_drugs.dm | 6 +++--- .../organs/subtypes/augment/augments/mind_blanker.dm | 6 +++--- html/changelogs/hellfirejag-mindblanker-tweaks.yml | 4 ++++ 3 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 html/changelogs/hellfirejag-mindblanker-tweaks.yml diff --git a/code/datums/components/psionics/psiblock_drugs.dm b/code/datums/components/psionics/psiblock_drugs.dm index 5d94738764b..9d385adb854 100644 --- a/code/datums/components/psionics/psiblock_drugs.dm +++ b/code/datums/components/psionics/psiblock_drugs.dm @@ -63,7 +63,7 @@ return to_chat(minister, SPAN_BAD("Why should you care how [ministree] feels?")) - *moodlet_value = 0 + *moodlet_value = *moodlet_value * 0.5 /datum/component/timed_life/psiblock_drugs/proc/modify_ministry_receiving(ministree, minister, moodlet_value) SIGNAL_HANDLER @@ -71,7 +71,7 @@ return to_chat(ministree, SPAN_BAD("You feel nothing from [minister]'s words.")) - *moodlet_value = 0 + *moodlet_value = *moodlet_value * 0.5 /datum/component/timed_life/psiblock_drugs/proc/modify_leadership_empathy(leader, moodlet_value) SIGNAL_HANDLER @@ -79,7 +79,7 @@ return to_chat(leader, SPAN_BAD("Why should you care about how others feel?")) - *moodlet_value = 0 + *moodlet_value = *moodlet_value * 0.5 /datum/component/timed_life/psiblock_drugs/process(seconds_per_tick) diff --git a/code/modules/organs/subtypes/augment/augments/mind_blanker.dm b/code/modules/organs/subtypes/augment/augments/mind_blanker.dm index d431215c6fb..a6f2cff8e91 100644 --- a/code/modules/organs/subtypes/augment/augments/mind_blanker.dm +++ b/code/modules/organs/subtypes/augment/augments/mind_blanker.dm @@ -64,7 +64,7 @@ return to_chat(minister, SPAN_BAD("Why should you care how [ministree] feels?")) - *moodlet_value = 0 + *moodlet_value = *moodlet_value * 0.5 /obj/item/organ/internal/augment/bioaug/mind_blanker/proc/modify_ministry_receiving(ministree, minister, moodlet_value) SIGNAL_HANDLER @@ -72,7 +72,7 @@ return to_chat(ministree, SPAN_BAD("You feel nothing from [minister]'s words.")) - *moodlet_value = 0 + *moodlet_value = *moodlet_value * 0.5 /obj/item/organ/internal/augment/bioaug/mind_blanker/proc/modify_leadership_empathy(leader, moodlet_value) SIGNAL_HANDLER @@ -80,7 +80,7 @@ return to_chat(leader, SPAN_BAD("Why should you care about how others feel?")) - *moodlet_value = 0 + *moodlet_value = *moodlet_value * 0.5 /obj/item/organ/internal/augment/bioaug/mind_blanker_lethal name = "lethal mind blanker" diff --git a/html/changelogs/hellfirejag-mindblanker-tweaks.yml b/html/changelogs/hellfirejag-mindblanker-tweaks.yml new file mode 100644 index 00000000000..c716ab2b1e9 --- /dev/null +++ b/html/changelogs/hellfirejag-mindblanker-tweaks.yml @@ -0,0 +1,4 @@ +author: Hellfirejag +delete-after: True +changes: + - balance: "Tweaked the empathy penalty from mindblankers and PsiProtect drugs to only cut the morale modifiers from Ministry and Leadership in half, rather than fully negate them." From 0328d7f88c9a7429d08590e8e6fad70ba7d5d8af Mon Sep 17 00:00:00 2001 From: FabianK3 <21039694+FabianK3@users.noreply.github.com> Date: Thu, 4 Jun 2026 11:44:19 +0200 Subject: [PATCH 45/68] Refactor do-not-merge CI check to run on merge queue (#22444) # Summary This PR updates the CI check running on labels like 'changes required'. ## Changes - Refactors DNM CI check to run on merge queue events only instead of open PRs to avoid confusion on the state of the PR code-wise. This is an iteration of #22436 --- .github/workflows/enforce_merge_blockers.yaml | 5 +++-- .../fabiank3-refactore-prevent-merge-ci-check.yml | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/fabiank3-refactore-prevent-merge-ci-check.yml diff --git a/.github/workflows/enforce_merge_blockers.yaml b/.github/workflows/enforce_merge_blockers.yaml index b579d6d115e..024e0480b15 100644 --- a/.github/workflows/enforce_merge_blockers.yaml +++ b/.github/workflows/enforce_merge_blockers.yaml @@ -1,8 +1,9 @@ name: "'Do Not Merge' Blockers" on: - pull_request: - types: [synchronize, opened, labeled, unlabeled] + merge_group: + branches: + - master jobs: donotmerge-blocker: diff --git a/html/changelogs/fabiank3-refactore-prevent-merge-ci-check.yml b/html/changelogs/fabiank3-refactore-prevent-merge-ci-check.yml new file mode 100644 index 00000000000..62f55ae91f0 --- /dev/null +++ b/html/changelogs/fabiank3-refactore-prevent-merge-ci-check.yml @@ -0,0 +1,6 @@ +author: FabianK3 + +delete-after: True + +changes: + - refactor: "Update the do-not-merge GitHub CI check to fail on merge, not while the PR is open." From 8a67a8d0cdbed377d3307a990539e8025ef4f040 Mon Sep 17 00:00:00 2001 From: FabianK3 <21039694+FabianK3@users.noreply.github.com> Date: Thu, 4 Jun 2026 14:50:33 +0200 Subject: [PATCH 46/68] Revert "Refactor do-not-merge CI check to run on merge queue" (#22595) Reverts Aurorastation/Aurora.3#22444 GitHub actions are being funny, this apparently doesn't work like that. --- .github/workflows/enforce_merge_blockers.yaml | 5 ++--- .../fabiank3-refactore-prevent-merge-ci-check.yml | 6 ------ 2 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 html/changelogs/fabiank3-refactore-prevent-merge-ci-check.yml diff --git a/.github/workflows/enforce_merge_blockers.yaml b/.github/workflows/enforce_merge_blockers.yaml index 024e0480b15..b579d6d115e 100644 --- a/.github/workflows/enforce_merge_blockers.yaml +++ b/.github/workflows/enforce_merge_blockers.yaml @@ -1,9 +1,8 @@ name: "'Do Not Merge' Blockers" on: - merge_group: - branches: - - master + pull_request: + types: [synchronize, opened, labeled, unlabeled] jobs: donotmerge-blocker: diff --git a/html/changelogs/fabiank3-refactore-prevent-merge-ci-check.yml b/html/changelogs/fabiank3-refactore-prevent-merge-ci-check.yml deleted file mode 100644 index 62f55ae91f0..00000000000 --- a/html/changelogs/fabiank3-refactore-prevent-merge-ci-check.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: FabianK3 - -delete-after: True - -changes: - - refactor: "Update the do-not-merge GitHub CI check to fail on merge, not while the PR is open." From 55b8cc876741b807d3d616d240f307a6c467e80b Mon Sep 17 00:00:00 2001 From: Casper3667 <8396443+Casper3667@users.noreply.github.com> Date: Thu, 4 Jun 2026 23:50:32 +0200 Subject: [PATCH 47/68] Fixes health scanning not working for ghosts (#22589) fixes https://github.com/Aurorastation/Aurora.3/issues/22584 --- code/datums/components/medical/medicalAnalyzer.dm | 2 +- html/changelogs/HealthCheckFix.yml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/HealthCheckFix.yml diff --git a/code/datums/components/medical/medicalAnalyzer.dm b/code/datums/components/medical/medicalAnalyzer.dm index 02610a1e22b..7a8ef7fb81c 100644 --- a/code/datums/components/medical/medicalAnalyzer.dm +++ b/code/datums/components/medical/medicalAnalyzer.dm @@ -85,7 +85,7 @@ return TRUE /datum/component/health_analyzer/ui_status(mob/user, datum/ui_state/state) - var/obj/item/rig_module/containing_rig_module = owner.loc + var/obj/item/rig_module/containing_rig_module = owner?.loc if(!containing_rig_module) return ..() else if(containing_rig_module) diff --git a/html/changelogs/HealthCheckFix.yml b/html/changelogs/HealthCheckFix.yml new file mode 100644 index 00000000000..be85c518ae3 --- /dev/null +++ b/html/changelogs/HealthCheckFix.yml @@ -0,0 +1,6 @@ +author: TheGreyWolf + +delete-after: True + +changes: + - bugfix: "Added a changelog editing system that should cause fewer conflicts and more accurate timestamps." From 5c74b702a866b13721f58026ef72339394fa2453 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Fri, 5 Jun 2026 03:35:20 +0000 Subject: [PATCH 48/68] Automatic changelog compile [ci skip] --- html/changelogs/Birigilis-PR-#22563.yml | 58 ------------------- html/changelogs/HealthCheckFix.yml | 6 -- html/changelogs/archive/2026-06.yml | 11 ++++ .../hellfirejag-mindblanker-tweaks.yml | 4 -- 4 files changed, 11 insertions(+), 68 deletions(-) delete mode 100644 html/changelogs/Birigilis-PR-#22563.yml delete mode 100644 html/changelogs/HealthCheckFix.yml delete mode 100644 html/changelogs/hellfirejag-mindblanker-tweaks.yml diff --git a/html/changelogs/Birigilis-PR-#22563.yml b/html/changelogs/Birigilis-PR-#22563.yml deleted file mode 100644 index 694304b44f4..00000000000 --- a/html/changelogs/Birigilis-PR-#22563.yml +++ /dev/null @@ -1,58 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# - (fixes bugs) -# wip -# - (work in progress) -# qol -# - (quality of life) -# soundadd -# - (adds a sound) -# sounddel -# - (removes a sound) -# rscadd -# - (adds a feature) -# rscdel -# - (removes a feature) -# imageadd -# - (adds an image or sprite) -# imagedel -# - (removes an image or sprite) -# spellcheck -# - (fixes spelling or grammar) -# experiment -# - (experimental change) -# balance -# - (balance changes) -# code_imp -# - (misc internal code change) -# refactor -# - (refactors code) -# config -# - (makes a change to the config files) -# admin -# - (makes changes to administrator tools) -# server -# - (miscellaneous changes to server) -################################# - -# Your name. -author: Baldos - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - balance: "Added a new box to the uplink that contains 8 shotgun slugs for 2 TC, and reduced the cost of Assault Shotgun's magazines." diff --git a/html/changelogs/HealthCheckFix.yml b/html/changelogs/HealthCheckFix.yml deleted file mode 100644 index be85c518ae3..00000000000 --- a/html/changelogs/HealthCheckFix.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: TheGreyWolf - -delete-after: True - -changes: - - bugfix: "Added a changelog editing system that should cause fewer conflicts and more accurate timestamps." diff --git a/html/changelogs/archive/2026-06.yml b/html/changelogs/archive/2026-06.yml index 44cea9c341e..8d8bc239e5a 100644 --- a/html/changelogs/archive/2026-06.yml +++ b/html/changelogs/archive/2026-06.yml @@ -151,3 +151,14 @@ kermit, louiseisnthome: - imageadd: Changes the Reade accent icon from purple splodges to one that represents the gas giant. +2026-06-05: + Baldos: + - balance: Added a new box to the uplink that contains 8 shotgun slugs for 2 TC, + and reduced the cost of Assault Shotgun's magazines. + Hellfirejag: + - balance: Tweaked the empathy penalty from mindblankers and PsiProtect drugs to + only cut the morale modifiers from Ministry and Leadership in half, rather than + fully negate them. + TheGreyWolf: + - bugfix: Added a changelog editing system that should cause fewer conflicts and + more accurate timestamps. diff --git a/html/changelogs/hellfirejag-mindblanker-tweaks.yml b/html/changelogs/hellfirejag-mindblanker-tweaks.yml deleted file mode 100644 index c716ab2b1e9..00000000000 --- a/html/changelogs/hellfirejag-mindblanker-tweaks.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Hellfirejag -delete-after: True -changes: - - balance: "Tweaked the empathy penalty from mindblankers and PsiProtect drugs to only cut the morale modifiers from Ministry and Leadership in half, rather than fully negate them." From f759aebad34702060df6c5083b190ff1544513d1 Mon Sep 17 00:00:00 2001 From: Matt Atlas Date: Fri, 5 Jun 2026 12:12:43 +0200 Subject: [PATCH 49/68] Ports TG attack animations. (#22319) https://github.com/user-attachments/assets/0af58b65-552e-48c2-ab97-56ebf0794127 To-do: - [x] Simple mobs - [ ] Icon angles for most icons - [x] Attack effects for kicking/biting/etc --------- Co-authored-by: Matt Atlas --- code/__DEFINES/combat.dm | 21 ++ .../signals/signals_object/signals_object.dm | 2 + code/__DEFINES/mobs.dm | 2 - code/_onclick/item_attack.dm | 2 +- .../overhead_emote_singleton.dm | 8 +- code/defines/obj/weapon.dm | 2 +- code/game/atoms_movable.dm | 186 ++++++++++++++++++ code/game/objects/effects/chem/foam.dm | 4 +- code/game/objects/items.dm | 7 + .../items/weapons/material/twohanded.dm | 4 +- code/game/objects/items/weapons/weaponry.dm | 4 +- code/game/objects/structures/gore/wall.dm | 2 +- .../machinery/atmoalter/canister.dm | 2 +- .../structures/machinery/doors/airlock.dm | 2 +- .../telecomms/machine_interactions.dm | 2 +- code/game/turfs/simulated/wall_attacks.dm | 2 +- .../components/unary/vent_pump.dm | 4 +- .../components/unary/vent_scrubber.dm | 4 +- code/modules/atmospherics/vent_passive.dm | 4 +- code/modules/games/cards.dm | 2 +- code/modules/martial_arts/martial.dm | 2 +- code/modules/martial_arts/revenant.dm | 2 +- code/modules/martial_arts/skrell.dm | 2 +- code/modules/martial_arts/sleeping_carp.dm | 10 +- code/modules/martial_arts/sol_combat.dm | 12 +- code/modules/martial_arts/tajara.dm | 6 +- code/modules/martial_arts/unathi.dm | 6 +- code/modules/martial_arts/vaurca.dm | 2 +- code/modules/martial_arts/zombie.dm | 2 +- code/modules/mob/animations.dm | 108 ++-------- .../living/carbon/human/human_attackhand.dm | 6 +- .../carbon/human/species/species_attack.dm | 7 + .../mob/living/carbon/human/unarmed_attack.dm | 4 + code/modules/mob/living/living_defines.dm | 3 + .../living/simple_animal/hostile/adhomai.dm | 2 + .../mob/living/simple_animal/hostile/alien.dm | 3 + .../mob/living/simple_animal/hostile/bat.dm | 1 + .../mob/living/simple_animal/hostile/bear.dm | 1 + .../simple_animal/hostile/cavern_geist.dm | 1 + .../simple_animal/hostile/changeling.dm | 2 + .../hostile/commanded/bear_companion.dm | 2 + .../hostile/commanded/guard_dog.dm | 1 + .../living/simple_animal/hostile/creature.dm | 1 + .../living/simple_animal/hostile/faithless.dm | 1 + .../simple_animal/hostile/giant_spider.dm | 1 + .../simple_animal/hostile/hivebots/hivebot.dm | 2 + .../simple_animal/hostile/ipc_zombie.dm | 1 + .../living/simple_animal/hostile/moghes.dm | 2 + .../simple_animal/hostile/phoron_worm.dm | 1 + .../living/simple_animal/hostile/pirate.dm | 1 + .../mob/living/simple_animal/hostile/pra.dm | 2 + .../hostile/retaliate/aquatic.dm | 1 + .../simple_animal/hostile/retaliate/cavern.dm | 1 + .../hostile/retaliate/exoplanet.dm | 2 + .../hostile/retaliate/konyang.dm | 1 + .../hostile/rogue_maint_drone.dm | 1 + .../simple_animal/hostile/space_fauna.dm | 2 + .../simple_animal/hostile/spider_queen.dm | 1 + .../mob/living/simple_animal/hostile/tree.dm | 1 + .../living/simple_animal/hostile/vannatusk.dm | 1 + .../simple_animal/hostile/viscerator.dm | 1 + .../mob/living/simple_animal/simple_animal.dm | 14 +- code/modules/shieldgen/emergency_shield.dm | 2 +- code/modules/shieldgen/energy_field.dm | 4 +- html/changelogs/mattatlas-tgattackanims.yml | 58 ++++++ icons/effects/effects.dmi | Bin 367802 -> 367445 bytes 66 files changed, 403 insertions(+), 150 deletions(-) create mode 100644 html/changelogs/mattatlas-tgattackanims.yml diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index d8f8e0ac04d..dfca0aed569 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -32,3 +32,24 @@ #define BULLET_ACT_FORCE_PIERCE "PIERCE" //It pierces through the object regardless of the bullet being piercing by default. #define NICE_SHOT_RICOCHET_BONUS 10 //if the shooter has the NICE_SHOT trait and they fire a ricocheting projectile, add this to the ricochet chance and auto aim angle + +//attack visual effects +#define ATTACK_EFFECT_PUNCH "punch" +#define ATTACK_EFFECT_KICK "kick" +#define ATTACK_EFFECT_SMASH "smash" +#define ATTACK_EFFECT_CLAW "claw" +#define ATTACK_EFFECT_SLASH "slash" +#define ATTACK_EFFECT_DISARM "disarm" +#define ATTACK_EFFECT_BITE "bite" +#define ATTACK_EFFECT_MECHFIRE "mech_fire" +#define ATTACK_EFFECT_MECHTOXIN "mech_toxin" +#define ATTACK_EFFECT_BOOP "boop" //Honk +#define ATTACK_EFFECT_VOID "void" +#define ATTACK_EFFECT_CPR "cpr" + +/// Attack animation for sharp items +#define ATTACK_ANIMATION_SLASH "slash" +/// Attack animation for pointy items +#define ATTACK_ANIMATION_PIERCE "pierce" +/// Animation for blunt attacks +#define ATTACK_ANIMATION_BLUNT "blunt" diff --git a/code/__DEFINES/dcs/signals/signals_object/signals_object.dm b/code/__DEFINES/dcs/signals/signals_object/signals_object.dm index f3ec1a99257..846f51b5939 100644 --- a/code/__DEFINES/dcs/signals/signals_object/signals_object.dm +++ b/code/__DEFINES/dcs/signals/signals_object/signals_object.dm @@ -24,6 +24,8 @@ #define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self_secondary(): (/mob) #define COMSIG_ITEM_ATTACK_SELF_SECONDARY "item_attack_self_secondary" +/// Sent from /obj/item/proc/animate_attack() : (atom/movable/attacker, atom/attacked_atom, animation_type, list/image_override, list/animation_override, list/angle_override) +#define COMSIG_ITEM_ATTACK_ANIMATION "item_attack_animation" ///from base of [obj/item/attack()]: (atom/target, mob/user, proximity_flag, click_parameters) #define COMSIG_ITEM_AFTERATTACK "item_afterattack" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 4a832647a1d..cfb9545b8c3 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -51,8 +51,6 @@ #define LEFT 1 #define RIGHT 2 -#define FIST_ATTACK_ANIMATION -1 - // Pulse levels, very simplified. #define PULSE_NONE 0 // So !M.pulse checks would be possible. #define PULSE_SLOW 1 // <60 bpm diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 6ee66f8150f..de3344d68d6 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -150,7 +150,7 @@ This calls [atom/proc/tool_act], among others. return 0 user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(target_mob, src) + user.do_attack_animation(target_mob, used_item = src) if(!user.aura_check(AURA_TYPE_WEAPON, src, user)) return FALSE diff --git a/code/datums/components/overhead_emote/overhead_emote_singleton.dm b/code/datums/components/overhead_emote/overhead_emote_singleton.dm index 8a89597efce..cc7a187d031 100644 --- a/code/datums/components/overhead_emote/overhead_emote_singleton.dm +++ b/code/datums/components/overhead_emote/overhead_emote_singleton.dm @@ -39,8 +39,8 @@ ABSTRACT_TYPE(/singleton/overhead_emote) var/self_message = SPAN_NOTICE("You lift your hand to meet [original]'s, delivering a stunning [emote_description]!") reciprocator.visible_message(others_message, self_message) - INVOKE_ASYNC(reciprocator, TYPE_PROC_REF(/atom/movable, do_attack_animation), original, FIST_ATTACK_ANIMATION) - INVOKE_ASYNC(original, TYPE_PROC_REF(/atom/movable, do_attack_animation), reciprocator, FIST_ATTACK_ANIMATION) + INVOKE_ASYNC(reciprocator, TYPE_PROC_REF(/atom/movable, do_attack_animation), original) + INVOKE_ASYNC(original, TYPE_PROC_REF(/atom/movable, do_attack_animation), reciprocator) if(emote_sound) playsound(reciprocator.loc, emote_sound, 30, 1) @@ -54,8 +54,8 @@ ABSTRACT_TYPE(/singleton/overhead_emote) var/self_message = SPAN_NOTICE("You lift your hand to meet [original]'s, who was expecting a [original_emote.emote_description], but received a [fail_emote.emote_description] instead.") reciprocator.visible_message(others_message, self_message) - INVOKE_ASYNC(reciprocator, TYPE_PROC_REF(/atom/movable, do_attack_animation), original, FIST_ATTACK_ANIMATION) - INVOKE_ASYNC(original, TYPE_PROC_REF(/atom/movable, do_attack_animation), reciprocator, FIST_ATTACK_ANIMATION) + INVOKE_ASYNC(reciprocator, TYPE_PROC_REF(/atom/movable, do_attack_animation), original) + INVOKE_ASYNC(original, TYPE_PROC_REF(/atom/movable, do_attack_animation), reciprocator) playsound(reciprocator.loc, SFX_PUNCH_MISS, 30, 1) diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index cf44b2ff2e2..6a64545f853 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -215,7 +215,7 @@ target_mob.standard_weapon_hit_effects(src, user, damageamount, armorpercent, target_zone) user.visible_message("[endmessage3rd][punct]", "[endmessage1st][punct]") - user.do_attack_animation(target_mob) + user.do_attack_animation(target_mob, used_item = src) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) if(soundname) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 0d05808d007..ec9f6c8cd35 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -830,6 +830,192 @@ // This is instant on byond's end, but to our clients this looks like a quick drop animate(src, alpha = old_alpha, pixel_x = old_x, pixel_y = old_y, transform = old_transform, time = 3, easing = CUBIC_EASING) +/atom/movable/proc/do_item_attack_animation(atom/attacked_atom, visual_effect_icon, obj/item/used_item, animation_type) + if (!visual_effect_icon) + if (used_item) + used_item.animate_attack(src, attacked_atom, animation_type) + return + + var/image/attack_image = image(icon = 'icons/effects/effects.dmi', icon_state = visual_effect_icon) + attack_image.plane = attacked_atom.plane + 1 + // Scale the icon. + attack_image.transform *= 0.4 + // The icon should not rotate. + attack_image.appearance_flags = APPEARANCE_UI + var/atom/movable/flick_visual/attack = attacked_atom.flick_overlay_view(attack_image, 1 SECONDS) + var/matrix/copy_transform = new(transform) + animate(attack, alpha = 175, transform = copy_transform.Scale(0.75), time = 0.3 SECONDS) + animate(time = 0.1 SECONDS) + animate(alpha = 0, time = 0.3 SECONDS, easing = CIRCULAR_EASING|EASE_OUT) + +/obj/item/proc/animate_attack(atom/movable/attacker, atom/attacked_atom, animation_type) + var/list/image_override = list() + var/list/animation_override = list() + var/used_icon_angle = icon_angle + var/list/angle_override = list() + SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_ANIMATION, attacker, attacked_atom, animation_type, image_override, animation_override, angle_override) + var/image/attack_image = null + if (!length(image_override)) + attack_image = isnull(attack_icon) ? image(icon = src) : image(icon = attack_icon, icon_state = attack_icon_state) + else + attack_image = image_override[1] + + if (length(animation_override)) + animation_type = animation_override[1] + else if (!animation_type) + var/damage_flags = damage_flags() + if(damage_flags & DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE) + animation_type = pick(ATTACK_ANIMATION_SLASH, ATTACK_ANIMATION_PIERCE) + else if(damage_flags & DAMAGE_FLAG_SHARP) + animation_type = ATTACK_ANIMATION_SLASH + else if (damage_flags & DAMAGE_FLAG_EDGE) + animation_type = ATTACK_ANIMATION_PIERCE + else + animation_type = ATTACK_ANIMATION_BLUNT + + if (length(angle_override)) + used_icon_angle = angle_override[1] + + attack_image.plane = attacked_atom.plane + 1 + attack_image.pixel_w = attacker.get_standard_pixel_x() + attacker.pixel_w - attacked_atom.get_standard_pixel_x() - attacked_atom.pixel_w + attack_image.pixel_z = attacker.get_standard_pixel_y() + attacker.pixel_z - attacked_atom.get_standard_pixel_y() - attacked_atom.pixel_z + // Scale the icon. + attack_image.transform *= 0.5 + // The icon should not rotate. + attack_image.appearance_flags = APPEARANCE_UI + + var/atom/movable/flick_visual/attack = attacked_atom.flick_overlay_view(attack_image, 1 SECONDS) + var/matrix/copy_transform = new(attacker.transform) + var/x_sign = 0 + var/y_sign = 0 + var/direction = get_dir(attacker, attacked_atom) + if (direction & NORTH) + y_sign = -1 + else if (direction & SOUTH) + y_sign = 1 + + if (direction & EAST) + x_sign = -1 + else if (direction & WEST) + x_sign = 1 + + // Attacking self, or something on the same turf as us + if (!direction) + y_sign = 1 + // Not a fan of this, but its the "cleanest" way to animate this + x_sign = 0.25 * (prob(50) ? 1 : -1) + // For piercing attacks + direction = SOUTH + + // And animate the attack! + switch (animation_type) + if (ATTACK_ANIMATION_BLUNT) + attack.pixel_x = 14 * x_sign + attack.pixel_y = 12 * y_sign + animate(attack, alpha = 175, transform = copy_transform.Scale(0.75), pixel_x = 4 * x_sign, pixel_y = 3 * y_sign, time = 0.2 SECONDS) + animate(time = 0.1 SECONDS) + animate(alpha = 0, time = 0.1 SECONDS, easing = CIRCULAR_EASING|EASE_OUT) + + if (ATTACK_ANIMATION_PIERCE) + var/attack_angle = dir2angle(direction) + rand(-7, 7) + // Deducting 90 because we're assuming that icon_angle of 0 means an east-facing sprite + var/anim_angle = attack_angle - 90 - used_icon_angle + var/angle_mult = 1 + if (x_sign && y_sign) + angle_mult = 1.4 + attack.pixel_x = 22 * x_sign * angle_mult + attack.pixel_y = 18 * y_sign * angle_mult + attack.transform = attack.transform.Turn(anim_angle) + copy_transform = copy_transform.Turn(anim_angle) + animate( + attack, + pixel_x = (22 * x_sign - 12 * sin(attack_angle)) * angle_mult, + pixel_y = (18 * y_sign - 8 * cos(attack_angle)) * angle_mult, + time = 0.1 SECONDS, + easing = CUBIC_EASING|EASE_IN, + ) + animate( + attack, + alpha = 175, + transform = copy_transform.Scale(0.75), + pixel_x = (22 * x_sign + 26 * sin(attack_angle)) * angle_mult, + pixel_y = (18 * y_sign + 22 * cos(attack_angle)) * angle_mult, + time = 0.3 SECONDS, + easing = CUBIC_EASING|EASE_OUT, + ) + animate( + alpha = 0, + pixel_x = -3 * -(x_sign + sin(attack_angle)), + pixel_y = -2 * -(y_sign + cos(attack_angle)), + time = 0.1 SECONDS, + easing = CIRCULAR_EASING|EASE_OUT + ) + + if (ATTACK_ANIMATION_SLASH) + attack.pixel_x = 18 * x_sign + attack.pixel_y = 14 * y_sign + var/x_rot_sign = 0 + var/y_rot_sign = 0 + var/attack_dir = (prob(50) ? 1 : -1) + var/anim_angle = dir2angle(direction) - 90 - used_icon_angle + + if (x_sign) + y_rot_sign = attack_dir + if (y_sign) + x_rot_sign = attack_dir + + // Animations are flipped, so flip us too! + if (x_sign > 0 || y_sign < 0) + attack_dir *= -1 + + // We're swinging diagonally, use separate logic + var/anim_dir = attack_dir + if (x_sign && y_sign) + if (attack_dir < 0) + x_rot_sign = -x_sign * 1.4 + y_rot_sign = 0 + else + x_rot_sign = 0 + y_rot_sign = -y_sign * 1.4 + + // Flip us if we've been flipped *unless* we're flipped due to both axis + if ((x_sign < 0 && y_sign > 0) || (x_sign > 0 && y_sign < 0)) + anim_dir *= -1 + + attack.pixel_x += 10 * x_rot_sign + attack.pixel_y += 8 * y_rot_sign + attack.transform = attack.transform.Turn(anim_angle - 45 * anim_dir) + copy_transform = copy_transform.Scale(0.75) + animate(attack, alpha = 175, time = 0.3 SECONDS, flags = ANIMATION_PARALLEL) + animate(time = 0.1 SECONDS) + animate(alpha = 0, time = 0.1 SECONDS, easing = CIRCULAR_EASING|EASE_OUT) + + animate(attack, transform = copy_transform.Turn(anim_angle + 45 * anim_dir), time = 0.3 SECONDS, flags = ANIMATION_PARALLEL) + + var/x_return = 10 * -x_rot_sign + var/y_return = 8 * -y_rot_sign + + if (!x_rot_sign) + x_return = 18 * x_sign + if (!y_rot_sign) + y_return = 14 * y_sign + + var/angle_mult = 1 + if (x_sign && y_sign) + angle_mult = 1.4 + if (attack_dir > 0) + x_return = 8 * x_sign + y_return = 14 * y_sign + else + x_return = 18 * x_sign + y_return = 6 * y_sign + + animate(attack, pixel_x = 4 * x_sign * angle_mult, time = 0.2 SECONDS, easing = CIRCULAR_EASING | EASE_IN, flags = ANIMATION_PARALLEL) + animate(pixel_x = x_return, time = 0.2 SECONDS, easing = CIRCULAR_EASING | EASE_OUT) + + animate(attack, pixel_y = 3 * y_sign * angle_mult, time = 0.2 SECONDS, easing = CIRCULAR_EASING | EASE_IN, flags = ANIMATION_PARALLEL) + animate(pixel_y = y_return, time = 0.2 SECONDS, easing = CIRCULAR_EASING | EASE_OUT) + /atom/movable/proc/get_floating_chat_x_offset() return 0 diff --git a/code/game/objects/effects/chem/foam.dm b/code/game/objects/effects/chem/foam.dm index 8d89eed11dc..6b93e7f42e3 100644 --- a/code/game/objects/effects/chem/foam.dm +++ b/code/game/objects/effects/chem/foam.dm @@ -180,7 +180,7 @@ /obj/structure/foamedmetal/attack_hand(var/mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src, FIST_ATTACK_ANIMATION) + user.do_attack_animation(src) if ((user.mutations & HULK) || (prob(75 - metal * 25))) user.visible_message(SPAN_WARNING("[user] smashes through the foamed metal."), SPAN_NOTICE("You smash through the metal foam wall.")) qdel(src) @@ -238,7 +238,7 @@ qdel(src) return TRUE - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) if(prob(attacking_item.force * 20 - metal * 25)) user.visible_message(SPAN_WARNING("[user] smashes through the foamed metal."), SPAN_NOTICE("You smash through the foamed metal with \the [attacking_item].")) qdel(src) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index a0f440f2516..55db684600b 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -207,6 +207,13 @@ /// Used to override hardcoded clothing dmis in human clothing pr var/icon_override + /// Angle of the icon, used for piercing and slashing attack animations, clockwise from *east-facing* sprites + var/icon_angle = 0 + ///icon file for an alternate attack icon + var/attack_icon + ///icon state for an alternate attack icon + var/attack_icon_state + var/charge_failure_message = " cannot be recharged." var/held_maptext diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 31ac7e91371..3eba17f35fc 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -200,11 +200,12 @@ /obj/item/material/twohanded/fireaxe // DEM AXES MAN, marker -Agouri icon_state = "fireaxe0" base_icon = "fireaxe" + icon_angle = -180 name = "fire axe" desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" unwielded_force_divisor = 0.25 force_divisor = 0.7 // 10/42 with hardness 60 (steel) and 0.25 unwielded divisor - sharp = 1 + sharp = FALSE edge = TRUE w_class = WEIGHT_CLASS_BULKY slot_flags = SLOT_BACK @@ -243,6 +244,7 @@ /obj/item/material/twohanded/spear icon_state = "spearglass0" base_icon = "spearglass" + icon_angle = -45 name = "spear" desc = "A haphazardly-constructed yet still deadly weapon of ancient design." force = 15 diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index a11c21edc2f..2a2d98f02f5 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -89,7 +89,7 @@ /obj/effect/energy_net/attack_hand(var/mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src, FIST_ATTACK_ANIMATION) + user.do_attack_animation(src) if(user == affecting) to_chat(user, SPAN_WARNING("You can't claw at \the [src] while trapped inside it! You need to use a weapon.")) return @@ -110,7 +110,7 @@ /obj/effect/energy_net/attackby(obj/item/attacking_item, mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) var/attack_force = attacking_item.force if(user == affecting) attack_force /= 2 diff --git a/code/game/objects/structures/gore/wall.dm b/code/game/objects/structures/gore/wall.dm index 4b8a45cdfc9..29e55ffb443 100644 --- a/code/game/objects/structures/gore/wall.dm +++ b/code/game/objects/structures/gore/wall.dm @@ -30,7 +30,7 @@ /obj/structure/gore/resin/attack_hand(var/mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src, FIST_ATTACK_ANIMATION) + user.do_attack_animation(src) if((user.mutations & HULK)) visible_message(SPAN_DANGER("\The [user] destroys \the [src]!")) add_damage(maxhealth) diff --git a/code/game/objects/structures/machinery/atmoalter/canister.dm b/code/game/objects/structures/machinery/atmoalter/canister.dm index 486db49bb92..2a2093a19f3 100644 --- a/code/game/objects/structures/machinery/atmoalter/canister.dm +++ b/code/game/objects/structures/machinery/atmoalter/canister.dm @@ -441,7 +441,7 @@ update_flag if(attacking_item.item_flags & ITEM_FLAG_NO_BLUDGEON) return TRUE visible_message(SPAN_WARNING("\The [user] hits \the [src] with \the [attacking_item]!"), SPAN_NOTICE("You hit \the [src] with \the [attacking_item].")) - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) playsound(src, 'sound/weapons/smash.ogg', 60, 1) add_damage(attacking_item.force) if(!istype(attacking_item, /obj/item/forensics)) diff --git a/code/game/objects/structures/machinery/doors/airlock.dm b/code/game/objects/structures/machinery/doors/airlock.dm index 2047a7b7cdb..f38d1a04bf8 100644 --- a/code/game/objects/structures/machinery/doors/airlock.dm +++ b/code/game/objects/structures/machinery/doors/airlock.dm @@ -1434,7 +1434,7 @@ About the new airlock wires panel: return if(H.default_attack?.attack_door && !(stat & (BROKEN|NOPOWER))) user.visible_message(SPAN_DANGER("\The [user] forcefully strikes \the [src] with their [H.default_attack.attack_name]!")) - user.do_attack_animation(src, null) + user.do_attack_animation(src, H.default_attack.attack_effect) playsound(loc, hitsound, 60, TRUE) add_damage(H.default_attack.attack_door) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) diff --git a/code/game/objects/structures/machinery/telecomms/machine_interactions.dm b/code/game/objects/structures/machinery/telecomms/machine_interactions.dm index f0e0c473ba6..5cedd20603f 100644 --- a/code/game/objects/structures/machinery/telecomms/machine_interactions.dm +++ b/code/game/objects/structures/machinery/telecomms/machine_interactions.dm @@ -29,7 +29,7 @@ if(!istype(user, /mob/living/silicon)) if(user.a_intent == I_HURT) user.visible_message(SPAN_DANGER("\The [user] strikes [src]!")) - user.do_attack_animation(user, attacking_item) + user.do_attack_animation(user, used_item = attacking_item) playsound(loc, hitsound, 60, TRUE) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) integrity = between(0, integrity - round(attacking_item.force / 3), initial(integrity)) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index ae52c41ae6e..467fbb568f9 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -139,7 +139,7 @@ WR.scrape(user) return else if(attacking_item.force >= 10) - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) to_chat(user, SPAN_NOTICE("\The [src] crumbles away under the force of your [attacking_item].")) dismantle_wall(TRUE) return diff --git a/code/modules/atmospherics/components/unary/vent_pump.dm b/code/modules/atmospherics/components/unary/vent_pump.dm index 0e7fac74aed..845eb2e1de6 100644 --- a/code/modules/atmospherics/components/unary/vent_pump.dm +++ b/code/modules/atmospherics/components/unary/vent_pump.dm @@ -407,13 +407,13 @@ to_chat(user, SPAN_WARNING("\The [attacking_item] can only be used to tear open welded air vents!")) return TRUE user.visible_message(SPAN_WARNING("\The [user] starts using \the [attacking_item] to hack open \the [src]!"), SPAN_NOTICE("You start hacking open \the [src] with \the [attacking_item]...")) - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE) var/cut_amount = 3 for(var/i = 0; i <= cut_amount; i++) if(!attacking_item || !do_after(user, 30, src)) return TRUE - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) user.visible_message(SPAN_WARNING("\The [user] smashes \the [attacking_item] into \the [src]!"), SPAN_NOTICE("You smash \the [attacking_item] into \the [src].")) playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE) if(i == cut_amount) diff --git a/code/modules/atmospherics/components/unary/vent_scrubber.dm b/code/modules/atmospherics/components/unary/vent_scrubber.dm index 88c426d5893..040cfab61b8 100644 --- a/code/modules/atmospherics/components/unary/vent_scrubber.dm +++ b/code/modules/atmospherics/components/unary/vent_scrubber.dm @@ -412,13 +412,13 @@ to_chat(user, SPAN_WARNING("\The [attacking_item] can only be used to tear open welded scrubbers!")) return TRUE user.visible_message(SPAN_WARNING("\The [user] starts using \the [attacking_item] to hack open \the [src]!"), SPAN_NOTICE("You start hacking open \the [src] with \the [attacking_item]...")) - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE) var/cut_amount = 3 for(var/i = 0; i <= cut_amount; i++) if(!attacking_item || !do_after(user, 30, src)) return TRUE - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) user.visible_message(SPAN_WARNING("\The [user] smashes \the [attacking_item] into \the [src]!"), SPAN_NOTICE("You smash \the [attacking_item] into \the [src].")) playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE) if(i == cut_amount) diff --git a/code/modules/atmospherics/vent_passive.dm b/code/modules/atmospherics/vent_passive.dm index 923c79fd50e..abc063626c1 100644 --- a/code/modules/atmospherics/vent_passive.dm +++ b/code/modules/atmospherics/vent_passive.dm @@ -128,13 +128,13 @@ to_chat(user, SPAN_WARNING("\The [attacking_item] can only be used to tear open welded air vents!")) return TRUE user.visible_message(SPAN_WARNING("\The [user] starts using \the [attacking_item] to hack open \the [src]!"), SPAN_NOTICE("You start hacking open \the [src] with \the [attacking_item]...")) - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE) var/cut_amount = 3 for(var/i = 0; i <= cut_amount; i++) if(!attacking_item || !do_after(user, 30, src)) return TRUE - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) user.visible_message(SPAN_WARNING("\The [user] smashes \the [attacking_item] into \the [src]!"), SPAN_NOTICE("You smash \the [attacking_item] into \the [src].")) playsound(loc, 'sound/weapons/smash.ogg', 60, TRUE) if(i == cut_amount) diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 0b9d55b9fac..9fc6e562778 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -205,7 +205,7 @@ cards -= cards[1] H.concealed = TRUE H.update_icon() - user.do_attack_animation(src, null) + user.do_attack_animation(src) balloon_alert_to_viewers("deals a card") H.throw_at(get_step(target,target.dir), 10, 1, user, FALSE) if(!length(cards)) diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 1f0b08dd98b..c9703e275a6 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -166,7 +166,7 @@ /datum/martial_art/proc/simple_animal_basic_disarm(var/mob/living/carbon/human/A, var/mob/living/simple_animal/D) if(A.a_intent == I_DISARM) A.visible_message("[SPAN_BOLD("\The [A]")] [D.response_disarm] \the [D]") - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_DISARM) D.poke(1) D.handle_attack_by(A) diff --git a/code/modules/martial_arts/revenant.dm b/code/modules/martial_arts/revenant.dm index e00e6c79d2a..c24350b58d2 100644 --- a/code/modules/martial_arts/revenant.dm +++ b/code/modules/martial_arts/revenant.dm @@ -21,7 +21,7 @@ return TRUE /datum/martial_art/revenant/proc/bash_slash(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_CLAW) D.visible_message(SPAN_DANGER("[A] bashes [D] away!"), SPAN_DANGER("[A] bashes you away!")) D.apply_damage(rand(5, 10), DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_SHARP) var/throw_range = rand(1, 2) diff --git a/code/modules/martial_arts/skrell.dm b/code/modules/martial_arts/skrell.dm index f0accb2d89a..7eec629c40f 100644 --- a/code/modules/martial_arts/skrell.dm +++ b/code/modules/martial_arts/skrell.dm @@ -22,7 +22,7 @@ return 0 /datum/martial_art/karak_virul/proc/leg_sweep(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) if(D.stat || D.weakened) return 0 D.visible_message(SPAN_WARNING("[A] leg sweeps [D]!")) diff --git a/code/modules/martial_arts/sleeping_carp.dm b/code/modules/martial_arts/sleeping_carp.dm index f8a2e4d6ed7..5dda83f04dc 100644 --- a/code/modules/martial_arts/sleeping_carp.dm +++ b/code/modules/martial_arts/sleeping_carp.dm @@ -37,7 +37,7 @@ /datum/martial_art/the_sleeping_carp/proc/wristWrench(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!D.stat && !D.stunned && !D.weakened) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_DISARM) D.visible_message(SPAN_WARNING("[A] grabs [D]'s wrist and wrenches it sideways!")) playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) D.drop_item() @@ -48,7 +48,7 @@ /datum/martial_art/the_sleeping_carp/proc/backKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(A.dir == D.dir && !D.stat && !D.weakened) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message(SPAN_WARNING("[A] kicks [D] in the back!")) step_to(D,get_step(D,D.dir),1) D.Weaken(4) @@ -59,7 +59,7 @@ /datum/martial_art/the_sleeping_carp/proc/kneeStomach(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!D.stat && !D.weakened) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message(SPAN_WARNING("[A] knees [D] in the stomach!"), \ SPAN_DANGER("[A] winds you with a knee in the stomach!")) D.audible_message("[D] gags!") @@ -73,7 +73,7 @@ /datum/martial_art/the_sleeping_carp/proc/headKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!D.stat && !D.weakened) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_KICK) D.visible_message(SPAN_WARNING("[A] kicks [D] in the head!"), \ SPAN_DANGER("[A] kicks you in the jaw!")) D.apply_damage(20, DAMAGE_BRUTE, BP_HEAD) @@ -86,7 +86,7 @@ /datum/martial_art/the_sleeping_carp/proc/elbowDrop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(D.weakened || D.resting || D.stat) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_SMASH) D.visible_message(SPAN_DANGER("[A] elbow drops [D]!")) if(D.shock_stage >= 60) D.death() //FINISH HIM! diff --git a/code/modules/martial_arts/sol_combat.dm b/code/modules/martial_arts/sol_combat.dm index a96a11da2cf..5efb5a62546 100644 --- a/code/modules/martial_arts/sol_combat.dm +++ b/code/modules/martial_arts/sol_combat.dm @@ -49,7 +49,7 @@ AM.throw_at(sweeptarget, ((clamp((1 - (clamp(distfromcaster - 2, 0, distfromcaster))), 1, 1))), 1) /datum/martial_art/sol_combat/proc/quick_choke(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_SMASH) A.visible_message(SPAN_WARNING("[A] pounds [D] on the chest!")) playsound(get_turf(A), "punch", 50, 1, -1) if(!(D.species.flags & NO_BREATHE)) @@ -75,12 +75,16 @@ if(check_streak(A,D)) return 1 add_logs(A, D, "punched") - A.do_attack_animation(D) + var/picked_hit_type = pick("punched", "kicked") + var/attack_animation = ATTACK_EFFECT_PUNCH + if(picked_hit_type == "kicked") + attack_animation = ATTACK_EFFECT_KICK + A.do_attack_animation(D, attack_animation) var/bonus_damage = 10 if(D.weakened || D.resting || D.lying) bonus_damage += 5 - picked_hit_type = "stomped on" + picked_hit_type = "stomped" D.apply_damage(bonus_damage, DAMAGE_BRUTE) if(picked_hit_type == "kicked" || picked_hit_type == "stomped") playsound(get_turf(D), SFX_SWING_HIT, 50, 1, -1) @@ -96,7 +100,7 @@ /datum/martial_art/sol_combat/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) add_to_streak("D",D) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_DISARM) if(check_streak(A,D)) return 1 diff --git a/code/modules/martial_arts/tajara.dm b/code/modules/martial_arts/tajara.dm index 50a276879de..fb74e9598b0 100644 --- a/code/modules/martial_arts/tajara.dm +++ b/code/modules/martial_arts/tajara.dm @@ -24,7 +24,7 @@ /datum/martial_art/baghrar/proc/eye_rake(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!istajara(A)) return 0 - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_CLAW) playsound(get_turf(A), 'sound/weapons/slice.ogg', 50, 1, -1) if(!D.species.has_limbs[BP_HEAD]) @@ -53,7 +53,7 @@ return 1 /datum/martial_art/baghrar/proc/claw_punch(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D)//is actually lung punch - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_CLAW) A.visible_message(SPAN_DANGER("[A] lunges forwards and strikes [D] with their claws!")) playsound(get_turf(A), 'sound/weapons/slice.ogg', 50, 1, -1) var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_sel.selecting)) @@ -65,7 +65,7 @@ /datum/martial_art/baghrar/proc/rraknar_stab(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!istajara(A)) return 0 - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_CLAW) var/obj/item/organ/external/organ = D.get_organ(A.zone_sel.selecting) A.visible_message(SPAN_DANGER("[A] stabs [D]'s [organ.name] with their claws!")) D.apply_damage(organ.brute_dam, DAMAGE_BRUTE, organ, damage_flags = DAMAGE_FLAG_SHARP|DAMAGE_FLAG_EDGE) diff --git a/code/modules/martial_arts/unathi.dm b/code/modules/martial_arts/unathi.dm index 1ff7c171d6e..7bb55bf7363 100644 --- a/code/modules/martial_arts/unathi.dm +++ b/code/modules/martial_arts/unathi.dm @@ -54,7 +54,7 @@ /datum/martial_art/kis_khan/simple_animal_basic_disarm(var/mob/living/carbon/human/A, var/mob/living/simple_animal/D) if(!D.paralysis) A.visible_message("[SPAN_BOLD("[A]")] delivers a blow to \the [SPAN_BOLD("[D]")]'s head, making [D.get_pronoun("him")] fall unconscious!") - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_DISARM) playsound(D.loc, SFX_PUNCH, 25, TRUE, MEDIUM_RANGE_SOUND_EXTRARANGE+4) D.AdjustParalysis(5) else @@ -74,7 +74,7 @@ return 1 /datum/martial_art/kis_khan/proc/swift_disarm(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_DISARM) if(prob(80)) if(D.hand) if(istype(D.l_hand, /obj/item)) @@ -94,7 +94,7 @@ return 1 /datum/martial_art/kis_khan/proc/hammering_strike(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_SMASH) A.visible_message(SPAN_DANGER("[A] slams [D] away!")) playsound(D.loc, "punch", 50, 1, -1) D.apply_effect(2, WEAKEN) diff --git a/code/modules/martial_arts/vaurca.dm b/code/modules/martial_arts/vaurca.dm index fba6b1822af..7ab7efcfb3b 100644 --- a/code/modules/martial_arts/vaurca.dm +++ b/code/modules/martial_arts/vaurca.dm @@ -45,7 +45,7 @@ /datum/martial_art/vkutet/proc/piercing_strike(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(!isvaurca(A)) return 0 - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_CLAW) var/atk_verb = pick("slices", "pinches", "chops", "bites", "claws") D.visible_message(SPAN_DANGER("[A] [atk_verb] [D]!"), \ SPAN_DANGER("[A] [atk_verb] you!")) diff --git a/code/modules/martial_arts/zombie.dm b/code/modules/martial_arts/zombie.dm index f14177fc07c..126ddf13428 100644 --- a/code/modules/martial_arts/zombie.dm +++ b/code/modules/martial_arts/zombie.dm @@ -28,7 +28,7 @@ /datum/martial_art/zombie/proc/strong_bite(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) - A.do_attack_animation(D) + A.do_attack_animation(D, ATTACK_EFFECT_BITE) var/atk_verb = pick("chomps", "bites") D.visible_message(SPAN_DANGER("[A] [atk_verb] down hard on [D]!"), SPAN_DANGER("[A] [atk_verb] down hard on you!")) D.apply_damage(rand(5, 10), DAMAGE_BRUTE, damage_flags = DAMAGE_FLAG_SHARP, armor_pen = 100) diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm index 80c4bba9af9..7c8105019fb 100644 --- a/code/modules/mob/animations.dm +++ b/code/modules/mob/animations.dm @@ -119,39 +119,23 @@ note dizziness decrements automatically in the mob's Life() proc. //reset the pixel offsets to defaults is_floating = FALSE -/atom/movable/proc/do_attack_animation(atom/A, atom/movable/weapon, var/image/attack_image, var/initial_pixel_x = 0, var/initial_pixel_y = 0) +/atom/movable/proc/do_attack_animation(atom/attacked_atom, visual_effect_icon, obj/item/used_item, no_effect, fov_effect = TRUE, item_animation_override = null) + if(!no_effect && (visual_effect_icon || used_item)) + do_item_attack_animation(attacked_atom, visual_effect_icon, used_item, animation_type = item_animation_override) + + if(attacked_atom == src) + return //don't do an animation if attacking self var/pixel_x_diff = 0 var/pixel_y_diff = 0 var/turn_dir = 1 - var/direction = get_dir(src, A) - switch(direction) - if(NORTH) - pixel_y_diff = 8 - if(SOUTH) - pixel_y_diff = -8 - if(EAST) - pixel_x_diff = 8 - if(WEST) - pixel_x_diff = -8 - if(NORTHEAST) - pixel_x_diff = 8 - pixel_y_diff = 8 - if(NORTHWEST) - pixel_x_diff = -8 - pixel_y_diff = 8 - if(SOUTHEAST) - pixel_x_diff = 8 - pixel_y_diff = -8 - if(SOUTHWEST) - pixel_x_diff = -8 - pixel_y_diff = -8 + var/direction = get_dir(src, attacked_atom) if(direction & NORTH) pixel_y_diff = 8 - turn_dir = rand(50) ? -1 : 1 + turn_dir = prob(50) ? -1 : 1 else if(direction & SOUTH) pixel_y_diff = -8 - turn_dir = rand(50) ? -1 : 1 + turn_dir = prob(50) ? -1 : 1 if(direction & EAST) pixel_x_diff = 8 @@ -159,80 +143,10 @@ note dizziness decrements automatically in the mob's Life() proc. pixel_x_diff = -8 turn_dir = -1 - if(!initial_pixel_x) - initial_pixel_x = initial(pixel_x) - if(!initial_pixel_y) - initial_pixel_y = initial(pixel_y) - - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(pixel_x = initial_pixel_x, pixel_y = initial_pixel_y, time = 2) var/matrix/initial_transform = matrix(transform) var/matrix/rotated_transform = transform.Turn(15 * turn_dir) - - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, transform = rotated_transform, time = 2, easing = BACK_EASING | EASE_IN) - animate(pixel_x = initial_pixel_x, pixel_y = initial_pixel_y, transform = initial_transform, time = 2, easing = SINE_EASING) - -// either attack_item OR attack_image should be used. if both are used, attack_image will be the one chosen -/mob/do_attack_animation(atom/A, var/atom/attack_item, var/image/attack_image) - set waitfor = FALSE - - var/initial_pixel_x = get_standard_pixel_x() - var/initial_pixel_y = get_standard_pixel_y() - ..(A, attack_item, attack_image, initial_pixel_x, initial_pixel_y) - - if(is_floating) - addtimer(CALLBACK(src, PROC_REF(start_floating)), 4) - - if(attack_item == FIST_ATTACK_ANIMATION) // only play the physical movement - return - // What icon do we use for the attack? - var/image/I - if(attack_image) - I = attack_image - else if(attack_item) - I = image(attack_item.icon, A, attack_item.icon_state, A.layer + 1) - else - if(hand && l_hand) // Attacked with item in left hand. - I = image(l_hand.icon, A, l_hand.icon_state, A.layer + 1) - else if (!hand && r_hand) // Attacked with item in right hand. - I = image(r_hand.icon, A, r_hand.icon_state, A.layer + 1) - else // Attacked with a fist? - return - - // Who can see the attack? - var/list/viewing = list() - for (var/mob/M in viewers(A)) - if (M.client) - viewing |= M.client - flick_overlay(I, viewing, 5) // 5 ticks/half a second - - // Scale the icon. - I.transform *= 0.75 - // Set the direction of the icon animation. - var/direction = get_dir(src, A) - if(direction & NORTH) - I.pixel_y = -16 - else if(direction & SOUTH) - I.pixel_y = 16 - - if(direction & EAST) - I.pixel_x = -16 - else if(direction & WEST) - I.pixel_x = 16 - - if(!direction) // Attacked self?! - I.pixel_z = 16 - - var/matrix/M = new - M.Turn(pick(-20, 20)) - // And animate the attack! - animate(I, alpha = 175, pixel_x = initial_pixel_x, pixel_y = initial_pixel_y, pixel_z = 0, time = 2, easing = CUBIC_EASING) - sleep(2) - animate(I, transform = M, time = 1) // apply the fancy matrix - sleep(1) - animate(I, transform = matrix(), time = 1) // back to a default matrix - sleep(1) - animate(I, alpha = 0, time = 1) + animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, transform=rotated_transform, time = 1, easing=BACK_EASING|EASE_IN, flags = ANIMATION_PARALLEL) + animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, transform=initial_transform, time = 2, easing=SINE_EASING, flags = ANIMATION_PARALLEL) /mob/proc/spin(spintime, speed) spawn() diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 88e28965ed0..4560ef1e660 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -255,7 +255,7 @@ if(!attack) return 0 - H.do_attack_animation(src) + H.do_attack_animation(src, attack.attack_effect) if(!attack_message) attack.show_attack(H, src, hit_zone, rand_damage) else @@ -363,7 +363,7 @@ src.attack_log += "\[[time_stamp()]\] Has been disarmed by [M.name] ([M.ckey])" msg_admin_attack("[key_name(M)] disarmed [src.name] ([src.ckey]) (JMP)",ckey=key_name(M),ckey_target=key_name(src)) - M.do_attack_animation(src) + M.do_attack_animation(src, ATTACK_EFFECT_DISARM) if(w_uniform) w_uniform.add_fingerprint(M) @@ -512,7 +512,7 @@ to_chat(H, cpr_attempt_message) - H.do_attack_animation(src, null, image('icons/hud/mob/generic.dmi', src, "cpr", src.layer + 1)) + H.do_attack_animation(src, ATTACK_EFFECT_CPR) var/starting_pixel_y = pixel_y animate(src, pixel_y = starting_pixel_y + 4, time = 2) animate(src, pixel_y = starting_pixel_y, time = 2) diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm index b3b26a3ec9c..fc8b49c97f7 100644 --- a/code/modules/mob/living/carbon/human/species/species_attack.dm +++ b/code/modules/mob/living/carbon/human/species/species_attack.dm @@ -7,6 +7,7 @@ edge = TRUE damage = 5 attack_name = "sharp bite" + attack_effect = ATTACK_EFFECT_BITE /datum/unarmed_attack/diona attack_verb = list("lashed", "bludgeoned") @@ -28,6 +29,7 @@ edge = TRUE damage = 5 attack_name = "claws" + attack_effect = ATTACK_EFFECT_CLAW /datum/unarmed_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage) var/obj/item/organ/external/affecting = target.get_organ(zone) @@ -124,6 +126,7 @@ attack_name = "heavy fist" shredding = TRUE sparring_variant_type = /datum/unarmed_attack/pain_strike/heavy + attack_effect = ATTACK_EFFECT_SMASH /datum/unarmed_attack/industrial/heavy damage = 9 @@ -140,6 +143,7 @@ attack_sound = 'sound/weapons/beartrap_shut.ogg' attack_name = "power fist" shredding = TRUE + attack_effect = ATTACK_EFFECT_SMASH /datum/unarmed_attack/terminator/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armor,var/attack_damage,var/zone) ..() @@ -225,6 +229,7 @@ attack_sound = 'sound/weapons/heavysmash.ogg' attack_name = "crushing fist" shredding = TRUE + attack_effect = ATTACK_EFFECT_SMASH /datum/unarmed_attack/shocking attack_verb = list("prodded", "touched") @@ -265,6 +270,7 @@ attack_door = 20 crowbar_door = TRUE sparring_variant_type = /datum/unarmed_attack/pain_strike/heavy + attack_effect = ATTACK_EFFECT_SMASH /datum/unarmed_attack/vaurca_bulwark/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armor,var/zone) ..() @@ -290,6 +296,7 @@ attack_sound = 'sound/weapons/beartrap_shut.ogg' attack_name = "industrial claw" shredding = TRUE + attack_effect = ATTACK_EFFECT_SMASH /datum/unarmed_attack/tesla_body/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armor,var/attack_damage,var/zone) ..() diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index 8fbc25dd476..04f68afd103 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -9,6 +9,8 @@ GLOBAL_LIST_EMPTY(sparring_attack_cache) var/armor_penetration = 0 var/attack_sound = SFX_PUNCH var/miss_sound = SFX_PUNCH_MISS + /// The attack effect played with this attack. + var/attack_effect = ATTACK_EFFECT_PUNCH var/shredding = 0 // Calls the old attack_alien() behavior on objects/mobs when on harm intent. var/attack_door = 0 // Whether the attack can damage airlocks and how much damage it does var/crowbar_door = FALSE @@ -166,6 +168,7 @@ GLOBAL_LIST_EMPTY(sparring_attack_cache) sharp = 0 edge = FALSE attack_name = "bite" + attack_effect = ATTACK_EFFECT_BITE /datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if(user.incapacitated()) @@ -254,6 +257,7 @@ GLOBAL_LIST_EMPTY(sparring_attack_cache) desc = "A high risk, pretty low reward move. It could be useful if your shoes has a knife sticking out the front, or if you're a trained martial arts master. Make sure to target the lower parts of the body, or else you won't be able to reach!" damage = 0 attack_name = "kick" + attack_effect = ATTACK_EFFECT_KICK /datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) if(user.legcuffed || user.incapacitated()) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index e661e1d9b44..a7c659175c0 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -86,6 +86,9 @@ var/burn_mod = 1 var/brute_mod = 1 + /// Override for the visual attack effect shown on 'do_attack_animation()'. + var/attack_vis_effect + /// used to limit people from queuing up limb-breaks var/limb_breaking = FALSE /// Basically a catch-all aura/force-field thing. diff --git a/code/modules/mob/living/simple_animal/hostile/adhomai.dm b/code/modules/mob/living/simple_animal/hostile/adhomai.dm index 2e56f87dbf3..bcbd53a258d 100644 --- a/code/modules/mob/living/simple_animal/hostile/adhomai.dm +++ b/code/modules/mob/living/simple_animal/hostile/adhomai.dm @@ -21,6 +21,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "bites" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' environment_smash = 1 @@ -57,6 +58,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "bites" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' faction = "Adhomai" diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index c8fd579102a..1872876f7a4 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -13,6 +13,7 @@ melee_damage_lower = 5 melee_damage_upper = 15 attacktext = "mauls" + attack_vis_effect = ATTACK_EFFECT_CLAW cold_damage_per_tick = 0 speak_chance = 5 speak = list("Hruuugh!","Hrunnph") @@ -34,6 +35,7 @@ melee_damage_lower = 1 melee_damage_upper = 8 attacktext = "gouges" + attack_vis_effect = ATTACK_EFFECT_SLASH cold_damage_per_tick = 0 speak_chance = 5 speak = list("Awrr?","Aowrl!","Worrl") @@ -59,6 +61,7 @@ melee_damage_lower = 3 melee_damage_upper = 12 attacktext = "gouges" + attack_vis_effect = ATTACK_EFFECT_SLASH cold_damage_per_tick = 0 speak_chance = 5 speak = list("Shuhn","Shrunnph?","Shunpf") diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index d7ef9f3e938..eb278ca8b02 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -24,6 +24,7 @@ melee_damage_upper = 10 resist_mod = 10 // can't grab a cloud of bats easily attacktext = "bites" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' //Space carp aren't affected by atmos. diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 8747f50abb2..2396d3ce6c8 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -35,6 +35,7 @@ var/turns_since_hit = 0//If the bear chases someone too long without hitting them, it will try to change to another nearby target instead attacktext = null//This allows custom attacking emotes + attack_vis_effect = ATTACK_EFFECT_CLAW var/quiet_sounds = list('sound/effects/creatures/bear_quiet_1.ogg', 'sound/effects/creatures/bear_quiet_2.ogg', diff --git a/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm b/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm index 89df833f51c..885925b6c2c 100644 --- a/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm +++ b/code/modules/mob/living/simple_animal/hostile/cavern_geist.dm @@ -31,6 +31,7 @@ mob_size = 25 environment_smash = 2 attacktext = "mangles" + attack_vis_effect = ATTACK_EFFECT_SLASH attack_sound = 'sound/weapons/bloodyslice.ogg' lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE diff --git a/code/modules/mob/living/simple_animal/hostile/changeling.dm b/code/modules/mob/living/simple_animal/hostile/changeling.dm index e4df40d8bf1..b67081bd65d 100644 --- a/code/modules/mob/living/simple_animal/hostile/changeling.dm +++ b/code/modules/mob/living/simple_animal/hostile/changeling.dm @@ -34,6 +34,7 @@ mob_size = 25 environment_smash = 2 attacktext = "mangles" + attack_vis_effect = ATTACK_EFFECT_SLASH attack_sound = 'sound/weapons/bloodyslice.ogg' emote_sounds = list('sound/effects/creatures/bear_loud_1.ogg', 'sound/effects/creatures/bear_loud_2.ogg', 'sound/effects/creatures/bear_loud_3.ogg', 'sound/effects/creatures/bear_loud_4.ogg') @@ -165,6 +166,7 @@ mob_size = 15 attacktext = "mangles" attack_sound = 'sound/weapons/bloodyslice.ogg' + attack_vis_effect = ATTACK_EFFECT_SLASH lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm index e282387782f..15e48a034c9 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/bear_companion.dm @@ -39,6 +39,8 @@ butchering_products = list(/obj/item/clothing/head/bearpelt = 1) meat_amount = 5 + attack_vis_effect = ATTACK_EFFECT_CLAW + /mob/living/simple_animal/hostile/commanded/bear/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone) . = ..() if(.) diff --git a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm index babcdee9adf..25adb384d55 100644 --- a/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm +++ b/code/modules/mob/living/simple_animal/hostile/commanded/guard_dog.dm @@ -45,6 +45,7 @@ destroy_surroundings = FALSE attack_emote = "growls at" + attack_vis_effect = ATTACK_EFFECT_BITE butchering_products = list(/obj/item/stack/material/animalhide = 2) diff --git a/code/modules/mob/living/simple_animal/hostile/creature.dm b/code/modules/mob/living/simple_animal/hostile/creature.dm index 420a9f07bf7..43ef278efdf 100644 --- a/code/modules/mob/living/simple_animal/hostile/creature.dm +++ b/code/modules/mob/living/simple_animal/hostile/creature.dm @@ -11,6 +11,7 @@ melee_damage_upper = 30 organ_names = list("meaty core") attacktext = "chomps" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' faction = "creature" speed = 4 diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 6e437761dca..79046d965ee 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -21,6 +21,7 @@ melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "grips" + attack_vis_effect = ATTACK_EFFECT_SLASH attack_sound = 'sound/hallucinations/growl1.ogg' min_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index ae18acf0980..31f17feaf23 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -46,6 +46,7 @@ smart_melee = FALSE attacktext = "bites" + attack_vis_effect = ATTACK_EFFECT_BITE attack_emote = "skitters toward" attack_sound = 'sound/weapons/bite.ogg' emote_sounds = list('sound/effects/creatures/spider_critter.ogg') diff --git a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm index b6a483b22b8..f106ba7fba5 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebots/hivebot.dm @@ -43,6 +43,8 @@ psi_pingable = FALSE sample_data = null + attack_vis_effect = ATTACK_EFFECT_SLASH + /// Weakref to the beacon that potentially spawned us. var/datum/weakref/parent_beacon diff --git a/code/modules/mob/living/simple_animal/hostile/ipc_zombie.dm b/code/modules/mob/living/simple_animal/hostile/ipc_zombie.dm index 0933467441a..c05d3f75802 100644 --- a/code/modules/mob/living/simple_animal/hostile/ipc_zombie.dm +++ b/code/modules/mob/living/simple_animal/hostile/ipc_zombie.dm @@ -12,6 +12,7 @@ armor_penetration = 20 attack_sound = 'sound/weapons/smash.ogg' attacktext = "smashes" + attack_vis_effect = ATTACK_EFFECT_SMASH faction = "hivebot" min_oxy = 0 max_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/moghes.dm b/code/modules/mob/living/simple_animal/hostile/moghes.dm index 3a372249719..6a38c625698 100644 --- a/code/modules/mob/living/simple_animal/hostile/moghes.dm +++ b/code/modules/mob/living/simple_animal/hostile/moghes.dm @@ -29,6 +29,7 @@ mob_size = 30 environment_smash = 2 attacktext = "chomps" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bloodyslice.ogg' lighting_alpha = LIGHTING_PLANE_ALPHA_SOMEWHAT_INVISIBLE @@ -159,6 +160,7 @@ melee_damage_lower = 5 melee_damage_upper = 8 attacktext = "rams" + attack_vis_effect = ATTACK_EFFECT_SLASH attack_sound = 'sound/weapons/punch4_bass.ogg' environment_smash = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm b/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm index b6c41c4fb09..8820fe979ae 100644 --- a/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm +++ b/code/modules/mob/living/simple_animal/hostile/phoron_worm.dm @@ -24,6 +24,7 @@ mob_size = 30 environment_smash = 2 attacktext = "chomps" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' faction = "worm" diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index fffc98ea875..49bc034362d 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -20,6 +20,7 @@ melee_damage_lower = 30 melee_damage_upper = 30 attacktext = "slashes" + attack_vis_effect = ATTACK_EFFECT_SLASH attack_sound = 'sound/weapons/bladeslice.ogg' min_oxy = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/pra.dm b/code/modules/mob/living/simple_animal/hostile/pra.dm index 22e30716ab8..0a98e152bf4 100644 --- a/code/modules/mob/living/simple_animal/hostile/pra.dm +++ b/code/modules/mob/living/simple_animal/hostile/pra.dm @@ -36,6 +36,7 @@ mob_size = 5 attacktext = "slashes" + attack_vis_effect = ATTACK_EFFECT_SLASH attack_sound = 'sound/weapons/bladeslice.ogg' speed = 2 @@ -174,6 +175,7 @@ melee_damage_upper = 5 attacktext = "smashed" attack_sound = 'sound/weapons/genhit1.ogg' + attack_vis_effect = ATTACK_EFFECT_SMASH speed = 1 ranged = TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm index 4d7c3df37a1..0b4b851cdf8 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/aquatic.dm @@ -47,6 +47,7 @@ ABSTRACT_TYPE(/mob/living/simple_animal/hostile/retaliate/aquatic) melee_damage_lower = 40 melee_damage_upper = 70 armor_penetration = 80 + attack_vis_effect = ATTACK_EFFECT_BITE //Admin shark for admin fun because why not, not meant for normal gameplay /mob/living/simple_animal/hostile/retaliate/aquatic/thresher/deep_water diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm index ca019a5cea9..162e1d5e6b0 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/cavern.dm @@ -24,6 +24,7 @@ melee_damage_lower = 10 melee_damage_upper = 10 attacktext = "chomps" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' speed = 4 projectiletype = /obj/projectile/beam/cavern diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm index bb43982057b..5a85f93d886 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/exoplanet.dm @@ -27,6 +27,7 @@ ) emote_see = list("skitters","oozes liquid from its mouth", "scratches at the ground", "clicks its claws") + attack_vis_effect = ATTACK_EFFECT_CLAW /mob/living/simple_animal/hostile/retaliate/beast/charbaby name = "charbaby" @@ -66,5 +67,6 @@ icon_state = "lavadog" icon_living = "lavadog" icon_dead = "lavadog_dead" + attack_vis_effect = ATTACK_EFFECT_BITE speak = list("Karuph!", "Karump!") diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/konyang.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/konyang.dm index 3e0e1da202f..01f49ea1f7a 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/konyang.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/konyang.dm @@ -21,6 +21,7 @@ melee_damage_upper = 30 armor_penetration = 20 attacktext = "claws" + attack_vis_effect = ATTACK_EFFECT_CLAW attack_sound = 'sound/weapons/slice.ogg' meat_amount = 8 diff --git a/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm b/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm index 7713e2f0bcc..984a48196b6 100644 --- a/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/rogue_maint_drone.dm @@ -15,6 +15,7 @@ melee_damage_upper = 8 armor_penetration = 5 attacktext = "slices" + attack_vis_effect = ATTACK_EFFECT_SLASH faction = "silicon" min_oxy = 0 minbodytemp = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/space_fauna.dm b/code/modules/mob/living/simple_animal/hostile/space_fauna.dm index 079214b7a7a..a20d846f789 100644 --- a/code/modules/mob/living/simple_animal/hostile/space_fauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/space_fauna.dm @@ -34,6 +34,7 @@ armor_penetration = 5 attack_flags = DAMAGE_FLAG_EDGE attacktext = "bites" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' //Space carp aren't affected by atmos. @@ -299,6 +300,7 @@ melee_damage_lower = 5 melee_damage_upper = 5 attacktext = "bites" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' min_oxy = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm index a1f945e356e..ffc05470e29 100644 --- a/code/modules/mob/living/simple_animal/hostile/spider_queen.dm +++ b/code/modules/mob/living/simple_animal/hostile/spider_queen.dm @@ -38,6 +38,7 @@ mob_push_flags = ALLMOBS attacktext = "bites" + attack_vis_effect = ATTACK_EFFECT_BITE attack_sound = 'sound/weapons/bite.ogg' pass_flags = PASSTABLE|PASSRAILING diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 7e8a0173bf5..8d280d8a78f 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -24,6 +24,7 @@ melee_damage_lower = 8 melee_damage_upper = 12 attacktext = "bites" + attack_vis_effect = ATTACK_EFFECT_BITE //what how attack_sound = 'sound/weapons/bite.ogg' //Space carp aren't affected by atmos. diff --git a/code/modules/mob/living/simple_animal/hostile/vannatusk.dm b/code/modules/mob/living/simple_animal/hostile/vannatusk.dm index 466ec6629c2..7c1987a4ca5 100644 --- a/code/modules/mob/living/simple_animal/hostile/vannatusk.dm +++ b/code/modules/mob/living/simple_animal/hostile/vannatusk.dm @@ -25,6 +25,7 @@ mob_size = 15 environment_smash = 2 attacktext = "mangles" + attack_vis_effect = ATTACK_EFFECT_CLAW attack_emote = "charges toward" attack_sound = 'sound/effects/creatures/vannatusk_attack.ogg' emote_sounds = list('sound/effects/creatures/vannatusk_sound.ogg', 'sound/effects/creatures/vannatusk_sound_2.ogg') diff --git a/code/modules/mob/living/simple_animal/hostile/viscerator.dm b/code/modules/mob/living/simple_animal/hostile/viscerator.dm index 66adfb761cf..af617c7ee7c 100644 --- a/code/modules/mob/living/simple_animal/hostile/viscerator.dm +++ b/code/modules/mob/living/simple_animal/hostile/viscerator.dm @@ -12,6 +12,7 @@ armor_penetration = 20 density = 0 attacktext = "cuts" + attack_vis_effect = ATTACK_EFFECT_SLASH attack_sound = 'sound/weapons/bladeslice.ogg' blood_overlay_icon = null faction = "syndicate" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 8c63785dac7..b1f58f52965 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -620,14 +620,14 @@ if(!actual_damage) actual_damage = harm_intent_damage ? rand(1, harm_intent_damage) : 0 apply_damage(actual_damage, attack.damage_type) - user.do_attack_animation(src, FIST_ATTACK_ANIMATION) + user.do_attack_animation(src) return simple_harm_attack(user) /mob/living/simple_animal/proc/simple_harm_attack(var/mob/living/user) apply_damage(harm_intent_damage, damage_type, used_weapon = "Attack by [user.name]") user.visible_message(SPAN_WARNING("\The [user] [response_harm] \the [src]!"), SPAN_WARNING("You [response_harm] \the [src]!")) - user.do_attack_animation(src, FIST_ATTACK_ANIMATION) + user.do_attack_animation(src) poke(TRUE) /mob/living/simple_animal/attackby(obj/item/attacking_item, mob/user) @@ -1142,6 +1142,16 @@ return TRUE return FALSE +/mob/living/simple_animal/do_attack_animation(atom/attacked_atom, visual_effect_icon, used_item, no_effect) + if(!no_effect && !visual_effect_icon && melee_damage_upper) + if(attack_vis_effect && !iswall(attacked_atom)) // override the standard visual effect. + visual_effect_icon = attack_vis_effect + else if(melee_damage_upper < 10) + visual_effect_icon = ATTACK_EFFECT_PUNCH + else + visual_effect_icon = ATTACK_EFFECT_SMASH + ..() + #undef BLOOD_NONE #undef BLOOD_LIGHT #undef BLOOD_MEDIUM diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm index 87a611f4c68..356d264fefa 100644 --- a/code/modules/shieldgen/emergency_shield.dm +++ b/code/modules/shieldgen/emergency_shield.dm @@ -334,7 +334,7 @@ /obj/structure/machinery/shield/attackby(obj/item/attacking_item, mob/user) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src, attacking_item) + user.do_attack_animation(src, used_item = attacking_item) //Calculate damage var/aforce = attacking_item.force if(attacking_item.damtype == DAMAGE_BRUTE || attacking_item.damtype == DAMAGE_BURN) diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm index 574e13da3b8..d13f073587c 100644 --- a/code/modules/shieldgen/energy_field.dm +++ b/code/modules/shieldgen/energy_field.dm @@ -43,8 +43,8 @@ energy_field.remove_individual_field(src) /obj/effect/energy_field/attackby(obj/item/attacking_item, mob/user) + user.do_attack_animation(src, used_item = attacking_item) user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user.do_attack_animation(src, attacking_item) if(attacking_item.force < 10) user.visible_message(SPAN_WARNING("[user] harmlessly attacks \the [src] with \the [attacking_item]."), SPAN_WARNING("You attack \the [src] with \the [attacking_item], but it bounces off without doing any damage.")) @@ -57,7 +57,7 @@ if(istype(H)) if(H.species.can_shred(H)) H.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - H.do_attack_animation(src, FIST_ATTACK_ANIMATION) + H.do_attack_animation(src) H.visible_message(SPAN_WARNING("[H] shreds \the [src]!"), SPAN_WARNING("You shred \the [src]!")) damage_field(1) return diff --git a/html/changelogs/mattatlas-tgattackanims.yml b/html/changelogs/mattatlas-tgattackanims.yml new file mode 100644 index 00000000000..663bb08a194 --- /dev/null +++ b/html/changelogs/mattatlas-tgattackanims.yml @@ -0,0 +1,58 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: MattAtlas (Porting), /tg/station (Original Code) + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Ported attack animations from /tg/station for attacking with items, unarmed attacks, and for simple mobs." diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 1f224ccd19d148d98c19c696759bb75957ec8db2..b979111353780643f8d10e1c87326278f7efb93b 100644 GIT binary patch literal 367445 zcmZU)cR1UB^!Fd5Xw9e*v7=hlicJ-*n6+tbN~%Su5_`8+5Oip*sJ(a9uF)bfqiWV{ zX~kAGQi9z1+~4c|jqCoyb;(Y{KK$?>O;#ve@ndZ~H5oJl$V*K1RsS^Y+)l%`YBx%ACz#GC3j{r(mn z?&H_Ceub!soA*F%ZyZd9lwK{c%BX(R);sZxqhv$N=MsCksgp)R(S7?vZSEWH@7Fxu zuidbj=VfeXqHa{U*Eq>@OF%LsV9Xf#rB)h#TZCZ9#hD)a^8^J)HG*4(9uJ#8_qO(< z;RU|WZ8Yd_-U@Z$`?YYVmVuj;>wtiHfa|%M@_a&++%61|SszH{N`<&&rT(_@0%4|h z4#O8SDM!5y&U|VGOxAz*x}7fnL|UH;ECY%^FlPjO0!9vIFw*^-oTCdEmI6AbJ}k*k zVGk8+Gk4XKjeo7rTT*s@De3DAlm)iwwfT!C-Sj3iQt%Bfe)r+593B)0m(fxf+m|uF zcYW8vM2B}p`daY4&lwI08D^qZrqxKjq>51iW#nD_sO0c(p}xkkz3}ZFR$YkvFP7DC z)uIPdCux%jws<~zTYNK)QTuPAMmfJH70zC^PfN!2Z}14`;dkcVfu|r{E={J=Op6a} z`3NTa--Zc0z9n#}#3tbfVKy?;O_xo*arY)6o~EzMw~An%=VS36l4OUX;l?ZM5?{|E z1vmz(*U;U7l~7``JPU^XIzl0&7q5ma!63@sHOM z3}^F|Edx9|rmTkP)~Wp+W8w9SX6KmZixqZyb4xeEh`{!UKjTrf|%5LclH z5I^_xOmNBI&sVLz>5y9Mc!P04TXJpgi=!9Mbl%bX^(EnX-g9C@T@sq4nr@5;N;GmgZxRS!} z8}9~$%xxf=IxdOZ+;O6Q2#(_omhA)n*(v_nj9c{w-*5jw4H$L;d4Lb3pNWJjJb=UW zeqU4D9Cva)+~IxNfZALIiQeIMGy*eJ&sE}{r3e?$0Gl@*J%on+h)iNPKfa^CBqiY0 z`mjE@{^yt8mCx~vnXh@*)o3B2YmJPl=qSF7BC)pWo{Sh~5&P0^O;-)NnvoSE zjLdrV{Nlpt>!@4V-BDA7i;@EyuZl!sbGf1wXW9U;C)n0M!WPR{p1oxEyk9`U@y_UC zGfpnzSiOxDd{1~?6rm=@$k<+*tuw=)X^L?)eX8DaeLr3SM|e5 zi%Zn*WhZmlTG|Bs=yR-DzR~rl{ZPlAMj6(?W!C*Lkq9Q+Ky9nF`V+ z|N7kViz5Ia1TcWzu?og)ciQ@0v-K0LtPGMppn8s~9)V;@hTQ$2BM}GTxSq4Gamq?6 zzf{lN6L3iFB$YoszK=^|`A`@sW&jK%(%UX7*2{@}`S~=Eev0UOq{hdEA zR*~Bi(Yy4kqd&3@H0`DO^;A8f;k!To?F4AWKfXNPw0_y^dED_Q;Y*-3^2v&7=P*6f>?Nme zjoov>RluyyeA*%zzFM%~9YeLh_<(iJGE&QDzRa|4KZw^6kq7rPTHVGQjM-9hAmN_IUB0O`9ipGSS6pr^<30Es={2on}fR!ob{=3*8cg7D05Aqep zxl()m?>8cjllP?GbLFgXPcWX4otF1vZPbJ|X%0%q{SWSh&crmGT|{9fV}ceny#1u2 zyF2#DtPzi+;C>S0ncmpPom;td&9-_S0&lc`7AS`K`uc7iJme0mcAeQe{W?|}fgY^* zp$h(ycM$$GiJ(s2y0}1ME5^tbm_(Bjewx5!LOmhKMUw1wOxGQ9Ko`XVSpF0eqnXqB zS$na=>4`mkPqX)Ozv3=}pzNdMgKM8zqK{MxiyKLc`u>k9 z)OVjqu1}`ltF1+zXU`vPtSN4eZ8;$XBW%6Lymw}GoLfBZou5F78cooPL#M5@om%X# zud{*bK~1~I4Uw#Ey0yzeQDOTw5o(H<%?nK~Y0Ccp9L-U_v50kaou!}IZyOnmaM!qNjrh<7<-iE%cP`E|5aH9?%GFPt&`xkQpH zMTCCV23{D~w$wE&|C*aWMuhqbH%jr{2$B^t=^b#|^O;GO6YMZ0^;E!C167;np+YRm zEP1PHbDV*=Xtk7pPU+n(VkD1QuN^Jum>k{vQ+1S#+}t9dT?FX8UQFqqG{^sz-aTg% z@RQ!|*daZ8s;*4eXHxlaTTRCE>YDb+#!q$9*gjRbgzlU)uK93-zlrL0rxvTT^8U^);#`8C24LZ5^eipT>a;tw{v!N@+!1P^9!I}EC49D0PPbl*^UURbe4dlT zlI+;!l_sjtzR@%doz469`2-4Y!#mA#9{+dEfj{hNny+j(f;`g}EGb~8XKI}3mxuV3 zc|aCtx%FRU&#D}r`E0?us&aGaO9T?;*T^>aWla`^qvl&Np*gH^j@upDX}^V;zk2U= zruO`_>{B|oZTW_4z-=n&4bHKk<~uPs>(k{7s?ZVo^-|#11lk0Ft!wQ*yQV(@U3G1C z%fJsE>Sv_2P2c#FRSYaaVOvoCT>{5)`zTd=^49z8gM*coJ@U_5CH~4U1Lxb#Rp;GR zPd;mJt+TOwbzFfWHVaOcOIFEUO4SEJ3Gc}PQDm$73ixlcgKp`-po_4DuwS!VKiF74 z@#1Izbh%YG%@_0rV05qR>`l-~qJa>BEhi=U<&a;5Wb z32;ZNU8uS`&(S4(so?q7A;ujlw$N`AQhx=jRv4XEH89$68ZaLrX!&iw;kS_K9gaUp zN4T=@vcv7i0wyjjE&Y~KPuitSylYJgZkK(H?|4@JWCFg699kt#?sKd~^-SP|2~qOG z|6Ckd{+%_LJ|DpScv<+W1KY`j3Me8F^=`bcC4@9NT~ z?^RQoJgdvutiQz{I{_vT(759EZTo2dXBykw+Lgn;4aSwd!r$46s)8mdO}5zK~4vmC7hj= z&D@GRk2+K0<4uEWF^!FtrMg^D>X&Lbs28*&kOP|y;z`jA%o@#UO`-C&=dE1&+@K>z zTugNwIf?*9_07 z{FN5q>Sa0SM_x(l=<9laJHhnM_tbBZ+f7j;>8~P|NaCYp=uJ63dADB`#Z}eG-eb{a zRc`+YIbkrgjrBvS}WA0qWITk8E)s{#RK` zAF6ZZSQH+MHn)b^{au_1ds-OMfvxT5N`ngGiqWhJeWv>kVrL0ZF~LoWt`AO1unmn(I-A$EP zFhxd6x}6~pmo#D{5~X%!B*Ha&SJ~)#7Ks{Y2&rpt-$tDi*qalK{;^YF(G=K;4QwH^ zma#`g-4b{seJC5YeR19$g~N5NMJ+Bb$602PagHS412SgcVJ+$$al13%FNZ}v-7EaO zuYL9xjruC9G^&pNQj>yCc_F3#E=X|4-@EVV7nbjE&PXPln^rwg7i}1|>>$^Q3l@mOrXcdsyxk42QDoh zOl9WxA0veik0QG_0^U;}-zJ-ec$x5QT>(9Pv$=2MGJ<<3NL;cy^mXJjGQUhFPjVarrU^Ec>^_OUZP# zf7+@`#!3Wf=oaD~^?ncsy;Kwsu8NBf=fjqbY+DnJu~CBOQQL|^L(wYf)_=s4hIcGJ zKDMO8*6OJ2J)OC5`dB8{(!`I`u%gINz`X3^-L2II5^Mc=dnA)d!Sa@C-q_&0NUrG< zulH)HJK+?edw{JiT%TV-+TQEX51ao*q@e@wJ&y3Q4BYQR?0i5I3Th(+ANwr*fbX6s zZ=B=lqmK?{j>pN4jt5S3eUHsa=bP*cocpT&*WB&Xj!S`Cjzo`%Kp)%(mCo`7XY| zm=$!!X3}4-VigjWuvsosTF;rGaqhFjNHK=C?M6}Q%-M|I zVMH!s+bY&CSS!*Aw02<01eg0Cixi&p^IYX&58=5ZsK>O;VXa|4a+^J;qm`^ZGh4y% z`_D=nZ_d{VlenSgjqvw|9mGV!M{Hg%MeDm5?P6t>#&~-vb;x87M@6IYWE;ZonkUXl z!cuNxMCh&EC4W_XAI^jSzr5E5yo?F;e_f59f0(xT|FLa(f=gWy$pAo|bN7|F2%ShE5H@aTo+P4ia9V(oxQpRs;43uL9qj@! zOzwZ-(=q0yBm!sRf%kx7mcpLlg@FaAe3TFb0$_m10UiN@9U_!P_kkMr!cb5-d3j(-W25}V=~ms(?QJF$Lncoa4^=dZ0fkCL5e`mj5WY$| zl)FOds+;QN$YumV004N2!USQk;;r^vD+$mu{_fMMIyS&&>#`2P8QG&Li#AHT8~5~igFT!kx$i<-igKr#5XIOy7{yTYcAns6j( ze%X$Id9tPp;{!az^GyDu1>Sjl-3%U&Vu#QH)^V%8)PVREv<=Ib?z7=;HhD`tk01Wa z$eD7~fwKMR4vDze;B8+&O)am@Kz04iVA0HAusRkaAJ3M*rN$tvg*Ly-@CO%lhMTD+ zF9t0aG;!r3-D@tvV$)wsaxtE4m`1gq+2`V>njq~e|7x4ghn+9jsQ{e$d7`k7DEG|o z#p%`flshm#JQQ#ZXn@Uph`vnO@I;2{CR%_lOdVneM}y#@02?%J)qmphe$Mh)e038R z1W$qL!T>-j;AapGggW4&DS`=5jd+Q~exH0oUj|~h50H0_5 zP7sW2ZDOXxmHjSZ9z&yi@lI6kJ{V5%uN{ad#O`#yh)o=$Ey7dEW!`nCXeB8Ykg7wUlLlrh^Lr+c@Cg{? z)w`fk0#Z3=^e-+=us2-86sr4b<76@w6GDtOP%7#scyv4uoiTh3m{7$ zeNlRKCGTP*&n$(RQFLVx;)*J7noi9w^~fppNP)s(e85+tkUISH_gOUZLDh88n6C-5AMa}8yW#y|uV~Vb7ulZ>Pi!_v#ogWy;1);rF)FbLy7ZIQn*w*0dBM(nGYMr@{M@bB6!ip6(~=qt5)aj7 z5q@T9zy|z8Q~{?L%{OE1?!m5!mnh_neygMC%=e>@tBm42quDw1jH#o;bEqzM7jMx3 zm?282_00>q=mwO+h|!27j&m6so$Z6S*5kSilkY zmT~h~=b5Uw53F&hUaftZVNe zTmuIZfgC;()??a}@g%0=k|qW$pq zRv8rv`$jOxH8$$v^w_NDC^OayAxOS1`}z|APy~XHq9oKn&5QlCtMc=h16#w5w5*d$ zKpnz@9>TjW;d`}thgXrb|G1 zpiZX%RkV4`uw0{g(RDCf4Q@0U2uw#c>A|Xu4IpyPzV1@Y_0AW6Gs+R3hA=oB-82n` z@d>Zc0>HU~?7$*#t$@CURBuD^{&WilVXM{UkKXet1a;sYyy`Cu<=8~H5v_h zAueduiLe~c;F+W1__7)!28b(w0X54DmxEk~jbwkZoQR|aS~9puL-weCtja{44A&3E znh|0|AwD$$n`d&(XQuEPexNxenE-mqp-Xps*8?_b2hI30cr@IuHSB)=x4YQUx=CwB z=(T0|sUG{aG~H}Q83#h*RX08vqF(`eD76bp2YiLZ|6IkTMKB0gTpf3>WQ;B~l|@dU zIDeuPgqkI1=BPB349a~QgTNr+@DWBpCW;}Bjq=$%x^LzPX+u3@j-{%!^apNR9Z%cWaAgN2KoDQu_I`aa#DuJBFKA-R1G^+54jWC90eF=I;SgC1>b+r zeze%U+=2}pCkLbq=Z!A?5a$sbyTqy*ANV}sm^}8_hixhSXrIDX|BXiGG%CfPcXwQ9 z`qx;_lgoavoj5F!w_Jyt9_RCgJ5%-Wa1@=tMsZEsX~V7pRpDz50(XT8d`Nr*UiCKy z;i;t{U|&S`~}^Qx6Sz$t}ArlzS5&{LZ3 zXRuW!44KU-q82l5(;zYLH@;@@ZKp;SaD2|>CAuG#MK_5l>xh3{3*Ic`@suf_&c~6?s--& z3Ir5ZWFf#NwG$=v0%Yl6+f+i8KgUKK_@j`EF%&&RQT(90?yl&%_S&$w7M_!00Z^2*zg;6o2eO-upn_a@d*;bLGTEKG`9iJNu%D{2qGc*v2eTl49#D-r6L|uarAg<|e*>sA>RD(j-wH-dR41(Z(cvUc*38)CJh{!`; z&~V)7ErDMDh0*CY!ha`V^hPKVV$~kxrbP=Fu=3kVfnu+k_l~^Fx*=X-0)qgLz?W)2 zZh5-%h^4+Ym8kQ$*0I0TeYivh0p>tOVh0be0P5KG z8u}Y!DWSf8@9_lc!^sf5bFXdW*@+cpw+N~#AozI{)IBcfJgo5{cvsq~>7y#PBe4Mk6cKzoD zLt{bH%`vsSUsbot*R7({Co@fW_{KpK<_0&Z0?;MV{LWu#i&`@mGp0?p&x!A9!3tl*e7^yCh<{Y{=mgr8~FXWZ=-O`|q z4R}W}`YVX0Kj^s;%(X_xaqlZJ!VPwaQkg+L{qp+yo2-*;n!73Yr~%2Snx;g{nlZ^T4Hn`!w=nlTgroO&UOcog{65Q+B$=8w*cA zyh&8#D~nKZh?Ik>bZAOBoVi|JehtG6cu9QEHm*h(u;WETGp6S#=1va#&qXQccfTvt zRQ#y^OZ1B`*PwV+0SZa0C z8_w&LBs55k%0xq*0a`@|aU&RQ29w%D$@fPWC8~wmQ!CN`)ZDeG04FU~|#|XfqU;UQ)(&TTCZrRe+1t-s>{cQ3G%z@mXPy zQ^iHMNlt!vIOGEs^bO^l^6hwp&lO!bz6=(1(CKVe#M%%rmLk)M`okk|Gdlf%?MWGm zf{7O@gAT-@2Zt|LC#4_z4J3`4@>Vxy6XY!3^1^nkX}rQ#s?J0Lmzn<6s+j#eQQd)wavr#Pt*B4bg^@?l~d z+z)2-zYT;ruHKI+&|S*iWPb!Ridd#kX}@bIUJXmJjq1t{w^1Vn{-0R@PM#^K0_+#i zS5oxtKutA0UiFC^7YZCvj@;AftGr_{w@k^%R{o-Ph#K=E@|$y07&dHKh2SK65P}c+ zqQf>d6hKewnPXmYYDFr-I#0Ld@xUV=u4#@C4pD`vS=E?nV zQea+?s``VO!L1oq@_EHBIbg1fkFjhc zj9}@sLD0P8crINsnKZzS&8*8VJ@K7y))Yv?MNtxKlw6k4Mc#h!S=kav27|Oj?9AHT zI$p|a@+RG%Z;o0}80Ge!Pt_|jr=Y9s{ow6%!v!8Vm(472=AK(Rjb|DP$)EfV$llH4EUF#WYUTfo-o^8Y-POd*?KJ=Qd3zp_qlu?gw}G0~~7nDaQY? zcu5GpZK5t;!F5p85S0;$lW;P?!6SFZaFNa9y(3#Ni5j* z-?BG$bXSzvMnfkRn9B?NycbfSE1jl8URf#xJVmaep>-(tyRaH0K5Q>nt)h~_X-dRn zQU&pGc{slkL%i#>8MT4$jErC zkw@uOiDO&!#Yc;a13v=(a01RMP-o(hi$v%e0zNW>`Ui)F>xf1?tUhIi1G8ig6ezCk zRRgs2zIPg8kCuR;m=~Tj+{C#1;hR#A$Q2CfGBCmzCX?vyRg2d zCBjZS4k&*}fkW1?!!Mu-&$o0B^ad454&|`3mD+O4{#sHux~&#@faBaFXApuqC4?;v zizxgC&W8h)jhs;@VMnhK7Bl^aPhq7W)NKby(1JKeA`O$ zVD2ZmO!HivOzI|w`P4+1!sLM`hTp+8A0j%NMYIjV*Z?mvjpGbbcMD=-;;B-anm1jd zQPHW!m9MsPt_sCnp*9pB6ED%hXDN7k7Qj~Y@XJ3J+khTc%Ejq^C4uEi@iQ`? zSDM;r0S(h1hyoa7J~A7QPOjZL1&L5=6`j%-(`oZRsj9v@eH81~CS0i$E#ztn*MV5b%yjSCf@wB7>(PZS*_6kJEN zuEC?7VM@nDu>op1gJ{99``(!c5FCS8?iJ7y47EPi*D88&$bSi}cyq=~jtblF^* zctRl$Tb*N+TEcbrpY}|^nRV2W_3%X$h4XJvz(58C@lpJpd7M)U)C+Ckf8Ue6LAD5t z@J?w);@h6AnGp<9E;!&Hhe|yU!w|!?&S7*)#x%wgnWY}3({q#@eH~JV8n_3Xg8_YE zhlSqrx-gVN^+`yK>Hy>nCZ(V+2nusS6WZ4|rzfol-Os;lf@q>ors^W&qRwZc9QnVF`H`buzi1d7 zCeBhnA?5e&9prx+ZJJU1!D>9=L{KC7X?T5$FGCx%^d*?EhLE^^9Ni{G<@BD3uNz{n zCTBMN@^6C zKLur!uX00TO0g{60S%PsoaK@}{oofbP<#1`wonBP^_?Og3mBH2OD*jF67lA^#dvRE zGU}?d2d|LM#wQ?9PUmvOw8Cg>sfK%$E|?iTawgcq++*z=@fL|sPXCs`_63tQhK7oy zye|MN+rp?b{1U41uj46^!#$Axxo{|5wnXl;MW$)@K@#9moE1$UXcZ8>@^;Fl09I}s zfE7E>QB>nY4P;qx=AV`Q$w5dYthW*Ye}KTKhims*D`SP5QY?nj)T}-m+Yj9VTgEcq z$(7OlI3nOa!~&q$n6%AUh@-X%p%toQ1jHb}hp|r2xi!VG-8B(+15yz%h-?a{s48&0 zWRe0cU27qD)+3@292pJ2=58pW&2ev2pdwH_HK}FVF0~8HVtt%~5m|;OhHI+zh zwtiqFI;Lr6pt^aNp&C&J9(;i!ERh-qA3zvp`=DX1UiHSE!@q`7a4&BbLn;V6=&J@v7l;ygMvc@z>*ul}e*6Nk9Fs zgpi0oE6}UL4ZFd7y;O=}52d_A>nxq~a6J{9snu71E`8kTy&!XxsR(STWtueXka|+5 zy>>2_-Ccw>C2jllWh;M_F~uvCC|p{Vb3&qs<>sG z%+Tgs$^D}8W0@z6kDactxK=29rP0Ebyau>iP5s8ytevi2q5WtVhdMMf6n$`sWcn~E zU%0%nH~O8!r010{I&GRBb3=cTZ#nPkkRUl0uUx9l!!6+b#pyOM=|p!=v5#MgTYea`_=3FiGE1QyV64 z%-Z@cQdS_X!2?`WSSXya37OKbHbD)=K5S!m)PbX4Reg&+dTlXZmHI+8T>^M-F+Rsk zq#Hc){$3MRj>QX*2mw>I7Auxa7r;N`{!CGepQD-jg_>CFuj!%>vYtG>?J{+nkGM+X z?}>-(bt>zuPgTkzY)^zTuBbGCPprhwOD)!$!M^8*EF$f z4|t`Kre2bLSz%Ov#^WYLm$+lYpVOdbhlbi@dwL$ls67!dRMjhEiJOZzpKpGAbg>j> zC1RhilIW>sp7*qB-6G zBPfBdo*`Cg=*q_A_{LP5U-U##w&V4rWN0zC253>cY48#nPswOuehDUBk41zpT>746;CM@v%G}uBaVL_``8b z)~HA9ye(5n?XYVB8($@0+_MH7Jf+Tnz=*iYqx_TR6y3siEB6=%{*g*WO%D0U1-=`UxzyVV|rJj@Lr!(F0tb!V5hJ)t7JG3QFcmw)g>h1$; zD`j4)wR`$E>NX&(xBxvC2Im#+^iuCEa%w%m|B?8=tW#7jHBEH2==v+suEjSTx!+cN zFw6=Xn)9Xfs1BSxR(1Jl-g^HvxWWLCtSh6t;U1NH+^a(PbaO?#)M?ocaX=9_3CY7~tps%y2WqA^G;NCd%|kk9#m;iCm?LLpKC+}7+psG4vp>S?Al z6iN~LW$9YXPh%|#fjOo76C0BY+ZyHCu#~Cd)SLzsI$u`EE%RnyA>G~5^~Z(X*70qfBNK5PE&{)&tf&Y`R5k4YU-B{nzaMpVLf% zTAuTME==8}>Z$Ak{JHNIrxnM-0_OiX;*e5AD{ArB((r*t@4t)lFbd?*rD(E3$TJaw z!<3cK1LIhbh(&>o2-kJ&=FhguJYF%;RdztMfCj(&ebxY*OnWB4i<_0rZjav}*D%P* z0mOjnSU#wX>k5CX#6emCs>H)AJ=Sn=y!h3y>f0gyXzMxf+Rl7St6gG|N4B94mttt; zN=J=(U~3XxXs%2xn8(aU;C@-*&BZcLCVRNiJh5|3RT-ubh)+R7`Q0bYSpSr#pQvf+ z!oazEZbwwN5AWe^wV16ThFH*#LV|gn`HWu4MkA_~;)fS}&;IR;h%dIAztt-m;jZ2J z+H`+{!>krURE+A}jLGL1W$hgabW^XCAM{iZxMvondORF8A*Ljc{Kmm+6@OZjm&C3Ak zZBCG5%Q{Izg3<8TJC2uxcCu*_)jk^wKmWW=Nt$KSdJS)bUCU_4?z~b$Ye4#Ji^s5K z>cCQ50FG!j#rV`!a7wayW4J<2jwKF$6y(hLrulq<&`i!#Q_4!#z8_09JJ_xxc}iW= z6!B!8PpS?zkQ~Il&eUS%-@de7?6UCDRh9+z$*2>)ax9+2HFWfePh9o4!SUOz>1$69qLV?@2kqG$;Op98;*<9*^> zGf9QbM3^s@dQe*ZPZhx9kK~}M`?GZ_iFTAWm>ua$`q^U(f)10tD9B#;&{2P2m8UETxmg%bh-y=Xw{jct9 z(pF;~>7?MvD5sg_Sv!(N6$iSyX;LADKMi*kLD2$i_k-`lia&^Kc4n|J0Ay94Y_>}~ zJ2^QWM`&6TE>XBD(+vQF!_e0cYP^*L4`m=3s)RO_BpOO}Z__GQzG&4~D#ai-_yNB{ zRx)T8m;TKmw<>?94v*fPHBcq!;7=@)Y(%%@r6uGmDiGEwF3<2;@%BB4S7C6`|i#2B6 zvkcU_jZOU1_?`D`ZIt&+6%c-~#{AyGDsoxHtv77($%*IX;fOu5_75xmy@b9}r0p^z zE|Oe#Io40M?u$pwn%xb_FNsXqF^q<9*KX>kY=`VozAYH4VkBPDGjcnfA!0h_W9Dlg zDXYHKO1t*{n-Z!s01y{cPq)wEj77C(0W+l{Bt}0^2gKPZ2*H?NqI4cff#Hv){(;hP zZ_j047lxBdDBvoI?OJJiVbYyxhGt8gc9lsc*tV7fKF;9(!=j=n0Rq@aNwWJQm`Z%GXk7@!a!zZ}aeOqA^TCZr_eW96R6pji%`iY6lJVDK_VNxvqRjIgeM!=_3 z>tT=oC5^L!RvMXf28 zA_*_C)5iO~!$bF{UVHv<0}O0t+Lo5DAI5-Nr^G7Te&okLRMhZ1v^(^9=VmtF?D!3* zgPfhpG;K@2Jt|Rc9l+1TIZDHrZPMU*SXaGhq_Y(}6|H17D><$D#7FnDxA?t#r}srh zi?>P}O2UOVTBj@N1NNrZpQfmb0IWPi-B=$6gqu~cyJUU`06vAEu$N6#+`e@Sfn9}$ z?AeN}m{@97i>n^#!alqMa@I_m=hBNvK+-7dpg>{ctEC=xu?ns zlzw2&7-8e@-@kIP^?>O7>ZHwC#!U|D+^`p}AfhUPbtK#XmI0gGXk`4A)GpJO{^9(W zaCy9U9@41~q=^N|9BJGq#`v>1^0SJeOX5%tuH#=XqcSCK8T5xWfXDHw^UXUqSQr+4 zQVrE`uZ@ewuFF6!zuhlD+^#ArD6PI0QM-~PlI~yAuC^OGipY)n|Alo6Kf@kE`*!d) ziLHT^#@%tdm#SV3kK3O2w#gk1nEPWR;+i|QgG{4Xy87Cm5m(|jBfS50%#^UE`9i9D z2W)1jPG^19){w{2d~;@r4+--^_zL*2Nm1M~7xZe47z zH07{ovteWlMcGffrMCe_ut#4;-e3;IO044OZ(izhVr}~+Idiox?#pX;eZ;q3DZ)~z zhnX!~p>8?lYY)FLITV2Ecmft@{BqCbDP^MR{*69V7O$~jxf)e5(Esn!Ey!QhC-cPH zR2-|;MVl=5hA!J6`t9tytwk!67VaCfa@_B&qf34uX7g=+t3VJ?DI5bHeFR|h&e7@1 zKE3Mz`&;>Z)U5F2asRp!=5D;Y%P9KzzwJ7X$A|!tt zRTQP0vS}%A`{OAoolCX3y|ThBwsj}U6g;kE16jZ>u(8)1)K!bXYeWMyCig4pO3YW; z8;ZGlhSWih_V@pND3uU${5=5gye@Cac`*^vSc)=9f?l^r42JE^H+%aFT48lWbTax3 zDzsLcoVg5#C_4IRDytBV@MlG@OGtTAg!HL#_n5FQ2=>-%|-~NChkxw+qPuzqk14>HS;9j%$8Rki|KAd`-z>OyFJ1~fI zNzYW6UEk|u%6x9SbtSw~ZRp+k|3q}3FuKG0Sy)Bg{QNVN_GARzSLwoXoFAZiI)B-E zIdB{sFjrsK?A@-{oK-|B3?}<a?dZy$7`*NZMyL5*g~jzje4%plXB53R^zf>lo|e z18nVPS;|`ZH2+-7o+UPVSU$jBpIuY!9zGBBG(rWe{pDCPuCfVA8{izZL6tuUFQ4M2 z=GY9NRve-9 z6q>{pS8ys0%_I+CvNUB6C@n@=q}0hw0-I~=-3;U|?AqM|%b*c;%J{;~8ONPa&QQL@ z0Ui!|BSeii23hI>ra-TTVkxwRp-2tKL#<2H)`fV*?5$$itDfI`-W5WpX+;F{t;Z{JjZ?R`?XGF z%=?LV=)t*NS9-R15+#zLMpHqYb&pA3d{t?e;WO>Bjk&+EEp|~6s#msUgzWru?^Fd$ z$d&X|d&M3uh*RVg`$Pzo&1m4aWb>xEx*GCj)W!2ATPEv#8xFL}n@JNWGuKZDU5l&R zRhkP35<^WpJukyOj@kc?=5ZBbvrwT;MmmRFTPJgvF~8mHF&T;kMBe^+f@zvzB_*U8BVn6Fd#GQWOw$u)Ns zqn&tzxTo(g5G<%!SBUCB>c4$1K|6aYE*+cWcW)*V0mXfC%1HSkLEP`RdJFinQ#_VE z-q^R=vT?h!+5djxz6+Y4dGC|iy%HDt%=7I1{RYY>3*33qWV7)<_owho>o30jxM(C# zxBCA6$==aL1D4f&SJ09#qlc3F`@9s9@>beGbO1TVqaY@)=~du9^64GosaC1kkRQS| zjgQSrTx8!Oh^hh*1@NluYd`{u%y8O5kK4o#SKW(k=C$qI~VwVolKgs3H3&G%Mb}3rEk7Vf93JE09vrY04xn0XIL; z{n)p&Kc_Kp#|K!#My>5M?i!NQ!m1wu+>M6I0+G>m{We1jS|uP> zFy^B7>i@I=3-kfl7PFaif&!C771pLEDc6lI{S`BpJu{eolIQ?adtDcj)~yE(f(L+R z0~6@ejq6jg^8J3>C;2&&3;JTyQO(lCu3!7p{XAW33-}3&t7!h+_XAG0QCGT$AJnDG zO{Qa;va4?*09xs{q#<$PGgu!+`wUWs{J8t6`_XXtA!B&sCn8u;C>!MQ@xt4gK*yO7 z5-3i4&Zbt3wgKU$DmZabC=tLHP5r5ESD8d{Xx5u%nxaaubn}`o^KQzJeMOZ~3+wje zpE=Pg7imO{qrsWgwCp11PZH9+#AD_S@fh&#Q6QcPC8CV(C-mSpM1}w5A+3B1!C_rv z9o~m+TTj3OFHDu3D)GA&N`0U_XIBKY4(>aG^A!YtbcufW(fC>dpVOtUJjn>xP+b=& z-Ok5v4Y=ny@)OFtl8|8Eb*tk-4q{(^J8F1`!H7(kG9{UXqMHRa<2_rM_v=S1osgb7 ztc9nrc~%;r?ff(ati+BEXbwYQmLP@Paok=$8EhKjmmpf+ec(qDX_sU)3aT<)wMqI4 zo~)w#sZZ4`P(}~DbpTU-Em!pTzq)XAab>@D){N9QB*3>%qE||*+pS}M2X&erzMru5 z!GOm2$d#TJkWAVvPi5>v)qi1nGij)EO|8tP6IvX29=fKOYsXP zpncbN&rjdYz^3Ku+Fr1{2HS~C5Gq!EEuILLt>hE_N3U1_rnaxiBFJFTHM`9|*Kqg$ zO4wUXBIW!dlZBHx0W6#Q$Z$taVdCenlY{o%PoKh?SoUWSrlcu#4MwgG%`Dub8L=}= zlRj|AiQ{%ek?}f_ane^KV#8XnZpm^nfgAO639>Q|KF6b)t<}WI854>=mW$e0WDTrD zdF{+03;&f#4T~e<3F~q3S@gswn{ZE~$I_&Ypma5O~m6Kq(JJY z;(ttC{*k7^qkq&&l11Zvo12c-g7=mKtoAPDs%>>Jnoy?%QKhm%f?lzG7}bCo=}DW> zp*(@cxQ;+%s{lx$0-Ks-Vi%>y_6P#XiC23IsQ2GQQ)iHx3FowDR%gUN-*_aHi2m?m zfeCPwP|;inL3-k73miXbEL2jGOczxX4T$N;;M}M2=#)tSzP+ZUK=c7VXgVsqz(it} zx=w@pjkVwQx85(q3I_d(Z;65=RwXjLjHr5d59sLaxsAAWli$2*`QTd+#}a?XR5aMR zYTTswgC%%fpbR;q2pf49zavLHWxBFKo{NI%0egA^TF5CayCPVpjlYW-cZ2wJ-;c7UR z-#!=IzSTFSD^-109jY#%LUVU8=iL!r=-Q}VP9x5pwXBftEz6>dK-YS2AqnP8&J_apm6n_j~!AylPX!m?~Qmr%zI zNaOCcJ*R9R*O>Yq-c2jXwsQjsmwnZ@uKlfs_=8=e<$_fp+dxhSz=ZAyvgrL`4W&CkJxFR4dyh; zCElm0+Jx@nJHJC{&iWJ5({O^9#K&F%!jMHkC6_Z&SqU&l5wBV=!>h&eFB9A;XqvC> z-mZ7-(mIaw+I8OzbkSsWdo3y2DUZ7jCsjQcIJniS4|({?)h&Q={StaGrPY`y`s(`M zNe15g^k+7JDQ*z-z5N%YpUHkLz-sL*R7g*19QtBMv1o>qo!P!T*f}tFT-&vjPqt>3 zY7E7i!Ihg?ePWSK zY{qQVELw0kkI7S-tj-e+D{U5uTAI~pge*SQt0>RuXp=u1wPNLhxQQ z&~mPwb?q1!{yS`eenZ$NKX6JWJl*ksRj-{JB=PQ8f$Guv2#f~{o%ma&I`Z|Y$?T9_ zqiHlXd@yIUxw&}&a1P*u&bRWsU>e8r)sd!Vbd|)X57l0TtLba#%=)H|b_NQX6H=OJ z$nU(OrDuyo>T86q&Ha*b+vs9pO)9(MsZ?OoQ|GIiQO?$+OHKnkI0#W9M}9;CMn&sK z`Up#}ev@}qM340CU`}O9qoYdvq(fzvNe)V}hYwEKPC_u-MeT=`WhA}Dr;(9xZpPL- z`=4f#l3UFwYE+do8$Khb=9;C`dzT@tSJEdz+ojp4tNc>^t;r*;>4q}P$v9sP0ct&Y zmgFxB3k$xSN+cP6aI3f((_K_hwqIdwDTM>S_@%i|IWIqjJAmUU{sWkbK{if$9H}oRsw&v(vGcFH$5QYfM@QY|#|+nW8XAC< zihB5PrvV|TpEQAiH@i7yT)Y`;f&%#Pm9ufs8yuRFT`>!Gg2+T|9fh~9?gYw2X{(T}K4TN@gq_|%LaXUXKddD9N zZ{$gO{mHYke%(7U_;Tvke#7lqoWbhtfVO_ z%tssk!Q?nFJnkLw5X)WT^%C@?$@?Z2Ja@gL#uHtOs{L4$l}0>`=$ts>py$?ly5Ruf zj0Ylv7y5mb@G=sgu+dwqCkoaOFw&D!h5cP6povs%E0!igf04(JnCO$q_H&73*K{jt zQcZD7P%j39+9HZoejvv_o6@gmvLu6fwSGoPlbW*e0^Rmd_W{n;bk=#9Z}-U{iAE?; z!9ym*$@$&M^rAotM`#rXGdq9BE5Nv@H6=K6YoC;nc%wqf#RDQKncxRJpYF9*EOsnL zHGF=LVq(%&csBFNBrUn$x#pOBZg*o)5XZN?Bl*^x^yEySZ22s7=hAwy6%ei6Axq>j zb6bF#7_ii^uuHVPKP{S}9(Prn?mR3Vl!f?-3_2KSbiKg}HDo7sZAW|y6tiTmZb=eg zwx_)}(K8}wsv6xQR5=)C^>{|HA4Wd|HS}9h!EG)s7Znwa9)z9A0K@5H-mzhb-?gRC zi@P&H@3DLlv>uFBZ6q=Hz#)@0Qm9NqtptK&S1+Ydnt;hoXo=HADUwh{oPqkV1S^Bf zmxZ*koYXPM?{sTpFpEynV2Aim4?H9^0R`?Z!8K1gf(9XEJqDELaP=*q_4-Bv6XY}Z)}q1S9s%_5~_8wap2HOrKAYR@_U z?Sa6g?Y|sM9aW6V6+IBtdg6nG_DL$R53>m=1;h~>`P>12U+cd)>x-lM*6MM(dN!D| z^Q{J3`EH!$F__j~Q}=_gt42Q>GPr$IIn`o0wVpwLk9oVfR1RlyhSv*OzO@kL1f4QY zgt*4#R@`fpIXRS-IBXcFsF3U4tr^#fX60Ba3>a~jD^vSZb#QBC$GEL}X0;Bj$axwg zcL2m{#OoPT1+zcz_jMUgKv2`j;4=J#cOnZB!!BWGgogflqyeVlS<1dxz=N}Y83uT# z{{VmKDBbtl@zuN&^K3RJyBDyUmN-9bmt-8vFp@w0p+2uhtePH`KHQ|)<~Xs4C3Xpa zvB_e9NU+7@cszaS-i5w;fCbTp9#!lM7NL<9B;m*Yhb1fbh#9Kx8P#w>4!nW2WC33_ z%yyq`^^c%OY9h1nSU0@KS3>qB_8Dkiyk3KhKeg`@`6aGppVe(qy`!FV=#X3Pfkzpg zPpbTH5_8(3X8Xkaoa>u7#izRUP2X+f>MRT4w}34dircDjLYui)o9#^z*D*U9`rkp@ zJNgp|6oK|~g6Pw~LKz=8rQAAb<*eS>-J0T zPh6N{14w=(BPXd0G`xWC5*@69zjSIEakyjGZ8VdN_N?`OUYeU6h*<{xfjXhe)#Gf{ zxCq4{zS#G>(m;EKQ-A1#)yw(u*U#)t;iUs)^aP5N^I5tv z8jamrTXNM4SuieDna+?d+&uvte>K=!@&ftImzB&vb4V}4(Y%C2pw$pyHRqR>WV*sB zj%l)b*Ncf{W?R?}mrwMKbWsnB;b=red$j#;8N)b}N>{&mbq3B zlT9HigmY0M3x@SPPkt5iTDVLFa1Hojtwdljet?{=Nlk3Ix> zV-G5jf&7X+z(RzKdn`2}_6$!RL}V^<6e8eXC)#D}u(&i*+*l47m7+KH4$g8z$v8NV zqA$XS)lb7kq}hj30Tc2zirgG#t=TRf>Vbiak%k7*7+W!;D?<4LS?8utGZdlYAxxB@;TzcYq`;f)m zFYa3hZ=5a;dsMl0#&I2+CFy%w`UE=r3MNq!X5A|C46jM^dEenM%cs|Ly-zU-u z=qbjizXUVIuE3jtWKWS;>L&ta76N5}-L1Y1X`Lu~!#{Wq$6l1ef$>3A+~}3>p&Z%Y zFGhUpt(xvJljD_SCYOt@MFJY-Y%QxC!N!cjGwt32WoFslfl1nsLlA%2Mup2y=zS^> z15qI;sij9r2&x8YviGcKU?4JKlXWWVjEzUY`U9+R_Yz|)YK`}O+bw~ti&qEnC|sjP z?>=pgsA~0oI?MOF{E8K7cPKej`a925-jss1yknW9YnM!n(3Hk#>OTUEcl+O4yII?_ zzjXNgvZH{aFKx@WGy#9ns6u|ODaMq**M1Ysq@P~Q24Jd6BnBD+v+o9S^jSy`HtF>> z8l{W$NAb64=|Bnr^UHg`@|gA0$5&>2zE)=B36wP~?Z=M6o0s+j?LAD$x!jEcqVNyv zt+d*~R2d9X;TRRlm)$Kh-EullL{S4f!w)`7qiq=Pa1RTC=>*TCa&ga<>=b7Dl%y%-)9@G8`)) z$Vd^5tujTIk=?T|rN%FJ8L_WQy>FkiMEzyVhjndvKX9l|#N93_3h~RX(VJ1&GVPH` z-STW~>h8ZD54td9O92P$`mp5VS%=4XiF04c$E^~Wf9KlC(3%t@YjE4y&EOJY&Z>F{ zJA4g$c3H{gy_(oXH}u!mp?R;z^JH)M~(D$p7F zO-Oy+nfBMVu?>LvlUQ`{RA%i0yS-4)lNMk&LuX_~H!%p6G%8huZ<#51Hh>49#)uXS zDIplFHTAJ>_w`aMpqoDJsFQJC3LJ;dndpBu`?UW-9@pnR7QxLhlT-zN{L-A{eyxXv zYcAY)p9!<4X5@uuN;i?MG1kLZEQKT|d_r*sqVzZe5Upnf`IM3T=^Dmgv zA~#MxSFRP-t-puV_*zrqfP$`^pYls9kuKb+A25U*HK2@~UtJS|^kBYAt!$ z&?wXAKJbn^Ft~gC;cua4dqy?(WPc_w3v|dc_%TJ)(=Lfmba0(%T~EWMfb8*T8kycM zy*=PzCV=Q@O_|OG)Sh)e6DW|%Vy-^UIOmu$Ry#LA35=$I2m4a6H z!PV&k_rm|^cxQnAk$zv*!&|(A5C{r7{5fFoFDmuuUr#c@Prcc|u(Xq*|8~B)@)hTP(0r&&+rDk;Tu3d=jZf&Q z;w*&XjXb?I1w7(^KQMo|2siQ#YQ2hJrI6+>q&_#85TrH5 zStkDc<>1a$AOl_rzgZaClEC%On>u))wTFEmxo=E20dF%DWhT-LSaAxoi zDOH@UY=m8aYb#!6vAB``*$OtJyAc;yN~5&-^mXLzcx%c3<{B{_;cNQ)*;KWb#favUxMtG_4@Cp)~-Nvx2YD- zsXj?|O`V+cluW_T`VK z#CZdxnGPaT(@7cai(q|Z0Ns>9f-2EEQn>yQ9SNI8`>k5UUcTRbdaxQEkT)_~?t&ou zv08P^g;hI9O7!i;5Xon5jd|cjwBN{Y<+p)SYScWnPi$m2^PT>x+iscVgl)y!2=86h zGMIK55^v07QVh~b*~Z*epJG18FR{LVYaQ$osPQzS3{~sOX|FvyutV+ThxO3-O7QEW zw=AY9@V&3+yVdF{JesPMv>62oQNMAOf`~El)eyAyvF0gb4YG%GuyQ8S8%;`s8nuPv z`h0(si3o|M8b_HuQ7*#kmwuZv&^;-V+IVs77ArMj9Zf4lDNi&4U9>(ppK4chc;VWWaz*)|PdM)&7{D zm!|PIv7%9*XWM-hSl8LE`MM~2$46tkc0cg4WIs@5fXT_}CHpPvxg(>}M?J{gBe1z1 zSF-;}JFP~qtuM9!T&!E_;>6dEI%9#zP;zy)FYRk9ku<{p9+bVoLtYCGFs%o7tpe>8 z6!!%4dK7c&haF8IqCumju~5&Y*%`TlvzRFmOo%rJ;moKcb(c%ie470?Y4r4WkH!5! zZU{%nK{5(JcGU!G4K%c@601^5X5GwM3@)anPZK}gQ^hSe`gvMBANuf{!1D5|9Cr8C zs>)`0oPF#0Wt5ylI8#pd!OP*-d>$d+qIRO@mqfqFyAPe)wqCEy$I)2*QG~Co34c5e zt6iYVo4T%CJkm42P5l|hfjhYkblX;pqT-lQm?2&{Jv+J%Km4hpKNE{O1J$?=0;w=; zvo)nL)R>S1Sm`spj)?3JmXuu1F-8>$v`iRxt7eoNd={AjQp@7;7{Ps*uO7oHDt+bg z)crmRWK?M{wyw--HbI&hAo6;U^Se$p`}buGn01W`+^~}T`q_smAz0~S1C8x|(&x7} za4#(7ix{ToU2}V#{6=q-Xna8CkI0WJ&*nGt=R^lRVid+BQzP(&I6xcB*WTC*Bz?+T1KOZVTjVCEX>N3De<)W&Y z`zJ8IB(`++uzj*u2W4R<50xT(c{4^;3U%C64Xe2!xeGv7Z=a-`rJdYNjAv8FFqiL# zUW3*#-_S%z;Q&BWde$%se-&eSedbaCB^?>8X*i2B*B5m%c49i+?s6-7V8rH&-8C!* z)kzOKlwn_QspQ;hf#Acz%CNedqM3;0QgjrW639n+j^bxj`oe~G*z?Hj@wWs*8)_8O zfJcwT6Tq=1BC7FdOu{AIc#CU}?nwCUJ#v@Bj^N|eByfTfq*@~a{x1sr=s;S4O%Sh7 z#5=}fnm4PRXy%_Zkt%Eg^HYQzgHc{;EkHD&w182U`b+YDU!QuF%jq4goA^$#na zsoR>y{=QhN8mv!#^D4uk2#{rTcJx$Imzq0Ue=&x7cFE3OLtyS;8L*yyVeGc4@BFKw zB=9!(!Ums)0`r>uyOzvQva$;0hcczivFB{^vvZI86Q*D z5*V;$ip@XrnG)xwxv<C%67aj5Xjt`z|O zW|a)4h}4sR;m`08Z8Fqyn75~KT%bRS9E+=U^=rEltMOeck$?201~~>ny>SDp<29F2 zL~rHD-A?(w%4zK0+O8egzSu2+Q`rm2?wy>65kzLrySP7KWZ05JPzG{ehLJ6 z@j;f#kd(?KaJVGG*`)a;zTl3p$CJ;Ge$>66`adne_-sokM9)^ic6BWa&2%I>$Q&>++ZR|B#rWTYUD_vOJmRd_s3Nm*L z;|m&p_^~~bXg1i4ur$P@wl7`0c`uD@l=eJ2UkdCPgW^0?XfTR3%oCvR;(gM}`X9rF z@SGp+6}fg81YI$q|02pCUYipT`hCR|n0ePmCMGi!KYIqN9H;l*dYX>@#{&9u)LFE9 zusiRjLhx$ZH#L{})X33B2ux?95?k&9SD({+zCir2=|Rf6R5Z1IfVWc?Yt>P66-U*z zv{I2K1p1DDUuT40NIp2TDpZ3gUu6%ZBzm&xS}86Ivuv^ z;9*O_Qk3TElfKvvm)t?%!;t3=?$a-3;XI7s?MVIAh=+D>Tla|&no|ED->te?KIou= zujsYd!NGxFKzRYf@0isD9;c%J0#h9B6z1nFd{Ed1=#1ST;TGz`z|OfufH2s@!r$td#}X}M+>v$I=-%T&1c0S>1nk~}Z$HnU34KKR z?*~?lTs20U;MeXMgfu#+A0=M;jrmchA+g!+ODAG~PZ>If;Tr&A06?rU*OrU{JHU;@ z40B+KRa|P_L{5Tnuc2lBqGcO3)WaTbs$z3dopX?syE?EsxT;62&796;F}ql?!Vmix zk4GA(@?nRGFFN-xUW8q2Lfw`U5cT@ORUQ_#*TNo4*k#7L)up@z%cwe#KCj+1k~WT- zC%Si=RlpS+1Rx(p7Z@kcyzu{mC9A;U!`RYW`0Gm-YFA1*D6Z1OV&{|gLrGG=tYEZY zu(BU`&;F?qc@CrtUjDN91%UbSqSX@b4OA5kg$JUMuG`Om$jAU7f$*;GD@|9Bw=h)c zTG+%_{dCoDN*wrtgjQzf86Bj;jPmgN_ue6S(X zK^uH6*mUY^jiKHY0Cs7OC3nE)&Tuh;>dUFvn-T&%eOpA0)j<|%^ zl5H~;>_nuY%t*M5R1#Q~zJ21u>?)68R<~}HoHj+9k2kME0rV|!bA-XV))))LeL(*H zC6yAy6l)pP=8e_k{VBLX;wX%<=jb}y9!$PZ1p2T2kOCb7d)PjNGh{D9u65}2zYX2e zeE`KRZ{-8;IaHX?|1*@)RVbK!NRNt&%CXBDAf8fCKyv{|$-v;MS!pl(q&|4FdY_21 z#x^p_wtMbv_i@?f!@$m~zoY#zT1hZMOpW~Qk$iZtt`)%b`t?=@{FWell9@YZNmY(+ zZtBfnNrd7A2AK+jcdCwm1s|;%2eEsnHYFadp_)gVl?GW&rS_xDd!9NujQ5aH^m+if z%{p*Z$KDFyAlbQOUk$k*s~9<1-$HdMP4&xiOSS^(-?8#@V}z6IoWn);`M~4VW~wb9vl6{2WXwhbgtr2)-gK)_;_#KMVgZ$ejYz7z zFSde|F)N%4H`0H5Jf*YtHtA2nVqixZsqHh3yX#UvzkmO3C9sdN1cNg zfVC)3LUpjvCh*&Mrjjz`-hxw6*Z%5%xRB9>scSBg)f_O-BM@Vsi9xS^#`9GY?U@^8 zv1s0ni;LTCnX_(o$=zy^9M_41h>ZoYXMZ(Q=hXW~2)WoI&zyVw`UlzB-tA5VgwIAhy8&e^clTFc{y;ccfo)%BAxWQ+}#!s@Uz{V$$v z&A=>2-WM?*esgrN6Gk<;MaC#h%?Jh}21T_p0pza!K;KHIQvXZf>({TB&i-q3eLz1O zW&gJ|>_gmB_X(Q158Bz4+Tr`tP$w*uz@}pb8+P8uF?o2{I10TS5#kJ8EAg;6`7av= z19U!p${|}QC-y3yKX#2d1T>JP@btTtFne>gl^V2ysnEc;8P}6<`Qy(Vsc36n%^Md` z*KxcPxw25nwCS>52iBu6xT{cI{r?jX#k5r2yK9z34`*#@SlUO+cSri!=Fo zUWulLt5hf$d9;{^Zj_-p%B(tH`8*)`keQj;@o$G!-^ho}7xQu(r#@D< zRP+(A0FX!xR_U<>#s9)!_iRf1{h!=QF~7y7r6~YUwej+z!jKF7n<9*O6s>_W8-I3- zU4l1r35!WqHW~g|rGt!1=vGiAJgjzrKS^0%j|t>(%U$CIk^Cs?-j!QiyDh3bsHaXx zxE`YoGAFYQq!qEsPe$X12kJtk_YZC}g2EL*Y5{;jxJ+<_Cfxx1w)?E>`Poy1W&2+t z;Z0vkSRpJJ@d3sYuve@755*rR2D<+J^6~3mR8KgJc0a9g!*#&VeLX+JQpOAopJ}*| z&8Uwx(Y8;EzxDSzF#E7i$LTBb+#&le=L1^mc-qFWvkt}sC}X|l1=+)Vef%vV$152y zZT|gmkkc-Q?&a!P;j7LYj>wbiIc$&3?~v~(`So*|m&tw2(@+enkk$GQCZ6*iu*=b-h?Q&4sanfOaFG4D?fpPV`yzBh9e#&I^ygBYK z=BTAkJ~a6g%?D5?ca3RsoWgoGrykQoBKTxXudv{-aFE6$ovFuHo06++;O|a7ngUTN zFGu+9H;d-nFrJrN$$#AW7HK0wuvy=EF-GO!eml1LqNIo6)MAjADOAZOTCZEG_trSWEX|6zv!u7 z{}*6c62lbU)Mi9g#rC#Pv9!T?6zDMo@;9zWB+OPQ{Uzx$B7el^%&B@=}=QF!j z6?)n%X%}Ah{49w?=5q`<=?VT%bm3=>n9_R zB9N`aK@mI7(A1AU>jx`=*E2ieoLjLl^M?t~$Y*Q>YCXDc;wsiWmTph6!P0qdoClI^ z9ly`CxpT`LUd1jY5U63ADpjAAo~R59P6{a8ZGiDaF2o^c%~=txSa~;)F9wUa>fehU z5B)8&vK{^Ou)k*mX>J>sGE8Q}X-7X)rs>mcSX9y92I7Br0V%q;Z)T)w#(ZVJtS5-yoin>SeFaH6DDbFZ@k+MoPJSxB{(KhiPuU>%-6C zlXiSSjGckaj=Nm@&4o%3=;H3Rww(zEtT4RQpQ64?ryh1{RsdT(KDc39YZH>M8!Ngw zrc#seX4aX`aDUMIjzy>}dEiws^Z+BsRmNt>CpKlEw!d`JcfEJ`@Ag&QZOFo0*i8^o z#M%v3lKmI;>9dgWiK)xp`s@9bxL@_ae=faE?1EF~V&oeNnBx02Ij(oKV|avIC0Iq) z$XIeRW^$$iGKvRGzdl(NSih4G<#EbkEczEvJls(G<^d5oArrHLwwkfb?jli$_BRpR zyiB%h+at^KWN$CxpSwCQxF2DSh!xnJ_auk=Kv%ebpP`v;s&u@^7=LwhmNZS<4I?ft zNSX&&=h2WeQ{bN1O6kPU#J6>k87n%Tf7tHx7BfD!qGQM7+c4W}dPDg}e;z-Nb2^v0 z7paK&i9k)HCRo^hFbn?6W-&5Ld6zhSLeH&H@BVGOr4fkH_M`JVZl+b3-o2m~`?nqE zZcX|h`E0d&iDAEJkGjzwx*AlgS=Sdjvd_HoLE+)oH_{#Q*t%UK{BIGun-0l47-=Dz zrX~`-wqU&8$2&&Xq_^81ms2Md^}Y*6?|V+<2wiXPyeR1=j%DEaERB3QqW11p&*km= z@DyS97Mj#3chkWn5v|r6oWF<0f*2lATBObFL+7s|_2(mbRD9nh^YDrZpGD6o{V~uB zSQJ^&yh{M0Rmv__t6JdC%kDZ;=}M5fyzW{|49>bs4Hgm2Ps{3gq(*@cp;KK;w6Ydi zOgn7T$l22bUsx^OuHLep5jsy)S;ZEwC1rbR&4;ekX)RFSi1u6t`6onF^3by@KtySopA(#p%Pcpb^()CK>?;n{eMW$3C&&%8&mbv6kifcimBV2N&qQARx zg3&t;@E_W=DdiU{OZfqYwJzx~C)W%g_NRCz@i;|f>^yPgRKBZb8uuT?4YB#Mzh{YL z!BpjaaoLJR98FAw*MR;2709l6e(UM6XyG}v=a$PSX1k{vWmQj}{{(F+;dXiuc=$Aq zNb`Df=em?P7<-f3I{v+J8PHULBBJ&BpmO>+jX(j8jv!6<$9Oz$`jv0t4+~T5mra)f zyC9h0(x^?Fa_;7}1pml(73hcZRn0R*sne-hX~);)tF(4#*vZVJ3YZk5@RgTflc`7> zV@_V^7F=LbddnEK1mjr{)PsUDx&IFC5v1QooD;r#pK*s5GB$Nw?%5VDgto8FHJ?#H zPnG5pHPcsY_jG$qh>soULj&j-<6@K5I43_}hWdII6<8SleryYA$tTuw$@F8_l*n-v zZ%!(nHxzzRXB3-)NLEW4-ab4Gw^Q(u!!(Tsx%#cPBU_P2X-3b+g7jz9jY{xIAwax! zI%E1Q%>`}DRGPseptxBOG~RN~3mDtAY&5fT7i;#fpqmWnG3n9KYA2@at=KI>u%-LK zz%aqA#KZ(-J8y3>iU^F#$>X0ysqtYvbT+bKd#F%5Ps;c!EqKpmbx-h)KP5Zs)nlH? zAaGBOUzx3^dZ|ge97K|ozxn}HZ`PCSq=ykCredS&5~avi0i0DGB^&PP$2a}z6M{Ms zF+lZv*~R(kceTXnLrp_%e@qH2IM9<9{G4W+H9gI>fl0@XMAATGw~6M znIsT4N$6$@&b3iIpw^N`WFyQYt~LnZ@ z;?Yqnq8HT>N?77hr@0w5>3M%UJ}$45qA+C9a?q1b1F>;;emb?ud$`GKfaAX<4nIkj zDR@KFdk4R~NbAWy-?_v0%5Rd-nleeeI3I|)-tiRpqtuIx6o@KT)cQVQ{H9^`Obam z<_&w{g$mldVgo%XJj~~ATK22e>C6ym@hW_ zZ6ls5W_<0N!_ze;kma1)@s|*9wXl4kB2Icu6fHht3@e!aHk1@-Cpdq|H}gXu9xVGH z_~aMtWe?42P~hpB+|kq2uNzy&`&+Z(FbRF7zFtTXwWX<;O4Rk_OV4LW%Zh3T^Ctvc zX}a+wtb&mh!cx|O4n4;vRQD=7Z>A;iYly#bPtJOB(R}}G`q`GsP8Qq>-0Ko`8*O-2 z{I^cD>C;*&5sV4-vfTeJ>zzmR#bYHvLp|l)6WBR#$*u9uKx3w3PT=-UkEmPM@5$d(RqlcnAniC5b*=WJ&(+dJ@Jlx7<`AyS6?x za_(U4ZqN`e@9FLAYW~fuoRgnL|AUCQE*-y*BB!j{i`#jh?{1V16m*M;*i+%)PvYr9 zp2^3vo?lq-cb;BlOgMaNP-n7NQo5_eLojJ_-c@_OU_I@o6hZJg@<(Ts1=JsZw=F?L z73MHsJg{1ZEp$%~jGORedthE|`$q4TV$Vh08|t}zmU{C&`S#+9kk%I;$a^SHukX{X zGSQ|CQ`@MVRNN%s4?q4Bb*G0-H;pRG%x?gbh&n+cg2Cqa&PGNxYHK8*Do0v?iH2k0 z+4>ryW%NoU%}0-|=2})S%bOU0%R+pyY(-sC37h#SgfwJ{F}*9;OI^V1>tE*gVj>3V zoVN6qJ;fTmh~X-7BtiiOSK{R^rdOIrEr>>(02%A7a2^At4QFaP~apKIloJ zwoxgP6T=HqH_FV8P;T&5pnn)=sH*7g9WVK&vTj3-r-QHP%4FTb>pJeMAav$q1&f?* z_G!E&{q`)h%>cTKvm90%);05v|0tl1f620*gK-xdEip?_07EQ5^UuB(ng+4E@2oj} z0L*r~HzD}>d_Ngz9*-PtIb_ES??WVsVV(L~vXB;xRo}97I*`%Pp1X-W64`j_Zf8mS zJqP3qo1|^8L+bY1WP{U>ctc)p`d^J1V*cWPdkzvN_-F%9Mtu=vey6Ktmu>ZR^i5x(_P&ZfV#c%~5yE&;lZBCiZg!%O(ou zt1W@{#-_7!O(c40ZHzeHA{VNd?|-)`C$eD=neNS`Rd+aDr_;F_^LxetaJx6n)V|6KSWke)@E?YmElz@>NapV}- zoesgrJa&8D8QMK_xWt5wCj~?988uGEX@H=Rf`xFLW@YxtXF3`uxHi@Ye#-e*a|5wp zp|M1`7l;mY&z`e73;FT-!3QD^)^u@9veR!?KW@xwyuXJ}X{p3$tr=~zdqgrnURNWL zqSM{FibiP;je0^ZT`;G^xYUCBYZ!C*X8w?2T~W>N z0mxsjX&sntLJ<|oaL}&Z)8AuFe6)_9-`(-lUMZj{;5!ieQ7TX3b%oQ zdH*P|*?73r`(x_(GFqRu8Gsp4d4^4^qFc)z2nV_^6Q$Cs&7F|u%(}}Rsg$0Q|D8z{ zp}S5!g85@~ku2le@5W4_ZrZd9Ty*@4w7svKh~JpZ8-3(ls0lMuAg(@c}V zFhpDU3we6{FPEDLei^XO_j)&Jt7g(xMdomI5#Nz`(hDgWBgDp%MBI-|2fIY^jjiJ} ze?1dCHm4@vipLWi-mAd7lE8GweMt&?d%fgT=mc38`0UAAee-O{iTV3&kWcb-<@OE!4>Y$Bxxj8r};bB?)MM!AV?uHnyLTcirjblg~@3IO64ysO|bTpV9=``p(;%Rb8ho$C z%EiAdY}%2WeKYXWTockgko2w}b|wmAtl=rA>)y*hhhMk7wlK-{U(O)6LoPsoIH_e0a_gM ztb@LzlhD|mi7K*$M3b-s7yJ=x!u)k{C1RE!-JBeV34eq6mStTZolAZP1vVIrR(rEC ze@t~&&&)S3KVMMWetYyC8vHY&J)lf*56k(-!^64G_pZw~C5rtqlEegoN1Hjel{mVg z*;DqeFS8TFcCna9PO){ylbvJhbm}`7Hd>K*Un0MKz;FB0I^MfVFG@Y(&_K_Ej*=+gaxnW*^tR5pI*qC+D+2wx2b5cBe4qj0Dy9$S{*rro< zl9-JMC9DFh7Qrg6)%v;+gGn3~;O2`oB;D>H>WE>pJVENhgwu0aY_pvl0Z4oR47c#-z`@XRYk= z6PCfXVqOzQR1fYiD;^OtAfpacKq36ZZ9+6um}KhqGSqL>ri#x$2DB)C4o3eWrE=Zo z!$R0oMg_zcZSQwfJtuxE!TCKuzul26ud0Qq8kT?gL!;;)zL8CzWYgt9gYaC$EA(TN z2X;Ce((o5ltDL>9@SqBo*!;N0wE20o+!T4{>|ZN)Jomhne$v1YI6O5Jt^8G3pGSk450ZdwV zBJiwDDjb|tJ6f-uf^u*2g09>^38#ox1IyxAq1ssvnXOjh%Eu@hKPfUiz6d2BTD7tH zoRz(ZvcCe9W@f}lQvJRnk+!@?CO2O&VYy>=)hxp3Sh6x}bAzt#$9OdcxK^8Wbu^ul z{!J=fIwANiLNnfmVeAX623`&qtx|n5RVA%e@wiVcY+0;>AU$kg`2^F=olz(Cda;rS z8-zYPOIc74h)Av^;8jZ z_=Smb4sFik#gw)eRYO~yF|Qgr)#%M~0yLCuGSyPFfEpY%vrH*%6fk3UOyrEYjUsIz z@)@w0^DyPSW7Uv>obPyc2GA18LS(sUnhOUa{S!p)A`!PG$hsXvpdqD=5~;6ccvPQh zAfmDIyGU8DYN|m~T7yV3a~lC5XYS6%vOnL3(*Oh!b;GfD{s91g z&|IS@*UEiEoD?)fbNkM^mBS??8;^iU8J9t}0x&Y6b7~V2wmU`BDE0=>VfNS{QHGkS zlEnlI(Ugqtx+eg21ifIm*n*uUKtuolAOJ~3K~z3D5q43ri2#hi;^4djIiqF5GJ1MS z3F;>M0TjtGd9oaLPu;2#NIr@=$WXn2ETm9jd=wwKs%>Y-nfdVb6 zvq%BTgi?iKpxgL zL>DX@8Cj!Dr7(o70l=(?n!&;*W@sA+42lh93kC`>9DVIGU!H#Z`}gPM_`&PSZ3Evm z7|C!GVqy*bbn57540sCxHxO}b%n;zRhyflORZEr;V3@A!H3E?YP474Vfa-itSis|x0G>g@7Di|U z&7z|x*Jc-j!P|@yB$OJ&9-n4HgAs3LqY=Q47|wteuL@IZrXS2&~FH@phqtwYA< zH*efg8uHXNf?A6S3vAKnXkFftV#Eyq8EOPW4*8zlP)##@ zS5#9|vSE2y#-w*doa-Ss0LVlP=2n<}L&R;#$fc!f7|kpag{d6GPGQ&cL2K6eW!zyU zOVqR?{RNT!sWRr171+0}0J=y-`^?QkWYLK%NTgGd4h5FW73NK3mP}+y<-i+~S={EF zZV|bSs%*^CI_EJIRKr~@K?y?OfJmMol2r+^un=i^85kuq9nG|sTVz)u&OplxLA1>JzI5ANiE0Lz7tDU;+_H0SSu<$T0$7;kC1Bm@=37LFa?L)fDo|o0 zY|I{YyvE`jFwBsFJesL1Sx`3;xono9T1rdIVpHZpV6)f&)|I|RBEp1%$e9C1QXCLv z)igVK#_Vm*wgMc9Bmju2Q%q?aRD+ak;(23Yc3xz$@P7Y-$l{=8KRtlXEH$&UQ7VF@ zW6qI+k$#W4sq5dQ z#?n&B=AVKK2qpUkA|@i4c?%q~n;qn1vurs}6VbFLQZ9~Ov2*B$g~(#nG?xxU`U5~0 z74gs%$J1QN1Y4c&3L>{JvQV?EfM$R*vr9y7OT;H;x>22moQJ3yTy69;qY$d&C90t< zpXke<)4poF0BDEPzy(coCIdJ38JR@^z#=^Z>_l2-ZUT|t7S0v7&3QTr;Z{!RWTzS? z+@6IcB9`LxU)pb)i&vQalSFa=P-m8ux!IZNv1*8Bu^~cJ9l}(ChHWfmDqRo2{r~K} z+plNIbsqM8YgO(2yPVVA({m*$nxZI6N`OFsk;Iu6DF(=kUvha!fWS^fAwcrtf5$+8 z_=T;+MgYbLoTt1PNFphY0>h4gDE0)VL0cqenw;tB?sI;Zy{l?{d8qoG?w%QnLSDrU zG#WGAefF(Z?X}i-SrN#r|D49S4m#a! zr6;$6*%*SXHl)plZ&vCnMtlO{fTk_M$q3KXbq<{bOs5J2V5dMX$+pU|*ovl#I36O} z%9@>@O8^siegJ;-kofgPeM5$)XTuNIhQh>+XI`slK?nx!!|*m7M+J>VqQE2^3H~@4 zXLD?OOGXWyGyPLmEV z|8{&463tJ8xW^3f3ZZK@7=(MNSD?2}$w{kFs>BRuxUjl0Z89IQW8rDd+8B7Ca1$Bd zfbjb)IIHpS-FQ@g`8|t&_a|TMFYv#-^G*KXqc8%=9D8MKu*J7L@cl$yGi#s8^Ct5R zfviQ(Jg^2aL9!&&1U9DxksuxxL2O-u#lQ`y177Gt-~Zh4xNFUm8ZxVzHN3D1_h7M9 zw4WXVUzC-tkzEC?P?}UHh&~BFnH_fIR^( z0UgM*I~vKaCdV(Q8ONRYqX&DQ{?Gll>c9P?-~V$JT^~P>C{1-KqGIHU5^E(7=P-#p ztV$7>=$J^(xNBArfQl0jD)H88l2Sm$l-;Y&8Ifu^~_6ef^pDoB-f5?{l-+r0sV5 zAm{uh$vGk>booUZQz>e#73_juzT&~4A$Q0rB{Q=|vM$TAw$>~nP-|UB%1}F6^g0D+ zG#A(toGut9xf@b~d}&ZbM6}jgM6|(#xHKM;yHAqRNGJ_`5u8Y#hp)sYrR1$OepUj4 zmkF=|Xq|>T?aih=$@_rblJt<2_aqplHzDFUis2a4+>1W8x_g+-TeE!C$scV7ECAe^ zrEHea5uI42cIthVx|8Y*a4-!vAZ?&FSV>!Yk=-R3q$bJs0QOSU2wwp^k~sH*1+8CS zG)c#P-LD&wnI)J_a-ZF7x*qHaBh4bpEX94Z>7M&`=RVIP>1-Wg>*&L19y#f9-?Z+E z?#qxvOx+D#Yip+^VyO|IU6)i(DrF-Pu9J9)rPu&%2k08mcKp2Ho|jper2;^;cC)_M7QQ8!%}QyXQo4TNzI_v&c0B=_B~N6AS+2v|WT2mh zQRrxdY&M&W>{6&&xk}ZfiU__I|DD4A+71BV68~`0rY;AHyZ8sfq!tmi^&%wh;=g+q z*?qnzwfj=p_XdO#5NR|a#_VlD3YtwY%a?PZ zKMQO9-RD~}Ka<+iQl7t9*QdvbbG@*6#(k?ZBw9$#x(~#0A5rcD+V?eSGhqAvyq%Zd z0a`?f-XNGqV{*!7(=-b88>u~)Ja_Mid&k}cdA;}|P41hRrU&yhJ^WJ6*Ix(h!8rdF zkb}(6rDClePpvIm((k`((i!Xn&r3Mx2yZ+ z9I-yfOP`Ei#Q!hiziXbM4Ch>%YF#CWPAZ)PJ`v^E2myOmxS8ri>^!t#zy+kGU|Ck3 ziX(?JVd8{_+f<{ZfSrr#zaO7RgtoV6+YOH}of@&L6W@|y;aNZSjJ-16GxF0`aBdA| z6+dMqwi`Dglx4-! zrQ%GWZ8Op~VUkd9SDcor6$=7}m?zqHq8Sl?@{Mo5rpf<3J>upze4!CDW(Ye9VTR-c z83+YV-ek#yfFu!td47J^lv%vj|Gs9^5U%W`|o|Te(R$@ zc#Q(|`|o`-zc?z*6S5jIGj?sGzk-D8so`N5-pyojqs!nS6($55VhV9|?!ubRAc6*$ zAvHn_OcV^%ibb4n!+%eY^gDdL5P2MrC?K0-&x~DlZj)heQsjzHrxsZa%_?4$Ov{eV z#=#10EyuMJ$7uNDAc}fH!pHHxzGMIJ|CcGGq~ylkL|BCwz=p(5h7B{X444sG*1(O# zf0+X}5qb+rzji&_a=qhuH{0`n`m5hQ{A>UG=T8FpYtR2c-?R6X2@in{bU{`Fd~uYW z7PPg=WZ1glijJKThuW}&G({jCD%DKo9PrYV)=GdOOh|AhK+AWhN9)CtE^`U@r1b*Z4fwt_!td>G_4gpEjW>ihlb=c_Adw=D$W2ZSNtgfslh4OoG@=EzL6-j zf|L3cL;z<5Znurc<@|aF_)os^ZL_AlooKT$>M9|+kIG4M3z7KPIt>qNv~o21W4Hir8AG9hQKtr-;j7#=n00!@KqH&wu0F zTm#d?kE=gDi6XN(cILP@iRUUD*VY@G1YBKhW38f`ffzH0<|$!L316o1W?A(U1eV&w z^Qx=tJpQAve(U+a`KQ1CXG)X)(O18f@`~%yw5v_G*&!I_dEz??T-S=jTCubhi-biL z-OXEw@lk6eG&wEJ+^y6G4Q${-As%k&|Ic6gcAE_Aul|hbIJF^{rd`y)Tq9<}&I>O9Y!rfHv2x({I6TAMCX z2X_y5=b*s5yBlyf`x$%%B5`+4(=kOxCK>uJ~l1oKI8;z9AE-Bfvn`;{SL%0Rvw@7kY|du++HBeZ45^&~P6KTvnQ4~Q(Mr3K>N%pk1LzI2 zyiIAB-S;p{!(bA%vq{?RXh@`fJ=mB{sXzX>y#S;m!EF(xbcRGdNinp=uRL(3FiQ(y zM|5O#L)uQVi8LqE&V9Qvo1Jv98;_dQQUpdNAxM>gf=oJ6UUI zba~2W*S^NokDyeSh;j?S$pD!gkV`F%=7UA7-c8!hb8BY;l9?unxi=u%Aj))2boc0} z))_2uX=v!~WC6G#eoL z0ZmfdNIm|0EPPS?Uy6`GFUHF-gA}EXTK4zftTzPWaxXN?$&5querNouE`f*%U?zRj zkzLC`GvL*a;KjRuIil{Rb}hB5-ZWG~XXd1Vv{ryY!umaRTK*^stE5v$i0ACSz3ME9 z?T3J#EX&8IF7fY6?}HEa`uf+Ot*xC7wcb9c^=9ANX_CT7KMf80Y?iJ8UiX4f7ehlg zLv(MID810kZZ=O+O|6{+XiX|Xvh)IM^43nTH6YAp<$PZ`Ke)>I`j^~yzXa$(MBSom zJHA%4rv?u*OnU18tApMgenR|8N z{UZMV0>?iqh)U~sK=$NYNkTd-IIhWTA?F|xLv;$K4FRerf;AAeDV0E0BQU{1PD%(b zJj_&B`&`lu063ih)F`&)Gn>Gp^H)~KCu;bqocGquFE@il!Kdx0@H2jzt6qRwDcC;a zYM1feLTqZ)v-PZ-Bvdr8O?+D$z7x)9O;3{H)`g$C@dM+aHv?EpXe?jCXf<0>;trin zA+I{l(mW@=nJ3`jV$Rexh_tq$5nkiW#!sW+q;8UUMBs;nj<4ST8i*2z z5Lf`L4TWd@SPefV&`xG?bVwajpB=jIz&lBxgda-yi2=(t!MCn^A+#mo>DsBu4I%}# z8sJ*NrM%XB#KTDm37f+bo1?7AQM$_)&PJGsRvX$xY+Yam>PlS6^bW;Onoy!oCTJ6| zIKf85-1z-)ec2uN5|owbL2b^BpZw7;ed}p*EzmNnP9pQUj}3WLhuOB`_M-)O4c&18_NJ0ct}2ZoChY^*j9Y z%OM`e``L(m0>+V1NDvK>w9Voiw6>KNUR-<`}0i# zmbD9uOiJlBQ1=#N7Dt5;!W51}-6p8s(v}zI1VP zz&zuA2ELMk(hdxStQX(7MnkPaJuIsCW?bE$@mA{ey^l^6=V(xExM{#oqxC5=BnW7B zVsfah745e084}l0@yYX(%K0--<8ba}Tn$hiOLsttgy)3a#`Vw$hxmN0C<3PJc*hOz z2{;$>bX)b}HgHDIq=E(qfpf41;KD^R^?LjP016Li`aUWSSkMPsI<7I{A;rx;!2P6| zKsh%&Z$fQ>4@GjnY zj}AXe7WBRRh!1XJv(304HDE0sOokO1Z%!HSM#C;Ds-$xS3p>3n84>10T+H&=rx9fb znhTwXA#*1)0E{Cd_g?=xzj922iIS%Z~`4e32Y00YJ`K^E}5iO}dQ1jEJq7<%kF~ zyFfdNh#-j}$GEr9>n%wQIniOz4W;&*C1S z1JGX8fCt97nvv*Eq;30p@u{P0J`hH8($Zj|KzGvt%G#fCspx(f1I6>H7mJBN9015{ z3imC>BozT@5zDF8n45JyikbdqOe5xabY#oth ziYOP;uDip1qm=gHzEelhQC?aVnfSjH6EZ1Mr=e?%S(Sz{V?t-y+##^z`q*Ps?9&2Fy~!3D*ERQ;=LYzE z{GZSNmA2cz-HCN79k0e*?n!{@W%DqtWIB(g*me|FwKvYz+ONYi=@*mOjr+Fc zeE+t!)6-gS;&l2i^z!^auFLYtp|!&)VtoME>^@HeJ+FQ33?(LPa-V0jiGZYES$}r1i6|Lh0}wy>!N2~wJ)rOB=A>Oor)goF$9RY$qgf_k2vprVFqt?(*rF+;fanVG!VSWJnkxDLx6d4Z zBmQ^&o%Ke#=1{M;{vBQjot8Q3yL__Vid@%1L;HLy^O*mMSHi6Oz zm*WkPZd7t&GmJFeie9)s#ij8U1WbaFk?ERv1@a1^9jlU8O-$G_<0>Uw0a&NN(LyZ) zo}jH0+aSas@}hqkfm#4>efv6#1e%UmUvI>G@PgPnWCj;uU3P-KocD@>l{{DC8r^OE zWMXoudLSZUPs2MFI<7>E;M_a199sEqzfv3V>=1QXS=aIs{rX;dWbaHdZ5;1hOa7yR zwzOU%%1{8IHJlc4GEV%P6LF-VEP3iE>7fGKCY)OEBR9Rlz!VAhl=0?D zym6}dU<>>d08SP6SK?PK<1GrGSi_5C*tf=y+~iJdlW@@ZuvAeZJPdDp!_I^=`^5UZ z0Bs3Qw(69IXbAyQz#MAtc|6z<*Jr~=-_xV^pVTe~c)WYm4KH0=Z1F85TwCM!-Q}xsH`|8K&_!E5D+SaTmoJi1a=1!0+P^BP!MQ{Vb?dlzyVnk_F?!EXPj`x z$7pPD0TUkLh@VJ^7H|Ta1nm;ABqDbjCJ=!Da2WQhOD$w`-KgO-N_iE43$UIGmQzvu zXL`LD{K>N#Q?`04O0^-8z4!iG=#TH+X4CSTNNZKrr?&biAuP6|o+yon8yU7G%lYz=AwBR`bYZ0s#5g{bP z=NUU1tP~#BqAEb79D!D zxjkuL(Y`jibPSXLZcC~5&gE+S5?AQ;Ly z69Up84oFkR!l5@=fSQw4opkpS${gg1T0 zJB>JpP*7ER69^4=hNUlonb+bC0H$feG)t-sa5D6`<}LxNnitF3hIVlXr}wcQC+liRnDzp8#ZLmqb2B{9g)S*vmqpg@iGx zua)kX@UxB{{{wxM)Yie^Nq|5mxo>4dzjUFbnr z3beLN?qyGIuHEyF-O~ja?5gfzpf-9}ow7r(q^*)I5$n0NQ;>Bsn>M{rHvzowzPrx( zfkqL2cih~3porSg4QMUr>upN+uG}}5!fGaMAh>yBHrd7Oup`v6);y6mBq1pxIyHST z#ZoV-)5d)>M{I4s|8IFX{O1AyGNJD|IRj?ulO87YA$H^WD3gBWzDxZ&eR#g?)#VYG z?$X`J>DekT3x(losnQLg%)hSJ)pwswr}MUatm9?hK#^*`BY2#gP2 zN6{~@6^Iyek?4~gVjgjM*?)f#|9{crUw}%d(~?S4!juzstB_Y=7wqy(BVv+}iq18# z6w-454m5MQ8Mh$-tIjY~CeEC=k#K@x{d;^=UUg@`91>zFDv{B=>giPRn0;vV%M$e|y1UKO(m3Za_MS*8>gbYgs*U-yFoE@;q z*fP8%n`M~L;AkKMDGXC}Y5`7Y3a}dkc5?y589V_f5*WhKiRMBp31%~|GH_C8X+@!v z(qp|}zQcd0$MJpwFqJ^wX3!IoXI?Agy*2a8r8g~pfItXv1m*^KfUP(h6Luu#+UV=5 zqbevNHDM=1Ohnz!*lkR0iumMk;_dV0-& z&Iw)MO`v%2m@?-np+!|w4^*3^s~PZ0>?(8=v55(9G{;8drUE)tZPv9*@rq$n4R3W^54K8{+SJszqfnDT|$QI+KtYt6-|2(GaNIBKt)9Z z))N%27Q)(MbYgph%mFx!yF4jRL@5p?~&-92LdT>Qg7*( z7UEKHJ~^Ic>Ts^S1&EYj4p^yJqh}RMscI}}3akpWUBbpEed7e2TE&m?1qPJQ55WDo z;a<{av*DZPfFI5{lnN^=^Nk@4DAAb*t0XRgx~`zm8x;UH2p9;_Fwt?}60Qwgs)W+8 zNZnVE03XNu>v!xQ*2nQaN#talCdWiDuN53jp9rCxD+0s`;JP&2wm_W>7ESGN(lZdZ z=OP6#ftve1uLXnwWHK-%kmx$D%M&ORpB@6|6@}F4yda|@fr_>9TtlYNgg}}zru~F_ zaA7g7weirTj3MYQ6(!EPCHWMF69TmvcIJ4egd)xMOIMB`)vD?5`)}R;ho?WR0Py#> zzm=|^mxKbADLI*Rzd*_e@KGh;tzU5#PraV%K7)jyUn z1VR}?Ixnc7QYR_Ou>{I1Oq4$AQJo@t$dhA6eos#B(DvR`6vo!U4d3oe~pYA(1 z+rTWX5p~3WuTKY(935fL(F;h924%j`;0LnW0a@H>>Ma4hi~ms&e!&XpCUU(1(KL$M z6tSYUb4cyd?;LAEqtNLES1&%<0A8dLBs&@(5r`=4sA_n>Cihn;^8kR02Sda1FZ5%mC+)qN9YIjb8FZp^0LG(Gg3@8iXbmv>(4 zkpR5QwkDd*Q%bunnJ@9{0FznXjmBo_I{%I|k3uzilkG0Onb4>1^>+xSXknA=ZCfB4%iZc*LAXW*A_+t4* zf5tIOb>Ew(%w3XIR)9PA?M&tvQ+3>In)*J&k^A>+dAYB%04fpn(Asir?Qm}GTswtd zm#IqlMg0FF{_k2*1kIVRCTusZhlfyZjY&WuP&1$;C>q)#C>--_xN;$qkcw*#v3b+R zDpmknWbCT(hS0MRUfXjn$6NQvXfU-nPf%6Rj}BGh8i8QoR=~srGs7nKe79`u-w2_; z5dJTm+w)3JmFUyr$<3Cy+DI=HXbK!##nWauH0LRxnT)u$LH*^=L(x zuem^5LzV+j(PHGM&0x*3V_;$67D5&~1z$vnNSgRIoqJaOID{vy>IPuQup!}@Snhee zu{Gpm5TW&E<;9#6IU_w^P3Nl93~h?2OLHZN2C*5GHW}C1bZ-ruY230m-;P;O6I945 zq9w_VhzYpoLau~|QzhYzCE3itGdA4RHOgt}xe#X+Om-vV15NxTSS-2XQ|~5E}qTIf?=%AzD>d;|k)(5>5hUIo>{zE6k2wBZ;_P zo0is~7SMO?ef;j9p+}DdMnV#K6~Y$a4Tv464DWIRR5(H&fUT`hi0HWb9SedW+zq?E z!*-5(HtLyBT0^_rBFC{5wPn#wh5l77=&Kqq3*7DloHw{SSHxk#dM-G8BCN@Ha|*0* z=!M-*D970L1>YfLU0mOR7o*FCcz-kg%lcI6ofz|IPMKOlh=w$Q-GL5 z2rjtYR(_xvUrLU=%Xlwuc%pOvKVJRT5dhu-cWSsQ4ckS?rQ!Cx@WWHX?Wwa(W;BHY zl^37Fj2(m*8Y9ptn2l?MU=h7#D?_4T6GB_6%6iZuFho&ZaM->(jAubQ3`WyDPkd*} zc(>Hv{6JHn;s~J*gVu?Cmg=)wu~Jw>w15l*VVE)DAsh`A&#<6Ee3f+$;FShM>WAx< zDHE4w!6+sxdXav~MlpVOjgf4_BLcwPsLaGW&FtN#^J=5wWdQW%0yLx?!{jof!z|4@ z?3c|9!|>8mN_IIR?$F4NE)JiFh=|%+tCz8$lFZD~MaFSCKl{`RnPm;i?aqDo(0zV5 zBor7eryaZT*)Vfc>dBI_R9i%K_dKD`ET5z{8W(6iV&P^akSU2TUi=B&cTW1$$G`28 z`!4k&T#6_y;v7;~O1mWatCW_}l<0^Lh606zkv{k9=C!1ieLUc<7ZLfjXaAS~@-y~C zcCudFaAbRTzoMIMY9ZC62)v}i&VV*%eKx%NEHa}fhj*g~FJs>fW1jP8-+wpTboI5< zS}$ap4@xwolDk{{0{0EO>0Y*O(q`6WEvb@u;hh}E2V&^f+G&kgx01H*X=AoYDed{< z#a(rUo?wGL>AxUnUAx?ov4rk5MUx^rdU;`2G(#VIHxOSzs$-3Wy(IWp>L_eCUA?*a z0A|@FWit5%jdY(K-DD2k{(~GvkoEBDiGDxV%SmKi#!@kwREgB+2ie*w=$2D*d+)tJ z;zu9-)sckVr`eRuCI?i9Vd*He0;9mIeO*A(<$T0wv}H4}gBCsh$xuWj2_ybF;$QYf z`tR||0EiI<14+&O9@8-Hv)s}8JeW4wMiDXM|5A(yeceQK)520C7WL`7VFN`TjkUWg z5P&9Cwzh=(I+9~^U}L>O=4O`79VMbz#Hw+fLf3%~8C0r$6yb{DLBfI7Go{_sJxyMt zqm8%_M{HHV5`bMVYRP`@z4O-BN(itz?jgqhnTA1Mpci4INvcGS(NawFkXziHJm-7n zzRSJI%G#fqN{<0uXnGp7`?1aw`m@H=*$zTS;v1!~=z0koYxFGX;*_ku>(1@Z11KAjeAmqYw83%4uLL=YY2bqEvQ7w;(FCx*enkPf zHOvU16`Z5sQ_P+DpS zRbd=U1&<9nRXlU!xe}Y`qX(@S=9(yTTAJ}?19l9oO$-AzAb2V&5~C6!QiW&{I19L8 zKx-%#$GfZBy=t_y>PLBrk7Lz&tvwl^LT797ahdI5-S96}x0qVwx#39y&y`q4@!x_J z1JN2Pt0D|@Br1Bwb!CPr0aw-dqt+13Fe_jR=olz#<%cbB7NMzvkKcVnI|B>^YA-~` zw2k7xB0wv7y8`Iv$3)Ru;8;SR2+&e-JXajxY|3~~j<2#I7b2Q)44|TaNrD7_Pw(@0 z_&N)sOD~i_%$%?{;(^6LtBA&ir|6mJLLs~=)unH);HWJKHN%4i-0r~bWZ0F^(u5l~ z1Oj{l$3FKj*#SU9KTmHF7%sCsVs7}p8xHfeZMQQgyufR7Aew*|g(2wd#K-4KE%h#6 z2QKW4mz(#+H}BV&#BR)E=_(>8Di@NM#tnec_8VmrDaD~7@ z6{-zUf@d|Q(nid59^k};9SjpIme#bAoz<$&Xo<)1$Ot%ygt1OZx&qhHu#1L|B~1#{ zaenJ?2@eNI3@^x0>|xWzrA)O0GQ|5NG9upyczwdtu+V0 z!7#YES1}@99e3%22ytl!h@Ezz)=eQUG6{_Fmrl|?_}~Nn`mg``OCD=apegBMJShMi zo)p&E1EjlK&N-))EQ$9@Ll>%5AsMxI;D&Q9#@=W@kv>kw{HzTqQt@H&=TuC0g^ujO-s0_fT z>2LAXNgVFGQLI5-UZF-ZE(mmlQcrR_y4z8`9K)MJfJ#qVtpPmuCFL2&siVeu)7o*0 zSm$o4Id8k9rY8a2k0XsF|1PO@Nf*;m@^1Qop(ogs85DumWi<&>Yh+v!<4XY%B@N#1viA<>JZSNE@ejm6SBLYcs&&+}L}%-Wubkhz z7ecE z50)SN;Fq=8{5QnioO4-^_46rWS?&L0@7{B*RycCSquM(1U2EUl__TpdMrf$xIg;Tm}+>xpY@| zRb^%7iHN=37ax2_R#wmG3uca4T2*(QJSQ&OcepQKzLqVc%S?L*bQ~iF$7s_r_dk_< zZzy8z5&h5%0HBguFfp0cCC`0+?8Mf3!*npHQ`6Z3jAZ={qlF3J0M`ne5gtaVE;I}WSJYBm?M8M(%)m9o(6bSBGb>{*9sp~hN| z-2OLrf7p7zd+7b{()&Y87F0;TpaT9?{Qq*tf7S%Kjy-6Xjve4_C!VolE)$=j;96vJ z!zVRxIyJpj(@P0Pz+kwU3}(b-DwvjuXEku!^+iwn%IHQ@JdXW5zLtsbfZvn1?&twj z5DS0{0*i=ia)ulYZwy#1i}G_A6ova36OaLPqPuZhMX6#6NAy4s$)DnYT~KT3 zD6n;1gE&uyY61+pR7Wesf|UJwYXt$KIME_`n$-fc1vmk^uDUuE-gMw{@4DP|Y#sWT zhHtXqCj#E&+93DGD7fn_D;q0J1pzYEH3~j7sL=6}#48G~NHm&M za^}59(pKtASpPyCo@POqTsX=lSG8{qIWfQbOd$=)E&J$H%Yr$p8F{U z>n6>(cH-FtohEWE#)3poGnr$8AK_q?JcKV_)8k5*a0*#I>Ixii%9zu{E z`Lli%d;oy&+7I--_zqY!v*Hu0_-#5qL&Hk|ouR_UpRy||G0QNSE4t%am8TI+24N0j zc5*7zC$;d4t!vXE{}`AE?B9#;;HfB{0_;IsyP_KJqbaTy-b@wsVbenh?geKjP8zFc zE+{t(K14+=6>r?}w)bQSgmAw*D~0vq*gatRjAYkW>agwuNO`v>3|tS5X>+}k+36k( zDjQ=IYyl#a?27#L+>=*aK&&X>ChQjcl7-u|iCli301X%PxK{7i+7j$06>K=9C$3iJwKT5#hXyLa5Ru4k>G z&*VhvJisO(aF%0gO}%wAcige!yj09B;4N21hlWaz!LZ{N33g0!oKW)Ex`y&l!NQ7y z3C{*A2Lx6HCqP~;v${P2cY~pVm?a3psdwB*M{ivZ-q8q5NWob%1C|MOnMfD5hfRA( zxSnvnnQ-la{f@j^fpy9U>k`CQjJL=22Y@lkPyv+eT1f7`_ue_W$(>34${^1~r$&U4 zJQxZX6|$bNBmzJ)Gg-b$Ddk{AyhlYG?1_WFkK=PnDF-qIGYd1bT5B1A36Ys_IanKq zI3_Z48lqLi@!d-Q_)sbGAQ+FsJNd>IiE{eCbLNcP#LZhHOPaQ(jwx~Vhs5?W`G$} zFzp5Dr%2z|$YPv3X+BsS{OSxaM&duZeK!CmsrQI|&zW$4AZ-O=Sp7{iV27C70X~e` zVjBgEJi_lKzhipT7jhkH^@#@Ki3)kG*P~r6Ymk$g@ht-3$VN?X6{;k417J^LRC+!V7q4fe~pO}QMA-RWbk#Gt1e zNu=Vw9dzjdxLM>iDMfOR=x#>O<6#}KHj0Zr=JRbfo2UGpP{iJ{AQ*!Gk5Vf!G%&(5 z3_J4srcoHtly;Hia2&{ji({=McKMVAldAO?V@Zd)eA`p+fF*$^j`ed;-J?dxGEQ@( zC_ygM7!SZGxLX#b)krVdiRZyS()-820b)LaeKMOK<3G={S{5ZX#82sf7d_IuALByE zdGez$F62~66+ne7(^D$?vuEG3ZTr0Ten$*+KjR#hz?dwHesn-Va?VMwoHry*3EKI6 zt=Bd6A8eB1E{oDKu8S6_&jXA-LKc4Y{*$$4ks2=fCi&Z(n|~yk9eZC%z_odT6Aa15_24`T z<7PHnDa+!%?ITX|&e~F@=~?;B-~60^{nwwomx&z+YqCxVDPUHY(W#bMT{*0F6G%mo z)N{1M2N+|@5rG_~ko@Gnh1516hMnVk$sT?c|G$d=aeWL(pZiNgkAT~ZVhgXd@arx+yhepijF&%CL`t`K2X84MYx{~%c<~rC#+p``|zOV2E&9(hyL`_-_sv`_8*?E z|E;@TUpnX=eVXt|fnJzcJ-doFTp)@Yi-a|ZD+6X3o;evZ>@@U}07rM>Z38bm=}xFs z{hoIGPuU!MzY6+iKm5M_?brT!H)5Zl>ta}}AWCSr1~0@FhzWr^5+207HdzQofvE^8 z(mjPsg}4CwEU^H4b8MyIPQ=B54Lk0}H8&7ARg_b~-fB^_?%4-B`q;e zPDZ2LjRn9fBPSCQF(hUhmJ(R4X`MK#wt^{)XI0E7JgGpM*zo^l<6+N^wMOSoRzOfp z0R=D$ulj@!XqXGwB5Bv`!3JP4XsV9;xhs0=`&WhlcR+~0N(3%j$J!lk8~zei&qc7C zUTC3{dh@;0x5stBhh6*zr5D)ol7g(`wg>hto6}d6P86*sEi1aQ^@8ij@?kdvBh`1C z6SF3K65?w$y)^-aA_^F3HfE5t1NIR(S<%O>@Dt`n^ucN3hcc8d^e*PLAv*(Mp`PCl ztrMT`XZ!6E`YC}Q@-|-eju7!B2@}<)0t0bkpflhf&e;F=<@fgg^7VUb{|G^uvDU&D zR^uwbXGOX@F>}SW%iUmpZ68*!%pP5Wx==(c2na+35RFg_2LKzhg#myjhgc-U_u@PH zuKghX^wZxXI}DDxHP{|%bH(-5!s}&1iNNd2rml*wv*I;lZd9*}?ufuexdf`%EVC^(^Ex8Ma-=?+CYoLm8@W~2nCiHU_HxZ<`h zxLOwc8fIQDtG?I+db{IQK$~^!Jn?4$aJQ;Q;MM((hh5M#oi=>rOa0pqJQs%K%V~k}~GkbKr7zyH`H_6FvE)eXdDyPWY#Jhvht&w}-LaEH`Th9)!c-4GtlwJxSR1yVkJtUTe(Ux4J)Nca zkgQ)bo3G8LDPm_P!faz^*#J&}T>&~tUh=ZlBRghNkQ6DB8JD5|AhT&Un}!A2&yQi$ zdPDb>5iI~IJ7JsvyD3Gp)G?Cd6A*KDJ>^*g$+BpPd#P^{WHv<#hfXl#B9!LBTe1ngNhZd)F)wEpd2Y+=Gn&97#AV{*oqcRxLZw!PIgP$9I>!*1$jcCmZ+u z<0@$(iw(UHB;|XW(~V#%<6JiPEs{phGN{~B{=K-_616@vsV~`y?hn}o*8x1vfToCk zod09-H}>9B#5T3|rb~W5P0#BXH(HoYDUaxTf&eTzb#_=H#}?7vN**cXYQUo|fGimn zt{feCDg$vGO6s*p{W7}8C$s4^WY=O8=Vjbq0zOz>egUkJrRTH3+^kZX$NG%1g#x9V zYOOb=)~l}+pp^h7vM$H@jDN4Wzp`bL#xgqaqabDg?78>XVcW<;x^n%LIhi7ulUA>zpmtkSSGi5hX+~JhHw+6p_8|{m?@o;xREd{k0PX+k2NIgJL9ro<}19%m{eUN(* zu0)(gJ(NP3q10qQLem^k5;0#KBt~#A3Ts2_61nCB$@+vC6p`3YtU?9DX1FNX17-$uYhPyd* zZ^YLMb=^pIz@xCWN(~bsg={D9LwJb!L_hCr{xt1l+Qc4ObF;BwmVV>aC( zAe3S5m~?-1Q9)d2T4uvEs{GoV9)UjAU+$I7fCfWg%Dk2*33Tb+)7+<#0VD4uJS14fhR!rlNW`@@kG!FD-~BR^h?JZ5A?YbwUQCw zzGL!iJ%mCJ5*jK_Fgzbjgdl)QxdjkZj1ompWNFdJm2lIs6vq*Qu)}$7!A}S`HSTLQyh#mXZ&=fk!u`5{2G?&7w zF0^gK-CNhgWy9M_yp|G({c^)Y7e45L;>LPfa5K&P*gds?8o5lUHgnz}gR`k= zZIO?xWg?e_R~PDPuXtWo{E&ncJO@w+VV*Ue3VardIvj)*s@znbt|mS2f$0`(zGI7E z8*UrGgez3sV8<;Dwn4T9YB)+Y)Y(*LYOaPWh}9jp6?8f7+pbH5PP)Peyus;vFTQ;b zVE^uCf37+h2PGmVNpp5jaL@=cyBG!gU@y!AfOt%xpD-38yFy8~9iMIE{g2?q021C? z2+Oii?=&M0AcCV)QgT%dTMhC6J}|%%B1bET$B_zXbh|i!h$FbN!jCX_Ki){BSmXlm zdgul;04tyeNt+ofQr7`vwltDn-5N#*GNOdkJi&);yl*Bs4Gj!-vg~HlK9cn)om*Q5tE}Kt12P z|D{}w&ex{2-;4>cg)Cb_-5FO%N_#00Qr0$i1j0?VNb!m+mPpnM-OFgk+-NVCZz6r*d->{!O=2-*|;jsZYs zi#ogPl6WxPK@u?T5c0qfmTe*}aaP*0`h7VlW-#sS{^ z|HQv^B<#qR|D5mFFO2_8DKjqf-^?VGES6c`6?gCHAfl8r2Y^N%HCG^}|7%%z4T)paZ-BaxL%5t|PA+$&Qb`B4?XoTLHF+?J)pzt>(n0W1qk6uIt2 z&JsL?AQ2>0s-6MZO;}G8iGquV76qb*9(KX@8UKi2CeNWA8#e9lPXYbS&mymx1QGnKSc5P(UOVv&O+RAjjKGeL z)rvNO=U(}&8|SO0+vkeQWcY9^INgy7@G?!D;J9ylFp8*Q+O{7pP*xzgq2;P!l@TrcLODqWsAR`19#@p_lc)| z;x!hYqu>RJQe2xh{5XJz4xBCyEriVAfA;b3#$T2K2-oN+L4L!*j~i4@g_n>Th#M>X zq*Bd+jg@rcHw1Ju+{n-s*hPd2UW9Q)!3WGv_-?Lg2CmNq5kR}&;p?szMxmg>;kpk{ zMo*16znns90k z-VZV0@^zem9mC;YkxenQ9V*u6j?*nn?T2Ny2&G5w-I5G~>CFrG+N6 z)^Tg%_AgsnasFF><^9m7P!B2UM>x4Yg`DZcZ6nsz*+wg=|c7YeD||I|6AZ471Wf5 z@{gS-=GekP=>%}hm+H`dcy|-CN@Hc zts{rcoXX>ylLp((rZJCg7k9tpm_#GFPe7E2c{7_=px%?^Em<$gP@vcP9HlHp3Z!!S zK4{Z?Od0`fQZ%4%k~zSuG3RT5DmhI9w{fzp1E>(vL1P^PlB*eeLg+ zCjBL{gJ;SjkDlu-#@c=CJ|4ZCk$@kH>=@#i?~?I+Pkk~|57l~&yvD%m6Os zQTQs?f{udj_#q&s7+xq+x>uR(CrKnN9;4+w&<@aFzWm)IfJgkhjrH^x|4iME5&vR# z49$|p{A2}5k-u{67Xcs+F~G4-`!*0iBkwm z6T^sA0O+zw@^GwE#q-mIuk90VnxQzkbs$>Wea-|nn_AQI8B@&Ol%4U+EQ}U z*auX!JInyi1wx>+Ng#|VcxFgz&u)QxOU;Y92v-BKlRDnE9WPy2J7`gG(}-RT!K9Hc zlVKCNdD67opZxIqi2!YALmbWbKwrhTCQNjgK`-EH>Ua~tT{uVc8b@ z^#JOm_}^-SP6Vo`J z)Ea04)GDX_Y`<+lU$*#rHC#MUL{NF1Rzg29z|GanB|7c`j1^BDD;$9h?GofYaJQ4y zA`r%20y`a1O}}0oSH0n(8!lm3!f*;BoeGmKY6(t>Tzmmp7^;LSz81h4uD?QPV*u4~ zRj6q*=-#-0UMNB#@>5j&7A12LYll0a+B5L)fxhJC&8e%+m-xS6SaxAX#aWJv6^I6z z;p7v)8NypSeu_d0x-k=GVQh5?TvG0M_g+@RK8GsXj4?z4TfR_;J_dflOefP5;#3KNa zR#ow6kv7;1k6jM;bWg3dY83U4osaPVA4CxGiR~qO?-;_C(4Y();*`fCnCBTJEh1_} zWUKKV81l%b7-JOgfaA=14nfQV7;#CD$U-KC&|x8p)Qsq@wcc8L(uPn-(Q^JdrlDFp zW}pk+F$x|#O90>_QSAUPr0z+3Kq7l{M6bZQljVUdZ^-hw+43{eZjqLjQR{UeyZF2N zrM;u9S}0qfZZ>(O4>*%fT7xVn$!mJsw?p4yCv9cw9{}JE#3rec7ViF(nSgO^EkCEt zgYi(2bmXa&rI1BQ7P%ln6*p-b;$YL16!iLJx#(cBEE2Dfp6*TR4}k7TZcJ75_d75- zVlj#cF7HM)f}<`d$+jS~cpFu~qY#>6B+vtRsGW}r=?RRHW@HH|Hur~?qJu!hj!|Te z;z7gyGy;#wI7g8>eE4z%=dqB$J5}JGqc#bejU`GX54|Utg_fdeA+ysc)RG!+mft!U zLK->D_>Khjm~>+vMPw%YT~c_`vt92(#|1=0?2(0t4shx*L;#Iq$w%=59Ch@8M~;!A zFdMUqI8G}CP)AV(4fab?_%}xENPAibpq??--;4iJ&ZE%j!%^laS`L1ma7^>uv)C=*PY@0FH{ZinJ7MR0D8H zn)`H!5su@MMeO1Jut|Ld;13V~?b9_NKuzk|B}mZqlto;N+>Ws)Q)D?n7nii>drQx2 zD^GB+nft|ie+a4V1E47q8PWEL*59o&V46Ol*=3UYDWaFLeUF&p5Z6kJ(y`YFgN2gC zyTlaSJ&!_t%XP$QjE=d~Hz3aqUtvM~D*k`D;~xNi%^Zv;F`Z{~eS{`J-5PKMWJ`;?}WB z_>6{6Nh~b9Ch?raD@zJUp|q>xEjxM;T$>caxd3+sDAjmH;X#{z^sws{h+7yM7KoEQ z0ubY?H8k^2A(UNsKp^I(t-53ZT4C)IpGD=hj4q%duv^!y1*S@!riKf;{+gZucWm*c3xSTcbhQrooyg5_ z<>J|-`%~!iKJi6Ve&FOn^27=laFOAJ&`+3POm^;_6D3W+We-7zn*R}ghp?l=@FD&H zZ}0XNjw)l<%j^9((w;sKW)#o(&#mCZ9sjXA-bNq_V2iO%3Cpw= z=n|R(+v>P46Hb`0Kv>LS=ui*fvZ~YY5P2^~a}@SHew*J_3Zeds^#}T&>v#4Fz7Aoc zVMc-`5rS8OLCyP)`^ySjcZ3HP2v-WIx^@F&-O&;1ks^(IttcQq?j2urM+kU;&;WD@ z{>M)QQ2*F|pzp=E9l2iG-mwvQMqsHkK8A4V9lHztVbhL=Rt+^=z2`6;J@9b9YV&{< zQy4W@k|Fd+*Oo@Z-i1BD*In5E#rgyNDZX7oC~HF_xyb>gix7;6d7_;bTmxv`5ptX& zSXuy{&#{F{WmO*x37Eo2L}&tWMZ*;Y$BrKX_#DJ%xa8^Akx(Hbj=|8Qs4o#gcbB{O zgHZs$Ypsb?ku0SgUgQ%CLwCcQ@q7$ic{H?yiXN0|ZgF=8gnpB%jeD+9je5?{`~BJCkJ|owjj! zd8#8Zk>^)-b?x|Wn zX01oQnbRf7xX?N}j-JQH$$fXJMIHw?fX!@jv#I4M2}3#(&8DR3K4u=HW7&9&bzsb5 zo28I;zF!fs0f3i+AQSH9JN5IC;3a;Qz(y=muX%3!D*1z?4L{d`1R^%%Tzni(8ELtm zN&L~lT#jAxNIdg%h_PNEZ6%`F5LRU-?J*M6oNZR>Q|wvP0q&b}B&KvT^i1LdfLnI( zG(_m~XC&UaPf3x&ed;3yVz5z4MB?vc@$vo!*ak$GJpSshzNU{pGMC`*l7D&%sdhz_ z7}y%J2+i>yU|8bd7|@bNvDgRQJV<60CyyKn=#bhtUcGn!$2AH(&LL)Gk9DE^T=(IM z>t-_&3@S7mlQ@rKPaav!bS0>i;TExbUUy$3dVhKhqti;snB$A&h&MZE=~)z$xX#g0wosQdM9j574$6(IjI)r6=n!TD$iSw+oupn|TWn~aROGAL z^g*e(l5h`Va;58r4jm5yDwtx%Ck`xCcsNhExtj2e0?Z}!C02j4ff8|cGDJO811$wH zNn)l_+ocNOso_yP;8CzbxMRnCm9~HR_uqdy|B?lefC%+f+>9uo%UQ1g03ZNKL_t&p zumrYAI(vYTh1pR;0S2l=w#Lg-!|M)txx^QDnT&4$$|l8Lac$JI==M`=x?{uTkNAV1 z+x-9d{?GJ1edmG+cPjy#;#oNN(sg?~RQ=bE`}P@Dn&ZC zz_urQqJ`j;I>bldv=xI20img&lA0lz0h)z7rt&>xoFZG~FawKW5-<&`SR3De5pf2v zFz`k@epUjmEB@0${rcoARru*%@FNlx;u))60(b@CM<#p(;hKV`u3HPWS`ZS-gQzeX zg^#MVS%<1YW-Kt=7|=nKB6JF`<=Ud-Ap#1aM`u8Ih>k9)Ku1JMLQ_qPs?!!3pdH zM*a^B5cU_o>VRaz)3w2KDCA%*9JK)in802N3JsI*C_O|7jYOO)<`T-Zcasrw1-`~al0OG<-#YfoMIFSwdkRjX;v|!L=fl>}it#pt zdGFYjHZbO*AyAQZ%nnG|TH=!)GVn0L>AFf9J{t&2LS=ekHE-2;-D};7wx@_oe*W1>yM#06Qx1HKF4fa)HK!QWc z5zRVQc~~K)3D?V{8w%EfD+*HZ5>gdw7d8((KynebOgJr-r|yWo@SBbL5G!7y;{wMm zR=fhyzNnQp;aDk&TKWH`CCK{}Y z)|z_n-QAnJ`|teD?>uh8y>|>S;OHg+ITlhPLT1+U<8_RKV7O`=;~sVd2LK+p!qAL> zq)8Hc@7{ZFlJ-){Zf3`^juukvQePvs8)+$IxgpE-NI*w2mrfMf9mNjlLGpXx=n&2o zsn>KJ(Ptnc73R@MyCcgwlEcVjoLWTOOL2+VcPY9QDrGr@;wWi!^Q;X@^95kfq_dxo zj$^u3z{whBQ!_hxDGQP|%P|Ji5%Hb|&5^x0mRh)9=N?4Z$^*;l{xn?SUrd)jNpPL`dl9RU9NuRqZ@zVRcE*j#c9;17V{zHQ`mB6-3i<(((9GUf3ce%f7p zXL-mx#!?6Punb^uFm-xQ3i;!U7$7TPjhyyUmdgP5&WYSx!QsA~YrhUaVsz_0q+TL= zm3#xRN_~t)WLhzR*PrWvn9Y&GmVL`(PwfWM=)OJl{;-#FRw<_-%SEaOgGr>dlm@T` zz?5r_eXRFvKFCYNZtfSgcH8&;RRI6Rlh|)#41|M$kR5+1s?=w4n#Z`wJUZiTSXI^m znvQX=Jfw_yfvmNZdPUZ2$xCZJq~^JX-(x`hD*k_odk3EACl90M`m!2XNXAOD8b_qM<6VN!VrhP{}4SCVl!<7=4!tMbm^u#KaD>4VTjK zw*lSnY2(>i#~@gbgl@)-Cj5p2CxSoT4cLfN1cTS# zuOZwyF?WMS&_fW(ZJB^)mGhOM{vY4^!~LKA@cROQ@7fRId-0tiTtcUz2eK?O(kH@9 zn7gH?Yz|W40zyu3-{IxK@2k*Q(7n>`{ZT!>8uhjVXZLucK!?a*SbpRZV1#;ey(z>) zb-neD^*-n63ku!3g17NX#I#R5`7)RX8r^@ujIb#%6(XGQkeWcJ&=JY-BB<}$5A@%c z-v^8iM`z#xfK{RA94$zu+l!>F5I0e93Q{Jx8Irl-bSP#omRjUEX4G-FA8y3i}R*!7h6HjErvKtl&!;gXWb6OJ#wu^uomLZQk zFgy|9>gpy9+i1fEB)ePvRuzjZlK0;8*n4M2#9E&R5&Q67l4bO~DglDLJm>DrjEEIG z)>_{KnAq?l1&#?=D7;SNYhn5q0Dt6$j~a24B5wcA%?IrtE^j?g&_^*@@|oX;utZYL z1;4*!OeKLbZc4}wG6I$YQ+CvVk^xf$t0j@dWa3>^e9~Ms`aB_mqDu%+LYR^Bg9R_h z3!UpZet^E2*)HM9F6p|8I1z!~7@a^=5RS|}GY(Ury5r<+py2xaMsuy$aC@Dx>~pvC z&56Y4R6qd0yFd9~^}RRW4komP$k{kWRh%{*t0S*f5|P>P@x^L#AS@if0m2f(EMY^} z+p%Pr_7n1Ah_j=eDn{}7p-K44^-urWuk$;nn6|3@aZ|oM3azPYTXk|u8tY-ljK?V< zu6O1DibLnNLg)>esRa&Iyvo4RK=-cT@PrxP5l}%L(Qr4ur!FvihG1Cn6DN*xq;Tvy z))H97P95scZZJIVnipzYVey8egl$OlkK94MsUs9KRSaw1FJ7hNR$6PYs5(m>T~Mhv z=Y|g#AkBu^X3!|D1wnz?aP?%u;V@|~LJ@&u)mfwma1ya90d$-cIHMOPe`)~;J?1t5 zM#H3pr{1Y>ClL-)x|*mVU!20i#&GuN5i|%KAa4a~1neW`fC;iz7hTGLiE{cd;E;ZCiuyCS5(=<7zQH zI#s9?+%RwhvA>tPQ;aZ5mKZ*AW)>->Iu5ADj{mg*1AWj_FtgkHQ1Q?1ooYsJjA{eEBOc@6+5$lVr3&|rdhnd*Noq#` z+n_}lV0$wx5pCb?;?Q~`k-Q&x?7~GJkX3j0?JU((MB6&oxvkQE*Dd%Gd)MzGU+yKM z3@B@G{O?|w9K&XY))h=0lFZD~fVfhs?A+MPMUg4YrWTzaI26SJG8~;AQU`3B1MQ$e zXUKz|lF)_WZX}(6KtzN4d9C&C-u+lQY~9x`s2To+CM-tb!6m=^+(~Yd?#O8+nMddM z(KxKJcfoW?hDau*w2Z%M7dtx#D*GY$bap@An@z`ge&d|dzMap&{r!KeN00tdkQWd6 zz~C%j;;_90%?E&si-`m94)1;7zz-$+3uVO6=RR2v6>kF(a_PRuKw>z%eo43Wun8$G z7YzdAP?qn79z~ybK#J78?ldTkKN45M@1c8Jh+oNOr@_boDOYW;jltQL$njV*w_HjP`+lgwCcWA_tPr@(D$>@ElvAu|hx<+j04lpaJcbjAFpKG}{WXws{uAA`c3FJ@z^gH@1f90PS zKx>bGn}L+O=p##~QRF3}B*19q4PYIK^kz15SUFA|?oM z#Jc_$0)8IP;p`NPLF8aSw|Y{qsehn;*Y0{ zZ)D?A0$Xc(VZzaaY6K%8BC*iW%#f0Gd&Usj-WUxCgP$LR~WRJn_+F zSTk{cc@KQY-q-iyEfA;(CHC?0=DL;mNs_*1;@J%ggsIOLRwd?=@F=e`BU_&EC^8mS zK4ZurG!=Xlh98gOPyvMZ;%&ZTuc9E{i?@4m(^1gyNjUy5#f5VRlM$NmO_E#h*D1Fh zub3F@>unDrKvWBCN!m;Jw7G7f-UUbW!lVGbJMM4B08vS0nP`EUK{wYbV%Y$1q92l; zm|@u5)I`JxYd^5XZF1SrI-k6LjCy>x_BMS{;VorkCR3i}K5P{X2%3_!uI<juTkM@>Oft;8^uugdyZFvlYM~CgtQcr4)n82QF0?=g8J~3}q$s5Q1 z2geSNU|6u?Ckrv}O|LcKSgKCxEA$s=P&UObo0;LNfxFX5XKa`Qn3o5qZga*_KrzE{#M2zY{@gHqy5e?m76Gdh?J)6bgHF})BAn-kae~rF)dsJVs|PB3 ziW=yYmJL#X4{l*L+&)U5Fp6FxtCeN_>n|Ezx}93d$x6+%V9r_n7(?Rvu1A>*}dIBbC<*~eg+uzS46)sEV2 z&KIYOqX5PUKa7AgNl26vLMGq+s0&~|S#a1Vy+PpWS@5m|%IH|RfY=I7@Lr6p4z_M< zYsGo~&DhNe)qBI;Tr;g z^Z7%K1L#WHS>m}<6?{&~cZ2tw04_jyM5__?a)1qXaXag9<2=N_7IQHqdSbKg$xr@Pip zrw%&~Vz^{{G5XwBbO(_*0k{D)NtghxeaR#njIn`#mPoeI=@W)6DLEnM!w_l{-8V@s z+}GxQZUD+OJu1`m#LX5xe|{MU10LXM%Dwy6`N9#+Iz-qh1;_-mm-*>^`Se)8gCjyu zK6pt05}+JWy|rVzB%tm`pX>XbC!RpFzHw0|D%uohTeSh`;pR8$Gui5=3Y>vdKZ|Z5ZL$Wo*ec1X9xH6?stEViz5t1 zceuLy8SZCD?kOGWJU@+`AK~Wa@)QB!!cElD=h^Q1*n33Oxg&#o)WR;5Bcz^)d-O5n zr8YWXoy?<7ktOAb(%etA*4qdASKl8KQ`+Zwe!8Eg*Pi5j{ifM;1#lW&@bRU|(U9`i zi1KQd-PC3us>wg4(uEkn^>tblAvLFl;p?G(ZI% zSuq14_pJe<*<^jLFp4WtB}`*KTG2c47kXSnr>b0N3zvQVr8xL`{QoS+|Hse0gyXD) zzqTj7p@x6PE~1#&T`#Hx(h(`N1?isodI*o_%8!>C_eo%FeN6^&Dtr*|o+qi9F!_W> z`yDeu|Nh~-<<~#{ojw>{L=Xcm-PF0eKI{-Pz;IVff~;x{*SZ=N3D-^7vJg(p4Y+QB zT~xIeD9GFn-AzH1FbDM;AAgwwkO(}^;&sBV5pM)lPespLBScIB)IyOmj~2K|fluW+ z(zW%>83Yld%T;B#M&@hQh4>;03YxZPsAEpYrppR}sJOMn59gU?3Hu66W!0Uzl#B@( zy}Ab}1(ds}U3CHpxTkpDh*Klj0=rRqYB1KCP>+FAII3J{D_`CK-?a|}z`qx7m1vlf zAzH&-+4SKu;j};&;K2=l>7iOg?g79zCI(!F*Of4hw|YUKM#GB$TtXS$&GyCO1JH{g z@5NgU!lnWXq6Uzd@l@*FP$m3j1*(W=o|v$3uS~G(_ACIV6!>IuozN7e;zet?L!fy; zW~lGl`>$004hc%R3y9UMDIAt4fr#R`--5HbN+p6o-uErt=TMJ}R3wlxw5ceP)=uR@HhBF#8 zHt~7U~pbpgD;Mu64-E_%#m!lV3=Anvl zmSaOx9SA(qkUUVR0`891nzhz63JyMs29Z)y&iSI3(AZ_DFFgH3GSsgD_w0&T z?p}xHLg|NK2K%WY1F+xwz2D=n{K~I948-|-4tFopG@St)BZ33*klkJ5)PI3AgqbPl zEPihNnO+jQbPQ-fM5vVF+qSjVn#>H-H0kQ<3RhQGDCHF;CZfYR=dS<2^wN8Yv`A@j zGDrVk&B!!$fjKjE3$wWw8=6P7p`xxSqFlFje-%;Kix+PI0B&#peeL)EAjrI$&G%%! z1MJFuGf8gN=C1yo4d4|J7p`>$NV5rM3&>=H1FK$D6#IOcfD5m=N_v%o(J3X4&UGGK zG?@Cd(t8(JryCm(H&SmA#1 zT5tLZEULz#z4b(Kj&A#BxD-)(ZIFhcK#MNs=Dj!uj&A!v<)o2t%r-t}@ZDL)-_y&x z@1Ut5qS$zr)}iGTX<;_WY`*ZN+bFVKY#~!m+F~RYB&q24>9BGs3J|p?B$xP?Ez95I zw*6NR57OFgNQYv!oBeRx6VeX2@T76s`!4>8iip+*-Dnv})={b(nF~41 zPXlITql zEq5s&3>^y}w6!Q^b1_@$aKw1!-nHIg#L_vX!`h1v)_|yeFGB$^U5cktL`sXN#MGBm zcY)|SGxfd~a4*)wa`#mcTj}VG1Two>{=zu?JpO-{3Ts-Gj~PEFgOLz!d)01 z1#k_AtD!~3O6tQ&u|nYE8tdbXCmVEi-*^s30NTz%tuw!!4W0~p84?oSNQP|!&&$Lk zE|k@m>R92b_XX!I<5>|W7Y;J)1mp^|iQtrwmIPL!Mc~GPG-wAK1UR^QMzhQ_q&0`m z;b_*rI{rh@ePa>ytQfflQf)dxSS{f?8LkN$tByu|gr>8EG!mPn4!sX0JO&Wf9R(hz zgvU7}LfjYv4dLE>f6_>-^QoeKvI%c})gS znX@vkV0ev&*C~8znYXOUbOfy{*Jt9R5KijojtyV|QQool+fTVQ-mwqbd+|0AprBB~ zLg17L6yQL|M8`(LQf7^WC(8I51J4+^VZ)1E)9t|{AhaUf&57TF{dz4MUqWO>iqZ!{w~FYsMdi^h6WhB*`S)8Q@7kmeLfMlC(!tKxj_>1j1)i zwHJ3AK0Q^P-r@W0<@D?EHCc^QGdzOSSoFiGX|08i9pVgZpL#6{H6+VXxVL03yzP_&b zD1<6t-c7iAV~58RwZEx+{@I3`vSM>6*M@}948RhRW=Bz=xDac_DJ?ujB7Bvfj$a*v z)*u5~O1h8W8BjrQxGiujgWlpWy0KeLhR``f-EAO)=t4b#)6r3Dpw^~yI4U%dPXfLO zg7~A49BD=qfYy+j541sy!kL3I(lXL+W`@vOiv|H^;MESx(ls9DwX&WoiU;I@bXrwf z!z!pW#|;AafVOw+gI;v&-;V*I(vX)KkM=WP1GIS39V>iInB^c=oIzYvm^g}~q*2K* z8F>}s{S`WIfw*;kRs^3z&yI~HzTyn@?k6AUdslA-D=PvU0!dHs%kd2VL_oUVZ~}M_ z;?TU?sWzb=D{cb3O$oRs4xS}coY74Kx-OUCm*T@a_Q988aKyd<)c4|Tuor#M3p3at z%rGpTvAZV^blke*_FSPRR3p(GajFo+yWgt$clia-lIGfq&C8Wf@wPxe2}|t%)j*TMbxb~{Vc^zO3QO{UPdB4 zJ`0ms_eYOtb3c%&nkABxnJvj|%HxpA!5g>HnO%V>5p5g@d){-ocSi_RMAR$=&2o_N z(dF_0us~10fzD_t?M8tj4KXqn07=rQVuF%(UFfb2fk$p++Ik`Y05|}64B!U%97+ZN z=ktf?2j2N;w)@m}#w+63sg2?$VhvV~k=H$$04ejgIlu z+R1u1u3NyZ>wl^J{vWh49vfh#Cy=SJ+Z9@;Bw`d)F%1}V001BWNkl7TDJ9eze~2KRG{C`f53WZwGtkm!P@>WL4(BK|)YHR{Q5 z#aMTB(3VP1T&<4vIinXZUy1)(ZxzwnG(9?#>C~a%J^mw#Nv-xGS&x4*qbHP?1o*+0 zc5w1FG*ULUc8Z9tvQq<6O1osX*eId_08-i;u;qx7rEUWmQMb|QzV7eZx0;UbIiCU5 zZj)&yd62gCj`4ie-;qRz))&&+&~K?@Z+I9sJctuon04#Vu5V(yPBZ8`Tz|KSfqu|< zUk=LAl=ETkYhj+v7BidHUJTssNxMaN2l&dvPiwac5L4RSrL?~x?a*BZCZ)8OlxF}r zqAX}`JKA$Xzl`-+qoA{4>_f)v@CD%{{Hi4 z_<8*QY{x%4uXWlbq|Nwx$@qqC`f(O^CE0gmxP|LEn!=kbpLN_7+>yvvGrqA*c%9_c zIk46$kLcZ`LOjA`J4;}8>?i1Cz%diEy^MwK-%JLB$*HZWl#Z{-G6abvU=t!ucq5iG&2VWWgPp*J@O1Q0BPpdwzuB<>Nk>(6L zB<+ltnoxX|yV0}Z$_xiLn3G$uQ#e5+3*2Roe?A37*DWfJCbVqOG@+gy>wh$a$ll=x z`fvBY+BDIcF|*38>Ies&NG_y3aXnLy4WJ8m4Lnw&0$?^CGB6`_>s=YXct#t&Qb$u! z(blTGh4iWe@|UmQ!0*=Yzwv7miT!%^X_BS{eVr|y3HGrEt~g^K#=Q|q8R1QL(Re0w zI|)C|#BCEc0UP+h`TwcKhnKE45EdLkr%W_7{iqTVjb~9UXD%dC0DB9SA^3Q_YB4XS zH=X>+^}=blPkRa5uYdA`uS|SipV-#GvrSk)O%fImugj2)*m4>vlt_0(YpNl>K%gYb z%vG(bBx#>|r}xuR@uCQK*9)gd*LHOv*L2buM>)Rm6i*Ho=ce@-`phNL@mUnydghgb zOOnos*k|_fAYd*;YicEsWI9;jWCV<0hEh$Ok>E_&6X@g<0(Zgl<51ZVo(X?;j`p>u zDNPA;4P3Rr8GYZIK|K-mv^IQ%(R5uV?DmtMW^lg=6`O8aW3=As-J_pxeahr+((7{E zoGMPIhH@zUqr;wQ&FJ``uZY6Gb$Va_)BdfBz@1l74nuc|+2EJ~7>1eTynst)a>smL z)m*fZumXT9bS?#@0!>1JQAn_kbN@00pajs%4-{g^tqK9L0onj21M*?v)%A`C58R&4 zeC|y#8}dHmdYANuzzkvC8tz?!gj|JM9Th|YRRq?7IKn&jLHl036$At#3s`EyDN{(q zEXP@af{X=*0I}x8-8|uu5xF&N#c?u&?hPO0j;F+Sn62&i#FHGr z@yp}??(u_o4{tXF3c!S0{Vo&sQQ<|1o4^e+5)!@@ML#B~>R1muI}}q|r7O(*Ca6Eb ziX&bX+pk~s{rlxhBTvDC%Xci%FynPh{Dl=*7vnL5Ue`Ex7^0?<_^ncKgN7RqL*yvbMsokFUbN+nvb14O*0AcPp*> z3k*2i-6NuU?u$fsIXoZY{g1}2K*jg({M$WnAoHwb%U`Jtr z>@DvYpLMwh%*+SUVRVQ((N?UYiQv)P=;4s8X1e#j{esOX$rZxN+-LC84w?q@24esCR8ojju-lAp=611t?y{t4hCNd?f26lXvu z0975*d^v#b&992q>k)G)<36N_!3gv2kce>xh+fE$M)+ zZIU8d>cVVgSQJi9rbTLd_idmhfUkY+pD<#v(QQRP#MbEbFtH~Biv~;^9hr@x7tj|% zw?l>Zu6G)cX&d?!EIl4JcR#VUqq(my!{DO7i;n0#{B;y>4x@|SQLZv|6rEg(q2eFt zkpGEhI}TlrbXhZfJu=9(p;KqT2Yb>!|04l0sS-c|?AU9CZoLbfWVT$aBO{^?ZuVuZ zfqlJ1>QHUxWqtJc=Qb!oF=GEq@!u0NhS}82mJNt3DUm+n-#EIkTYukRkK5!UDYw4< zE)x{3cRx2s&B?TxElTOIm@Rt%X$X|+JKy+N}VaB+KYJBWq8foDtip z*4v}hkkWoKo08;(OlwM4hh7Ae#vI*tYE|4tl;`f}d-tQab^-vL&;Pmh`~TVjoB$oA z*!mjKJ$kWj_c@A!t*@o15p|W?x!)t4%#rgq= ztsPnG%`v6JPg2?^K#wJ#`dr!6QD}`r>~3jt#JTvvejWA4#q4 zc7LB24Tcdvil_~Um7KS(2cZqXGSDRrh%&nBCe_mU{9$7c=0#Sgk9|`_wY~>NOKI6s z+9T&j`)PV|HBC=12ZW!;|Ic{*|CYVY{RG=*?9KEoB>q(pp9%QMG_*U-af(eRHJFSC zBs5S3LU^}?D-8oWpU7&M;9xkPOZa+-L20G&Gzp(tKVyA<80@&4goFtN{m7>-=sXi` zBDO7vO5~C-akgv;*OaKt?)K1$5G#xo6Z`jT(OE0bK}7G|ef9PAr`bs4rO1lAmp(Kg zq?xE!hH6xtop;9q7j&Oye0`emngVj@nS(b_cVnR7CYb|?Rkh2_Ar^x_n#Em0Z$pfW zJ0$=INRQCz70qY9sf5=|xZ6p$>P4Ma!E*tkg0lk7&aW=2xR-E5=4P2^2^)&eY&yZ^ zkOXuE#s6O^H~`;xYVrVXldjJ9o`QHIh^HC)69zmAK3+T=KypJ3!+CQ>F8GkdJq?=+ z)jRE?zGGiTAAHp{=o#g`cuOu!-mOB^8h+x!sXds8}X24ME zsWq@UyKY8n9eJ_ar~TuD6$xi!w14Zxm#HT?L3`k)ZurAv#d9^R6ubqB&-&L4{Lp}N zBHm2Enutnb>SD0?r1W_y)_b5e3vHoFnt6?c#~cE960kYbM+Gmgq%#`If6(5K{{w%M zi8@-~$J$WQ(MxFn;-3MSNVH^-fVF`qK;Akkf*@cCM&K%(I{+n5V9IIp^wu-Gy z_$FpN#fE2a++orIOILAV!X2J}UW|L!K8Ww>t;(LHdvzACI48&dpeiD{S%m_FV9FB%Ac)k8KY-3O z7ed523?V~i#sL!^0oX{$5|-;d-wdIhH?%V8%{bwQnD7R#@XNTx?=tjRG^BE-KYFY> z8QQ<`=fCr??sIDmwN|v&&sb)jj6T7NoQfk}YCutwl8}o7oOIUm38ou4tY|Q9y`53_3vS zT-?pw&uc_El6FJJCPj=cngMZ$Xp7WNxDd~~SelQdA-e9v6r`2@<5c@UG;#_vHnV9; z=}KnvLYfUBu}r2s1iB=d_aT5sOBzW!M8?4Egjy< z=$)vT03HAvokPv)^p^_YB>87NNz?_ z)7AV*yO%th&6(X|^a6D{N`BK(DVRxHq?p`SMAX*#?bAl)ofMBE${aBf08-lF(zOIo zrMgDc-RP=y*c*%~Edp>+t&cHA7f$r(2!@l>80XZa*hnt`Huv+<{UrBu9*6yh-wnMOywlg=-$1!g(*j_89$p(G2b#+Y|~A?y%Q;JzVZlhho* z8Bp$UeK)B-#DAypTtpB>Da=f1bip6uAFx%z35XNP6|g$~?qvh~QvCNW_eS^gpaHQ; zvGsN4>^$;^q=RG^nHzC65IfFJQBneQ(E*7*j`@_*zNWOB$$ZtB&Z>*QNSYYS(>l3-5E#r{Sf9_OhpSmnot`yf6l2}_VjJMPbdV$%_hPq^wnL8l}=gYm`n5BkuvVvv5Fyof|ANWK%hx;hLH%C5g?r~T2h^Y%-F~-# z*dau1_z1I2*V!0tZvI#Oh5`ub5f<_zEm7bpoUZ-6pTWVge_TLL;vQFe(;s!{jdMoZwtWs zgKvKKle75zSTxBw5vcCC$E;tRoqt}1JQ2&Dj7;Q!RESe^{u!XX6FCE`1-6{KAYllL z5`?;ec+6cn6_of`^6KsnbothY9f8f@1)% z1m+2kGVo?CI5&rNnj<%tii2sFm9Hl~-6ec&msli+pjCkbq`{-xA)KmN=cPWQbTIC;oqqZk_K9vC}(4GX>j!xc=Q zp*IgdzeG{eWWd}@ge=1;=a8}6O?^%_p){$6_$h=|9nW1j6W#3t-7dG)P7x~r0+bV` zY_K^)Iel4#_tn^Y-~XHTR!N3k%Gj7VdBvnqf-|`4Qy30#tgWG}MQ!T1lIMf2as%}S z4S?-0T6}!<89u08m=-;P8eTy7ry!OVuv&C(y^OS@;eZvNLJUxeMx+Tvjx8FJht~fz zfAE!iz~9090?^*m+r9lpwE*{UFofh4fzZSu<_du=Fe$j7Gw0I!@71EaaQt!fg7EWB z```uxJ+waEv;Dg-eph($>ix63!`;2LR^0s@5vkVN*!2$(5gFqU?CwKoi%2OU=WGBb zvxh?xMnPb}V0B^_u#AC3c-aBsl|>K{925`&z%)$`V2cQ8xN}^P5Yse~WEymj0N?|a zG5&~*4q?gY1&B50TyoA~W?+X@UAizn&#$9fw(S-&4~j!8lAn8L$TOL8O8bo7rXL5< z3*R*$xw&r|#fKB1Td6&F_j|LrphQ;p%_9mUUPj||zBrk3@BA-ACjuwZj$}TW&G)?v z>ZyhD|cGPW(E4e`m8 zI-j_6Yx^P8tQRY|0GN8miZ1a+(oICUjVLP+FC!ivEJ!ccJpblEcVGf=CFvS)@6d7r zKqawBevGIKX%m1QnKNlFMT@AV+b9P5y)^ejW~82sWer7nl4(!cJPyq;+p$C5k%3?Y zi=by9c@$aHyUF1aqjy3Dd|uQU%hD2Hc_bU&=dqonC=$G{+gFp2&H=C9le>17 zJh_)fBK39M;~&u6wL^k{!7RgUHh>eE(xpq=*9TXCM<7n!b=Og%qKyynZ#J!6gJ8NO%o92l$I!)9Ax%aG z&88~FZSR`e?7l6)ZHw4W0Gj)HZtdP9wh7SU-s*sX7s*Slw<|eCO3PiR2WXZ2CZc{) z%JUzW@?vvets|ly=3js}_x0p{{xqe-oKjo^yzVgS$66^QeNd6+ zftFe&-MF8BQtQpF`?*RNr;e{Yd`IunueFp<@7<4^*>X?XGbtWR?JA;WAW}y>B{Q2X z=R@v@s4mLcpO=^7Lm3E&ll%GB{k*B$7k{Y`(&K1tef;vxupzDyewNm|h%&ox0Yo#K zBc*-xczX~V#KV@{#j_5bzGAD{bYr$0&E`s`A+DGPvH<#d{Qqpn|M?nep$=ETK2@A@ z)el+mi30G7BY=;hYJ-H7xQ~oC-E@`up|F;~RscG&k>H|x2`wh%ERLli1% zX=*QoN+Nq)5-hZ>YHg02M5M(q?=l|G)YFpii!kQd@Hz~C^(y0!bKnn3;762RWFjth z1DA_k==#qfRyJ(e@F)_)sGKUQ0;furRYS==Pz3yGG@egI&*iw=9XRFG1)y^1OsEAB z8=z!}!`?V$SOoAt=I`p?yZiDuT&`dG!|&^V`%Axex;v@dZP@Q$ha5`()8&e|D7-*_e04D}8@9{>WzD?t6 zS^S_B{=wabPt!?fW3-=^{J(tZQ3`idx(cA6y5%edu$LjKq8sWZiu)v884zHUhAN<2 zeFEVDMKFH-lONQdhP?RV^=lvfPW@lL{@wQMg$jX8Kmz}Fn0{>wJj;Pvp{to#=ZUj{ zNlm7JRd%*Y1}rD;QunhkbP-0$P?QibZkVA}=KtA?KKFm)U;MWI@$}uYR(XU9CL}D_ z!|*k%_z0C{&YboO_oo1!RTWemybc zS{T3%CX+vBen^}jtV=_V1t&o=gV@2qnGt1)l_~CzEvNw#`^UoIsf+T(_9pBO!8Ef1quX@ z2A)~cRvp87Lb@?%oE^QvGvopRPG(9wQH$2lOhVa&n)xS8qpReijKKWa>GjBq|7-7Q zKGM~^ZpzSR?H(Q0859}_K_we|M3{s9uu+n*K*66vP$?)b#Cb)pYkR?_e%I6x5URr7 zA&Bn)=->GMn6{50_}0Sv7^7O7QN@JHsnev)xCWW8Ec$C^M&;3mPx zfCRm1>+sD(z`&wbDT`Fz3AU_?g1sS`St7VcW8(^T|kScW~Ye z6AOl^XF0cIzFn~ER=eyk#n#lGlURQjFBOPxFyvLA!y41v0OeuskCI=1GMX&XXiWJkkYYxRw=zo=^`1I z73x_xKehIF@KQE2(bY6b>Lovs(haGcxKD021wh$-I&@F-#_Dx8I|rIe3wR3P7_ie2 zmd7#fuE~&QGOk@RK57eL%WPWzN=>QvgR57XA8W=eqRKeL4m_&g3_* z)ay7aq&5YznX_X`0IGsW z2!JAa|caDLqm;F>=lNj&hl$AQu3Z^V}23Bq^nIY^3$>I}5XD zHH({Xl+wRCO^3(sL#imE*G)tLp4^9VnhuX<)quI&tUW(F$2S!PD(pOtWYbred+F!r zUL%hxa-TM(Y)(=-T2IrBp~}(Tgap3s3wRiQR*S{YCNlJ-9RYl$B8$A0 z)YJfO>`3bXTaitegPWzImN)?zDw<>(+|!WK@leWUR`^lAwfv&K|Kjdb%K5mL@=*xO z0bnDgP|Dc4kByW`2Cwh3wK@38Z7@gL0<2&_9hYWJGHVC3Ce7%w(X1US+AQed{C_zA zGqgAaK4ijhUihQQtF}4`s3^N@C=L{%3(#85s}P(?UI_!CLaYk(1RNU!uZkGeFtYBW z9#h0CQ^1LBaQf-;g5NGDefjtW|7Y!fdTiI?vZZAQ57(Ys_iNFhzDn>V1TGX23NWa0 zFO1As??tw4!#yuZc_@8Owd{bAS}l!d7YtpbaCG~O_>cU_m&!kD_dPdi5E$njNl{@b zW&54HMZ5qKJQoOomB20{CgHFLUIw{XISvEVcYs2}3lwgQfR3ruyeSCD9?~Bo=}MEZ z*R=R>DS9~&3pox;#`R1jMKmeuNe8kfeo4Xr;+Td_c6oGOrvxv^sAOoK1T7l!?1G_f zXau};ej6(6*V~VO``7)KoBgy&@JN1(4OT1DN6c|HNeda6flUO4-m#Hm4)jSR(q((` zoj4!3%ohYA&2a3djy7aEN@pk;SVY5WM_M$6!A*af3cs00d~1`m!CK{ZWe>NrpZSC5 z%Rl|Zvq|7Y#|fy31*vnDJ!+XmZ5$~VWCXAQR#6B8kc3J=Mo<>wi)VlkjRL}ykjO>(>Z#|Sy#Cff$6M`hufL*SJ@-_aM4{16ffh#_6dXgCnih+0fxQ3@ zNYvgLrN4gomAks<%hQW~(Cudcq~JRZt!ap1L>{wJDVkXKBn=@LX`$hYhRFl^lGGzm zbBRxakZ)J^ajV7M-CeEM>rzTt&nSY^E!qIsZtAd=6Wj6!*nCU`&{~ygnCn9;0cA>Q z>ia%V)8sj4<|9kH0Jf@bKv4slINUbg&ixCoKVTkyl#HHnH_*;4vLggN}drG zTVhOFWlIcm_oJCLF-DIuo`euaGjjmwy2t50h02#O#ah`Gj>+(f)QodbKsj$(NxSaL zB^hR2`$?tr$$i)cA4WjElut_;kEDD|hElH!mwZz*T(7~Q$MGL(vG~VX^37Z)F2G*} zY-83QnYDe4d#V{Hj}@w2GoMn~lS+%~tQQiwq7WSJneGV{9gq(JZE6tWH3-s`D?j3o zJ@)@i?&(k}(>Ay=hlEh!%mkTG0}hSI0JDZ>9cCxX+!Ikr(Mm-nE`~Z$>aAPV`K`BF!yftg*diWBgY?bIT z%@AgloQspgEUTln>H{sm}~d{au_0CcGwyH5;Zr5INZEHLwr#47dY zoupREa~4!CVXnznmWnF0dSLCp_uGu>*72(E|3~%cqyMf*X$}^Z)7P?%!WK2n*OVP7 znN@gvo&R&DnY9m|fs*D@gC}Dv zP6*50syfritc_-|smLQM5=VFSfDhH_=Ll#hWtyhxdP(V!Ij?78KxF_MY@_OLwp)MS zR0LF=`|~`cZt}R);I32_fL3O4G4sxpIp8w7k9{e_ILkwpd3{W%vYKylfT}}Urc#De z_vAUBhB@64LEq7bs`I~vQ(#XvI9tc@Xbp$02%5^4@1ERM|D z@%MhO)5H1yaQ*|ZEZ8A%V+9>kVpGFg933GQux2FDxX`yr*C8a;pD8)A1EYXp%6K^! zT`2)Q8W;>K7)C%>VAy>6WTt_it|hV6k6`=L!v8CFE*pI7$tI!REje zK=|&Gc>J8TF_2Tzra$rjG>!71L9>ips=>J&vAiJ-hv1n6YyeLCx2!{#UwJ_QhF=Jm zCId2!yU}nOC0BqK!&*rvUf`PW&m|U71pyg`gn%>}aw+buQ%}VMb7LVM754JR`|rI5TFB?t%hM z#!Sb?O>O}V$U^FLEXZguDKH@*!7%;IAAae!@BXsC=m*`U4T$eRh=_Oz)QzdI^+BE@ zOjYHiB8~+KO6vJv+|amYH3wjlBcYO{rsU9R!eLn;-T)rU!Y*op?RD103RP~hWQK}y zfJ6{Y0J_MdEMx+yg3Y-7%WC=rI7zHhlbO?UNvvANHbSe8{#MTSPkj5!`r5~yt>ty1 znn3?sKF^&V_!rzy4sbGOHX0g4I5iU+8gAfMFz*pSGA^)+3!Ep>YQ)vlb6v7duttCR zHtXNP#Y+ZY_eQ{D0Ca);HXNrZYHtq6!YP=d;tP(PRpWn+vAA>>;F5KVIiGjZf`DMLf1 zAeEl96EgO5W(K7UZAwQwIiD=Zu;m#*t>5-c#@BWgP$a zH{O2%{M0=apg)v~%;HSo*_03#HrE5kiXu@j`Kgqb?x~W~fZ43cl_awSvc&n`Gk`T< z$7I-4nDlFQ_3B^E=g$4B?Z$ZCpj55y`JKtkXReG6W-UTkFoXpw8+qkJbH^+nSGKPd z^YykR7C@ayWt#rc8wclHe~cTbQMT>-A5h`s1*i$e8Ql`9L$rncVw>T;nO)wZINXh; z3^B%?mW*>ovFT?b%Q*uYvspTEk8xH6NoMUjgsv}TD5VT^pPEwo&V6iac8#$jM2hOV z$0B)=##}ezme9g95TGB;oGGi}scq13UtFQhwKYR9Hrr80RGs@ffzs=MV zHJez2PxYOW07ETpsU&eT@tc>j@mlXb%;Uj1e>b=!eT{@+G&6zU&G`>ln1g89ERHiN9=`tdr9SydB~+Ayl}Lf8ovwbO+VR!sL{t*Cdsa(h+h#3DrT@7QK`Kya|0U_d$!r z&ut-t<2+|?2B2>-*6#zb-Zvu|8?%<%FfcW6J?AgQM6Skv)3 zxIPuaQeF3$we2I(tcjA-ee|49OMOqh0Eby*2%VWNta2kX7DA^Gmf5UJA#^vhlMmRG-iYG*WaT2BHb9lVmDj5?m8T0Ea5tAmLcVnoDFZ z6hM3nK!3Z;-|g&2{^U#LKY#35jY*u6`_V|8Oe{q;J)nk34f|OwA$j2RnQuSuzw;NK zog&fOBwZZ^6hbDr8@;ki%w?E&w#&ya_~+XFi5Wz}O~#km;hO&g0D{r*$e!WMs>*!_ z1CBSCPS?;VOYgWf)6f-}gGo zj;uN02Ey6E(Lre83h->yPrv+TN8o=v`tn;MKkmjtK$-$hP7MDw0F#M_Ep*hmHch~2 z#Pr|yU)6KCq|fm7N+b7cGcjF$PM7!@zNr7yJvq4$IzppCIdU}xe4`j%N&zP!Al=WM z{>;~(_ka2W&x|$VDFb;KtR~#%5Ybn(2gWLCU&vR{h zyRXW54nu^81`I9FIp9VN4$CsMFeU-Th|~n;Hli~zm88RzRIq^m%pW}e_D{t)0{UYR z-$CG7Le8bCzrZmd=p|%SbOs;@#a$V~cAtwXcPWQ32uKpu7x`eaRM)f)Z{$D#D)$|f zd@f;;yXZu5pfyaZmZ@o|pZ?bCOKJ{yiQ9_KW3TcsF6eA@Nait6Z&!Bk!}a&KJ?4Mj zydVHNxVTR_!~$VLK_+MU&zS>ABwi4fuxk0!HC@pkC2@W1+YAg*hA}L6>N`2nR z_{A@N@m~A)I$N*TY}*!QhMY5oVZhn5XYcD}{Pu7EHcz3%r%v)#RV%%QLm7MqL!fHT_oyV3 zDb-SoVY+(tuf8K_;QiRl^MKowUEF%iHoH8t(PJA}xcLm;kdeJLnvG^yfn`UE$2sa90p%4~mnzL-0vkYNn zRh1{ff?iT}vzz!_={_X%El z=_l@M{%^TJZa4qO@&CAa&Aq)}VvKt)L+w(SOGf7BE||svztj zgeA-x{lOoczj^Fm{EN<7dN6gG$p_u1X&A2LlasG2=goHRZO3QCYh-%caX62+TC-o# zMksS;SljyGHd;t-~4{v z=9&PilYh@IyCRk|L@=aEX@DsF7DF-Ge{rLuCopk$jRYf zKPINKRc#^y#YIGj1p5L_rOww|a0MCS0BXGafF03W?VtXIXAJ;;=J(&eo*Afh-WSi* zZ0Ebxr`y@*ZJ)~}(C;GTDp_s-27>7`w+R#gz%RE?^Xwkl5P8m}om?=DlTJ=gHRPgF zqhqWR9i4+a1~rb)zVg*~_1=Ez;(lYsC!*_nB;2@A{96}XxdrlnbK^H2B;w(1?Z2G= zi7)~2x-ni4_7M{2v++Cby7IrieDCECZ?xyM&kL>MUaK|>;i#B41(m@^stgg8sL|zh zo)YjmaPUCw;E_uv(X0SFfz2Z55rAj2V>(SZodP=r0#*YMdy#gw!E!-dH{oRen_qfI z``rV-M1UQrEteT@;X5dp>*?weuwAxL1Pq_G*JptbE?zQ$G{A2+{(s}cPxIwt;7qr($SbE(Ul?755kR8=rq0PqM7 z%TtuT2X3bn@_yJ?p7<2M^@{AL@|Oz$9JH4V=ZMR%yx<3qU*hFg-o3T{cD8Nv;PHLK zp>TPsF|-q=}%pGd)}8j*&qJUvpgLYUO92QzIIGmbcaQdorIkRp=rSk=24h7 z4a(F3pMB}x-q$-0K>S&;kAM8SReptRHESm~Yh>05fKocr@$rA=FuWY4+{~nuA;vR^ zamUTNsS?$AI*V}!W(&<_C!X`hOIgc3y``h^ zAnfBGf0Y&Xymf$IL$1v4AEgYM15h*BT-KE8Com){C8s^=GTYxlLO@zv_Eb^1#N?- z`JHlre7D;37oTR=Fc?7ty#W3be|r0}mxuPjwSV`>(|q~FnJ5Yf=3sPU39$tvgQvj! zKMnW4-aHII064g~9|7$ckoGdhd<1QB_2wZ2)H-jgflJK{2@teJBY=pAXwbnqhJuY8 zLxBp|HkH>)gIoh{mN=Ts3-zpUr;t8oH7y$hO)OXUEDJ~`K@1n$Itt#AO2L+ zXYKVxUEibh8}-EmEO7=4oB@&HymtB83)dgOt=*OV5-)MNfUTD7#)wC=aWO(iS-Aew z4i>p#=pNhl~C<#@kC@-H-jNGf#2VqFV*58Y!d^ z`DoN|G$BupLO_@C-eh489^a3UfCAxql}%bM$TKU$?tuW5p zZ*=Z(&|`QQ?sq=+YjJHRE5LP#TmCAE(fG#4E4g4pd9HeXmhb>C~s z2f~UBt_6fWxH<|k7@D?0YYi5NTp%Fa#9NZI$Y7C?#yGDPVXhMlAcGO13y8a7(}Iye zQ(^P(t$qHneLi<_KO9`V)YQ-Zo5ts_J@Rxo9=$yreRVi!=lVv=f4TEi`-@>e%i8xc>k7UH|VJ0des7r4GRNK!}*|3XYLbsJ#{2 zGka`bBf)s*S>Oj@|K{w|d~DC~d zeX_u2{%2wmQNS$`PKb=n0;|~ayantTkl?uH3D>7l{ZFOWGOq_0FP$ZD#>m(L)53Wg zModGGl8StHL0&jxw$qUzz}-=r| zt_iIdOzRDXF{>)EQQk!2{EoHfcdR8b_1QNspLqVM(|dmg&tH6sCj%CVc)|@Aa@I7R z;fdcUuuH@W4O*NBu!8|dSaVo3u*HIl4YWu^qfsXq zF{@<|w!p%O;1hDG+2}+=k>G;V0(@kFxLPvahzLgnigbMWBh*u zPbebLk)Q#oRNw(L|9OCr;0nK;LrMgL!J1G7B1Q=muxt>{cUtZm+FUSPoj4q4W)Ob4 z+fZqmi`YvYy@6^^i>Bswd?%kYox5wR&-An)9>ey$WefF!* zzegG1+qLyxwtu&M`fjp&>Hn?AK3xC*e6Roa6@d6$w@>csJb)huu#1F0#xY)@Gp}~B zTCVt^NM2h6UTI9H`&aJWnfTfdK5OgI@#>MZ=?j(t915^@zE=1E;c|KncKVy&{|uLr zT=%Xgzy0ev2u~6q+J?BW8+c&_E?fE!zd?rQxr_Vlf_UsPad(v!HiM3?4mceIkAW5q z&6E*J!A=u!J}mHP77j~~Z)?_vvlcsOd9fvYMV_uVI_f7BEOZ77d@qD+81M~FIPF^I zy=Cyfar}Cy>eoL04BcVHfiX$PYuEp9i-zkj@9i@im<98q05PJ#kZ%bTh?T64{mkrJeSfl}|OvnTxf+7q7j)KCz3Gk+YiNNSk zA&x#fy>MHW@%wrXxj$7KuKS+Uzl?IaMB);?jH^&TxOu@{N14CqtA z7y?oo;o0H2$QJ}3TcBGl*lr?qm6`@&{h2$IU_5tbpArlXDhtdIGF3}VXF;|~{vPMC0P#1w^1G9j3BH}5e4KPkn{`AW)4nPgQuporMHneEjV1XKV z&3VG;6DB#TI8F^f2$4X5Kotx0NO*MM@1DHo{Qf`Zp5mDuW7m+uAT#KV>+kLCpsB%! z*|Co2TQz3_f($sCIG#+%4B$=xn*d8rZ8DGxY8YbHV86_F7=YBJt?a15z!+ew2s9?9 z0$-O(udvr5o^939f#ZU5V`2i4K{^P(obG-7`}ZGx#@2&}b+4$PjsktcG)zjPLvFMX zU@p)d)OI}v#>;r&ZJqzSwOh(-?uhs((R zCtv;Y+pc|gyODYj=ice~_o5$n+QhvZ8`rxz?rt}z58}DK)v@oyLB7{>?{xfo*^hU6 z?%g{6cXQm`wEv)<+q)SId9Uqm9q)H5!0>*z{~+w)`v2#5{lBXK#DQNjh<20vRp_+R zIkxyDh)-g|H_+n>oKv&HVzGxO0yrS?_gd=JzkYac8PVVR=ra}#Vamd_6L(I|-Js^A zP_It(*MuDJS`7*$k4Z0GzE07T= z>t4f{P!P35i?eWynDA;eZdNO%y^iBgUi&m~m#4d{(f(YyL=ue!E@9|Y6y&p%sUgD9RHboFO@Nji+SqWlmfFz;6dWPrJIGi+ z2qyLe>@P4gnA7N$`cCedrKPynple$0C_*W-m#{grvb0(t|K&fu`+D%-`N3yw$cTp< z_iG#ZlpPSTh{O};19v*c%_RSm8>Qr%3=ATioO#jlXe-+b;%Q-4YkFkQtc^r=l)wBI zL`c8($kX9uRNQP7va3OhB@D!b5t+Gbz?~&y28<9x(bOm8zQ7G+SYj1~RT(j+jDFD} zFFG=1<$i=OOnhvK<+5Xw1JgC2Kar-NehWUBUtH}o8%#tcmn{?$>Zd{)=sSai$g23` zdnN=@*`ZB_7|2ztuoDp>;3P3`X4Pj(1%mG^S^my_N@V@>ZlCL30fdPRX0TNQ+iMg- zV4aaS6N`$pieNObNIa>MXeKa|$S@U?#>RwZ-Fv%EYIE_Zg3@nrI%TBL zz`B+JhL8$uOn?g!RiZFam?Y!}GXIJF0-M(xZ3B3R%XkVF%|H}srw4v?gj0xGo~veC$Ek# zU~&e!AO%oQoC)1d%Vs_K=9OblV+}x{3Dkv^+1Vv+5t)AEo39T*d|~G)?nW%mM4SuK zna!ZnYdwy#;JYh!A!0EMD4QOw8NMgBXbbRCNjL(f3mv*MEfxiAPBO|=h+$GLMUH?D zoT=y>W4D5qOJcX-jWeCCx5SYD=Iqmq4M`}tz%)rd2@$dw5fRyXz@iXcD$qC~rL@g@ z!67&tK7*tkH|07J07e*Ev|6G=g9alEuflj^=enjYpzQ*78e%~rW=9@Hm#K+{od^{= zPR7E%FG!Qai>mgJz(^vHP(_xb2o;hIlLDz#B+f19drNy;BFvikRDdBcvH=k#kQqXi zJhO_gK!jHhsf%c$v9X{q6bv~byEGw!NLZsFL&y^HXTzO0|TH?-bBl1WhFQY$Z|KC&;!5J0B8ZW2wDIj3JMK|hAR;f zBi0nS?9eS2>?UZpC-$-%i+cT?b>@Qdk&YVs#(1Rxqt*SrbP>o@RE`8 zq)Y)j3$EIQE;w0Q@^o)yX=lOBfBVN@8t=Bf|M30Kgdr;)_44Z*_cW`DcaePjjD?-n zy7i=d<+!9$HJ_=n4M0?2)DxZJPDFE3IBa0){H|FOpng($Y2$ih5bU=;`V5apZ%>n! zeJ_j~5QYGo9q)o10=Z}z+92&kSb)m$gmisGfr!wc4Zt!_DDD_mOO(X|Rx--zMkNw> zWQlIIU{lEPIAi>qM_;*ZX85;0`V3Ec=iwl3vREX*2^N5Wv5q!V4SN+r#Rvrgt%1t` z>w=;TT?U)%NOVpeg=mNpl!P)CjAKDwUtol50mljnh7rQV42REhV%zcRAdEzSVXL%F z8r3vF*TR|r1|eI)gshY^N(N;u*|ek)66iTecPgp|USoBg6XooeVNZ&*#R#R5gj7-4CK% z?}vSm*QHzS;rf4jdppvq2EYo2B|4l(hYwqakL|Ab(PeA9oG@X+AshjQ-8oz9(-?AYb4ziP8IO&~ZR&Zhg*6cHh**QaN#+CsK8e0dNA*mUY znsGubj&0_j@aoWylggO%rj74Ut-qq7N9hxWK^#WW<#1{iR~J+X;ZeL`$Pq3xZBW{En_ri-t`b*|EhQi4KkiOZ>ogypU)>1I4 zTuEptuxr?^I<#%W2*FFzfP|@qw{l;mq_zm{fBD2ScTL1OraDK{B+VKVgkZ(Nae|FW zHYAx>Bt~RFW5$TOPPHVWRnpkbiFVAgliqRC3x|W44ffobH$8tk(7>=WmmP2h@e=_J zNORS`(ZSAyg#lftdKVB}2`Nt)ydcl(gf#OIP+P75Vh~H8;6snwI^SRW!Dkr_Vc9b5 zHnc_nCxRJl4Yu1NoaqqvTEs5EqQTn8uPER%(uk{$O z_UNw;7_SY;M-#BgAf$k*zr6#_$PbecWR*e_2nIC)-WYPzKyiUZSYj_MxDz9mCbXUr za|TlZ#sY2Et-gpSlXQJXwOl_fw+%l0$B#YBUw!mxKDXQ_D8dk|VGIozA_|F2!n1%} zD$j#lnkJy1sCA(i2Vwx52!*-^0s>vIuYK&9_`4r}=50wDfA{0h*w;SxO!WD?BNz|@ z)I=zT8u(ZjdOuOq1juWkDi05u>wM4Us5zl4a7#ujH6E%#zX3jlI#w7{bXG6+RQsf<#|=-?>9 z*dF+s8Q0%v5==zcWZ}lfb<#^I14-Z{cydUUXb}Vy0-6x8FhdJR*bL%HFJBLmmzfX2 zNh_jH!g?b=Ui)n~|Eb8wj50`)scCA#iLy(%z;l5^N|H__oX!rQ2ueb7{r~K}%aSBV zmY(^YqpD`+9+8o_)up@GLN53WlmUv(;cAwAg?cnr)@(+Em!UL;vmdgjSqm;WdyWWu zM!Hy4xFj+o!rjbN_58C?4_p%kB(8;OD8vDXq^FyjxtY42|NIyB2wESn&5T|gSuz;% zgf^fMazKf|;}clOUd7&m+GRClyUb33-R|)GMBLs{&nH%O)1lb$X13)~wtB$s7je4E z#488pR}Wm@95_ysEjHOgq9DZ1GgkgzR{oZax7lqISjX6bRm2+Bn}`5yo&J1hd%AIc zUa1ue+{~RhImethW@nm{rbE*4kaRsK9kMH%DFLp)YnRuK?M>WoFKz<4oD##* zZbCNEu?%F#rVPpHh)QQCXgF>zN3k}P^?Lo{L0>sY@+NP zMdg_)_ujRg&auCL7xvzr{Qvy%7jwjaejmC&DPotr%Pb6JM2GuTx;?9(RzcwIq?E`h zk?cW?A*ey@qE`{M!R=XkdJ3JIOrx~^*qRp-5m>+j@N@aN@$8lXaH+?jpO5GEBL2e6 z6Xrvx5Ry8QT8Gx5g$!ZEF}bEy%3FilU)=n^-@^7LYR77qU1T?ACd)3Llky>{9FnFv zDPz8y+hx>{)jrm?y?*-K z|LZ^cXXfBPy7v6a;swkx+!N*npC-u3G>{46vgQh5(WPytue)097Rg~Ql*4SLTx1Wc=6w$@j+KlZW-D`{B!}89)?IDe>CyEd!1~zSa0UTSbyGVCx}?^NZ8(_ zbtTScP$%WY~vZP)j;mpxcSXo^x0@7nU#cm z0I|WW8w!unfV93$a>^HV*ZxCYo0mQ2*D;^Z8eeu3_iZ@De~~$T7xVsOOHBBx^Z7DG z{2$vj_@d+cI`1FGAIJD%{r}Tn|39@EdlGNjlX!Dtbj1pg>7>hRufbM3`-OOJxCL-m zWKXjj<--lRTh?pL{9|AOl_$LQ*?>oSYn126yJXvr?G5W8-x~eYY&|vW8b0UEjh3CB zh6%b$*t$!%=jdzIFlh{ug{%n6$lDft)YS2#<9abmj!ER~T+N9I@C|GY_10+&tH(7t zeV#0*g5zjyv~y)URkpopL)0n3aUxAn4JsFp1O?~l+_tVg^hq{`_|U_B*u4doy2w44 zS}=u3?s&}vF;mpdu6Q^^&r)-eD35^$JRjgGIx;o!0tEk z^e*Dv+lY6beVT#tAEr0`^-1&VbIix22}YcT8eNUuyPXr(d|a22Ki}vCnZhHXR;%u| zUANYCH^bcw=j6!l`3-?cT5x77Jg&x{pBgv6{@GuaU;pec%c*fwjX$@-W1N|!g&2P~ zIhx@-!=3eUj9PUk)F?b6$TT{mD~k&f*1X$Uja`jCN@MJpG`&8@{Q9K%KTIF*3O;%K zrel^#Ocbuzd1@QKPZR05FkKbWGRW`IL!BVzL_Esa^|CjgwFSRYm$cn&1MqtrpYrQ<%yFwSzNixVzccUSyf_`dNPtDe?(R+x! z!L|==&_FY=C+WjtC?vJ69-U1=8(9;CL7$)>U zVTVjwGHG&@VV_`IoH}Py$-^HZgts8|Aa&t^Jy=%SWlj6QRP5A7g6R4MeDTI)g!yJ zt;*iH`!o>yL~r{2S!u7L$3U}s!n>PAHdDq!uNV$m`LSe>96kaNl z_@k87FS7yrx;JiLbv_T{%WUGl>M_6V@paAnL9*~=3)!!`0RF1;`Mwlk0xy#MDv zg7f~a=kQ%0|I3cAGVdSO|GyvW{|gF(4=BwrBm#*MwRz93|7Qu_pF&MNR1%B8+^tTX z|M7TYeth8ZlyP@LoijK59MeoPi?vBY&8(p7>hYg((?#MF> znMsbHI`RHad%jU?ryGhnD;m?^;_|Z$UqI_PfUEwsC)IoVQNxjH{WF`CLeciL?|-NtV-a zcb|Y_M$SGAH&bTu#O!X<$g#i_cyF?8lg_L5b=6jzw$`<8m3qI~e!tmv+N`w(3DVWX z{CLszn;z}rr{TONSkyI4HBbE3 zjdn=rC{EtBwWh6B-2uDL_Q;_;%tIoXNCe(@)wZ+MjV&%_c(Y?anl#^J9#4saVSjb} zNFn5Qar{@JAroc?ZpzFwCAvGYiTnG?X|Gh1VsXWi)RSl->Lywh9jv9o(H4H{g;y1UEDz~(uY$+&o|my32d+j##3w1 zO==hOlFNAW@BUibPHVeP?V&%x z>g%e0Ue&iv>P;wk$SN^+b5Ep{NhMp(K71s`_e)8bm1MpY{4n8j!BR3aLw&HI+NrVM zHuk&5e(uy3qu4+1s`qQ$->-4ns%i|;3_M(Ogxe^{=WMp*PoMU$%A5A~UD!MK!FiV~ z$g`V!K(F+u)M$i4=D?KjWmZ}iQYmI;1Xv)5K&`5^Ms0y?M08q4R%_(@s_Fi$yjOkd zH)yZ&`?KCOT*??Du!Eg@xm9*Zt;&G8LjwKt{TrSNnt_$gE zB9)9e1S?OOIgrR?(v$1YZa{o;d{xTom)*F1)_cFoe7@}XE{^$ijIV3nUq!O;O%(3m zg@oddS+?}+-A zw63cE{P!PcWBmGOe`$aIYDz!8@$%Zyr$e!vk|o>{iA0u>M3{Q*+V;jK(cCRC(^{=P zKeN7n;&gjv-6~zelQS)o<*S1&S4VriEcQ4TuFY94_dr&RsL^$k)|GxKE?YZW)k;u- zQT%7g%J?rRh~Cs%)n0dPy{apq80ji8-6UN-PP%!NbbXyv4xa#lZmvA_>~<@o8)-@` zH?HI(*wdoR_FeQYrBUUlWE4Z$IxSb*=47@kUd)NT4z|gXn65MBYGz4})9DJVuGH4F z?_Klx^4h!R*0k4^su+fk$?>b1<$AD5CZO+?YECSRmpPf`YMXVMp`478Oety1b>Btw z(Q$X78&{f!iD|`7W zH+r%045y3fVh@Y85%-nYgOH&BYY+kbA)^vtz)r{#gdq#IB&*A0b~V440dYv!by9wm zv^-8a+$1emiBxPXI=w3DuHLFzznu5Qj50}<^x%0@K`Ux!i*@D0*Cy=^SCAM0gqc%v zVOkbju8uZe9Y*AC@*!8*D!M(>-aoNFKU3Fg9W%LGNc6qYYF77u<>+ zE!*OlB~dJ1EW3QdTlR#vCK;2t&tH3KCf%`ZR?G{=rO-cckr8d??=bib*;W^0sCbO z;Ligrz6&7W`vyKdjPH8h-`B$ZhcU(v>;Iqr`v1|*Kw{9eA387xFZ{?C`(fBkt0Q;MhA?>&EePW;&fI`*xAC2uGGiIYk2UxDpn_X3uo#LN`WnN(;1B z+FCiE8>jome%np!C;ZTtX>_}9tJSB??oUCN85xYg33CE7$Wta?Pt0>7m4s*1>6}vI zuz|0?42v^w5V(` zWHt}a`}{ruRcQ${;wXrWlDGqw$%JV8i|d#!SP%JA^MKh4SF3nqCKb;E~bxW z=5r<=3uS&_Q`Etm`lJY`R;f3QK+BoOL$eQp9?%8dE_Y*?5i-~Cfk?gMwW;@q68K^u zK|>x!narEP)~$6>-RUX4*o1QJ=(d~g8};1S*2=zCdW*~Ycrm@atb=w@X9N#SHMlrd zm?J#8Y~N(3Gk!Xg){WddMGSLI%&aG-EwP-?a+0P7J|*d9!fqyfNg7@KZi+A^hr?{X zEM9!EL(Dwx6OUq;#Ol&{4>KMNHOtj(^VQ_@)ol6d@NxEs8x~-#%buSU&rVU#Rndo6 zheybIm0HCjhPklEV1>97o`}neWS8F+ZynVxZ6Ve`cRRgpwyM)j*s)L^ADNC5^KoK+ zd}KNniV0I6@4egUYoIMe?NaLlU>h8P0nhvR&4>i%m$^ldTg7_S153fX@N*sK_WY!1 z1L72quK)lb07*naRD3Wu>`A<77rBJt1FUl+8I;~(+lg)a$niB~EoNBBX3K0oAIvNx zxj1I*jfM2;f*og@vcm-Z;MjEWjd|gaGBAS`gY3?d3db~)9a9V9`A)lU#NG%K?P5j4 zUTJqL+ihj*L1ae->-oUZ4L8g!@bsZK#izy}+Vp+KjQ`+x+0Eh??V5cTU8pY-vGzqb ziZAp2uS4_vW&YmRHNFh^@O_m#d{giLzFmtS#`kmlu>ODc_)}j0{S*Ihmu|%sW{nxqo%c255Vlp;=VzY2U+uRwF8X^%e&ipxlhn=VSQ18) ze)-dn7a?XQE;?;9QgTvprerKWk_ikUW4MveS*4&7O({YNjjo;<<`6U{Qk zMu~8Z>7hvZ)K>7^q|>f`zpLKus^_X`gYD62tW@r`bJoTdt8HvlDnwIiZD`Da?4~p) z?3J1H#-jB4qVy<}3~3i$jbj*BxMl`d+mkbw#H%Iq6L`tNqDf4AB8o6Yujc8mM4kDYgGBVKUp#PgN){mt%Ao!&3q z-G?NEWafDy&lBl5;Y&7UCy@4SNJ57Gy`!xXcN=Z(RD?W{DR#sMIM6Fm&)Uu>ozEwo z>sec`gh9r~dp(g6T08Y_XzSzh*{rMDwhl6Mc4En<DNjQ^!=)Q74d?t*r@z11 z{qvP|>x6-~Hm<>9q$P1(60f>3Es5orndUU?OG2hHnO`5w53?orK~36(?t(aBScaT& zhe@47+gRJq^VWH8aCWz9ZWnSs>B&b-DSxH6%)n>IW;e2vQ?{$aM0sVR+)QM5nMAY1 zy37{SWS$a(HjX6%m&|LG>PD?2{BL;E`K4sDOEj#o7dhiMhi+KE7`3{SFVC?1C@&xW zeu|JslNXfcEYInJYL2_h-0)=N;^gF{@pm`H)A}&d)iS|c zz@21}tjp=p8VUoF9OP)29~8%OrpWPgC(ez&RcgeG%dq<}-q|gFvswGQ&Fb%V>(3ji z53Vqn%uLB`JadV#G{k1i@{5J$2i^3`D;rGiEG2U&iTQFp#z(qJ7^NCz7iP#FW&HI; z_Qs<0%8btm^C7E95@{sy$f$^o8mq0^sM^`7>@=E!XaVOc-R)}kyV_}2oZH7s;N&B& zL4D9jS{Hkj$>d}ub8Mf#B0B0LdRZ;V1MD*oNakd+ zl1#o=S?d>f-+u8haWgW`U>VqjMd(+PayF&buzman*jR%tVEGXP%4q9lHj7^e-Sz93 z|I2o#UWRJ?GVlMk^~Zk+v8=W9$&Yo!#8>SZ^M7$hxPx< zea4@{`v1uyz%NXNgT&D~q>(yz9QtlBqk*61y2KB~xg`o}SK%(<*w$ zdow?6v}YUVyJl-tR*kKGAt~F$b$1Tk#dvYBiEENFPLYwLvfedYpKY8^8?86<-tp5a zPG>zttwu^F8*-h!J591n0t@LfcLG@3IJbRBK{!|S_s)v{vZ#NuKihG|`N>tL)^ zb#H1ie471`i(MyYNyhX*1yZu&6Z152n6n)j0L$Jh??>l%Q{w(OQI`qa9v(4sApLI_ zXZ&#Gi-!eQX8S?hE^hm=*z|a2eq&~Obs9i`93o3;v68d-=s7F%AmtHd-xb@=-h)(J z<&Y_JA(`X2E+LE9NBt;%`Nmt;gzrN}q2BS5Z90rDuKPtUFgz$MBXTnGpyN~Ki&5ZZ zo$w1YDaCk=5L$+dg+7V>nSE%LC~k2~g=2%fkK`TZfvU@{zRCFW^Ob zI0g(eL?3A+wg)Bb;OSctR%v)Iz&~Ic_O8mIV~J~BD-J2B9+Fjvo_tb>ppeu3H1y;4;f0NAvy>IwUJJ% zxId|FXYGCCtWBGCYnLn0!8(cPj!s?uopaRRJn!{ypZ5Mw{`-IY*tsum?H%YMeof+jEX{%;eI`Mw%0!ploNzHVvAH+lSTTE_Cj`v3Bu@i6`r z*8h)|gTjaL+-M*|-`V<^-)p0*GmnjkaSGPku=T#PS8)QsEX~={Ve&j>!wj3u>f_n+ z&B0%pGRu^CWzP1KN68My`UzKT8J7-elCZ52=f+;U?b1VvgvlIBiIhfXGiRr`QOq=% z+tCxp1e!AGINM<^%)QgLox1IKbS3Mb*1`Vv-Ok;4xcT*AXx0^=AvZ`M2MJNltR;i67mKD-#HrG^YQcz7%r;CJeedeyhBU81+kH*N z4N7zNG|r`Davq(0?}1KTJZoX<%1N^5?AyluwzIZSy*Y1Mh}Qp>znrJGijdcAb< zha_Q^b4+emjvabaQkNohE9u>-upJiDJX5Y$xh-ZYK1@?{a!T?`9H%qb7>sDd+AYqFwzUu9 zdoOMdAIBemVSjVsPa!I|jEsm(vgFC!N8F{SY^7vUc9b0^hhjuBx|#Kh5QT^9pbT! zY)XlSv3EFk)Y;3W!pDXS8PJLFX&nx?FqisUr!)!2+dRO!=DHKCL zfF7tPZf2#xG-G8Z`81?69noH}3#sJb3x zKxB8^W%7@(Y^<76z+B7^2lG_$Ezs>wJ8jzPMyuQS|J$9m1xf`!9L(opo&v0zF4meO zbl0$Ft7)xpzp9@$^{t{vWSew_^BTrHe$Ftt8D`;* z<^rWq4Ysy(svAuWb4W|EQf5+1!*DjnV`Ofmsn~S2SV@IRGHp#JVaYF1)qxE>n|X2a zzr7kwfN$Gq>&r&Eecoq&kxld;+F*X!jrhxMnqTJq-${+gkFAK!H z>~(vY_kUa8$sdbf!*>mYeAmbSw#N_a|I2;Gi{|@%UjH57U&dQ@p-5*l%9NRNqF**4 z@7A3j!IX@Aob9k2xN4bWOE%eMOP`$M)nbocxwh+Rva68oO~~zo&SX(=$i_`Uugu2u zzb_wQBA6aL)Fshd(6?^A4r8r)(H3_>579zahbM&%03cbK5-Gb`GV9st*^xWmA=iqv zPDYk#_>))ur;k-3TNe?R0%~;ndh7JwA9Uz|S+}rS3@sBrCp?XF%OUa}OsjMVk<6`3 z#f~}IJWRuIf{koqGO>Jy7oRX2=IhCwk`lRO^OCWYurv}QSTfAnC?oRChjRg$ViUzm zb@S)l;`e8(zddn&Z(}=mB0fBhF8}suC{~{JGk@35{I-wOgLBwOd|T0JN4*Ue!R#Zb zV@bhcU73c{aQf)7PZP|GrD>t$ne3Us6}UbqR31hoybb*`$&JJCc~}lbhf-`dAEt>t zVBKlwHq1V^pzR`>la(F{VQETmJt;q)nU>6CVlo^0Zo2KGTg^`9brx<|xFPd8#`v>t zyA76pF^$i7JTqNS%F_qEb)-aUPToaqF<2YtMqhVYf3PfdN+~uUiVoKk%OR7~=v^TM4qKz{ovk9Z!YeJbY$tI#52VN)%WlccvI|Akwy!#EOtE z<^n0n3Dw@H(X7vgzfzcAz2bO0*o^CSX8tj=9@mbaH}>i$`h-5nLL+l*zR$7dgccdf9M#co+>smRcv(3jHE$%1(^9U5o6- zlt?*^XFjUygoniy*YhC=GK)3$EC1znJ~7jV7(q zyay!)T;a*EIbq8*g!2~GG3yr*g!ev75o<#ao$QM*zzfGO>fa1!370$*dB&%OG%x1U zV6cp{Xc!H*u9SkD#~Pb(ax>D7VnuaFJ&Xv^du8uuPW{YntgO*^D6BsqgamNz#Cse4 zwX z?}K={QJ-yEpKV&7Zq)lA!p-N&QYiz7jB1LmOQMLpBzzu4cCt(s@-D1Na<@1f%;&{& zp0%V-B=9VA=dx~RONZI~IN{Ufm(Bv|0u9zq+&9{}+P+t+LVYL_v218Edch(aN+4_M z?1CnGhf_sQ&-8ar?9X=MR8j4yHc6(z#dD4b=mZ^2PI3mC?S@Jsjx$>3u}((U9s}HP z3sOl|(f}SaMz#yDEdmRvDBGbqhrLP9*EnyD+8TY|*juHlql|oNA10A}T^pS*Ne;JduZ|bxE(D*~w{o5*ZzbTf*7XeW|4`BFH0AjxHx~KNQ;z$?l5N5qosqcCm#sDdb3*j#DxA7u5mAFblWbV^CPd#U5--&wS9a%bZzC zQod;Xt#;D6YCd;e*C1g`p6pRFW)JqEzqjGoUJ%o#cjHgWn}%fSavIR+*4fnAV-!Yh z&cyXhx|;F1D9or`)Jto-SmKZhS9xMe8OM;qbV-$SGaDg$Ljn?vs6*2jJy2kh`Pg{( zMzo#1SMJq0(^W4U>LO9LYJR^FcN=|c1B`JW<)socnM4K~#i@Q#|MMph2*Mr|`Vfw3 z8g%3|CuJXh77U9JuZ`5u9HtT=OBiJ&oLE9rhMNMf9hhEQn6GE@RBSrT%q1bZovFNy z_}zn41o1m6Z`18u5<1MxQ?coKCcm~Yzjk1{DKKTQgsfPi*klO{P?$5-}@*h0D9+y|UG_-LD&KYZ4-rWH}jO!5WoQ z+d0=tjj(P;1M3f#q0y=9%HDRh$z+cw4zDe|a-8h-E%OEgAovM|ACYvZ9XoGqd)0oo z(cW9x-aE5Dudp{z$5hp++SQSRxvXYvEBRv9ICKOaUD~>}(}k`b1Br72)HMuaAI1a3 zD7iuwPU>Qdu6sl+PCFz!9g6K`BM%^kc9^?v_HN!wDq2z?2KI|!_U)X>C z^ut#!%p|igH+j&LF?+Hrj8cPq?mC{UrrJq8$P%d}a-!qSkw znEk;hR5Mw!i<=9kM79Uu27GJS-G=TrVyi<2kc{MDbcH&tS8Choy^S@?T!x82k`$7L zw22D_L{k2CpD$g|_cMmDnxEG$XpTZj8bUz;_FmYr?`I>=;Zz^H8OoH?`d9`Sf0 zU%65SdMAhh+)v~C5I)i^T9>w65j#U5CW;%L+zb@^t~jmOzA4wF>m7XWs;5m`?drAC zPbczyIs&xBP0-e8{{~pbQZ$Q4-TU z>6K}snehx*dth6Y>Q1Av4^=Rh%w(pvSJ~Z3aks{@C;dg0%HGxQSM9B1wJJ_0y}xeU z*ByN{5^Nrw{9r`jQ8FnfQc9OC?C=9fa+NA<-5F^I1Dt4Xw8_~Qv$Kz_c-^Z`t!uj& zKL*ZBld;QKKT(6|q5~fe<0(67PD&+_-Rz+}Nj4hw*-gbD^^jVi*46h;Zy|LlwHO=O z2qHl%1?5D;)X2my-v9Lr`hf;vMwmy#+eX`0>b9!yJA`=1pa?RdWUV`E6KjZ#V9TOS zSX!{-ge@*6Hx8-rI34(DI`A`Jcc6R`KLz?KR&43BzXx1Rh6op zpb?4)MeReku{PK{bfMl+ZKyUy@3aW2MAw6*P?pL9Cs=hpmX}M)Qkuf9Uh& z*5$+VgFIySXwFtrCS&FyFvn)cuP3ErVVVm0u-JT=_&Xjj(qKdzX#>#%9k- zA`UatVX=8CVRho?-Qvz0V*7eK>@WXw&@$RWTTE}H7PhplU;M_f`2 znmRlEG;T+W3k7I6o?PfDja@sp+PPI%1<1p+FAR3X3JM{Y$$1E)Eb^G-yVM8OT)PP# z73N11*D2doO*S{Tg_Y+t-bG9}iKI!xEx*dx*T(*AW53(2?VWLdjy`|SL7NPpoxEhy zVI+Ixba|>3)LONjtDWz5)^nrv7^WDbef$wK#$86!P|y!UNNZhfui6!AZuG@$o1E%K z2cipY9j!a60=Wh^Wqc=*5|I;LGB(H(g!_x=4=_YK>N(L%fyDT(S`4atm%N48`zXd* zp#Pt}_xqLX%I^C-)nxtRd@02@#$VtVBgpN#rp_${huewzU=?rGR{N3kV`2aCgiMt1Y57 z!ulFx-K<8J7E(KMs}m|5rx%C3c*Io-`Nl5txAx@MN762#`g7yl&qp(&6I0r8nRe_` zVNfAypxa(j21IjUcxS1#pqbJliEaB)kh=Zpy23JtuQS#b+}q|24D&)dEl9Pl zAt52+bd8?XyWWh1h(~|UX+h?NL@;QQLA%n4hxRe7VOalNiY}__s)UMEX>rcZdB`GH zlkUb$$(b~a47nF^q#?fM?!vh*TSYj!b!%9!1k;UAOp|ySprpuy#8`+@bfY8@QB-uu zNKV}A-FhjZhcR@Y&^%J2FyI6x!6GXsmN?-GT#qt67%2xu)x(#y7Yh*35~8UWq5|=1 z_%cVeibdN%TtZ|KaSuJ8!v3p+32rxjoCe`!C5cp3QWFFF8z zUdi#xa&SM1d;3}D@bmF1?bcqUSlXwFmnkm%q5{Adl^p+VE-?I}_#$*ZUZ%M4|3`$u zuS&eC;?LLn|MTOku>b3@;~TF}{Jl3vzImD0XAi4O+}1VTb!Qa~lg=ZaBO;a>?R<)3 zEF7tElwc`J8&ssV;Px1&`NYxBylcv#347BR?sK(um3msRW5w3{V=(ZoHxd`S4NEMW z(tH<6Yjphwr@QTyh{zV?8l=_f1pp^%W3?7@>xo`-i-yG_&P?DGUVjGCwvUJr^!(51 zmU}T~be9=Qia}&^fgmKDu5d^}G6M%ju65wBD~wkI({*9GDvXz1OkL3i0$H+OkMq+ums z=z@QoO?X=7`> zXUCpa>}=90CW4kO$7$Vk5Mk{ifPgDRQb{R6HRii2=etTHXtmLr;~scYWS@lVtO4*R@msy5USTo#O)Y`D-NOM>nYIKp) zi0CdYo&VtUB8_i_AW6Maz{O7Zw{QJ-AGg8Sv`fYT9|trgSSs^riSycM2I0mrJm%Oa zAFb~J)tqKsT-3V90U?5v6uQggF(VrRp%~;?! zBBG+(dQ?S3Ttpoi1-Z=RtHN+yC|3hzSI9arFfuYw$aMDqCYG6nF$MbsJA%QCyeuKh zIa)nOwS^Xrg#;$BHexk=HLsGHsW2oLLkH= zh){QAsZc8=V9W#iGLj_|PJi#ZVA=4pDVz2^4_j-j$DW+8A|ZXwgmvteh!Pgm7A&*V ze*gF|pwm^7BD+Gm9LW3r|IaGny-3{UeZtV@lGlcMgk}}lPa+q4(PSYKDC6Zo9u={QpS#Gen?jV3t#IrfxJ$@ZL~Q~s30_jC z4MqfQW%h-mFPvi&Pemex@PJsIm_y>^P@hwN_%w&WmxZrB?*RBki=cf`-K|$?xAv;V z(mqYREPdfc#fM)N5zNmsUZvgUs}{@rH1TzD;a59e=Kg%W|9?L5RoVYFlwZ4;~1ZZ!Zgf)e<=-uI}N|?hp}a<{f07*na zR368|yS6eLjGJJd0o6fPCl(RTKX(#;{X+DOOU?VS!_|p!@16b5$-d9bjgI7222Ttd z!q=-|rzMuBr&yPYiNK(w3?`K$JsG{=nYH7G+mN!!Pe7P}sdN>45kfjr!00-1zEtX5 zS?0#sqVwO8SR*)xT)ks-WM9xP9NRWKwr!geTN7tuCo@UMw(W^+O>ARgXTpw+H~;6p z&;4*eoVE7a-RE?jUA2GJgvpfA^zh2o1Q=hFp9 zV%DdG1u=W~C(CJ2pc*nJ8YbMmIARt=D}9y-v>EIHHI?z#^1t>F{l^{FMU!Nuv|Ffp zIE@P~Ds~5?M47Ir=iGH)c(_=?dw7p?#mmdkh(PVO@3E;xKWs>1eDc+rnGj1o_jXHn z?2&GQHQZDXH_vjrBUZdui%Oep8Lf4o7fEr&E* zEHbcw&&z^sK6jh!GXL5_c&e*&hj>sYFef(nUlrduSmioO;{?bqN+8J#46@E7usE z$}r#XSvt}YoD1u@-{yAah6H5-Wgj1#1K;z+UCl&PNuujJNz5jF0%5@~5b~@r&cub7 ztB$$Mn!f-^J;9l1Y@f^;gAV>L^1mKR!$HOkeNLylO<{6Nl?-M&T-?N(2YGBZxhG!P zOc*+eQh>~9^tS;XMeREZh+k1|t@%ID87(PnRM~yv*bD2WEhFTqd?L8H?YCjzlc-r= z!vbMM6lhK@cPmNXA6fLEE~3K!7m5_ncNVBy0|}dP|AQf1s?_IiaV%MvU;l=2B4*zMIK7OcR6 zouNG_2%xi+J#UCFQY#|m0C9_rzK%48!<}4uW1y$=Y2_^Wpcnt)c;>f}W>m73`fbJb z?PLWBN6gDjtp+)wo<3WnuDGv3L^~4sXK-j2A27f-dUs_Qua{4W2}p@Xf)mj$1`4$KoA)ONeleC@$SlGP~bhR9`rgB(l6iyQ715mRI#vl15>FRub2pi?p17_IZ*Jqb53R& zme`Dj8z?6UZA+&rEl)==p8&BXFlB1>)Db$PV2zgq_t$XGqoli6eTHF4k0@&a2Q@VS z>k%{#E0qr#AAq|WiWmw$;;lcJcIqy z7JbRDlcin_0BoC+L5ar_K%ziJ;qUT@-_!&^D*sskv;5gL=V_qxyDl?|3$haU^pFdT z0;W(zLvNxU49L<;7#xv%Fq<`xJ)dN(KgJQw&>V>byqa!aSZaH)mj=ObW=qE;5h9C~ zO19&TnTxrK4?`>fytBU|HP*4yOb1PS6Oqj+R_OZ2jlTGR5Pynp?%`cqGXhM4oo7hs z^d1sl^j*APQsz?-5)?F48DWzQ_J;O|b+UWKM#*zviu~eM3@lnSdPR}@oxn?W8%C^m z?~91MsPp(BSuu_B%O(fpPEXbO_jitO&Qp8X^(7HJ>%U3f*NI8mpsPKSfevTY6Zk!S zA+Bjs55fOT+!BXf_gckx&;&j z9lXfc;M9VCiw%{`U*D&jFX`CspKnTgANH(z#!W@WAhm`!QkaJ0uMyai=yz;1Q$><# z<3AsvovaMgZj(^<@&QTiLe@#6&>BOSV%Dfvve_;(!*q9$drF{i7LvlRzj}jCumL#<9xK(B4p1Jp@!;bc zbTe7KXm7)#OQNVsAAInJs?W%Q`zpNwH3uwKBv6;t%0vhSGU)KeP*al&V?|^aYfH~t zah;Je0%wXa?`=@yY9oDLEp^AcN|5->07=>x*>dRLL8)S=X2o3@=adm=85l{O1J+@=JUYW8inHM2Dyj;?YUAgG` zgT%WFw|&B-626texpUqM6J!=g{`(hSc3PeH!{6h!rI6Nz@lM;xb=V>|rcY~Sp;~8t zW@o{g0Dfk*xbK0N_fF8il=6fWDJEl<8MQor(t4FE0?{z7iF0R2cBhiP^F!>! zi~02kNf=~OpXi1$F>}36wLC;fb9I!wg06v70R#*qYgcOySCWV;bhlu;N_OX2yYpFB zEt}{7M7pBi;R4ONRgRnytb&(_64$pwaT9X;F_lI?@gj>=qk(qhX$j8hfD%QHl4)fj zmWJ%vq}5v|u-`_#JJ6Z{|K zed70j=oU6z;+cV!gcm!`!Xv7*h$BPD@wkS-Vaaeoq^x2=*Ck&iQc-P=(mYcAjBbN* zN1g#UkIV+{DYN?uL+zsG3L~)@#9*68w5{YtT;lI!oyH*8kd4Dt*w42U(m|Yz8A(3P zTbD7X+kq>Kjb4i%y_UG7;@4!<4Qp4!PR{n6(n$F*P;l5!!4&%D@$nEHhm=)j^6x8@l}Zbin%TJXJ}BVy8`HZbn#fI zhYR9c4RpjuC8SaDy9qirt1-}MTDY0JP{3*i`zN$4=oU<;K$as zU*qS zKaq-L>4^hZ=LF|vgTBjg4Ye_&Yr!Yrxlr)TnoGoPf*0N5V9(PgvRh!!j6SOtzb_lV zvnn%8Bw?Oas7t`f6$=i#vBgtMNn^`njJ@}`yUl4GJ$z(U!|ci{L{`kZkgKErz0(qe z?_ntXS`2O9xom(NW^MZ?kTW&IG(Yb$5Ebe)qh7Fgz?oM{87Ln_Em2w$>3madlm)?XH#ya-$3NhQ^2LB}pz5Ue}fTxgWw|~1l;>#scxjyiU^)@QXXpG!3CpWxIH(GD(U1L+C zVn^R2p?}{INd**zy6rDhi#?X`G}gJsJZz1v^tRu>Xva+j+_D5d{ehT_5soJGUZp6% z+#KqQAz-p{s&~AQE+gYF^cK~?=(vSMFeskf9;4ir&4A642{oJ4Bw2Vm168Af9M?vo zM0qYu{ha*0WcF(-1c%enljD=wQClA01p1)!DVmajg8BS~$pNA&5L;$3IE{qO5+m1e zr!j)|JTJTTz1|fDv5|0Rw$8ai%cG-5{H(J{+1AvH^xQ0~dhoZhXf_I7-x`tV8dc;Y zVkzsFN;3a75H9$&ulO{tbPyg&kUbeDTFN#YFiK?57D7c>#FFA3bxP;NV9QDr0E=$V z-Rr}(%%UYxigi_)1{FJ`M`ulUe_=3>R!3D2XG3%*lX1nZ7ZH9{^rFWMMnP)2oZJ)p zJ-1TlFb*##Q5H>t!2b^x?Q`Q^ctQFE)}-?m1BO7Bwn#47JBF8;_1~f`l zQeT8L=3O5r+8UGR5j1e}ntnMp-MIRZVuBoJWjL|3k%Ab%!SuTs#s-B~>zYeaYL2Za z$pe478QpGZO%b_3brzY&Ea>U$$3&Vw1PAlDbpu<*-@H=BAI=Kp)JaD5MmMQs#j&EW zHUp``hQ>7*6*2cYt>tt_u<>y%wS(s{efh2k=)>y)$H~!;s2L0KZ3ZdrX%dq^)-xMM zmz2kYgO65F<>g3?Ve;JSo++}igyXJ-S&Xi~cW<#wj9)ZPz9wO;v+!4ZHtqWxS;w+; zhF{z4SMq~u_a~xiA3tZlzr8-upMN4;u}q6NdLp)Z9=ACtyh*8f$L%;JQc!V3hYSSF zw0b5PBrBr-HNtQ6J@78b#c3C)**GM@$2-?=b zgPMZG^^S+#@8e9(JCpi7+j&NA4Z4#GM}N|stxRaxmR#q?5=V(JWk|=uQi8|F$W6vJ zl`4kTv1?kkzQ85w0e|R}L?WPZ^H)E7vPkXRA2&1M8wiN@!!s9*W{VCqAC1o{9Xp1Xg zIY|NUC&MZ!c`Ztq3tbw)u5{p>Eb2wjPk=&ipwXr!CCY!($B%KGG+gRD*tU7(^cyb3 z4!efO{TKG`39r0;NKPVj)0Z2XoWjFR;wM{_!FlpT_uAupQJkmYukE)eQXehdnJJaH z?;_k~Pse4XBSprq#Q3l-Bo=wF!@dnEh%PP>8YwND z*P_LM`6bx^2Qm;Qh4QTRmd++mx)&O~_*{>tEZL>3L}bLlEylyv#jP4I*i`s(okyG= z8XGV*nHwN@Pf-j^R4fDzhRUA$4hU0fQ+l69d>`yqiG(Re8#6RGl45H$u|c0I?A)?% z0^`3zfX0tX9w>etC=S~sqoR@19qW{AA4N*bFwMgsUfjf>Kx+&y!8pdwV=!X!Gmp{a zcc0AKZY2~3g60uxiFb}Jce{1W%y%aTAz`aycx$pOs}*nuzYRiI(d24g>*ESVDk^mfBcS<1 zM#7nIK6D%7)juytMui7JLdYt~$t0XCOXX=^|AmiY{z1>&(Dp;Sem`wYL_)jzRydQz@~s>8d7E`RH?VRBoEq#)WT|V^v%|kD%t5| z13=|g?d&XE({i}?@R5`~*9N#6{8TxPJUu{LM^G@ig-~)!kk-l2+V8O_b<*!<7qbVi zzHWwn>$socqpWB~aqwI74*YVwJY4rq zK3N{WSHU||qWX_!vv|04F`j%*QN3GWU+UF`$IDAA98D!!#wBtij~qNIUgg zDC;d-YjrjqB#(9eX=90&NJTHGf+@q+FMxVv#z~a?YqQ5rgMWA2H_P)-7o3f*LcxYI z7#~r*XHI?Ls`yGI_X5u78{a8Jx@%~{P%3udQf5QHmpQ1)s9A_Ghc;7m<7D)DfonzT zWE9o)fjF?p`RSYnqwU&=kH_ z*uGD%qqSUIC1F5Wl1YY{?7L9%aqCHlBlQv?;JKl7oG;?|f!Li+-9N|By6k1&zpq}t z0ANQcMw%YiqxZ;oC5mEKmKrBq;rF}!HLSn#0&&t!@_C;Zu)P&<>R^+lV>(-?b|zkl zxZ53=OU4}mp^2dfGxkb8>>p8#?q2<6W~5q{a8pVSDWu+}^Sx^aJ_H{Y$-(wHeH@~m z3A^eC^+t|kW2c!;qbuSy#Wr4M zJ)?(?5Ooo!#>Q{8GvIgXiJYB`=zM;L3lF?qb5bBl36;c#yMRMc!qE7;?13wBAqf0= zWVnG=5T5wJH!eKFX{D}iI?9R?&+U(&+*W_QQ1=0NZ@r0@oX2JpkB|+b8EWtlQviiP z=2#u75j4$v^QvD#C&=5Vgb3U!~n`$5X4Bj&3v ze|Sx8E~in=f0+VMDJ^M>)x(P==dKKc{Db5QMuo7XDCnH=LSS)!I~n}$@qWixj!IGX zu3#iObdaV-baVK(5aQ9f*QmO|e_hRoPQg!kf>eavUOf9v$LFt4`<%>u$x5&Asb-9C zq-cRo!URV&N20i7)}x)9#P@=Ynx}=37Vbp|ON%{PCk@>eJ8$xri?}z_jcr(TJz34| zZ2PL+YB4A|N%jb=UtVOp6mnEtap`uW8{+myL}(TSG9Q>+jtOv$*5Zqw*Eys@o+O{= zPy4)zwqZFnuigA|4(<`n^QY8xzY+NEx6Rb%jEqCA(7#$@kNsS(HjNOSQ&tgZE>}6y zkQ)+*r z6zKPNKXC1->-hct<8$eWo1NN5$=-Sl&5{`h78|mU*Q4=0We-#^G(! z6dheIf`VQu{y@xzNxcsYD`=6i&|}-@BJ!!pJmz-aRggGp!!X+HbD&ei$AgSf&TX<- zPI9nB3zUhdE9GJq94L>Tpn%RSIO>=+l%cALr#V(3G7P8g4q(j3CA}Fgazyxsy%Lul zBJ~5_J}(5;H)SG6cI;hL2u|-VBZmasOq$EwnI@OVDOj2?DX6{$hcb8@v7T8q=Hd#rvh(thW71H4$0$T4Qk4W?i%b;=RmyUD0 z0u*7P=(UkxU@*8F>cZQOThq1Cx+3PbjIVF)F$>ZUo=B5Uv2gvHkqT7G{!`==)v4v( z39TZPq0p}(9U&a1Qz0SV^n)oRmiW{NYueHnk*{$Cx{h2R7nv_l`{;u>1B9SrEI0HPP4w{n)AM!Ok0t!a*+&3Hc{o54Kr;&8;DMTP3T&%N zk|pFwzIy}hEQuY~;Vy{{CP`Y~Wr_t209@LWn)0BqJVz$EU#F@q$PB%tVNd?lQw}Xu-w`sQB`^V;4Bw1bO$Wk2V(r!ZuyF z-P_-VI0G`z{B_rxXV`01BDJYbVe*73-hcD){2!?JJ^gz2v=sAY?5M=nu6=yga}WMU z#5(Vl8^J+$wnfdbIz!n$Ux1I%bEB=G+&DW*w8k#GC9@PQMKm}jtCXr%R1;(USEnT& zWv@lJHQzGc&w;?t_e0R<_I98L*s};qFVjM76N6&XAg6petq(}s6ZDNme10$)wx*;` zLKeIMk4>Py&6@TR=T}HLa2F2$BKO~%A>Yo?Y+)cR3U+fH9$Z+CbK7jInII! zHLo{rN|js4(~{6K>(P}C_NiuZtkfy5n^=u64OlX5@F=hB3);m#g->u+Cj`k6_McO`V^tIL2b+z*hVVZAyfceP1 zz5q!Vm-F@TpqEgeFeC-T72XqFeYZIwjmu-#V9b} zF2+MoCyl`FF8E4*a4dL;P=&G$^SN#3U?LRG4$5=O>$G2dP!7li)UmB93vsWWL*vBG zphaTnh&*k_(oL!hP`~-C53fI;-2C5MfGfv&x|nd7r}TK9P}(oEfCx=Z(B>(g6RP#M484uQvaZdwX`|8Tt zRP)hG`g>%)w<|#sU z&cxeZtM@e@@oGYkxBLqjpua*Dl06_3M|eM$fT@9)L0adPl z?;3NIfl}r}u&fp%0di5uqd*kU2Ib~wnW9vMMTLb8fDO&}?=|?x?&mG!XN<_Z*uq8Y z1kq&tTF0w~I&bmpCK@}^qY)mldonb?RJ47JMamU{!&iO6&f~Cak?z}~Cz-$(m+fE2 zL*Iq`{;)WaKCpvcrJ{=b*V?EhVueGy^M5)e(+2h;JE4`#!3v=$R`irbvozECPq_q zJBQ*WP|7yXcc~W*WtfncZ|8^vfH}RY65?~#D|ExBe^bLvI0d%1K?CEt3KH9s|CGS- zk>wD46q~7J+tV-T&~B<2imJjGnTHb-Oljr%9CouFf!+>aNd?m1=T1xwE;&mngdc!w znQYqoV|y-<@z@rn60d1Lw8XX0PvbKbjx-Y&l}r}CP9v(4C(0MAh~|Eodm>kPxf`JH zx*+y=T3LY4alHUT)m$~PP&Vtp#t>(OUFwf-HWW*mI81*W6HP_Nh8&YC-vKMHIp?0R za?b?hIzP5d4`(u-UA4CQbzjts-4tL_{tW(d8lnmmdGMoTCm7%R^EXHUam)Rf*mH~L zcrm(!k15S)vVAL}r$yV}Kd#ID`Q~c9eYivO@@U*JedG6d7a^~K%6U>^YUB*pnmW%T zv`#p0aJG{dXJDF2s9`T{&qPt%?i`ZKC1?y|HdTIo_^!D4EaKg9C!gLmePcSMQ~3C) zB#M;htVnba?spht(%v>6g>lTed@OmN1S_g7*Yxq4yZG|3xSJ###l2J}W**kI0wI)P zQDH+6ksKpMcH%tJa=i7FPK&x+k(#q^(q5R_O+b8demh%OBZa!!n$kNj?1#Wt#b)4K zmrF|uHuCrI$-cT2(lG>cF-0m7=lLXrvQSA_RRCRdqAxfF(BfBS)Z%mu#y3s|zWaCc zx`emh-g|vg264cJon{DHg0FTe+Erq4$|SqRZ#Ze$R{VnxawhS$y#}rQ#pq^$-{g}f z;0y5s-F%#3U#b-j?}cvGjP8ACeA>@ATaLUqGWnteWIP?2ylngbhHxbl;G4}z8QeIa zbZt%Xp<``o+V!z%O;2t#+~6Hc&fah}2!vmHCO#%1b*haABsOG8Hp7)-C_!m|o1(~s z@`UH0;C7w#0}M!}}MiC%hciGh8>{yU36 z#WWgNgDo({_Bx)Usm$5lT@iPb^>lakNlh}OEp`-8{gO-JC0kNz z+^CeDJr=VaD`FGClJf?+!HBwV<^7Lh57mQyyG_&Ifu`Mp90K#?H5-kK#-6927mZGh z%Q=-up;%{ZG3%kuALC|E>Uz8PR)Unh$N6Xw@}#Lq8519yg>F^}+#@Yv;+NYu3P=d@ zOFZT+?2v%^k2!z8)Zh&o;_v`;&bx)^R~yvk8Q(1yj*lp#PdV3T%iPr=qpZ~SrH87WlJkbTMlB`HWP zz<8pixYhh^%W1eeVxt8xqJiU^O$Wk3QQ_F1njsmU@{OaXQEqTa`=-2~n_k1Ks4a-c zau6?#&c^3V^BJN4p>p{Y$C;b&Lfyz2b4WBPbL_@`6nJyDd!uqJb78zFqvZo(rIE^S zx#o!W>GZL8h?($(WMR&}Hy%c2_2czqXQn1yxn37O2dvfrj*V;_l9;Vu!syp00(qn{ z;U&E^T!NW=Q%Izo^Y^2>K6}jreLC?=^dq+z6BlFax16{})Q+bTo@L77zN&v7DiC{X z$X#833smEOlKO&3h{xQwJp%$Bmy725kdDU6EQA#0mZQ`q7bs*>3DB{16SX~-mF;E5 zLL*j6J!c%JFVW4Z*OKhBM{0;HE2N_Oy5l zktPo}f+dlM;Bt9Hok9uzAI2GQjvDrAZ6kGfUf&;L}*++xkA+^8|M5oPUu6*sFI;N^>C z`whRFymI_~)gn>K#NXtSDJua~%mKkzFiJRe52cuIm9!3{E#_P5(Prc{1tt|QSk(+< zASolW&odij=wVd=>St$kpjRxDaPNdVo(~hph9u*be!JSk0otc zwA-2jc-A~ti1Lgl(<^`D_?G?DFa^_^^281&vh1%JN1Dor0*H}dQ&U7+u9MA;1LfyQ@;c>B}sPbA}w-Rh4T4X(n`(Ng~pf#@nT`ZCX$FS zu7?UC{Tb68P`Z^qOZZ7XHoN$XqQ^(mV$@1}URJhxo?D&+69ZSCI-xB9p2ah=cYe%O z<7sU{Ii)HoflK2AfN$tr+#|>^t#|OF>bgGspLID76*g(eq3T?xz&d%#O0YfAV_ z+J9zBeP1Tp^bi*hT{cG{t~?pjDe-2TL&Vh>Gh8Y0ZS{4_@BiGn_ng*AAUwk6%S`0d zUlZIeU4R}G@P;{s!#-U`%L>;mb2G@YWRiy%oK#@s36XD%HL!1WZ_kN;I*9B-;#Ep> znk)8hCETKNH+Y)4-DaUd#rH7tgA}w@fe(0=)AXELM~(VK>t+&UpEx(@b9UC7Q8(y>d+Hfqi$-HN%ZTrpbH%QTS}n=Cavi>va4mnxKQ0Kw@`1v(;Vzp- zC}SuU+6w>3Q^<`ds9B&e$%_W+$`Q|r4=?ItbV$`r@?aWVv{kn& zY?g#;E@E)&vg-~vv0aQdF-+rhwSb7gGyW^479$$F0(Z)RVSrRO0g-Wf*g0d6LHJdM z;Rc1TbMLADP({g&IWEYU&zZh<>R0?uaFE{x2KXQhg=q}!R~89l{V%MMOa*Iqfy_6r zG0emMGf*}rTugWbSq0z8DvC{K2z3VgSLIue)lqv!vuYMPU(;{yyH&U=B#QziZMg73 zzvDjDAn{C9|4ilVBoOw9=qXf`{ZlNf%y~eN3q^1@qp)&8jYC{3es1kZ>Tdm%cPmTa zcSjmg^~+aJij`{e2xpB2pu{iRi{28Ki8R}xAKY$lqCu7>m1pa_8tAwdXGB_|k?CQk z_yFO>0a6C*2_K_)l3@W}vpF~5a?c`mtOfTZti<0WO{oV-V%)8!(Ms?y8VzlZQ-n4) z|2|yMi!Am{V>n%`^cAM7?xLVu7u;(eH|@hj@Ltd;KIl}^91u3r?thp2TDvV^>^ zd6xbAZ@YC{pBWTgud=kDdrNFgd0qZZ&2}nD+?q1E2H*Kw<0|;< z=!EHOVDoaO)r8?F+U!OFE<_#>!yKtl{zx6`+Zblm6vh}^QPmKB+B|Rxu#h}3iROyY z7QVl+iR+OYe{S1XJKdu+-;p_KvP8qJ8Gm=lL3n(G8Me)=R{l%J7R4%ipg6-rz;NxN zg<39Az%Yt-Sxkvc{j%q7H5bpWS1&Ltqe3IAK07?6opnLEvGSOuX3oHM%lzOHU7R_z zKX`-gXAW0-QRCuS0+CA9AhBt4igV3U@%#Q))Nl&zX=W}5My#Pv7R>}&kzuYXgRX+i zOv-Opl+>m>$qSUTvz^ULbq`em&#i8&^^Ko+ehFArDf~UC{+~VIt4PRb!73Ww$=1u= zeC%L8Y}}>|+u|<*;!Fc-`08{rz^RU{GTe!66f-`VdH<9C>N%}fV!E1tx`tnl{a%ekG+&hm?fH&j4SDc= zbj{-R-RVBL{I>}dL^N&rL~p*-AVDz+Itd$dIMALd<+42%K>A~#)s6?1>$MxCJQrt2 z^X5CZoFk|j=Ue4zzIgfAv%m8N3YFY6$A3yCtA0ka)-~m*U{Ra%>!*JXh z*x*rc1tHJrFQ(3B1<&FNT3H!wy<^L$ZHHa^e?k%Y)W6)0u-7a$*!p>|4_gVbIz;EoWf9FWL?+&S` z47I&?o~eZV`oSoD1X*^$duY&DlA}fVh)Fr<3xfJIx=hX>C>5r3rrD9SEnXH&(>VNN zEOPsAHD+zQrdJ7NhCn~6&ISQj?=)3|X4>qB7wmOShv_&{EM#7JUPI=y4oFLSS+hTa z0DY05L4vDjg_M2c`kcm-F;vj&CYcPXT(2YXw1Gb=9PiI0hAAh2oN6e_v|T24W)M~Q z%}?k^Q0xc9A|z+Jj1~k1EV%61B}bg{poW#+RYq2?adh~>Qh-Nxu<6>>KP9KMrIzu- z(xRmYdd!i?9m3s9+*X{9kr3Eg0qp!!Oh2POe3MdYmo~@r%7|Q_0M6Y4+)wT<4I&e$ zdg)>-;4GrUi^Rp4m(bln@TD?&pEYezdANiF^`b-qtEhU|vSh;KuI9!ozrds9`jo^} z07w9(Cg%!dsZaAOc&cEE#4QC0uH5B(b0 z3`#UrD#tpCguYFn{)SIG)}HT>@tiLewkf0jFrz6RT% z%jep1y0MTTJRq!Oim{&xW`=t6$`jIqTRx`Sao%z7z?-OVgD3Tn$h?0L$h_7x`znWA z)U%3$>16K+(nX=PZY~FA(d4c^d2hJ3F!Ce$l;T-s{mh7O=(Jt3`anmmXW7*(0ul*v9&aWf5|%unqz}FaR-QR8)>UkQYBx=Y9;1R?X4-MC zHH!*-pWjR43K9!U zbdmo8j`BCtPt|aQkmLS$$eJ==*WlJGNxU$bL5cPq@PR;7;cvDh<*puBEaPfItf()K zp8xSok)xCycF-|8R8Fu;+n8j3sFj_$%4Vp=dz%T%L!Hy4h z&$*c44U6>a5tD!*T5)>WMzLE8>g&`y?;4K~zUFE4=AQG-V=cz6p5jo2LgBu0i zth1g`5UHg@nC6+-$g7N))45GN#CbQ(_@(AG@Fhc}>rwBpmX&~-Ui6$gVxLz059eUE zam;GvQmgHf({cH*wF~c;gRHcFloTj8Ger+O=$7|ciG4-_{|u5k4VF7Fp%rJo1X23k zapzA4Iu#YD2-d%HW9N##3xXl;7F=PxX1sN4htqb!dF}~mZh6N4P=!P7-WU1DkJkz} z#~`RFE*bLP$I^Re_?Y+FbyKj93W@^%m|*c=c?Wx?0@K_Z=pRw#Bl92(+h7nz!i?)~ zYWmU`W_XXdePW~f^|;QV`(EK&r;lQSozD7O-e)M>m-z8$Re%2R!tD)|dm~Us$RV01 z34cJU*!NCptws@{tu#FS0DVc#X0UGnU!Lf0f~ptQkM)=J(u4T@Q889kzft(W2m`3m zK$hF>ykiSIDw;vE>w=wbnn3Jcmb<%WE(HblJt{ZoNMEDtXdOY8%O(FhodbFiJDgta z!hypI1Nxp`hj6V2*6>l-%(nYy`^@V?M_TBQ zel<9-p|gQwP)9Fo_{h}KtL_}gMIe$boings_wIhFT-jlBG+9UL|_d zv>Yv(zRA?bIo{w$WrN%Ph#3FpR~p%)XYKJ(b9$Lc=FDf4DT}zKiPNzWIp>B)7LN}& zi3#QP-aFcw@p=RnO65m=t6nm|?6>55H)*Bzu@Km?dGZdr?$|mAQGM|07q?zdpZmGUB z+?V=`wpGarWIvAJLF|4DK^L5UNJid7&Fek;V0W5}Wgo^*og=iGV-UV8v|bOm3jFsp z@Tg3|SVDAKPb^|DY`ibs9@u?r#!~Z3?5%T1l^kyYAgn2WV|6}+yVjtAojzAdW(8~+{!d6j0uu^(V8A8*a>{aLgM5OW*QRQ4Q&? zE{-(9ib1```aZ`)M({sE&=#DGE@33#(H4T_!ib_HZ5&q0(_!L*gV9{-NcToP;7_H6 zJ~#)PNr3Ue?-(*L@T&U=Ia#50q$tv({Q=>W@4O?}{5)`ncIXevK-xdd2-mw2Z{Kjp zhw&rT4xDLyzZe*1)~Q4xsX{y4<|2l*(Y+_pjx2>Y*e1a?zJ%qAZ!;)4ZhdN(6wX3aP=-d;I{?(;{C9U0Sp6AtQu=|Tu+3!ETJh&k3F$j~E zp=n;e=6|HAp+Mtn6AHV%?fOoTMcw$Crl%qAI{TX55qwy(nZ$#!E2~*l?mN*uMGuf&^5p7Yryc(ZxO%jkD1Yl- z(GvOSz5@PBb92SI-WP>OV>Lw0wNz~6Wk+Z^Rl#=IVT;)t<(;1LkUnn;Av%XG)g{6o zV)DVG^jH%|c|csCk5xSVFvtbfdGg6#8XG3km@RJM=CEs-zQ2xU-3~jaFc zHqtma8-mB_+>hpC#j|@!TCI~ugdy7}RwMAFoy)0yRllwE9=WSWOd^C!Ij_K6kqk6T$RwH}ui{qkt9~;Hql2C%_X*LJ%+Olu_zO$hsPy)AA*P!<>Gq9YcNbmycSJWS-c$=5AgHc6qEj(@`cK1BZ?lZTiPU}k%!wqoA$944wklP z1uYwhr~U(n58X#34-3TVKrkqB!dH*|2{^IuPKtU$b?}g z%m$t>9p^tj!dEeSgYvo$7zK$C(9KxrP5P`@;8xMdsnx*Eb3pLMLxoS>S3y6K(akon zS^JD{zw|0!pwwSPh#D->NbVRtaLBF|S*Ocr(=IaU>Yr*?cb$32XVA_}ntlJ2+FG^Y zuY8geQ)6=Xj^&yxRUJbD9IxKHD2IoPn@l?$hM6SqLdlR2UelBD)N91qkUralTtY7b zod`#!j1BC%-x-buixm=5Z-tY)Nypy=gpO1#d0}_SHZ;ph?Dtt6y@zoB(blgE>=I(b z?!LtlCS|I0kL09!3&5?I!H*)qqAmmwe_Iub1STb6k(e}scjm@paIfrIG(Oc~7I~ui zC^+Nfr6~Lg;(2j8qYOCL`uX#tgx8dkoXVa#SPzb}y8yQnohp# zpBERp#iyoYO@gIGqPBq7(f;sKXp9K$UEcU1b(4|xl0CVb=x`r5?-5gc*f6v~+hBEk zmFYv6?nBI6gzkggN5S}E-HHXeoqfefYXA@TQx;;dIegP^>|9dk-xs)vh^n}*mqNc% zF`h%uh@s_^*mB-MYHSS$M_x>S@*eG!kEGub<=nYzZJL*%N`*v_yqi{extYNsxCLu`MgnKug_Xa?P;o}!2YNW9rQjh2 z{1uYPtX?VYj1bZKezdh7sEy-7a@VGvgR#Ek!btM$x(EL0z^B=Xzjj_KnZ2z{!API) zJEYLs-C%6fu(N7{ST*kMe!Z+UVR79U7$}MT^@jQ*Y{xP}!^O3oa-_W&svdD_-EO73 zdPMiHb_6d!n)4q!i_sv)r9awYHeKLnUwuP<3ctmNIYg5a6@N+E#~3Ffd7<&2F$$m= z&lc*Txjk2E2wMHpJ=^82nlzQ5CatfGBKt$YY`yQ$Pv_PGG%y%=#NaN>;fM}co~i%M z1u%<-y-t(Lkh@0Zzcj*o(>LvXmKpj+CyIq?*o~UM?}fK+N4`r|#g6)icTISlEtfv$ zQ%(qowBEBh-7P09s)Vr*M?-Lkhniv#(qB7&u^7L7sYm*KbkT90_2k_%*g4$2h^R=X zo9TGeKWMXhP`S{5pb)|JHyBl1l%Mz`0y^|16aG6ZNnG@WWOx8x*psU8vSaV3^!w!o z=r|2wAx@58WgkuT!S#dG0yW%pC`1nbX&*zCnkin9!^5r*?m zzorHDBKQ=XjR}tmXi9MD4Lb)}D4GIk#;HkyhW%nH1S^S3oe*3o+CDz#0Rb1?tEbjZ z|Nl|-7GO=i;omsjF}fQh1tdpEj24hi=|)l-iP0$~9nuIYf}ltJ!5q#F?i!ZsM& zJHNl*d%gevu3bCl+RkuhocH-( zFcuG`8AZy1_~iX_=0CxhU6Sufs(gj8Z<3!j4L`&L>O&9`lo+aT_5tb{M0Udj z1x6&ZAaRg$=gb`F!9ft#^j>oLjIt61Yt#r8g;*#M-BmOvC3)l)T~n{nQ=gmTTB$+^ zB(=er6%!SGdp8Urv8+t35F?(qwy{|ccqN2-w;hT=2?DTh=(OhdDbAKhdYX!JLL^N& z!@7pr<(WJW+8L0K<02taXpuE+@Zz~&GZ1HrEzEX$!7WMn8r+#19_RDvA^6{P{HAN_ z;?2WM3lP|VmqJ2_osk^v&_D?L?>a#JnbH1^0;qHj+cF~bVf44FWCFc`%52~#0*YsT zExkL1A#;#VpZtk{*sQbmT>eZce~J#j+qSp(oK)7ZJTc7kL%QU0;97@aJ86N`IZ(_S zl^MPjhm<7I6Nv7|NP2icE~EgQx6fgZ)rW6`CyIH62&3K|C=VvN`xijE+UKrHnw-gx z_K=vc`Zf^f!!u965&M5PG$M5p_kSHTNAbbiRiC;vkRM{UmTl9|z}LNLx0uBA zolq@$T#Oz&dX*|J9(K91X>Z8dFgOB!)WrxLsj!|`;gl(tq~N6gMDIq1M<8)s@zLet z_okI$aJEp-4ny*xy`?3Pq=(iIOEa8u<{gis9b-vwshEy1?~-4wN_Dg|>H5nQ`@kJA zYS48fi-Gfifu8>9E_r_+=qU%vYHPfd0xFyu|6>vMsQ+2w=$>Zt?G0^*Ye80Q1--rf z?ob%^zWml{zezuW?Scb5#DxkzaNtWc>>1y|l13e-fg6$h7a-Nw9NaI5xa{)f%q@(~ z)dmtA*es=|lPk^N)jf%+Nc;HAE%l<%brTb69hVlybB(>g5LP%dp?3e@abp zO(%v9fzR-A#z6O;@(NWSv+?>4Qz1r-XT)IhNepJ?4VqS7{#bz-8I&2`? zK-IwFPw*U@m6(gf;Q^j72nrMDC~pEuUX5~*Jk1Xw`9NHTRBk_*vnYqKgvkL=iE`01 zf(h7*S0)Y*SyLTmRZfuGjVdm^8ed<(Bs~uxnN>Yl6lNr;=o^lRk?fc3Pqd?|E<`WM zMSt8y`Y&DV`r-m<2OAT4X~aM&9Jx~QZX_Q%4Y?3D{^4DGPE-Ped z67euvZ=~P*D6w)ewW1^(tC3z*(cpmCJvgF20yNXJzXWdd{fIlb%xjj%W6+8PoIu zxsoYFRs%}3-CaCY?%Z#?Ix5^yTHuA7^n>SQkd(jo!u|)vqSW|QOd07C3kQLN9LyXM zSxy0`lZ;CbKeoaR!&LrCqaxIaEP50QP$xH_;V!s?YNKq=@MIE9jSEDJ?DZKxCWT_p zfM@fr(07;vYQPby5B-60ET?@RlAX8xk1Q%bvXyVj9Rb5y$QcwSXCVH3|3EH9R>==9 z6Vf!>EG*73*ut2J=a6w23cq1(4tL}NoX0v2lVW`&EB6{K860VnO>-u-BJg}0c}pF- zV==g_kz$8hUP4@p0(LV_i_6g3dv_&*i?5VFa@zqO;e03tzwvyz@U|H4bBcJ~8$6lo z)x!`LDU3RQcXc`w>7C{pteSH58|S@Um=Q7pYf+>@MYn1VzinPWilvzv_0$_7G6HRqS2$X&jrI8LV%fKk$&9R3!Sb*@W^f#=-{aT5jRif@BgO)2~|PyM+c~m4BFtyPWNX>g36jv zS%VdF9g9hR?OS{tzo!48Iq3#g<1hKCb53zgztvO!p;v}9=c@ohLrPAgZOfxxp6d0B z*02`rSVfJ8o zJiB+k863NrSGx`)>B`R+BN~nf(7OzO?_!(T0jRcV=$Ap+#_i7W08tYwDp!5-*H@v9 zs*+kiUvw-|S#B2v_E=~1J(TKErR~N?PhGw{+5k><%U?W9^qsYzV-+*=uo|*+NHb}AutYjYQmX)_{28EO@u>9e@-3?QB@Dd4u*U{<3Dgk`Y~?Yllz}Lv^l0^ zePH{yIzC|dlM6=FgY*} zzlQDa#IFK4euuCF9ob6Z2=fEF&mu<>PFwy@eGhsTr& zhELRT>MKpgk{A-MoMH|HuV+y;!Wt>f8=osvV{5oNc5{?3oi)EPvB}U!C!>h&Nf+Buo2jiN33&DugVI~rhKHty4!uwPu%z= zl4!DSk(8!5{^ZVL^p4(n5Kq(zjD)?CIy=oL4Pw+lIgE z&0dH14Todb5oHJlxT%}Bki-sF*nI1b5!fit!vBN@pK9DI8uwpr_6IA&viGJL@ zw`q>46J*HluwE+7-o5!$lb6vva>cL834##D1Zt8~hGwcnV-*&fJIa2+1@DaJ4L zQnlZZ9pHLS$b)*^-8!R%{uB3vhlj%bc{o zK#XPYnA*d?RgC;@NI`k?_|#jv-w{$Os{drA9gDTJPb{+cOV##g`)422^ zuW~Mu!o{R)Y^ch@Vjax}B>ONO5IvVXviM#;3+4~dJr_x3G*!4C~sy={l5@K=I zzh!M&5or{W2Ra)MXVpzyS!@4^G9oKWtR+e(x)e08WhA?-`9RI64UoWhrrWv>+m(F- zLe;yg^=(W5-=vh8)Cm&=XFh%4^l=#=uku_(QV#5bE6Oy`(G<$gxh27r_MBf_JFbV{ zWKaodwM*3g#z5{&#H%W0Hi`ArMLkvfeHxwG9;>@VPQi7KH1XCeKJ7@$q&93eo`fb{ zQV(jt>jlj=CdR=YbYaGi={Z)niT$oos+D-Cfh3=_`IL@;`-SThVbdaOvQun8`NjD} zrxx(~*5IV}ip!LdEg$Pe%p*Z)RsRq_OIFm*Ux#uX7W5D+gqlOhv_obd4!1Y2{*=X- zT{8yvi$sc@e!D||zoFz>f^&zsV&W9h9fPEC+mAUh?#Plm9hNGng7SOa^ZShJH~Oa3 z>~ZTCa~ebeLttAXfgV6@GGvj$Y^j%WDUq;Vo1lbv8GRLcQVfApYt=WhL>681MpdVg ztrMB>;oKKku~Y>#ej`iJ0#Ap$2jcv8>Zzumm~1c#9gb!~sGS)4CTq4Mbhk!k32_=r zdDTx+aw~X@2NJGLY~b0zbuq7W!<)(VXWkw1wy8Wl9Al{iRojIHgz?;b9NV{#y6L&2 z>Y-A4h_t4Jd;hv{x9n^XoQfR*IzIgJ?MZ$C@F&r+&2*g=*GHxoa$pa#_e{YIM`TIb z35x_$8RH}B2+5hh9r5jM++UN?Bc>B%tu~Y$HnNMKTHgyYTe_8PfrRJkCf@@~wZvrUQQ?EoqA6a+wiG9?2JLVLvCU36n)yldMMl;{g)&w%zo?cFFKibj z+I_tVTO)P;=4=SHX!wNoK>o=RdeN~eTy>#tsg(siU-u`ZB!zM@urH}SA_!CMcYxwD z9^E?(N2s`Dj-I0$M0>~50n|hmVJfsBb@rr|a&VOh&fl{>&eKt_s3K5I5e^{ptF%Fj zZM<`jUP{NBB}!F!94AiATfz#N$)h3YyAM2HEUviY!G2!iF0IIV+e1n`-!?yM5r60& z2_GR39MoInr*ccR2V??)i`dHvJUIb<!AW>2+o_mdK3JvV#*dn!jDa%g%wngIJRd%YZK8gRldFbxpH;8TX#=O zHqp84D8tISINd1F04*1uKj+EV=0Vg~dN-%dgMzC&H{unf<*ce3re5Q_ie^bJb?IG0OP}uQp zV8|G9KG}y{}bgQBGVY#}x|j`Bd_Mu?y;yp-9Hh*X ztVmJPIdgDJw#xe^#u5g~?qMci*&uYQIp=2inY_1tYDZLTKT|lJ4Dt|afa3+@8=ulV zeoOQan;2hGHJWgG_!KGgRcTW_36qZc0@S@5HRLDmA7~qfpyHsHAOnB+XcIC|e+1+r z;!-b`Ww9e|q15oi4UCPoCh{r<)NT+hD!x)1DP(&?%*o53jAu+|{>ET~IFKgm?lAkKAcbb4F1 zfs7;~DfY^VPd|URx??=smHTSxlN;Hb7B&N*z$Aa^Jx@BB=bB>)#V*<5U<_UEQK>wJ zvzBaV^%?s^$%%#+;zW;AHpnEi5bhPL>c!|OPi_Zg}8L&r3QWE63&3U6?&tz z3t=VrqE{^$j>a`DBiEMxv1r{T8LKU;;q_jr7gtI3Fku!_SsgXH`6C2SZSL45K2GCk zTuzvgB+wJTS0*doPJ=Z_b6&ZiQdkhQceB3GDRzE(r(2=)Ep#pV?riZw>?TSCmE!Mp z{CVzI{lUZYxw}m;q#FGvkmDaf1<{<}KB~`#STJ_f1a3ag8sP}9Oh%WpUHV;y{LeT0 z75NA~w3-=XLd54$=eu7?IFuFZrC-;BLyj|Hzqan|{z3rw4$gX$6=(S1mRoxz{#;s) zr0ojcm*Huf^`1}78^l8rV!@Z0pbFgTFnh2@DOk*B8NRr=g3`G|PAbMi3sk5wsjSiL zmUA38h)#Ia{o%KB#|j9YBRjrD=5nt@i9G{H+&V7TB`79gBSxA^o3}_i+fuv*Jw43% z=rQDQO`|UA%K0OQ!b%uD;@w(JxHRb5_DGYzPAoCBovch}yK`0^e8}<+rA`}$I()V> z74r7NNjK~(p9_X@&zJ<^^ZzPb=0iN!p77nL<9E+?@E6e_Jkk1jJv=0i-mR$xT1y%v z951QA4Z_h+Y%@IqRvNB6(_SMilSjWnJvq1#c> z#+N7259I^DR{bnoJ4-5IIl#mLGXAjLIpY?cYayU>u@qFG>Xr~e3 z40*1whX#Edg`|E&K6lv*GAJpP1AhE ztbqk`WY^Xr6OjT8LotDmkqaia_i4;IylSPkI>uVEM4buwQ?n_+1J4h{SF27@u81j|7zP+f!IeBv^2u8Y%GM)bqTXTo~I%;XCf!wN^ROV9uuQBYut zd9NQTQG60r|J&EkQZaH<^Yswp%Xo*8w4AY>tnnKAmv{5Xf7odJTh@C;J61L6))}gm zbinZiom3v^dY{kr zT7l=19eZg`A+_IDoi7joCHW?FXcHWN4%hn08?gPl6 zsJkZG(Hvr3KQyLOGz7}9ah!1kplFE%57H;7{{*|Fj;f)-tECP5ZOh--Euj$v}dMP)W|gqbfhVX09ZX-IBv~H_{2) z+BUWf%om&g_0wwsdtm9kx-!a*#7l5m1C+;7taI?|@al-o4ac7SJ7dRUqSS<%y3`y# z)=ED^FjcG8zQgcOgLD1!o~B!9zqXTA=g^0A{E&1s7Tkg#4~P+woqu4v5O>K zW?s$HPpBa6BaPxc@|TIr?|}GiGS7FuHqtW%Ak9&RBFV<`FHT zoKF!c7C}MFxP%c)xc%J-<;GS1Gv!+qF515|RGNGC%5HM9!pTazd!^RNllo;~sPAU*h>)5vbOT^q9FZ3E+u`GiBU z0ol2seK)1O;>$z#?PpV;){Xl7AKdHoJbi%;m)v^TKV|UC1^wd*_m?u|Gb2t`;+}|Z zMn{>rrzAOW;}l|)RJ|>P+9$();a#E8wcK)0 z&_~A&#&;V2oy9L!ttWP{3a|J-=6%^GGFzYqFMxIOb_tl5pb|zO+t~y`>-yK^n_Wdp zWM#7mS(f}hnA>P-+yHz26dOdk34lM*(;Om?*jOrJeb00 z17FyznZcLB{B|}rJ@e;whK}+rzl3gihm%|R)ed3c5KK{~P;@%R*+>;pR9gs+rLrMu8`*w=1@LBr~{|4sYM4fz}P2huaIn;1#h+@ra;a2gg zG?<8iYFW64Wx+?3Njqpr^r>g)UqH{EfK8}nQH5(S?O_Pg%crA*grQ`zP8tGAH<|r7 zSo&w}pZgPlwTW*-XhX>=k)#IRzP(`BC2FdOwI~PpmL(V363Whz${xDPMB!a z147b<#%7u1QI<%fY=w1~=qJ-ZD)YmJ&>)%;ACEdEvEkJpdkoM~ScTu182$4H9D&eB zs0L1z6AvawY4IRKHyqbKqj3ev74HcBrh@L z9>6#03yWyGedd2df`#GsoSB5<_f%lDJQGV%-35A#KsZ7XehTCoD^HLsq^Pr>KT7)+ zO?Ce-7r@yO0B&|v67`m*oLt}CTPNA2=BT9Rq@ZU0#bJ1!>qjUC_B!|sl^ZkmiEs{m zHp>szT)q88G zE62^3+S8M(u8LaQs46A(yYPMp?icy z$)tsS!kjXp!DB*QgQ?BC+0_sn)|(m-q2Ey-780?uv%?U8D#TJI>!GkW3#9jBT>k~Hk4HcCyF zEt7s{#R95LZ5_MMGJ4_7IuV$9`-IkN^15GG?Zen^jB{+_k3UTax-haZc8^~{K$0EH zS9GnssyI`x9(l0pNE$WL9emEC*aCeJr69u9?fJPs+WbbxE}!?$j7kqV+Ng)9F6=yS z3Ng2;pUlHB=Jc^r2gHo2o2I>^EoC%J;_}Ymh|&6*&o~Ng5P7C|X{)o7i8XdXXObHk z{pNhTnY^R|Ge&_7bQg~~D}uUEPB{vW_*t9~iJZ!g#1!Ni8PUD#xBoIAA}ZQMw)4@S z@2eyp|3fUBQ)GswS`_tU==^!qYn*XSmPq4SJ5*g=U25PtA)3xrE?Hf9po#%Q{_0)v zqN)}rgVivrLoDGsX`BlB7r@yNvda#}gcoU8-P;wza*Vv1d2;-69E4CzXUEqsF3fR; z{|=E-#=<0JH6*Ycd+Dp=+QUeP6mSb~EebOCs21QS=*m+J=g?YXm8VK&^@=l4A(iuxj~`NZ|nm2v^u1t=02zFQjq?{|xx zDNd9a7-7&oMu{L{x`&$(&XvbAhz{OC!0t#ssvWa1svSlmfqhU>(0QyU~q_}@>jTMqDI?n z5YSP1fbrPOH}Ax?4ng&W=HTgsZo8h>zns0ZSo$Sc;vvsFIWf zS@twHJx+t_NPe2xk$GcXkN!m`YXPmY-J})&soc3x!yo>I$hpJaE1V6FtUy$$KBrG! zdhz@#E;C&hhbDSwBT;$67RQ^3Lxtk^OR?t!8|g6rl}t3AU05g9m&q$N^$w_^iykM% zH3HzI@-cMu-AFXW9&+zK3tFv7-tkU~0o23zZAw|3-+DHSIDzegQr;#zOE^6}ea3UE zS)BD|4NDn=G|$6!*iL^4yxipXi8+@=bM8hotH-3-|5;4}KU=7Jm6K~&ppo25&v7G< z9{d-r=@6b{vthJ5@5V;wPr4*#ON6dotfjA0!q(~(fTuKeH>i&l;`61ffz9wKkRby0 zqLMXwUW`)fJdzcL{Jk%>!J)Jo_8av%f=B7^B?CK0#E3mMvmdJG_VAbpeRLcn8ol68 z9+X%o*5e+T_co!|I7R^U zh@>&u?&z&VA>e&#DQA&0poy?+lf6(6*Zd<#~t==qZf%j@BE;h|J}N34M} z{vwSM9}N3^UL`}CtcGk2qy&E;_F}4aJ49lp$=A_wTPixSi=b@S;F1v--FcRIkHFt9 zDBYI+>`+aPl8O&uDDTEfw@>DWd<>$7Ng(lGZzU$v+eL;k`#C5lH~+PAc>5Pt3dK79AN$QSuPDe61r`xco&Nl}`Hk4M%;v>`4WF`Q(}z=O8JM z{ppa{``fnRiDSz!84|fOQ$1E^T&`3#<3guzuXNcuR!&X=JE7qU8!H>c=v;U)(n-lp z5b*w_WjJ+ouufp_waLT|BMs3TU~TD@7vYk%t?k4}GLr)xhcEP`3~jZ=5(UTY(f$S- zG&7^-7o|@Dy)wxGYT^#;-Sf{Vs($#82>ms2XF6SjK$e9PTu`dd8q8*yaAo!q(Iuk_ zmXje2Bjnw1=ZG{oCEg7WAt;u7*YAVRs7Z8y0;-zU?L5M$ZRZ42Ex9xe?1Wr<36f$C znEUpc;vwjjG@-hj>V8{XuT0O&50A-qI6}MM%3<$CLk)hOR&l&U+^k(RgT!wrGGvwC zZA5g;9(>vtMRmT!?;z`%{>HG;9?=|s5C;qUM71&x(cAK(@TKN_63$72i4AkM4&ri8 z*xULaH@!BKDMwrVGQACWEIWinnZmugTLqR-;&R&u|F}M3*%yBm{D&HBm*`xE#NW8M zhMj0irwJQiQ)Jq~qLK^T(9n~PPVAG4=;pq^3C)o|r@)?ceF&VMtB>9PSS|qMd-Pct z50VdV1{J;7Pe#p7`$5hkwhVtAI$HV;JSVj4!2{nOUW``^IB)8q5sA7w+2mNcY{p4Aw5$+j4j+h6C1R`Fg*k}NVmO}?0!W;cHZW0 zLGZ}jClSJq)Du?<6kN+Xe^3E>dqo`&lF01lK-&Qz{o#y6m15FuuW^I1=0c^ypa?UGNjz_T9c{! zGUlidw*4>t0j*|ppDGwZ-gN(WaD^oIxrLmvx*V^AaNi52Nx|5lXWr|RlG&meviDkv>6kuEkY5W7hBcj)DZc>h z-W^=(jmeHh<%)oPBxUCHH*zaEqqamt@q+rcqxzUc7Y3`&3>e0aK}5j56vUs2wJZ`GNP7!fi(wp}%Ke zbAchb34QAM^yy+OObrR>Y?m`s=spp)9sWFsc%T@_ZrzCmT_p7nVG^}@GXAXX6$3{f zS!C3U7cD;u7kTZRM3`agkd&-y&a&wH3C@ogLQmo@FjG5c32!?V`dOC!Qf({QC^7DCRV&k?-Y+G7V zyFv=~pAKH1sTZyiNfSfMi7;lJ)S*69c$b*vA9iFCr)~m1XbUEleDCM z`m6-g~XP=YQCGAe!@D)mK| z8NCM-wf9t93@bCf+=TzC;FE*R38B)^{g;P69qzO!1tp9CJxO7d!>j3UGp2L?X62$VSBsoWjVK@XzHs(dh!tM3OB&f2HAQIF?21)F9!LviCiXO_Pd=+V;ws5 zm>L>%Wrql`;t*?>-$ecjY1sDp>hEqdgO3j_r@*96tkO8;GT^aHa4Zjry`nVUNKjPg z309!yVirR^<|DHN(;+z13||e>R9&cC1Tzc(wFA@kWot7K91^+*?V%hDR6pOCZHX(O z`Z!3a^PdFL{}5QhFIp#ciW^tg##P>biO^?oaX0bhq-S9GoS2w+1-HS|h>SdRde+e> zUOL!GZ{t0*Zx(hVVdH!EEg?+piu*!CCV-qw>UrRBSbRi&1|wq7QYOp*k0lA@(drhd z-sk;!Z^Vt;)4?SvZ!Ny4bXeJ_H~ajKt_N%Tf*mU#iA|I$NL{y! zogu0owjAYVU4}0cNgvIBx2rWq$n7;pgN9#9OtMoF6(V{lty-kYYXJOuqGTN|SO_;M zyAFfYxQunmeH#EKO^=Vt<=366NYd>7-J z59dr{B^xpPP$@cx{YaJZS(v=dgcw(m3ZZqO!T^R|_KFfB9##Xyvwnjo`cai}$htgm zds?Wh`}YUmJ!?ZkKV)?J_Aue)86*`(0ZfC$oWS$ZPf<+#6jwvbY&nP4PLQf9xxh#} z^Aew89f{0fu@|{ew|fapB3v;N$RCjDWbEQSyv^XTlbF6*7AOt&GnOc7R(^7p&p&K) zf;Y=#MUK<@blH+-Vx6>}I79U^Ds4Dd(mO1E+Gn7-E>sK5^SB!&uqtejf;k$<^M*6# z>9Pa&cH;Mj)of{2yN;AgnA2Ob686crrJ7(H@M58B?;F6hl5Z6ywyu0K+cuH*KSz`z`jurUQ%EetlAtz4duj0KD@=eHEM8YQW6x!XD@X7$ zHUr?d_W54)m4mYk9)W^(fKaZSeXp*KA+7MqJ#=uf#igqEAjp8Dv+HIz+5G6Iabym&ZZF23_|W@u#468Wzn}%q zYEs}1q+@+ZrVRISuRFDO7ahX5TV~nrhlpNn;~$2xcZk=*vFs)kGAP*u-n$JW?(lmU z{cp^~Vo#d`87xFgwYuIPDjcKdHj2k4jBH`3XI>V~pT&N{$iKt_K%n_nOv%&-6dU^V zEFxFP9RsKMTt>UHmEjlaVFRr+V4$_8WOy?YY8O1*7C+DZ zwLXmk2f-SCl;pT+*5Ds)9)3Uh*wuHq(Ix#p;-oB4$MZcmU+c~#cl7$z5sz#tEVp}B zs8*_WLQcVW=py3kEbp?1mM=3V+@$5fj|k0?%Cb)hhsBu*XA{1D#xA`07T<{{CBBAU zvI?sQkR7ZAKIlVxzmf72(t8h6AF1@V9^{#;mo1)JpKPz-?$h`~X}X#0Rk?;IFY3C4gWmEJ7M}Rp>}f2`GT37kgHxwy(@LJ{TO_bZ-6r-a8l)r97!$ zbczm&q^OJ|xfA@7UgwUU>8rEPr@ue)eUyW2QRkq&5~gpcuf2Yykr>S(%<=TBJ$38z z->ygZUp>!*DIfj}hP|N~Q2riJM$<*+ZsnS9wq*I&O$@|ji)rUE9Fo!7vD0t^`3=T1 zChtU8N_Q@sl`&&4Q2vcQ;*w21W_roC7QWVSmgeRQ@K7=&H;n2`-oZ7SgDeF$?}KR7 zC-yc20~W|L^M&P)ixA6hs5auK^xjvmbOSZBB4yf(dYfXK4kmj}HO{ZAgUIRxa0agf z>b86c8wZDGAD7-tz}~8PFD+|sik;wcAL22IlEi%{HKhOT|JZ5P{^?3bN9(y8m#483 z3HM<_^5hxD*+##REN8H96}f ztX0UsSU=y6M;GeOJa`}0!4fX}R4%tykr3C*OdcP_m4$T2;!iM-TloNC9n;t8&jm!V z!^>U?g{JQ0vX$Nap%s4g5L9coM{sF=7|jYFk$F`J7X7V=ZWOjJ({T?_ zQjx={Zfu#Lv)4o3%nI&v9B&`-8ugQ)!N{JR& z>i9fk@PqD`EUC_%mJ%&Dz%=`E>czo{a!Pdx8O?`+dSCiBGXM!lKuXcx0`F;s`Y6?r z`>)+&>vmsTuH^SEr{!+FHcygVDMwad;y11Y zq^U`9HXojDYrXHkxGLciHVC5pmh)A64-v4myP7w$`Ai19qpdzJ$3cy_Aqt?`r0twQ zdw%ezg_4Hr*VmFD2X3*#m694$sD4&__2$)*e>l_6+y2+XzR!Mkn8Tb8DR~2tL|#Z< zMV*LW?!h829|wR%#ON__AcTHBPufRV>opCbO-${M+<#cFcck@UXC2l;yR9Gz{u@$8 z10JwXtLolTOpW4Gqexs(qGa{o>R&0N%+A6ZSKuO{+1w$%_b^p-WY4;)ava9HpGYwJ6Gc&hx%`omvNuJ>RMSl5fD~fK|Z`^j% z;EQ*_@>$|fZ%>t(v2F(QapA_eoN2KA$`bF_tE{n`ibCFsGE)WxGG4g~qT81R-YFq> zHha_@#x(zph-g)z?IvFKkriOdU|pnku(j|>^iFeJBb^3U7$%e?X8$Un?z)>B(5af? z`bVk#hjNSs>fY^99la2bp$U1kb6DS=w$$Qae@tcQ-ONtt(gx5xI(z*W8l==iUz27tt97whr zem}=AfJ5F{JL#Ey@1jA5`Gm=u0!gCzj-dl*^ZEhvAL)WEq+nAitgyRxid*KF+uk~oOS z?^7VnO zUuq=S@CL@Lw>__VYwef_!4oHPidmU09dp%PjA&Mo21?U87r~w@NvjzLP!NvE7dsi{ zJ%6-*SA>K&cw<_#=N*;&-v1^ZbV2v+kyMhgR3swV^YFV!fFOP6A=2x+d~uTF&tYaQ zuo3Oq_R=Z^&)GIcs4og4#CaYeBTf2m07nc4{9WBbVBf=H6$>pp9M^V zZVuMuvy0XzzPF2F(Ljnm(iG*M**Ux~U{g!z8T_aaBaFvmK26cwtS3M>*BiSqMHceFc~eGTd?P zwG-MoK&b&k7E2+wnyjcys=m5;wHY zrm=VYVNUp#d(FYxo}wpxc8~KLuzP=uzxd(vsTJ{}iPh|BmC?AM2eN|ca8=nDq|nD4 z72mi5sqK7@%+zyQ_Rz*F3w*M23c}Uuem_Z>F#<`Kxqc3nDy#fedSZXQAHV{s)vHNL zKh&=m7b9$^$N}Q#;9rbzwJzs36%uHl5iyLAPj)#7)jRwTaH$?nt%`H|9VXWvwW0x? z!SoLUWOdA(nm;NkKc$568=KzmB5U<&_4h_5UJ@pnk}8x&h@vnvI(Qy1_Xx)C{8d)w z!XUK)9w53A*0ADg^aXqGbvdatr_K4EOyXd6c(;?8JyY*hYzBAxUVKnMTY6PcHaCBQ z$Q!-33q0+OcgO6BbaJDmC~W>aBkj)hgh5a$!kDGJn1xxb?cU({rO`<|Q=5$}Lzpqu zbbh z%woqjsqmKRB93(SA2?Xiky2*@UkBIns^ZLoi(?@&_k+ z^S;`b)xN0()a=zu6`S@~%Fajmm0nh>jOv>9HRu9TQL~B5~}~F5Arpw%u?D~ z)+ZyP1mAlDIwvByx+=vx=NJltuynY;p640|p&%*iha2zK4lA4wU}Jt@HHe-;MsjJW zBCP_4qH1GsJnfsWRv&;sS%=jKVM@;>A|F&)`uc7Fc;(9USL(O+W zw9ptDRRam369li&Y1dWN&8VH>f%|dgLiv~4xN_ryNNBN@I85Q&xg62S%q)E1)1{Ab zJ-9g8)v?W!l*p;(UybE+Ayl15>3Rn)4^6Blpo#dZ9Ka`{!u+fWl?0(tk?Tn3@IEkW zq}W{h`7KjKDA{w?+D;~8_@>PAUn z`D{P*kLfic9v5hd#eOsw~Ho$-4@V_6|Hw$YU*i=F7FdourJ>?Si z(a$uNZUl2L0Iy$t@{X(m^r_(Kn*qu-s_SVab9v{*Np%`xa5FVz781D;^J*jmCmLT^ zf2MDWiz9`!<@+4y22B`$`=}Q1k%6)FDUA*a5pHk6zEtRW0eGO+76&sahljv%{DruT z6q&PHWS)!^?J8hyZQk$`mo4Ith{~uG^e(dKYldfW2f~$(ZEoa(Dd9faRDTGncuPpA zUH5&_+?>uAwG+nvPLJ8lXg-L8JU^dR=_OvpT=E}DL)T&z&X^0Em$$dsuJ}XeWA&bS z2>1QXXTzIenaGHAI17IaB$^RbK#jUp1W(Cb$}(Jom+>w$xTC+O_yNmH*$5$mb93bx z=*iD>E#9jVSU-P0JN|u!Z+37wqI)4hac94oz6-R>jCW%EJG@qGYCpHW8o1hdDqUdT z8F$$Jcuc`BjNhWEJ16j!1W=NLv*v}&QV3Ob;!6H^Y zL^{UsV*?JyKkMOG!wOy6e{VPy;)*5RW9$zu7M#P%lbuT#U#nYy$70;0uFNJ+?bjLACzyW{KCRT&?&IX#mKS}BskXNee?YoL zjGdWL8_O+N^fq;ew2}#%wl%CtpA*n8O;hiAPoQ6b)qQ9G;-2^U8uQNf{# z5XU@Z7!_ojdUw-)5#3(FkGc;>ojLD;->0Bg@V9ouL*B-k{9i7B9a03@>COlaq-#yq zoKhZ=11L|)`HRYsy}?aPEqwbN9>g|NU*j&FFuo6WpSF>2^jxde%XN`RZSrJ{#ybOuydu3nm_476HmY>iu zSZ(gP6_*XqoNP?@XuqG(37E%g%}aC34@c%GAL1du?nAMaqFfxy$x*<-K>~@vdPi0HpG+X+<%v##=(E|Jq2yv2R|(t4wu?U&tKJJm z-ADEOAD+HCs;w{B8YxyNR@{O^@!}qe6sM&?DaDIB6xZPH6t^O!xVxn|6o=x)i)(O* zefhn&-uGYD%FRvYSogjpx0No?%Qe7b;o^18mvpE_KLj_it;R8?y<@(#+3cO1cY+sh5r2Zd=6M8GKTk znUs`@v;VG%u8w!b+=u)@B=~iRziSDm9}Q-=w&b_ugduaDe^mC~j` zG5P@0aq^2mCJGaHL>n!*TC8s4hA_G=VB2K&lVR9_FF{#q-r=eFSg3?;Wu)EO4IzQ+ zJ>}GUbmJ85KWNsXs$8#wnV%to6ZXYY^Z<=E=7z86*7{8i5*Tb5bI+91}bev$B{ruDtn@%fkP>J2zJq1LpfCV&e#?|rP#>9-s(3NbG zo!!X+`5`XfZjd?VPe_e`9r}EN zL8*$0>VF*vg*MweLpL6t*K0O~dn-0=r16TMI$>%Vb=^5jxkQj6@1C>;ePg9B0%IUq zggB&Di%f6ta9eD&OozwR3oEs3MrcMEBpFd!9^TJX``MotpORNTos5QkVYjZTSY$&B zRGid%&QtVT?e27AsN0~4N`tW8eM!s2-$@L;a2OSx+8xh%Boi6T9}~a>g}esxqPg20 z2d%S9^I^qMyCme)%8wJ^_Q{ zp<;2xF$VxL`pxd#mh0^qG0L|g_(#v$mtk%H^9IlT$x-av64K2ccPSk{hcEN~i^az^ z-A^Ul#q)LG{3OuXlFMy$wC&F0eN3WDPvEGXmc0PE*7gN# z@?xPt=cQZB2I4@D2trm_l*R9o~_wZ$%G$%}V{ zt2_A`cI7{7n&NzgY%Xo?gSO)(3VQ$XKRMBANX5lt^bdGCVFUq-esf80@8nREp$bvO z#S_y_O*G$HzRWV96((1@E`l zJN~dHi~(}DLt=`DzF-q|V6XQsxkCvd6bm1F`jGu;RUeFYTK8AdfrkXn~{`o_a3VH zLns<%ilJ~{#3g93_O_jY4Yn^03d#l!g4?3OZr@=3IB78nCI9LG`wuSEA;>QzpmE>* zrM*YmsT5N&0&rEd3mIf7K6O)A9%&;pEp#;k^cO{(ADEOimXQ|yk^=!(bZNFFJ(^p! zbqx9(y1YnnpMC26NqoIPV&)Y39~joS@K@kQ-)};|rA~#2&7D4eWWvK=Q{>qzN^Goy0U;o=A=!#r zHFb2A0(3c*J1deOyeX$+<%fe^Q6B%DQ&3h@f_uK1$5KzhO^;_@QJzs%aLj{Zq5cx8 z(4HC-74DGhQ;^{N0Ewc3cmS-A1ycFrNy-N=mv$uCbBeyG%VY&&2&D~^V_;E=i3C@_ zvYfMf#(;VN@s(m9Ut}^O$4C*pFDJmtA6uYtPsjqH%lnLGWRQ^O!=3ik1vLj!0}iA? z4Ac@675;#`U&CIM{ByaCq7h4)LFNwk!5z_?r+6rkgU-W!;6a6nN(Yb| zj-p*|WH8>w(;9wB#3n=Je~9BhxZ%6CM4kYi{FT~tc@q0TJ3Km_mcnF+`;kLFA`$H2;beUH^-ICtf^tTi+^TT z7F4;?OZx%rTlX&sqXfwE5sLg}I2pyn!n*eR(;)!~Nh!@Dt+#6@@+Zz{oYI)}p}q=r zZ6#!ZCfx%e#c#BVV)#1G z>0ORI;$4mD>BQ0J_|S!ZxUNSyoeb^&@7>uNM8$z11hRDGl{xdOtt%PfXQ!c0R z2SVInP2?5tQJw6)0i>nwFNZ8t-&FeSJlt-jxz&5-?`*`*_4TJyEb9umM|pxq-E;T7 zR3+*AD?*CN{0Q?0pNA79XJX4p_6O5(4&eRc{N2w=Y=m4mLPH7{hZWBtBZVArq(QUf z`JNnaMQAqQjqp0E|G4WU!-Out+Amne>V<3xHWOX4u`8>v=J#g=m#jwPZ)dHHhN7xZ zY(JxEqGG=5*~E_t&{rx%T5W#2Rp{e=d@87;40=z|f@BbqA)daz&$#3VDkCg>5d%sv zsVPj5vo_M@ZR$BS8%O~UnIa9k`1Ih4BHZc2q9Pm2=WR!VcQ~J62Ko6lk?kDov1R6@ zj#;|O5GiH286^dqf4Aq#I7^<2>bB8{b7fQ!FxyHoOhKPkm=z{4Jx^@iTei)KtQ|$| z17&vQl{v^MU!iLN@6P5O`+>`w8R;nm$m1Cz?w8+qLz@vA!gU1v3%Gd(aE3W?9V5fb z?6$Wbq`c05{kFt=4Ev+EFtfQnFmcpGoH&reqU>tax9U(=!n^V2oeMCQAe}s2`sG@` zGV;=*xuvDVpO0I=hM6p82K7AOZ9UdZHww{xS!r>2ZxCE#@Iad+mQKj1=V zc^CTVaRCh9>wJ(8Virj!u%6c_m$a*Ok3yI{eo&OZc4=QmuIYlkUD*JB}83YQ?bJmr{l#VQP5?>Mf6E!%7G*H zv$b#I0T* zr!Z+J+dYeEmnn|8ZEah91dT~BqV-;FEtPi3!ofq7$gAmygKNyKPCkGUh&PAJy|fGY z?QGYCjhnmCQEG7-uyN%q9|T;xKezc1D8uV?_7EtEs>GtnNT0MEBe-MYCQYdnNUh!# zC#>b3fs+_5z13#*Fi@TiP)UudK4!GDoL8P@G1t|@Oc~O+-dpaDy}fwL`Alw>BlwVU$rvNW;LlTZ!&lE_}zx$wx>Vig{owI6LK|0Y#xr zXm~lNyf9Z?e5o{IHfb>Y>#wi`!6}9neze`YEUDWJX316FnJMi>&bo|Uq6fO z!>n+6U!USDP%rcNq%Q)7xAPy@z>$nR6o4sT!`3#iVcSpOZ^$pR5L1_~a|+FcMM_9p zUIeIiw=N4j=(WDCbY}WtE~vy7c0m)e`R$-??0U(Px2Yl=z_9lK*ipt{!fq1%D5x~& zg%_!C3iKl$a0w1Rac&Q}yYtF0?n&Lp#CbihN@i@aa4d3j=izRNG;xL=0xnml@_pp= ztk{ZNv$!+(M<@vd{1aOHn=S%Q=6aay^SY0ajSa z?(8=d5|q!^V4N35<<`*Tmpf!N_%%=u$VDrA8)Cfvm-~C3_WdEwzf*S{6b(D~_r`}^ zyOg;gQKh9??f1eLsf8+ujISE1jk^OjEgN;3{$NLeqk9I)HKmb^q=WJ=^#_<+YsM1p zE)3tYxlZB`b1=x~+raqmGq*7*}%pvS@+^}aX;v$2bY;s$)+9= zP>&BzZ^m1tHfXRa4M%)Hxzj%}N=PpKS^-jY+eM>H=-!&=`YvwN)buNC z38k61O=U(wA@KN5J5S%B%!5u85!0pqU^;#6GJX$w1scN*Co6-hzwrGK!5NKPTZp3^u1a5i8({wOBaDjhym3Zdi z=|y^RJ}fLWT3~kEeDo(GEbq|P=IKwxp)4kA1a*`3?8dB?zo8TWv4!(c$ZL3L>tM4N zOTHX~Zn3m)_=f&80HXAS{ge%MMTcjE zy&6AV>B-dIk_o|4s7=2Vz@#EhPXZoZdkHc$nG;dLix+Zv0zm0-c z%yoVw34X0_$_f9*Ao9z#dU}@>;@=rv;GTkGkfmg0L84Yib7=2oR4p+>0?^JliQ z)HAri5u)PH=G*2dxth6C0VeGV-5r#PNYcg03(!Jygjg2{()!CRF-~>F}KtdrcL5;!4eV|1rIs zY0dxT5dzJ#$$O;pM<%=dCW;m)R34ZVQ`ygPi9Scd!chisdclW0FBOMq3%@(xIh#DW zeUkx#bG$*2>(@?@ZIZT4M3O1#c0P*2hsoWnj4Tb;f|0{J7yJe|gTTN&+1H>&k2zab z%{0$(N+#(LyPU&XrB+M-d0_~xtjXVws4(6dqn?|uLAQV7V0)Rp0mIDS`i`GlT51?F zryVP2FpGQ9;Dw-CSFtKEDl&eGb7C8{hT=sWzn&zpFDH=_3O;)t5J`l-Z2f#%E$z@A z{nuBXJgt|7qP&!?&Nc#}>6~wIm0p-xNk#6Cuqh5mT}+U}o1#)L&9>p5Vmh^{(^<33qrk*K(OE zb2cm8bEYvtw9akJUl-SVUpF+T;v8bVp#i13}cez@?!E@EHMPkH4SQr z25%Fv^m<`2OEO#jzC@mW^WI)XL?|2^llX zcZ_l~r~-%hQ8^>>@%`a_=V2#p>u@U~vT>@a*g>CL`u5k-GGv+lh7OmJ!`<|hfZt;A z)+E<21f&M&;rI1O#4EKs!ba=&oI8gv6c=)4I1at&-1MPZ}c z(+M0ti+#m2&w$t`e_3UkhjXa{;_;tyVMHc9$lk+?Adqskq3jTZR8yn|W0ah89d`}z zM!1zXkJIqWT7h?ovV~Z~VGojN<6)Wz(!~Eu6CejW&>UU!GhgBGMvH&txBZ{C!wT@pl$4_*CMP$<&b<74`>No1RQYbp>idj~_?0 zRL@L{N)F#PQZ98 z$wy$~E;B3nI&KM+`Fpt~P8Z(Cg(6PLT8F(WXHRk^B4)cFR#mK}VfWN;m#FRfH=qJ9 zAq~L4{Zm*IpB$p21WVqp^7$|;KUtgR)Jk917!H=BSj12j$A5MgO7igTxvJA*f@{-x zoN!5bI?E*`r=M#`=_5Bs)+PsQOI0b-1&D+27gqAM&)P*UQ$1d2lff%eQ7;8x2C)=R z`P!Gc!XmJD1D9gt5V4Z-x{Mpp&oaCG%39HHR}lvR+(2wzCH%mq!ARt8(w}DL?vDna z=Gm7cPuNu9AHhoxSm5cXcS{ZQIC?25R#?VMcvzu6{g|r#BpAepvNB+`5TfzM*G~9L zp2?Qk->0KCUCbT`QjdgF^gb1y@#*vi9D2;Gk=+@pQ7xspq(Jsw$NS zOmp*C%d-vAm|s}%Md%DPgOK8nb%gVXR?;A2R^rn?9=8omm!?$Ku%5PXr2H7X6x2RaR8i7Q0

    |AiuziNRwBL2hyaYoFo2poorHCL+Ht=l-8=D;p@;h0YO0i?#BF{x(l{k%_iHs01wr-OIChQ*bO?WG!B(x zmYNjCZVNNFeW)0cBuK60kLEFhS9&-KWM?@5zeZ0Rv&@R0vK(9tGX&rEWN&soFGsh3 zUI*N`g6I$XPz#sZ*0fvg|Jq2Ja4b(~F8#3&IX{^E4XCm9I%^NJLEbWShrMa|pbR_5 z7}QHJV`V!!ob_|8Vfd42nD?vRPN+n$Sxv)ggs7L*+QVdM1VOb}8{QYF(sj?1<9mi< znm;OQKl`&q^H1-TlF$I+W6)JElDH5lJhwoEs%^JBAgPb2`(Y0Ok-4lDzjMf)MNEU` z>s|<1M5wLpsto6w=G)PO^y6Gs`8oOvGJcN-Nj9CeftWQrudFH_FZbrAGE)fKg9#V# zu{*B2)D1s>e%n%4J}Z-?4|<@oP5iVh6miI_q96FeWolf7zc9E~%-&}4kI@=w4m2#L zKCn7=F}6bp=kDW_WBCs@-t-Mn;P|z2RkpEI2ILfsAl&HN`|_hUX4BX#x{AiejFn|> zwq(4aWg}Z?pTW)z!=_d~fI_Ki(9#RGb^Yb-!3Wv9k0va@yaDoV;?$pTQ0Gr?ZA>YequmGcTo;6SQn#=~k2yw6??q^HW z_-@Db_B)0pPB=zmBvIy|89@Gp*&%i;gWQ6G%Eug4_lz_(g72?7j6Skr8Klm}<7Qaw z8lXf5A=mo{KnVim57ZT=fgz8X?_8nav(MQmwLqJYWghSUX#p~Bko1(vAX_R#`x+6M z|Da}*xT22lZ{I)gphP2%m#m|!9aijtokT>hbwA5m>`y^- zxe_Yvo?&$O32e;7@TaN$KvBKMdfFl{jP+7jW2kl5Q`CN>7*jvPeWm~R-TmIhHz_T? zk%H@~LZBL=WZ)8jzGxvhR(dz+U1bt`a1`2Cj3c$*k5oIA88wukSCc~)Y zKU!A_#nb*i4}*^7u-_KB^1+!>%!aECq?i6Eme&$e13JrI`#%vhRuCN0%-c-=YN0m? zIAW^>TZ>!--A^_*)9w2BbL7{IwA&9oFVoc(B6b-d73e4`FnDn*-HGa)G+8(>Yr(4s zGuQIS`);+#RP7k~s}wsm2K__KGaYu#FVnTgx<`_nf|X@60#;nD2aHyZG?mA$m&?ef z6CXN;ZTWtm!8G=83={`US|FJ4h5Q5CV#H#g-{F7}my!r~ zxwRC>MVa%@H1a=9@NeZfl<%)v0Do)7YBo(MB|GwLASX3rv;1e&GO&_D$l&xQ2Tg#A zTiW5yJyKc}%JR}H6aHaa`QRMK;){hkWMa=vzJga0t1R&?!{gOC( zO991yjeUU5axdSnWlwb8{;j+nF|8vfv7$-fPN@__W29Ll<}i74yzGy)x`U@a)Na`f z=g5rP(@CiWX8VI3xnRRoZth1}u;B7NL+QKQz|@x3%)vo^7Md;?s3wU4di1W{a~^y3 zj^F0EKc8*|QS@n`%bA&i7M|EiDE2|bJqnes42WDP=iI$ByLeO3MBQ-5Ub^}D@`=AL zp%*F3)>?DaJm&CcwJT2_aVASs2V>`!?ap+(h_cAe!Qm)Qm>mE<;TJqSE)@4IaSu)Q z%nn^_lIOxxYF;*6sK)?MbVZvm@LsFm6DM2nf_wM#nYrny-$Vgzb_w7hhiLTcZoU@+ zra!nfZBzk2)I5criCV9(x@!#&o7NGN{74;6&(ZB+Lgy@Q;APV4p5yjBy`7;boImGR zbwZ9AH3ZnduSAsMeB#NqhtQVTmrnk$xKb$2cz3nDl%%rwId1T1Jlfl1htS~$trJs$0;brN88_P$(P-ZD9%EdYzkdrzMhA6?f)a029w`D zlecw7C4+MHC+hZn%=!cEPhKYj3hGMa$X+!K zaxi>*pgQX-7DvI8%#r_Q2UZK`v7K>-^mrmTXTtP`eyALuQqxjqlNfx&y4w44k3NA?sHQI62!5ksGk}MF~w_79EFq8|@ zPW7WYq`%wU{Okb(NMVA6M^H4_v?zjxZs}DX<_lk1nqUzn(ZT6^iSJc3mDR}_Ki$`I z*&!yh1{oCzilgEZw2;3>t6^uZr7h$J9|d^RiTJKabFV_3Zw`(xVDyy$C<8slqyIC6?V80%=NpS-U9)R|{2Wx}$t@n*3x zThfMtq_EFSFot8y!^4X-S~1$mKT**XC^G+3$Z3@z5fF%Jtc}b4ocnX@zSCA zY)tHTcB(-Q!kw)-D+BQuR(F0=#Z5V2Y%K|%QndGAc9*RzP7+;FRUOW>TNbOnMKs!x zCFz(u_2ChF=}9+Y)q%BK`{oGw^maSh23GSu;Cj4GVqIhawuCtVmxbP7O;zbXDT!WZ8{rzUi(k)Th zHs=I|G2Q4#BB&IQFDwzwD6~=icdKuZ3m?`6KVpY}FlYRrWb~>YtVz^bG|F|Pi;af| znvo+VrCv+Q)Ov3qgsIQ@X@xb_ktNhDhdSJX^va>UGvuG8>txVsjyuTVgvOfG#igjS z2wk-y<&T;$(aPQz3*pmuT^N0XjP$5^KBO?kbv$j@IS4E4D5|jWzp^t6oNg0%9~!ND>(gda>d<*Yn;D~o3q79!AY-Um;7S7*;uEYY{pSy#2JmY12AKr)) zTUuMtJB_``;4%4)(smJF92JAXg%%@g2Hlpg!vcF)v7hiBJdbIPKS|n%BH=)=<#4eM z{uL!}4<4%SaIJzrp#IBHzUv&GHj#((CgQ!!Pm01*E3Et>ttj(iy0@nBg734h|1swy ze69cZQ-e{(kiYK{p$eNu(V6^Xv&Np`r0FaGX|U1_RxlOKa6uYCRwi zYCRp!WERvrn>@WF@$-or<&-StY;Z}f$V#qpsobdPw;;1jLXtaM7F5bgBUW<#J1%4- zeT>=%s^7AhnTQ!_SME!tdUP*Z^w)3imGu?ob-g>&JV>c}>nQ8O&pU4s1@7lZe`EqP z@Mx7SE}3-g`FGQQI%93cCdtYgu{2v2k!@V1l7DXGyl4zbdHX59gWF@F&BYR0XY(BG z7WkL)oI(p_Qf#MlxLECsOrHf^l9i!hJrnzmxf}9PI-&vp50XC~HDRsQ z_2#EV1Nf0^Mol?I5w3Y=)9q}gVcZ#2V(3gt)2W`HSvV!>S;tE6itkUe(~qa~GXVCg z%ydC$0>K|{8ZgFiDzY8Z)=gH4Tz0bTq)0i&doQ~EV>TS?%pTsBx)yv?U+em6R_}3&2Owfa1Rqoo{}Fh9n+Nt{%qU9$wHEBQ7M=L65|@ zAb$qX8XBmN5pk6V_6kQ7Fr96zT&b=8d4?*MAi7NG772?8shv7b0A&k6?RYu z9%&nU+wj3uvar*IKOfAo)mF3ZQ=gwbZSh18M22CZXVw%uLBePJ~cpcJb$ z!zf=Q|L;db=mN4N5b-beH+in8OHujv>HYEb+{)r`ZGIP(n45IU6rq}$S_O^ab`uWDyFGa?Ak&j&nMdAIik)H==bK zJUPhbpVj?O{ck3prs1{zoE45{@^Brapk0fDU8bPHz1Me$ zxTal%%kvbTQ5vcQ*IgE%`1~Kl%-B!R36K{xtjb5hslPf-QTD+Uw=k1GyWCi?&4_aOHo7~;qWrR6{xuUozmyv>JPrgz&? z7FtSLc;KFE5}PkemcI|U6-`v#s!O#WE{R;EP>tBsCy9nkp9G>z^CH02@s(phLVwBx zA2h)wB>4AvOX2tHpU5`hLxJ9fU6;eTvNZUdEYg&QPe{)qF|4I-)dgpe)$Orso> zG45jIpYnuMv>AaTITahB$t}$B!v=pJMpx?vjwlsOyswVjB)oma$?3Cp%a$W=GmN(N z`%79*hk7PCE8UDwd0>ijOP_pu|0_#?f#_7HZd>GJUk~MX)|t)A3%IKb4sU z-#}6O*Tn)=8Gw2VM|s6mOy#joTp45x1g#i6KqJeM{*jj#7y5{7OxT{nALQA=7XS34 zgFB)X{T3{m1h%2N-~27~&;tK$D)x=Yl~6)DnImeHQNoelm547jg6B+0%;~1x$m7Oi zHzR$+?q6#}DJO0Rj(p~^ynDxJ4t8fPOB{2j`3!wrQ6-B<07V?er26@JBgd`GZ-LA_Pii;HM|^Be3I zjO@rmZVA90o)%E<|KyMT4LKx@*g+41`d+rJwzhC40e}PWi~G)X2>Ly;I1eoH4i4l} zBUSc3Gnt*6i(fkF+r1WIr&1KtU^TG*a4T*--I143D@v2A#Zs!dy2kveHHNdVw+AZW zb}AmE$t2#Ile7A2P>4ESH&&PVt!SG0zE!5SuI|L(>e%T9Tr&TRS269?vvH=mKhc%q z9$sEW<$M7-amD@28ZvRHawdmi!5?0v>ysp_EN9Cm5hy<|b2eYYc=3Y6F0q-hz55#_ z2dTjib_Da5I}dmdn6ma<+~QuRoM*;vHn?1qivU6ukk+27&$Xlv`oZyN1Wa z7R-cO58o~AV^_ujsNSuA7sM7oijS;qeBX~o@1xt^nf>137(hgrGTgOH!)tb*84K7j zOfW$Ad-2;4Km6*^zt8kWiSF>)9sIhGjh%ZT^Gnb4>E-&QNWdNB=wKIj&f7hl`9w@0 zXhWx&E=zOhk1-vtDJ28wdL*)YSmF+CI`E0_o4tUL_#4Xpz54)`YNNZlgS=@72jxuX zuDg~T7ulDOID47E|IAZAc+js;Ok%fIJ zylrj);~0Zkv^dlw93KSrEbp#NzwYYyx@W*alA6lBD&0N#ui{LJpp*!&$ z4$^j*O#*Eeh`9N~pSN^(%He!l;5ADrFRJPAEUC7ht4lAM;;cX z@AYV74TlHHUxQqUfvMMFzA%+3q5@^mIvO%o{TIkF`U&iWi$nw=Wd4f^&Hon_<|_uT zP%h{d{J&x04NOGgFUa#TV9V&M592#R#G9|tMC~{f25;>h-mPd-PyR5c!e&UKZL3aJ z``LhQkTUxMm5$fbyH-3;bV{4DRIzDV4rYucgTlX&-#h0~CJenNiwIs)wot#OeHk^M z%_Cb#$=&u-eo=sv;8}eLYOA<@(7Aeuaz}i_KLyU#!LG3%{x3MFpaRz3rcVkS^@}NS z9^!C1kU`>VK>@)RZA=B%aGT2(X+%jx2%56jg(=C!5j)LUaZgDYUK+cO(TDgKDvk2* zn(^_7*{C!3`({0*8HiBYd#5L1uhZqBF;sD!q?2STtAMwO%$lix!s0%=vmi1j1*_<%JLbC zf1Sw{h-ZxWo~eE@@_aFpNWZVBBeZL8|DG;O(2W#_kiNL5idJ)>oJM~#F<&ahDrI%` zvsxg-moc8Y^S_#!n&gG>zmyR_irO40R-g)QQZ5o~MZE~ZUP=>4z~*W6)8FB=HRuKM za`ENs?*(DG{ka9EG{@_%q*U|XbHgeuy8q(Y8o}ST;uGUupTWOCUH)m?^OwK}MSPyW zD^2B@PA9zgK7}1Gu2oK*1@iz&9ca)DMtg3V|zd7Q~`E)k0fpj9%A3Y`-LPH zsQzBl*?6lN2&J;<@?V0|O*85SZ9~mBFR_{AM?kmnEO5j?{|FLorVD2T)H}l*Z|Gsz z`{w)mfq5{tYoat%yGSy^9X@$^HIK{h)mJ@z`V4m|Xy+>B+xCaV_bEadXW;X7yJm#N zfs?ArW@CD<70*EDK2PRvf|H)OJT+!0KJL^Zfj7RBP45nDc<63(wB%2LA~Yt#=edRL zkm0m2K1;JtQFOKBz#;NSH!2W*zkU2{(`vNyXW;=0xBh1z_vwN$Zp$QWa_JoZr#eWi zI3Ue1F7M6;ncc8X@qP+2fl+jY|1L5R|AKz;7G)5*@)P_8${;V5~gj-y1 zz6&wupUayiv^o5NOIbbK%|8Rm@^g0MhVY zvO$s5c!}E3K#Oa&OEuHdvYsrV`Fb&1v$&w|qX;WX?KBm9iV6#?ECYS}8;B1iJOhVo ze|RY?>(JIjwME3TJut@9N^G%$gU=4jD?=-OLLSGD9Dy%V!$E-bYGD0Ty9~k%!zUf7XSj|Ir1f7AslJ5X9;5#~4$_A)yCEDSw9}?Zr zUBYqlHbkl94-Tw-9b!ZnN0Y?xmrGTUp$%uP74I2FsgRwn0Tc0M+T<}+Mg;S?r3UBC zqwUG5oSU2;xyJw_Y6~8Fo``8IBhz!Sdz-S@WJ!QI-? zHonLgBb$=n5kkHJya(V~+Tk5X$umG%;jD0T&@H&U4q-*|TW$PPy%{>clYh1k&(uSX zn}?_O_VU*CW44GB4LXQP>i+ykOVzz^S8tGPrFuzYW2z!^B;Tj_SM&;J4-k)**7>>R za7LAIF?a+`hpC?=iJnj5%}0{<&J43?&(;ca zr}j4RCcrOUHF0s*S)uRc`=f?M6{70}C zH+mvfU*#nQ;O}%1JFf;Cw~<2nq7JV5aDqs$hRY(-LfR(he19s9qOyV{&=VhrK$ViK zU7cjEw|-Pvz|~#7q!7|Ng(bT8=#J$v!Mk0-Xk^gP4~Ks0dMDboZ6;o_>5=&k8F!2s zo(Syt21GE0&x+$;iia2!vfG|L{+|{A@5L442BpH;_GN~6eMj6&Iq|Vu-bKD@!|Jbz(2zmgWjHaVorz6Cm*#a009qgWgmXA zFu6?7YGJ3caE)*du}PuLlGz>j1D|5*pH8asGHjo(Onh0J`aa^iS{YexGou^v?X*8m zi4;$p_dcbD2q0j%;DMjM708<*Xd;m^UL^ zg&qc+kwyUAyK(cX?1ZPN>;dKlo%)tdnafVb4ocKKi{iFDv$g2rXwH~+-SlcZ#u(;S zOcYL77R?!tursi1GfK8?j9dcL!Wmoj6>%($s6@dWKPp6J z5aL+<7nuDWysp8+BEe~mHtKTC9Z_li5O{|AB%(mNH{&Ne5;1`-#p z1c%842CZbxCDdJPOpcZ5D5h!ePuCp$ft09Z$hkVQp-PHQHyYB+e6ifEHGcY^e&QLo zUaMMjwc}%UBC($C3RO`TVvAt=d!OL1%DUSwlCVFV_V;0%$o|rCKyMi zN=I8q$=zM3FBK!PQ2dR90)B;U&MLKzoumEGH>Xe~wr?5fUvD1V)YM|B#XKdgAe`c& z(ED@cbn;HAt}Jb-n7dl%=W202D8&%)!x%wqaq5`0&t@u{M{Dc%pE?@dApW!<&)#D5p$Hn93!>*7KFkPdWB|2*Ouq3n*bN*CUP zU(%^A-wC`7MEGoRmy<%iyUB6Tsu~PIJDVVnavXC6;wK^{JGw--p|C@GHfgSOUiR_ftBTtVQDS<8>g26BswgXj+Lx_Ckj z=L#UOvmIluxS;yolpQPU$kE~XW^)r~4TtqV4m0K5Cf2Wmx>{E+vGviE#r*EOYnR4D zDF98)U%tKnU{Yk8BmD;Ez0?Fz`YNglZ-U3BwJPfb%!#q*_=(%qZ{)1#DT!X{z<_#% z?!ag(q2+akO_vQhWTZ7`rV>lZ~>i8;xc}hyrEYRehZc z&}1YbNtz3`_7iwA@tB|Kb1TcinEw10ASJ4TEDV`5{{8=W`U%JMI&^Q8Ign6wBt8EH*jFR{Gt0IX!ZQL0Uv@e9`M1OE0&WIT~=~tjnQf07ixW~kFuHsN&e=D}4EPY9~ zBd*M`Do4mPX-_`F*1tPjhZ)P;c=UGQ`<7^zTE!8QA3cd&*~CkCc`cbfU@;7w=8!Qq{b-){3Ik`H7d!M7Af#^qK}z?*yY1 zIuW9ekIC&<`+0FXI8vfBjE5((O^d6_!wl!kW`Au&u#HaU@?}U#BLIBMsh$BpUTrpi zE}VQxDJ^MUgxaupSuZcVPZh-KZv-`U_|m8UQ2SGJf10RNlHUbj6IF2)v2?j~I-yeR zRe~Q>bt|If)f@*m-F}zE_unZclWh27BGk@O-*-{tjoh8?{!T*G{#q`<9oU-PzXP<_ zLlR&T5QhLO`}|2D=`^-vH6!8s0j{f`#I?Np7sz6Y8N!?b^90{aC4Ze;G4 zN}+^Zbt1bH@rHR(8hl@xog$YX-CLZtG)EwnrB0g<=#E4Q`Rmm9A3x5m(|H|awBK+q z^aEfeO2)!ymqq{sJSY~_xwxS&*ge7JxB?nB(c~JieMXByXjmCNhX*Jxfrs{!QW=O1 zA;C{QU0(rUqU7^Rjpjh=r@hoOTz@}q;!v*Wj>zJrMRqYoex>#eexxwPbMmqM zdH2|67B~T;XF1GLe(0)~xqK`6#Un&*NWH3AH|msII@iY$3BMbb-_wY7{w#z4 zKKfic%%%%zU6jOWEFuZFF04B?OZKA8`B~}3rDr5tES&h3`#IyIDYvRG%4-7tu{w~TmQvN6TJ;&}tzLH-8PV&!P+y{^|vSsv& z70(0Wzo;>^uaOOBXJg-THfvg7sC?0!_{K&^kW zknQz*X?(4B`1WYxDRZMybfFXPJUlP7mn58y^{d+Mxa8S=3JOA)Pn4p`ZTs5u?OJp;X$Dy(20?(;Ns$=i*lsVN)>M-g6TQ*ctpF z0S3PEk7ILZNT_tjY)jKKS>@mfTe5B>+;(vqV9$VBe0Mt9yn|-?slmJHmQsb_e6%tu zB+6oUxiobrN5H2yAYq605Rr28YO#qji>PC}(kp&HE(+^de{zjYu0g1}cE?>D8~w*4 zyG&I>5`a9o<&jH3D^dn2JTX}k^@O-38CE>HD=EXoaejOYtz_=I{t?kA?8|d%+!W6i zo1WwFdE0&LP6_G!DRG?6wAHfmMV8BYti8mwet&w+h9zkV^&cvKZy#})zirGy!Wpk5 zW_?RPp+C_RV`4lXRHH4yCv`!d8*q6Owvd-JzU)os1@WP|*e(JDF_3HVQjWkm7s*FR zCYamaB*o?PX)R*nL3i)ub)L|rgmVYA!jcEMBb9~KXeW;=^t|%a_mSZ+x1va>4B7bW z#3g4*6D2#&`o%*0!S4N#N`LKFHq0dZ`uWF-nIqpNMCp0c33>?K43tL<+B~j0KW?zImkzaXqL&2ok zcvFNe?(%0HY2S_Dt!_{Vj=IUni~Rd@f?GIz1ZK?+%Few5iXO#?0Aa|H?aX}W&T={y zSG^i*{`0a%&Q3pK&C?;vCK==XA3?~U$sFy88Yr5Jonyx*7kfR1l(8-sOodJ6)PN^h zsq;L1J$L6h^lugHEoT?Cn-70h69!$Z2gGTUqel8v3-90J%VG2p@Mz}>6-L>tDpe>| zRZ}hK$CbBf8j~j^4SI6unj#dQ4)NRnC?d<`vT(u=O87;BiTNseNTlwytyor61$x`_ z5Nizxouueg5%s?Bbd>hA1Uw@)K^5}G7Yu_Z!WLeyW__ss*ZPROCY*DW4sD{4MmBmu4VVK@i?V@D%HC0>0k+R-f(271>MN6p88gB{*$B4?8ro&d-#BgXVow?#OyX_J< zET-XYL(6oYF%XRmAfLBV|1=W&!B(h+Mlm&0s0EXaU}W54EQ+0JcZ4X>bIyH7XxEOp z?r*Pj7T^c)I=n7%jAw^r*l5JWp%)f9SJel%)Hog=Ob_$BkH=sg+1nQs*QL&1s=sA_ z%adZ5kS8Rsrp3FE_G#Jg3OOGJWWI|rJAFT&!eRVg7IX%+62*Ro!;(ZvKJjOmgo#nT zdKfsSF{il_dc%(V+zqLA`XQZ_wNnc}ns)B6nCcwDqk=E+Q9kcd_(|b^UFd$@>N z7b$}Xf!{GvV!)$_xPQ_O`hn4x+I4vLxxlFu(|?HLu&4^4iB!M0X37wSVq@tP&bLCp zchEt13au<72LZn45l-~f! zCfnpI2Z)@6xo;?AAll|%RMCHA=7^$l3Gi!S%?c1*?xCg6}-Qs`1Mt-?n z958{VcXrgx2gCPWl*8Ob7Zz)AH4HX{{}T|W3+Bv=+t66t7WB$#x^CMx6Lm%!XemMg z>IWv-?D9VQy6;J~wcnXf;>2<7{eE#~W6v_&4i0@b{S&X~cNjhNU}nQBUgk;Uv9{Er zCXg*Z&yOrEMJ!LLJls$v2s4pM=4$kMkoU3W)#qq`%tlhHv>pMn$v`75AT;GV-eg|F zdM*wMj&+b0JyAS;Ic7}7w{mi>3_QKRpH493l%@U>GhkvS1GqL7rPe@;s{e)zJ|(f< zzz>fu$MC`(a|v?AL+mB z*!Wrd3^)mdQ~Gt5L6UA?VbGSmCHlAhBvU$F7OBwO&?fkp7|d1iXQ22us26!h&-}@| zecX9?kmX+l6+ww0)&N?fcmcc}utU_N(_bH~P}zrs60p3+NKbYrnhENGrE(qVzN>eK zDb-=7jqXf}Y*94}HMte8B(FQP9TxD7P3!p$WF+)#Nhl$dR+*8{w(ycH>zAl=dAsgh zCO)~9JW@(wW?<#)o*`Bv(RAYyBS^Hx9{c1yv zxFW>%%N5P!!{+oZ+z5XNPQJBC`)V8~!WPzJ`sAc~@>qs?xhS_=PnA{LvfMIX+WvFP z@Sf(}3*I~y({PIoTcjLO#!PPF$y7e47_3dVEP3zNPX4zEAgMvCfet$HCVCFQO_I!P zF%lRr`&B+->e<1UnWa! zZBJy(j!*JBij;mj5LQQn`4-yWN*c6+k?mAn;C-w1?@e!M_1d!F)w zhVAcD*b0*q|CX=Cx-DKDz1G$I3xn+bqIrJ!`CVtgH~)*E0FHdk*68D_)0r7*qiYH! z`$*we_*uUOws-m39~<%FAXh7k8gFtWxbduZ@48*F-h5`u&X=+Ix~wYTHuODNI1$%> z{d=mjx4&}?!>KPUKxR2IaH8QH#_;_Q#>d8EiUWqk#`qstcWWX*mT%Zr?rrBKiy%zI z^v}U7Knc%4ImcZx>mGK34nyn5DPvtyYaZP8@K6UPVqHb`htH*$-+>&70)|GTz znVtFceG1S+a9!sgho{?|o2SkS?OlL8S)Nt2`(0Q~d7Z7); z9%@YI*8KT66$yUJiz54J^JV7A0IiLo7h!v90|9^v-X+jeP#Q|kz@BsB+71QjqtEEw z-sO;F{ZbV6_b1Q?-34=o^5lwbSBx(U(VneEK3H0Mf>r_%r=A55Z>8`FrZ{{BP(x(iT@=`wG#Daj z1^t;;K;%NHU5vMVNy}=0j=iIZdKqfH{V%xs71lvF4ynqAa3w-c5g+aj*x-{N@9*yZ zp1&-B9|ql;@-)Xs> zQOC@eRbzwEyUI-F?j9qD(YIT({B_$6$|+wVhnNY?{6E%LhF*BM3H|!jJ1eW`BGUO) z*aKBr=O6;odE=0e@i^t{&9@QAj@rJAH*{_4$g7ld&O}x)gvCVN^N9v6P-5ZXnKDe- zPAU^)SmN~4D*~D|6g~-$s5HD8%6LmM(p8!>^l%x(bh;iQxARzFt;hfBwgjcB+2UBg zjfB>bV21lX4IzOW=fC^SXIozauAdXkWI zn&DFa&r<1ifi+=(&YGA{^H#*>#3dsfI89iuE~wyB!TD&pGc!qUQ0{o3uv37&W&8bB z4I`h#4fZP<*nhs*13L_F{@^di^TCwM_NS`}@Nu##kRT@4W#kWDDq<8CHo2wGEV(>|#Y4-QGKJUi=Z zu@*31Tk;l~afPzaS9K)^I`>NB^^|)7y@&(Kf>RS~z_Wba7 z$>W~Kc#5E5jPWeV^Ys`pPT7b0bw_(-DoJ?`gkE-|f$2%X^6o6flhN z^5baztS7X6>+i@OQo>PD-Vfl-T|JTerKnwwq>4Z|m1!e7w_&-*fg&AIr&P7%VT-PV z4+9|2&!l&=m~ueZN-s*$-26n`aST3R?xUJ@`^ggjHhF4^XIA`ljs~(=P|(vs@1}6X z3ed0@f|{ntXe(IjKgXUWy8c#=@*csJ0EMLlhZa!0qY4om=WDo!9y5*BD40)rz6VEW zLTSuSyD`>|1U%~351dMR=U-4TYQrn}xVHJn#>U_0tZR?-Nk31JL12zAmwA@3Z8Ko@k9gO-QO~!LfB_5Vtt&Q+UbW% z@d`UVN$`!&ZSB|t*5kh)_Ku`W-U)b*HZW7sCnbeFv6jzO+1z4h1>N# zL18_sNg`>6N>O10Ve4^W{TrFO(vXCGl7!O@jrHdV-fQfbPejgax*A`VS7!s{_>@1F zY79@3H+i`?+TER~=JF$Sthyj){&J5Yy`}orL>uH7tfE)%L6yk9%gz4#`uqGK5cD+R zu3*yinQR_<BW6&T^Ze;H+X+UQc%|4I?uPwwQ9jtascwgv+R%IuHuSHrOsjkc%}S|NlgtQ^;96!PlYG7n zn9hY?-?ZY8uib>t2&a6mFzoo2xA}ajQB1&g)5fEkQdQn{+3};w)?J~9KgSVB>FWs~ zkvAnfgPbH;aw`Y~a|AQIH7JcXBWvp(Do#Edt)Lj%9T>HeN>%pq+TxOVd+qjrTmbB? zn+yhJ#OQ=iw4DUL0YW41z!jubpNd5^=ZfpwFti+YIhJLfo7NG=ha%rW|8%4V&vyZQ*S2j?(5g-wp(`(w&ylw zU0peef!9t+#_ZcTGxOdJ!EAhGSL44jY;5g5?F=eUR_0HrWW!bYGilS_GOW_75RU0) zRm9NNxTAL0ecerZ=kLfpB!QF2BITj?C8NbrLC|5%gock4!Dzt(E( zs&^HTyayjHX&!fIS*web!Ep1+5q1G~(A6s}lB6$su`DTR@~h?dIBX z^iZm$?8QLBE*Dv-LrD?}f-Z*ErCBLIKfncXEn->K3J5Q+ph2dP|4YcH6ZM%bJx`99 zNlr_8hP*i0Wvw)nRwyX0s$wZUG;c}{^*+g7!_FBwP*V?@lta@6g1uJzTTM~;JOO|e zH-9s7(ZKtL_k5At+%$#IjBGXs2Wp_`#jU9*HoQD<>L;!%d;zBsYK^;t_Y21NKwrN`+ChF~yCBK%RZiS_7itaeySn#^253+8z+BA_w9d zbyZ6p{Li=&Q-Q4SUYhWQnWm3$PduE--g~_*^tP6SK(S%(TK6}y{$ytwC*qkDf3W^>W3X4?_bR4!@{zncWrFq zzo;{Qv5ZzGVlflNw{;BHP0sVip4y||^893xti%;wb1M|yjB@`h!MGrwWXh1DN_76G zf7gX>0@I`xPc2E=qJh69$LjbuTXAP$Dk^3sj}LuwGm+2jax-%5L{v+2&zYNIPjDn` zv$GhLZl6JhMRz7Ssf3R7BM9oM@K)Y`P?7~jq8hWg-xjU1uSEh(M3NN!;Ib=>YM!p!+ z5M^m36fvzQ=(fy^qPQ6Egf0rqHbG8} z&}g;@^AKDL`W@^~j*jB+S;<2`StjYeM5Ew)G2)86mM5di5Y2cv`u=4hN6MdLDa{wi ztHT6R#Ece0Qpw_nV?whA#a@edRoF{|g)U;$f~7bS1-sgB_#vdGv{AHD8rF=-K!G5n zXAhre%h3OFq`0);Zq_#NW*?xK>QDFz0l+Cv{pZJ9f4K$I0*9zu@V6N>vM;j!WPoo@ z8+ng^_YGW5sU0rp|2j=wXY20Mdx44-QRbBwu|RszjrYddk?B0Xe3Fe=1jksn+oBuY z7-j=&(wNm@!tfU+f_Z+B5@T|kxFhB2@DChfy}qJ$Hg;B!8T!90h%4O7{KJFVHaVys z(({5aJPQFf{PA%SyBwZYw8bqU`v8Pcyl{7FDF+t;|HX8Me7H*5AKw1BD&S-oZ^_r< z%b}N+_6)h9_+pu9J70P^_p4epUzo`BkHkwIZH3~>+&|M?V$|H}4s>j<9m=wS1g?&b z34;a;f=LJ!dfP zr3aQy7z<>dq z=+(UMd%gRY7M;&+F}tdeV@50q*J~LLFyPVpxqPHA_E0T_dJ7BsTVmB#XFqOCrmHZx zLTkg2va!ZIGuvULc-C)k;28h!-0~(GyfCP~dsr9m`2)F8hlRD2QTZ1=8fq}AcuFq; z@}MeqK7>p$Y1TrrG*=qGZ!Am6k*e<(Z#D9FT&j%KP*!DhM1utE@1EDi!By8>C~Vag zLoL|$6D5g$@VM{ZnJumnWC?nWGG1%5~is~g8db`zF!6`myjNE4M`fV0zLd5<>s zv81$J!j=p*)1E|`P`T8vR?p())EToKS$8(|d*-ZpQ3La@B=z2uQzdlD-Psdw)78dX z#;o{8+iUgG^a044vxyFb5{w9tZ_`!3m19PH+`4=6CVhCd(FapdCIoC}ikSkKeq6|A z-oGu;BlO-Y;m3?payd>pd@)iB=60nM&4_FE0oQGRa&N0(BmT z+;Z0^4Y757{_!z^N;t&Ay4M9Ld@`28GW+wVpWHXrC|x~WO+C%Hm$Bxt^j2P!hJ?z4 zpMum}KJqru>S!AFjiuo5^S}9fe0%maU5dwGrBlmBU|^qfAEg*GWSye~ghXf~x9}bC$5IB~8fv|JUy2blvRlAHE}zQiJ|LCcaPKcMm&u{+ zm@9_6ln@@KG|Yo9kD;dpbYNI*ap^P~oVWFN#EWpyd5=#^tpV6`thmHql;H5wZa)Lv z#cnvz*Wr1iEPmx~ezolV#k?G&>G?cn2MEi` z?;Ht-_t|m|$@BZaie?S6L%%z$dG}S&7Je)5MSmT#rVw!gY77LQcDu;wn*F)(5y!*h zX}t5T?arLBI=h2a%^b^VYT{qh(Ovxvg#}6#wdcY(=DgZrl`Fly8N^V1v?F)`@gul( z^$cEo2wx9|3ObskrSfLhGf@lfD1?SIu#ttA9h<%~goyG;+pyH{_P!uc@puzeJ zbX0&y_N}uP&A5eHH(T}a@Q<{Ymtd)enq1@_dnpUkwyMv|M_)f4+Xe!0D5AKyz@S=A z)WwB!YIu1#k^q-#z^3CM-mN5rM2I&Pv$T{^_c;DEPTg@m3 z51Au8o*f<^$~pN7+8Z0&@MOkqtPe|)r$ zii=TDQbJcPW#BceMvBRimPZ!fLoQuzAHITKRCh zsx{hZ9w~^Bx7mlG#MmLU=pnRGeH_rBS~n{=G*L;t8h^_nz}$cLY$kv4=2gy5jZ3G0 z|NfcDAI==c`0sq+65tmRI)RN|<1~*1YNd|f?o$)dZ$81hxb64z>5JudvD==zEZ4xt zy`&Mx-8G%TGU0c&E6~R_b~+(KUTh6V+~tG)cQdk=Trcacu+D4cboPu)o>vw%joZll z;G5h&H`6xyO=l<0cH6oAT|Nz?3#8E#*>>&CJdR>ViKK^J8=E6GMv1)|)B2dsuH}~anE?w0KVNx>2%dV!L{7 z-sgxCi{)L9h;(hq5A@E+*G76ba`!~ZKEq>`SdF-3ic9`IR`U0PXqiu~HL^55vh+Q> z`b+$-kLN{E{I><}6Rl?&mTP_Q&f|w0&=3bt_m%PK>dV>gdGQ=$T=c912xY5qr0{z8 zF=%lkmRej&BqO%Z!tY{?0tl=o-;&TlW`gKi;=L&IcFqDHFmW#-eK1`Gk`LX2FDIxE z2^+KHaW5rH`RMN3?+i>febc=Zje|fTW>GhX{OC?6iI(1e1t!0bSO1<$exm<}`%j|RF12WSIbQmn$yX^PYN*pbYwGk7n z_~|h%yqohBxMJ5o$=62g!;Nc?W0gVAsr1!QxaNA~HKM-rwh>`NURMwbHyW0)VOwkG z?^oC{aKP|Nbd7>z^5@0U=sm%R;JqbERKT?s8T7JWc;*`eZd+gm3g3uGr){zLB}oh} z8t^+_j|XXL?!Xywy9nq>6dissIt3tsmQqcaF=*Lzh0-?pAjd?1LKv~lMk5ZM`mYUC0emB|_sGuOzpgVG_Fg!hme;hK71dg)F5@nuZN1M2L*}IFON>;gG zlo6AULUnJ*cpvdWxf_4xm9~HNi~9I&ch}hKM8m((?Ev*&oZ5n%jpR)=h zUHFJ(L|0IK90g>xJ`wpcFf47HotaO~e3CnB{0Lkb)$MAWy{{RIdmHNYaZIOHC7Cf| z-SKAn<-ZwBpTbpG%R=lYxG}^>ecHd$nvqycr9pq>RzuHyaO}N6gFQ3#k@eAyS#{*V z>_qf^&B7Zxx@H32v9gkc3*3y)@-a5A%kE~(#;A(@`K?6#{sF1{S!0>ObA+bfo=E7v=7j1JUc{#{9krr3IOg?@ z+{g3b?_#@s7!uTQL?7Xn%L+*{CfK~0hy=}tO^n~~jj0H=DezPLrH|3Qz6Xymgd?nT z>de{_MCF=rzv0aoDzg|Rd0z9w#?X-AKO?MCU|{6Vx8`D>2VR$2QLB9={ngApzq$5R>*GU<@rq9U3ND#am_c^*V=iZ-NTwje9RkO z^+4aMl0@qwHt3Bt6_^p7Kng!T4n`Af~J zwZcntkq;-eprD@wCX#Cc|911Ae*!SkgVB?;32>44n!~@jtDpy3PbeOzOen6J_VZn= z*++;&4C07HAtC!QK0lgP5x%<2Iit>B?cA#dD!t}#A5%lDePl%<#gmL}nFE1V@r9Ve zW_rA$`JvlLH8wP$V#7r6uqdv^E2YOF3ME&)%A(Lner`n;k@~YgZ1fC$F>SO|F@jwC zrVsg*+9{%Ci;k;)#vP>InLg5dx*ku%1m1YJj_pXN0Nla^YafQ z0z|c^ToAd-oMxo0j}9QlVEAQzTx_I%QS~)H&_+=GXut71KDAVG&3837GMfLyrB4*M zF{Ie^`d;dJMxF(^WqnFcp2G5u8(r3V7Zm!+TlI}UPp9z|3YcPN}ga`6qIf5omZBw`U{SfIE z3H!tXZa0z!B|WhYP%}hPvqqUPTeC)tssO*G2n0OGIbe2`;nUHXdp06WQ1dh__%+{_ zy|%~yQRqLyxKVdEoRl89#cPgwE}lF1=`?9q3%o>prmlE-%UuAWH|Cf{S;-&&v6??V zO4uIkHtWBIp-Z~oW}fR!&9*eO{fnX~xIV2+2-S|{518(-4?2I5 z|43Qa$J#|y88L-J?{nK)HI|DOSRLDnIL6SbbrHn8!Jts|Gnjq17Lc4!&e4oL3(tQd z{E{a0aYvW8yF|O|qMK+Z{QSLKRyS6er0oH3|IsZ~(zS5U}_nsDI# ziPvrv`^bICY99|H&@hrE6r+ZXMcg%T$2*I-K(|>SM^1|xBX!-k@7)Ngrrryg)_~+HxOqXFFTnL;|hBCunvPNH=>0H=%6l zVmj<462c9sN5d7)a?Al-ailEfv#xb)kYAu6W*@t@(fBM7h!rjtda#d--7MOgHnkm@ z502Cia3@V9o)s&8_-LKz@a?PuFJtS@6e3IPWE8h4*%qZAka|?n5}=&_0c-c4Wd+zH z=?T8gk$l?BzFE6T<$ND!vjo(xexa&ek-Q=i$EQth61RE7Ig*JKu`1|JK|anBbrG~2 zWy%vRU)|VPek1i9lK*ezb7efNi=BPcy1pb%;$5CD{55gO19p{Y>SGgJ%~`PVL;!ih z-quyDQRj%dXIP9<-x7^&)0PB$n10&^&nR;qiAA{I?yVOD+{aFt0g3_(az_6xr> z=O^K81%&QF1ZDlMewReSMEZ^s{>(o!_3|of$ib5B`QmTwRYl_K)O#<(7UJ4R9zqDb z1AmC3&kG)FRZbz{wZj$wjAPf~4SwJsacH@|pAf@PVOcwJbcYPbdn7dQSyNSZfHcy0nZ0c!QYUV};5>YaRyL>}vF z=E%D88*rrG_i;lCo>rbj|HWy*@`Oi zv_t52!gq8$EX0#z1&!FhsB%W1vFuJDArVEMvke|;Hp?rqkGt>*a^LqnYzx-MAKOwN zchElOzLxgCeA{BP{7ANXon3NRJvG!{i|5m&y)pcLxTh&`s74|%4AW)p1zZwcpt*_l0=|rW*9%glLSJC(Oot`Amo)$4(=q1{k4Q2?KlaM zJY>G4c{L4nDH?q{N{rwKlkD=l;0$QmHS8Uey;` zRz^4g4t95QFCcb%dur?K@KQ#vxxN>}N9L4@_=%XLnoWW6Jue&|BbeP3-Wn2NzqIo2F^=6BWoDe@qH#SaOiUp#;llwf4fs_7`?IIn-HH>P=i_%R znlEoZ=^^^seX8?+W9kaBY1BCjMBUT@((%D?BQ;Im@-)Tc4sh{A0uA18q< z-zlp&7v_FZM-^d1bYl6w$q<5Tr_AF!0gKp}cc{xlm;TU6MbAhgt);#xrd(Y`aGCi* z^X2-80JJpN;c-g)-7r1xU2sI-4gN5;mjsLpR97fM6sWI>CY7kS>iJeJE1RpE{m3ng zDL}otQ(rL&mtRDa_)_nHb{d<;JAn3|QXr+kV?lwE3LtsLL4LaQx zXTI$B(lEPwj{_LX@sB~ekAZs#AG2_ILb}|(A)tCvn8B}G0G2j#L`R^OQ zvQzZ8!eK9BX;gz`_6k51M#jJ5y3sfBwXmZp)ey=hO^oo}&jwje{j;8#M_cZvQ){rS2Al`uRv>a151HEUm-UvRclKlfa#gYwBzzl&U7seWt%Vb z&3A?_B#*s%B~!?UzgEiKOU)eQpru=yHwDbs9NOnkMC`XSI`Ih<<#9Db&tbSA0g`43 zDGSEy?L)=2ql9pUFhm2aIwcSh$R8_+x_}_hXZ#Nvbn;1kr@x(%(vOL3#6%*#G$DHQ z{er-br*^tY5LZX=!cyK~(wT@>`?O=Nk<(BTm9>F~DG_}NJCF640}dkK=f*ZVJv;yw zp?glinZCwO0TpDZ!a?+M>JG-C1}^s=4Cpa7H9t)PHe6Mc8?Ak%*BaiA0x6JAD>fPB zjCXzM&j+Z3){Y-_+)Vn2OvRY%f8QC;wzRrL!Ns!#Rk%b4;krM=9A%FKjLVlKWxHqF zgU1ggCN-i^oYUm1BS)3$b`BLW)V(IId<~^PM;D_6skQ ziQP6(sZk*sRw_uO(OKGxy3gtu#>a1u-l}S~t2@;iZ3Z)lW&wh6(*wDYfMB)8195PL z+h$X}?EU3*RQqDRpf?Xbsq-d7Lyt_pdTZJ zzgFcHWUvwf`PuoxXdT13Gx6AamRLf_V(*h5zU{;YkmFM4PWX!!zua6JnCbb8Oai&) z6}=di6}pjT{pYp<-b_fdu;sUnL9+&Gu^IL5??a_??3alALO#lozMdF3`5c4U?csg@ z#|3a_QISSgq*C;LlwIn4r8T&yCNnULN|3iP5>k}V%ZX9FF`LofAi103%%V=6g#v&y z7<_k1k6IjOnKuiPMSo5SbJmteaCJ{d`jVUD=*Vv`D!=CW5zLeL$8=KL1T(JJy*kL* zzRzbVY4wwVw_s8`h(+5PGL0JPiT#{^^F8ei!mM9!VQ}dz)l>CWcUj7ysQ}kM z!}kYj+1AhOcK?Nz+}6&^gVHk%`r`VpAK0;3KmXam897jLnaJfTWN&UzPz9G0fOv+l z#3*;*8n~CWmTrISf|`Zh{#OnB!h>LLb(8nOzMd#J`AbIla8iQ29!fv2@TmKaPc}lI zUu++_a0pe5%U+%n1h8>*hH4-pf!?KIF-|tcSKOQb($^^bW6!Mq2m2Em`+MiQ-}x^G zbe9HRmL9z4ap=(pVmV#^zO91IyQ|`}E3oF;j;HrQFMDBa~ z0~KxiXZBWQ%aN1U?u^>%0YhS-|jG^{%W5YdV?p7~;KO{w{d7q)X0f5>&l)ng#3f9sY5l+&O;< zK$rJd@vu2Ozzmjv-bKFPWqk^EX6f-Sf;5HHx>!2colp6E>GXzfqh!eZ- zh>RqNf|c3Sgc$bLfBFac6OHRT_|X6ft23~tdBSUt)|j?${QeIt+(PU5?|w~|?LWsX zypUwAx*;<7(EmbpYK?yLzJo^N_#bvLIxg`?mjVsz%zxo88jp`Bb46_O4|~TDb<+5; z?+;Px8=;~QU(50xiyXHI07}|$3KK9hdBI>pu{ zEh${Kk5pfb9{UcLa=)@3h=Q|ddhk$Z2_PWg$QcNa>mYOGPW`TgRePsi&S-j>m}t+x zA63wex`dm|(sPw-yuX3mb}g?u*v~t;FLl40$iJt*w*n)X+`c2Zo(;JF9eIXsKNXIm zz~NIGy92*vy@cb4-EI&VNw}e;X!koS^s7ywjWQFPHglqPE`~tw%0xEqToR+O2m!cd z*oxQuALM=Ewgi;q%>5js7(+%JAVviGa${EVbG)YQo9R}&u&Ri+0f1pJQ*luK3Q8JT zN^!Z?xH`tcf&|W`HG{m1qZDNykOxazl&Y&{_0Aq+VN#Ojr(-r%CSgCKD$x@}Ttyke zxTk+fRT8yUMooui7rIc-7eB-jFURdC8)H( z0EPh=aXryv)%ghMGJ0NId=df5m=iF2gD3rfHaXGz)i(&eZq<0)6%v%Tp@Qgy24BV6t4k#;}^yh1zf+z2r z)G;Uiko|(`(I~_OiR&*9fDu4Z>DA=VHD)B)S@W#lGnEon7wt_EK|9Yi<^m-;Ea|nG zAq=a1xXohm*Egb|2W7ZYLSM#q5KH9pA0+E)pYBuu+62SW-a&D+eLP5!nTuD8!veW$Ojvxx=!5hm>j71CVLHU&& zZGUqxb?b9t^?75hfzTATCu+1=`ahJtby$>J`v&^bAgxGcc*j= zp@1|Zp|mK7lyrA0EgjO`T?5Qnv-keKZ~x9;=Umr#T{tuE%vw*}&;8tM&ASprn}c1j z7P}l&&xmVlj#XK&dgdE{zVjZ*r!QI`*up@sp80OZ07oOZzrp88sV%8_To09M5!{ht zk0C@!q9wpwK-k~6J8?KTFb$WP+shrv?fs~wyzVAzynPY6i%rf8GnH;)l(qfdiV$p0Txxa!Z^s6C%t4Ea5ulXJ6i_?KPhqhf&p21uvT2Uk@8S zctpNYDy6K*prOv(-12}29NyhnHHWW+G^ggPCbv6{#i#K3A;=zaN?oGn@;N6{@wS%- zW@H^7SdDl!ABnscT!#QXhnj5(;Ldfj-j#d=D;r`D-5cdhB-|Z4w>EmU$i~2#Z6g;L zBkv6am((Bog^aS;7lpQ|VhERT+m$Y3_4Nz@JRL_*?D)7S1?jaNYki!N_tiIfL=YJ>pNIV1r#k;KBKbHF`Ova-n{%L*Mw7 zxSDO4agr~xZ@wk&WZv7S`Z`KhefFCetzV-WU3|V}U>VDsr)R_BQeQ0JS6t|FMt<_+ zM`neOc<&lq1m8suIj&=@Y^-hs_Y8#+iHU<13OioZDY+d-z-s*q|2WKq?v>vQ;y!vy zoph>rj5VvDYcv&&(G;e~{f65eO2W{V*H&Ld-NvZ(ouwec>jpBw!A&qG6z@<;9n z$B#AR^e9Qb-=@(A&q#2B(<5euj%BB`hIc$=~2`U)y2 z&8f4~8d+rlgT|jJ5*81sBW*^DhSRJEz;R5ND?wosI~D1~hW+cwSkWyg9GmBlIBgrdbONsgrJ`G%#Gd1MDhd+FE9E%JBFldYxHR!b&{Y3VO-kO||=2cL|CK=7{_ zxU;T~%lP{1fucTG9Y6RcbT!Rq-suj*-^uty)=N!4N<%iKb^4-P>q4D;AE{6@yOb&X zqfCuuLI`rV>#RdoYdh}0Cvn62Y^q4bQT3(i2B{vk^>CFvF33ZJ6YltQ6QtbOCt11l zZ^nY<_^xVPm zz1KPN1iU`x>_2uiQK<2m=EZ`Vo(&&nv{Qzrw=N{Mgekl@)Bn9PWTe&`AvDnPr-8$h zyBeCh++eq_`qR|nnp$ncMe;IntSR0ES?hBD)8c)yvYE6HX0NSo@nNFGc;h*tW1~b? zY>^eB2Cw`Ui*YAV@h2Q9Q6KM&(_hm*cu0QdQ(^>8`nmxwm-^ve zT%V99>`EdNe)oQ~z+p&j*vu+biMlmJ>3?oasF75};Fu%96@qfru)bqBi$q(g^qyQ3ZVp*m3n+r*Z zP;a~4Ki{8e!1o|LwthP`pu~Dp9PidZaa->bE|n$$*DdB zyR{6PVc4U7(wV(gUXI7F&&U%{j<6YPL zJ8dgs-J3S0H}i67-+91es*UZuKfCjn+m3~m?0oerE4-=rTCuHK;p#Dqn>bhR&b2p^ z)rm>vGruWlRA-3CiRbs1c`UBuz@9Ol{&ob@UJdvNh~s?#pDIolvU_vtEahtzZ5m~^ zgw@*HuU{dO{lUhBW!ISbKQzKsB@FY;rZH3GAypU>kGApsE@h~nZH6lhqz$%*)(^GX zBqGar)UpT+lYD8L1TU9K)NaOwpLRQ`=XEZSp&HEbyt)MJ~Nj2O;WZ3ozGvuJ?sz59pq5+PtRHpo&gBnPCn`&CG3jSsHAi zIOA78w^l0@gf2!(Ir^&ef>vUx)Th4d+^&=IJ)^c%?3lg-QwBp*f~UsjIwSHPP-v7} zao*J;#D4+LVgR4u=S{d0fHhv-VFvSAy5Krdx=>gXUq&vV6`FV#c zkg8Ugqwnxy18VH6JJGHPeMM!OUd5!;J)GZIEP!ZC(5t)$nDL$EwNi_MM7%-AlTR@E zk%TO`H#BpR#+5f=)*&l4-7)HWl>Fc_<9b4wy~bEL>&zAH_T?J+m%^FAp$>S{dvnQV zaMmszM;d(b-3Ql%-4wTmsKX;aiHm!=+C#sp-FYE{U;9E|El)_rjy`Qn&hv;I8ACr1 z?3r)#uXK7fJZD$5$3FDl6+T#F>Yi&87n(E;v{g&nb%7c?xc{^~%j%Z>bH)gleR9EI z1Q2kf;dxY<{t)Jq@(`*y9PVd7`6W<9(5~~&pAEI5_0O*#sAGp#Rhw{X4+e49kuibk zF)gogWmFk4Ds||(I-!CLL>c_#*R4F6+0r=k&SYpqaYxtJ-#B(?U#Ha6plX1i#A5HH2U}P1bAp+zC^*!3 zl@hK}etw__H3H6Q@Iur@_`p(Nc~@S&9nS4O06`ur^n{%KcI4m05QDbBX9mO)S|bfk zm?OT7R1uq@l3U;F!*TU?KXdgRdXu4N6hj~_{1$Eo|K{#&^@bw?laC(XelBX9^xpJ3 z@=(^wFG{p;iurH`OUa91r*e>g=7C3`5NN7eqm z!WG7IpT5p?>G+q+AjnW}f}AJ@N9PN#r!zOgi%uIjT{?(nyelbD4P*ogOk?YHYLL|I z6q71)^DbndEtwcDrZ3L*aIxBCZ3AQLSVjU{6hnlgInK7`2KaUjeABmsvx*X+iww{v z{K((IGmka-Yq&5LO2o4vOXhN3>F0grU%t18#2_viaar)C$Hr*sy?T! zh))!P-K!(;-D5-fZd*xE&7Jh3nKi4R4 z;3Cg^_(Fka8&O_1D;LlycA^1ellZf;^^CmrQ8=Wpv-}8Iz39#(jfoB32_Gxive*HZOIu>L}dmXW|N zo>OGRCl15%Qo-9^RkROxx*Nka*?5#*2S;8vGR~rZ0sE+I+KoP&7qD8y@*hda z!rUnSQ8JJKzT&6R=>A(!(buEveetw<{6Q5zsr#d>4|YS8woF)nuUO~qztH#*NN4Dq z+#?;1kqkDgy@BDQ+G&^##S_V7pEd28f5}@Zt}5Hj#woetAugHXbX`#|Ousr5>&N}m z(Va!6vu*VzghXEFx1Lg$B&W-p8n@jATc75wM}yl9jsEJYFLtkO%ri7v8K3S;5Cf4u z&J2E5P=Q>rex%vAwLH>X8K8;y*2-DCuEr~JHT_o5f|WlhYt|_Nhv`;`q9@g0aTG|Q z6l1M42eIF!$Xt=#8L%IWabq57ST?@5H)6kkqe9iz8RWUt3Ts zV|dM_AaFYp`hgghCiVK4k%-N2U>`uts^yxj%7>fI@fr%HL!Z*tZ=_0paz*f`l`IBZ z+4pInrA318KHR(8j=oVdL2-TOXG zv=#AUet`bo7e6E>^+UtVb3#!3sZ1f4pBG zcpY&cyfAREw>^`+i!kF7~u}BCK$(h-nId45} zpG<=nZirRg{#f$17VOy#x39fCJE*Qt=wRq{va-+4*a&vpJ3l+wU+J6NTiMzR9$abo zQ}w4qmQhB(ePd;&D-G_}!C)!{2Kt}JoNK4wf4>s!eBFx1`0s1dWN#)JvHmwApousu zVl|Irf_nkEQ<;Z$3TyiXflg>%iTtrSp~`jaIo)KMmci3B*afXV18Qc-FFlM@I-FSE znUV3pAJ&fh-(8Uw?fVa|*h7l^xua0Q4`8eFvSh|#F*+)L?U`)*&)z|B8zG4Z6oHY= zT=`Gy#2+ z+Ng%(>`LA%-Pd-1#ub$Lrs3B0o$d^=1E(|2r}O4L`48`O{CbiL-&dyZhrCq`xRWF-t!I{ej??e%Y4gAoGKr}W!`1VhJb?Vn)Yq_g` zmIrfp#kW*EwfY#i-LJ;Xo8fz}g95C6eW zUD{o&fL-lciR^c`RRebErwc5lXvneWBx-dB{rH&ho4vr>P>zbY*t*dKZVOvsQOv2U zVQ}5Wi=4tYhkx_)*-hvc<(tP575WyZbVa z$+jC4xFrAY>KIcI7t zVc;XY$cTD_n(q=iN52}Le~JDt+GJ*5e7+F|aGUSi&i>`@D(zEc z{|2?t1z6952w`&qQvMWPpM06lms$ezM!zHrK84;mD$AaW|F7stZKC3q`DZeR3{%Q+dulgF6V7GApI$H`rA=$|L+2EI z7~9#dqQRF;tF`TZttT_SaSNp%#T`+VvKBUS*RXn*?9HeO){HilxqdbN^;UP;y1kQl z5!rSuX?IeWi>>?4LG38uj`rqL#7p1=cYNh}WiXrHJoUXVgjQ4Q$zt}T+^-{k`KoB1 zW9YBs(7sltB{vZ#OKnXnW_TH|w(F95i`{D?Bz+G)_t@eBVSV9o0cXMr;1b84tEoiF z$boM<<=PfxLdy@Jqn5`8$qdNBO35b$VpwIr`mm_b+%s>lv#_ z7FjtF0$cFkrMyZ6&FN20d<7j_x&G6%UCIYn3?f$#u10^iwbk_Zq^wYHR~@f}r7|Cm z@B6GS_c{}u=pakh=J0*Wy%}yHJR;{(tr3C}w=??UcVvwp^hpChw3v1|Tz|vO|K8v* zxRDj#=rnxMEZJ@f&n;Ph zC45kHLG-!-w4ojpc4o{7Ba=QA>ZK+yks*77SO|}iVguXWg&tg;*#7^5D_PwCA)Pdt zU2soIQjx}`XQeCGi|pDN0vNSa<$ejJRP;U$gaMt$`IbQ;P(NP!@%O<^tNHrohp>>r$rcboBphgx1`N4Zg(gz6LRyM8wJguPST z`U_O*ZzI$Y3Z9=9C{ZZ2Z#eh$({SPCT3;~C_g`+hnh$;5FtoS zgoQWW-w#RAhg2Eux^Va~z8O7iX=$nRz4!vQErSQ#_2|#L1*wi0Fhl>7$7zTEJZ28g zwMxdtqsI*%+_II=RK+`!XMl|GwzO5XvQxOefoG`G!J}9v=mG# zv{vcSnoZ6flrD{aih19U1sa5z!yiZs(yqhIC3%)yaK|;EmE^k(9ayJ)elI)6DK4Qa z%ye+q>$z`zB7K-p?yx8i*^4xMjD4tQZ%tWCOG^#>+)!0h^P?iJzSU%XR^cax>3;KY zk5@BPz3{)hbfq!sCcqZ^j+K>_K+1Rh_Tk64|Lg^rKTX~DBKONnB946Yzo}iGYjqAX z4_RKn3EXufKCPi|!2O#_meLo<&r0ylq*!^H(SutU(AgPss5|(>;o-{~V{K}qTfu>j z1_>-VvCei_>A^N{l-`I($Vm0R5AjdFYZz$rNNQY&Y*aaaHP}YW0(yY8N@pVp?KkFD zRwlN!w!**}*TpiRQo`cWC-L;u-Gb1C*uYBwo{+Wb(zZ)J1tsfekkqx<6^ctM; z{_H&eI0^V^htB7|gU@onxQ)E0=e=-wV;sM47Z*N}@+}4jv*J)qb;EQ1&zPg59x5jT zP-0H$tBmay5p`?vRTwQ{-FucJ$KE7|`x}h-PFr~Q{jk5@=U?o`yI(LIzKUz$Fa9tS zTPm(3$2c|oAQ}O12%#k@$vB;_vHPnqy8`|%A^!v+&QBAfEn9(G{|@FcK9`D zR4G(?oV+c%gn=n;#}mqr&el$hJDGH_)p~f{j|g&ROd?l@QN<-gB4SJ!jh0YcbhhOx zhK2A-M4xg(LOUQRk6m@b(S#3=raLH8)&# zv53TRoV@q3+$1rWe15b4^}tIvgWR8@e#LS4k)|T@_kD2|*Ql)8TcnB}n|>wi$P1zf zRtoyKUj98NU12%;Z>2v=OBDGw_Qja3#bx=8%-eCBXEat`M?O06xJ<(00W$n?;Y3n{@?u+F zKjY{U#%f4Ty5I=vY!AFyOioTb?wxpTymb{%g;XSvNn^a8*hwB6tG`ENCz>T^=6jx- zU6~d}r?Zj7*)?9!>Xz3(a~p^*%6dxMa%*7qX3=yMnqcVyRr^7-_D8(w5iS|pM0 z`a%J_6grl7yv_lnJd9NS+|jj{i|bc$_zJ6W5`p-ABH{DY_ewIc$1JgDnWAJ|$51ed z+gTb!(|FKxP}}^S3+9roKinm! z`$YvkkV$prz0pX~NkifoUBdcIx;Ny}^K${+@p4Kj3_s>4X-dCN4x+P-0T_|ZMJJpP zL5tFf!&Y>Ogd3KB<8obo;mFKxkfd?Zjy%~p znK%P~?@r9Jatn2QEoi{tqlW879L zG5JjLb=R+7mu`~aaDoaZ$uA*M2GHgj^~B=CBMoD)Uju}B~^1igjea<iliSbj>MFI_gik~=&JoFH@@1#yd_C5|ew9=; zyf+gB*Q#S~;jH83CGrH>y#o9^qYl7Rm518&R*)7cCa6e87_9{wj>;ep>bY*n2yhJf z*s1Yjj;i%j^N8ws5&K8?Kv*V$Fv9(pVU(ROSPNtXiP@wIR?_{G+sFt-kTUrUhByv1 zPIUOg7OSt0?O#oN!W{P&#vA`Y7OCv>>(?*w`c3M8xQ~~*KK`75&+zGPP`&X;n9!lb z=Cx3$w!yOp{(`z`;Q^0Ski{Dyt z%F#r$Q$ng{B_e79G`EijLD+qShT?c{Cyc+5y$qosQvGq=$*}VdG#*VH@BmU^Od=5M z9K82BI^r!sG;xSjr+hOD^e{T?6<=qT9QL9pxnQRYLo&{Bkd^&_zR#|A|KfX6TxMU=oNGdcw2zdQ7P>Bfgh++U~qaPrP~W*I_6{@Qgog z1l}vW=m?0`B$n~E(_W`X^wXdch)YJ0yxJlEjwx(0FG#KPE&Bp&G|~c7g! z{&0rRLQ`0I1KE7`x0%^}cGj!`7cd67jE;DLq@JQDyuacBF}MqY{Vw3tkCc^Nx(yzw z^3ze^a#!V;iGO>07q1>%li8yFVZb6hzy|g}ii=Ydzba(Wu@i?02MYT=;tHk7raA#= z%5ZoY6XBmso?#}agcE&j+#BCdJSCHIv>WeE;mJMA?1#L(yqfFJO;X?dhc_a`*S!es zDHi@)kJx=!u>c?L$jZ)cC-H>0HN93rFu1=EU<16+0_uM4&G5^L=E>X>1+AfzVJeo# zq8%dk{^Ai#xQ!;Ax$1IKf;R(TNfheP=G)}9=)6)>wQ^qB)K36y=%TaDSTMc?=+Mga zgj?Vlys^=HfcfL=*RQ4+PP{z!-3ZqIlthN8^Hh1CYni^m!7o();kO{S;E#W-q=f?f$?3a)e<1Y&Ua&ys7 zv0Z4C2~BRu=ziiSDUNY?=D|(V$Z5(TP|}R+Q5H_$DZr|AyPgXY)>l&-vE!kxEkE{9 zQVNItcS!cF(q@G<8;385|RP$R(=`t2e-0C?D8nG^BN=MvF+Xy zV?gd(WuxC=Nz_EejPMinXcP5y0hM5YL@ zfh3WhD;g$&^Kw5Df$l^QQUw4sq3=bE@vFdM_bsf@-CVofVS;iVEBgl?B zTK{k9jo1Q1DNtw7u=6ez)Vs2>lazCj=UWIeCuP|{>DwSDWMBpo>`QjGsF^(ES5R6y zl~ulF;GO&?If4uqhQ0rR0BGz`f0sxDRAm;3yI&gW+i51xzK9uD^5ODzbPv9SNi0S* zKYg>qedEuhPQ>rHz{@M0$~6BH{Fon#$&Iwkevah_O)6ffvS@u8=u0F|UA|Jj`Sf&d zY}!LuX}}?|8FU)=sN=XL{BV0cf{kPjr38uQKa_vQ7?KvGvVlTBTw*dN5x$Ck8ZNlx z#k6RHCUxA^AJS?thQcpCkpHhK=Y3u(TPwJ@ev^dljd29t(GkW$Q&TkcRI2f@+_i%I zF9U=k{22_RNp}pBtV6qaVYQIwcxGcC6PjH z0ogN6tg6&N;{E4IRE)}XP=P5Y_Pt3tDLn#N-QpL))*nf3zzW?RX`GJb7))9+sGS_U zJUa(@h$_`CiqA)~L;m%x<^!L4mNV1>LY^usztU&WVg3w+hSE}RgI7eRufnc@@}=~Z znsw+B$N^BJ#e?r=3WST@Z?5%L;X1L&7yj1cSQI6>{8b(i&41g7QMuxqzs-}ZD${f=e8e=9;rX+TA9aCTyyLX~7j8)nW^Dyk3qzB4m^{Qk4HE*HJx5;-QU|iMg zXONVq=la?2-%d6ANS87?=$oS5gyZFR>c%6SJFha03?|+VSSUG;$>Vugz46mgDQ1w0 zvXT_;C-8XEuGIPV-UiHEf|`+=`4+Cnx;)+DD=yDCK|H{k+eI3#RSBE&EN;G=o=ju< zH+ntHO~mzy&VKe%s-73m4?lANzw-$8AkgjQF|E#r>w&&O=k;3s&vl>5ek}JN)x(0( z(tNjUQ!yf$>KxztuAq=H1L>kqSb$?6f@p(WVXu3le+7aWA+$eg%xDb5=5*n zyn<1wmYG52XX`+Tz2be{PpMOrlnUd6j38Z>tRQQ5bVT^$C)!kTqn>n=&()?3qI-f> zOha-1g$#Cbxk~TA@;4yrtb|NYatJa4-_vE7aD8hJ{50S|@At<>F#AJ%yclIk9=gN6 zb7xr=-1}35bwgT!<91ItN2M7)wsfl1K%a;pYpYP6+6KR@ zt-hval?V?HnQWP+j!tc7QA6^9lKpy=0N{AcB3I$z;mknq5lW72Dl|7Sxm~2e$@5W3 z$R_E-hu3mG5_j*eJ(81a9bEUK3^V12v< zt-Dnj<$)ZI7YZBbOB#{?Wno`-Q0I>yKh_%-`lzHg>}Dc-Zfa_p#QZ;nO_}s++<=E@ z(^@czoQCGz$jFGfUAYgq9Zisx^S2~~@+uV-7596V9QV8=(tFGzDA|~p7{^7m1~I4H zq#0?Ub1Y%+E5WEN`1VLcTq?W6@EJS){D_6_pY)$5M&OGvqjeD-Cm&|QAd^3vY5f1N za-cUxJwvSh{tCJXkB10wf5mR2qVSCa`1Q-27ulE)u$~`zx)}>pES+w~@IXMo_L-uh zS7uq+5ly~Yn6?e7eO8e5@vZ&G-~@KDqukuw6w&Of)<=DCp2NYbrUq@!ctdo5`w$F3 z0TS70+>=;3>49*~8K)?P*6rzg_q;w0q=Gw51Vw4{!CnRr&Yf^BS<1$+V}3kjF7Ud( zWa*<|YrpyrMZMh1+1c8dF^Jf6y}EonV^wAs&yrJ_m1PEds$XY`Q_v@=QjP#P`FbF~ zTs=!ZIVUHFrc<&~Q(qzjF?mBUheu8~#keh+lT-p7BocxQ*VxUw>$D>J6x;%6UB0|H!c- za2XPUU$~Bi=3|$Rw@}mdR~QS(ogL+K+`zfD?(S}85&_DB+#G{4EmbwOa?P`I)VLRF zRXCJ?2FZcPa-CD5xO;*;=KdV@WY@%U8P2FGS4?NmGAn_iU^Mo=F+tcn{Mwr68!~z` zZ(>L7N$i`qFXLaI9NzoS$PJ?%RX*`Nv1F8YO4u#RHTxG51(!-zyEfr zOeV)Ol5Ma%G(2p$GhLV0|Fwc*`S9?;`uck4bBcxj9nd|TpCC|fKT11UjaB@LbnjV3vGNxM;kVfY0~Fk3NzsX0yvP{3Y~`uAI&kUhLm1h zgGVNr;pxiEWOCa44;o0&ZmKgfI3t5`Y1PTg3n_n$pgJ!wJVu(bzcD=9Uur)t*^tKb zt$}q2AueqxE0zl2TX(4)*H!{4CXQ>`TYUpy7w^jOS&@4k@;ebZsi*a4tf zj+0d6fBm)3mxZGY#i2WMbmr!B$qxjE!GgYZcAj8VvU6`$eR=uu`M`i`=1pcGF1y-I zRXS!{?l!%xw{}O`l8^ZQ!3=V7aY;-~HESB~*_7}-B5-8z^_0Cj=lF&+c#lDz;G09? zKx7P;CcA3Ak<0o_*l*!mzqNJsNyXRZ!m78tD#sT+Vt*F!G zQdfdLTvXK4P11BG=@*$CdiKkYDoRT!gyHvA5@zrcX)l$Z&j|1#ZEtgYzdT#JhGU7k zuwLHX@7E_>a#cf`0 zKa&cMBdG|!bN@Pl)b1|)!ZAuJ8mwvf?w^0gN-nL}7d2-c+rdLaO145;VG7heY(h;( zSEtP$!UF~<eGXkQ=H3j-H6q6P9 zeY!qJ!tNsb3SLJRA;h4Rm(@g-OH`ejK~XEWvAeZ|F2^Xz1f6m1p21OcLa9+x{a zIQU}V7`<=;4lG?EygA*&M-HKga1EwC>?|$!%9jRFuaJAl<&&x`w6iLYbQjD~sS;k> z{1TDY$nob1Jv}{QAinEjPQjfE?aVR{iZ5I9f_VgBzteX<{Wwmz!Fl?_^T=v*vVs)6 z)%|QK!SQHVeW3$><+#1y#hu`bH_@MxlF~M;t{>6fF286!lHSk&udttyZ2g)f2u@^( zlTP3$sQhel4jW&o4?pzgd5Wk8SP4`?HDYy zM~t$3-MK}Fd>R>Bdf8ocb7m#Qz;|+O&61}>V=DgAx@AxKiM}b~`PeGTDG-O@)~#DS zVq#$~8zUJF4GduA=37BQvc%Luj@bGYAa&jy9FGe>G77~d>zd9Dc zAYOn8DV=!DAnA{HW}@D`BS>}`(bTAMz2Dy6uA-|8&c-cYnzst>-o7LH4jblI#bCJ2 z+CZenG;r(x%w&~8()(0@EJ?acFtm54zrWwCAs}?#{G*Z?m<_Gaa@jHDJcvL4+btsU zlI_hJVlao^`&^P%a|P8W*5W;ZI=uLG{r6qJ0NHNtmYk(K>|YCuXK)0O4O12t7LD&& z718qp1I9>9Y9F4O+Qh-JDMrtZs^RqE(9lqNc{zH5-}3X@c6WJh(bDohcmR%HG1GZH z@NlHeBN6M$9C2(8tRnB?A^^=E4k~vHWGXnW_A}bkPGb0NZ*NZt)$b9TlxW@-c7TqK zjylas+%Jzti(I#~ICUz?`1$!O=YnV*4p&vDz=EPkk}X&=@3kE-#!*b*0xL7vXxqhc zsLx*^cSvpRKMTM#4%7amKaP?^C(M5y+0qDrO`|0ZGZ)K3za|J9lNTm`|1Ne0Q{>;d z;A2miNkDPN{+vqrX|g?CV&3QDb-Y;>S6lCy!cP(Wih;%jU0CrrC*)qJ zUZ@u_oD1$)lYc*6l;Y2yKUHWGq+O1u8BUhlYJlIQ0yrx21qT7>H_$^rz#p$)zn-n$ zC}?S;(%;-NR&2=3#8QZ&Z<}umL)+-3x_V}PJ$*0>2#>wbIk49^-ce*MOOP zHneBW}VwgD0<<+8fc3iBGL!Mfc-l|IbdbzFLQxbs@*c#}Q>^ zWnk0>1IJriTePM}G#VH`FVgEfKuEb2-^HL6vcqmj&RV7BUm4G;w^rI5Wqg8?&9x2pECyA1h5-h35$jAs21i%sI zbzrp?5C+>-EA$*6@xeSn08!t*-3qJ`&!rohsSx!!Kc5(wz}VPW`1NY^XgkO&w5?;x zGBZozHal7-20>l5- zAwgaGJTpCg)iy9N(2)G;lZ=l~-OlP9NWf)~cH7u~IXQQKd=B39Ii~T$%uZr-uFqWU zdZ5!ZNwPX=FEeyi@i6)Zk(B67zrrRmR%BCIy>;`1K9`Q~+0rXCF8iF+%sd2#eFMX& zym+yI!{ECc$T0iKx}fO#SlvOdn6v)*?*#Bl;Lo3rxo3GKB_r3@tw7P{)GYooE1~_` z&25FN;lc@>LmcV_t-yc)Rv-wdtJ4(N%OT22N(N?TxP(+(ay~v1xOjL)hAp@{Zhu^2 z0?5!&35=8h;tDL@T3A^%gOueJ5Lg=i1B|=6u_3FVfCnzYXtd5H2Kh${xu36P12gyo z|3J6F`{44@wkBqo*gGrH#j&b zd@|+iRt#@2{+5OLMiY~t;PQdkmf#k*>2~cw?-aUBBeFg-t}YXGvQd6PbUa#+vF{#;#stFU(e8XBd* z=YU*>ppgRIF!nU>>((QA@AA5`QUJ*}1Pwvr$B)wBAd|K1w8*O~-`cD5jn%caCeVTn zOiZlf$i05-eGQiu#{k7NNAc)i1;A(Yd<77r1PB)U^MbWYYBpsW&?9J9zJa}ISWx7f_Qzu-rOMv-APIo|QRs*n9}TzjFE!le6u0S*HLIV) z`hWip0Q~iH&P@RU0dP-a0xN54UP;MqQw4zT+{{e((1<-zX3Z-s98z8`h@K%D?;`0X zLQ_-eIrVC(L6)N9^Q5J_o9G;gtaC~s`tN-KjFUarb2O@7Tds13pdk~$VR%*+TX;l- zA&6seH~j0A+hg0Db|n zeY(gFe+R71y$h6Zf7xIX3`p{FO?d%b+_rx!avzmdgbJkoEtotCLZ>x4(Ln@>0GmtX za=@CSs>9Nbj*qtuJLceMsxaP(rip1kO*C*j8xmKu1$N0st|YvUU%u;zp@UnYkc?Sd zqkmI&n`%tID%GR8IYawbxZ{Vo)8v#Vrjx6s9Z_hGA2s1iH%1XwdITpFpK|P=1AAV8 z#>xRfeQ=aGSLH0`lG}SNwf|pLgy!bta?0=Yn{i0{V0% zh)>yyxn8lIZl5h{{g!H%jp&~yXjB>Yg_hMeL_l>y`$|OQ9iUU(wDbC?BmKQ##A$Gh zH9ZJfgQZ__dLvj}ko)pSbMfG$VI9Cy@>jeIb!$enSJ8$q{*ZX`S=xV|M?rE5u$Kl{0t!snNDM9QpBt8wp2R+uF8~B2Hzw zPa6vq%Q4$V^0oK&q7b*?$nn0sLQD)OjPianpn2%>eRy(W?CxF(JMEvEvSGzCx;#J9 zsPinVXvR(QMWan19w}4oPXi~XVguGlz^CTkQt934lnlA1ZRQNX0PR?SoJD3mw+@ev z<{JI6G)l~fMMXs&(98)Z{NqO&(B>LAIP`Zt0_M_d>f}LV6rch7k%L1+Z_+Ln*@Zn1 z@1RQ{8f%or_pnpF_aB3F@rXq4F8DhkaB*>e01|9@&`UzVMkmo`kJkp#Uw8NA4#ygdg<58Gt0C=P=h9 z!>kwI0x%UaFfqXf@dB{ADTY}=MPEPaRj%3`K=HP5^Rx&+wLLm?N-fCc6%>lR&z!;| zBR`jv@E<-pJ>HshPP^PRM>8={3row(nE+An_P+g5sl7{ntiqnbu69pe{9?DIO4)n< zM!RRj#S*tOmG0{pb%X1W8X#t%l!D4{e6&7HO;3NkE{-k+uC60p0U_@_no5A7`UWI7 z@=AWV?->=YngDXZ#>Un^I=UiqmIr|x;n)N8b^(-}ma(x!^(6lk_=|$d`OxoZXH+R8 z&Ii%?<1nIWZfIjeWNT~t5Cb=!98HDubgHfc>;r`(=6r5-AQPP`;L}01K@&hU#O=+u z;Y@m&&)hb1#rxX5XH!@52>gwtr0QC)^HC7Y3lnzQe5Ccu%3HoVSS=l6zAw`Z0 z?J0oLj@O#^rSK&1Vj%gdvE1K@4}geNrnwE{FE)S&rJ6`XV(`1}xB zE~elD`Qv@Dz|e8hfbyAgUx+w8fTNtzf1tT#L2fR`OV`%TO-{7&0V`fuO3=sUNnix^ zJ`5lc5iv13Eu<6`!xCc1an-u{K*oSXN~J{F0Jnm9Sb%;rR8>$=a2_;=yl7P9KHVL9 zp}aJvpXiEC5MVc9hgnDuap}Tci7ws4ng)X~;I>_W?r8Q$O-%z%CixBfgB1Ffu(aEye{~&Xh5Puyk~ixB~!`#bbmF{#3iTU+i@Z z%*;dq4iB&j-P9!LIK4~oCl3my_q=nGqwI4H?2rRMlnB~#P+oY%#lwLEK{MppL`(@b z<^jD($9?Xt`)Wq8Q=`uA91t4X(Y%b?cQ1^GSZ1+=1nSOz-IVnL0#Y&u0QTBpp7{IP zL7>9hjQzj>$)eHVD*@1KJ)fuuaMMRkcm|UA(LH8p+WO<10!=N@%n7{zVvhmEi>^d% zVN}K-(SX?I%<@zfbv$W*5`ScJ1P2wUP6@yK98drD3-bvAoPX9st_PXY{Rp<4CZAi| z+WOOS^|HeVSu7Kh7w^BR(Va6g%#G7LRwx=|!w?I8V?>oD2(?A#eJ2U9i@=Cuz8zP2 z=&}_>NOcM4;|l=noD_iCx7^$oe=NM+Z4p~9n@q~&C6Oi12C5fQQ#rKM6cIEGnfrcb+@2OmZA|Q7R z%3>vQaE*hm{89`Mt-3y{%w*sI(6od44j#K1q(1lz=l#JBX#E7-i$dRtO3$4Ujr!nf zzz)3k!t@UVZdB_yw%vRM0$&X5uB}aPQRJ?BQ&hyeIn%%Z_*mknPy5$+=tW=SV_{*T zIVk{XbaW@#*VCx$I6jPvkZJ_O{$77lw=)MOD-T#Kx?ck{7ci~ATC4^H{F%hjOLV4; zmD?tj&0-azw(JqKz&HG$E%^bQD1NpWi~exX%K`TTR1F3RLqtMiu3X!*)&{e5o+LN#&lCH%vJ0%FvZ**?$ z_@2}_f}~miaeiba`y>4gCoEeLa7U0IyFkVQm4y-rMrhyG_OSy2frrNrje!iPJ%)%V zIOv$cHe^$Y9}}bi#nF^IfCO|f&~oT=J`GBFkR|OM9d%0Y?mWC(VKe^R1$B9{0?mTY z?a(w&c?(h>kZw@Sm_Z2y76hfkfaV5NtBRPEh6GdQftz|UqDS09M3iNO(-+zQ-A%8$XLu(0qXi;_n{>-MGkTEe}oWB&P7 z6znx0`Du(xQ3&G>_Cc2dW}5(B>kxwWBaZ5kO90IGm|eR2G7W24?FKq0HaGJsDDLtI z-8Av^yp^k#-;6E*c^dw@HLi0P2YnqNXKH7g(Uz>P76sG^M9uO`zKw(YF8V zT?M)|GDl5u>Ux?keG(^&^=Ccyo)~^;kUeGLxK(BH^E%LW7e0q^HKTa}=>Mw9WoyB+ zps3u;`_dFZgggeng1-d(*zo6j)_=6F+D$@9j?d-gBVFm#3=AEB`Dsp}yB_qxxAG*S z&Yv}5OcpgPkDhbb`FsladzCMSC+|w;L(F4?dOs#--;c39g*F+#%QMhQX2)0i0DYLB zNRijc_8(4Mj?>H2L*MDWn+l6)d4G~ip5_%i@A7f99I8a-Jy;OXD6_h$map{|4ajJ@ z0yM!ttcLFmjgC@LxZS3q*}FnbSQi?an6&019X7{!!7|z`;7uSp@u1l>)LB~HT^dr! zQyAz7`e;OANF@$cxPbpHEIN~nnnItKgY#aCipbFr0ED`|4Sm!tAjPl+gbsl_?xS_q+f-YNgsvPleG%8x#bzngtj>==r88 zN`Bak7k~Y=!~MI7gZlqf(zlW;(hrKb8l4`;iEW|w>`g^JN4YLW!K3YKnyOdLWbDy6^)RuT+UlhISEqWK2%4Rdp&1{A0 zkk-}J^_S%^Bi#fm3MIeDmy2#V^Zj*jA)OqVWQT2cMDABya9$$7_kw>rzExw!OhSo$V46BxS3 zGPW-8R|$gVamua+aD*_>uH>?u4##4~10)LE9l++zeP*83CS(XwXiw*9-@1BP8K{^bcx$VX|#rG>CD$(#7`s&!3a#}#j2;Ds# z!Z*~GT3qGKY#)=_8t+W{$L62~uUU!CUujryt%0ejyk_Im3hf@BO;(dbveownhd{U(ZrFwfzF>#* zZ7=Bt#n}F5IEn4XXokl-jW`1R)l$VDN)9<#&yvPlxUm1e-_~Mn6kCMCk}omnO@BJVRZCeqKrhx}Ubd;IP8F*!Gy-rK)_8E=&n zd@r>Q6-aRy>%&)cY$z`E)Sa}Yo}^LuvnzHS)lN>X1>;NQLwtIUrjQtm8+~&p5zQZm z(8Qv5Z@(2fZMxW z=v~f~gZ`-J=*Gxc71GNYmwxvIeY{=Iv+2Ze&bYj2_$_kJgsV2<%LdkF(neiWIqdaf z2yy|C?JM6ibISyapDt}FTFQ^+oEmm8rluD;_YCHPHwN^_t=TlFxJOOhbVY(kRCXI!FXq;hNQtrBnM=go><$=o!VzJqr zfoMbx7%dxBpA%eTJ<;S7H-y38QzjDk+4*JrxAxpyW6x(X44dgDTRkMo+!gWr3tHRH zyZi`5TD~6P|Fr`;zy_kK;T3%dPL0BuecPoizjBo6D5{L_S1aCnhV#e6?IsB8=kxM% zNNXvVicmWiY0$77_D7}~d{!)wUfb=$9%+EpA*owYW9zvPoyi&-+q`~9F(+f^Gb45CS zetoyn_okZ^3_cQiyiK1Bp$rxx;KBd_9GVavgUdU21&^a1*e#FMSrJW=zX|yZ?QTBEgZQ*%+g;cRPUfHbGQ-4o+Pks_u3a>4@3{_EwasLelmoR&3Wg=bH(1Xe zti=5+5P>3vq}UES);=+lHnT&RQXMz(q&s}Kh0H8M|Hxwdwm?S zzjb?K%w_wW2NMhY)D5qncE&KGXk!VD&=;y>;!P~9a6F;)rL}VZqciVT_0pf& z(Ajvt@*^_VozvImu@+DK60TiKo~h@+jrk(bzb{`$m1@|M-mXSmy*a&Q(>0&%iBYH1 zO1Ix%0@5|`8+}XMpRabMtoHbM-J#Fr3REx*KhSs6V8SbTPFEeB!pt1bXw^nUl?#i# z+E?`ayDNpwtpuGy_~N|Jwbm*X*VoN7>&@sM@CboIGtWd=uM$Hg?vU?>E|tY6MiP ztO!+d+Aumj@VP0%;UOJ=7V!l{qIZx|Kc-U)mT_Yy(j6 z-ZXf-q|lH(V)0hG9XlqgifJ2_)u<1rt!Y9fw5ID2j}LS}aG!MhEO|;sf%Z84-dLfS z&k0@QUhSuMi|v9wjVvi1Q)QWZk+Vk-qrM9=p7h*ME+6bkYQ>L+Vc!h~j7?5#J@q^S zYB`KYi8L;EQ`EL!i8anBw3~fdvaZ^(+1@xQuvjPGea|9kWC{y>BeB94^1lTj-T#6voCffjkeM> zZR?b>rE3>}rVVY`K3KntcdS3AP*{YxrrzzrVQNQ7?{ELK!}MZ`Z?x9o4mi#a^ULpU z&fd=}{=LuNeHcx8QK)-3$?FHDxGO+>QJ)`)ZpBtm@Z8y!$GJzbWwR5Q(WFR)66rEG zm7YhrEz<~F8ZpLH{z=R--dg@5b?!OUWGp;82|Q^7g#yRb~bBZAVIbElC$ z6u+#&aY9h2DAU1?V*pI@GD;o$Q>u^9_BltIiuk*R?8Efk(_(P@?XDoY4dMBA+A@YGVR;$hJBXo?{zpski$KdP zo&UR~A&D}COizE!p+ClDy{kYIj&+*gTPW>vdH=}Ss!VMi!@_2RJw0(N*wIn!F(<6c zlZ;TJ z;j9_uO|R}%``8${#W8Ji4XI?#W=Mt?cOjOzKGf* zIDDUGihOkEQ!STEzbCUx`mCs)?EnY3rAK(XyY`v%Xg@DWe@&^0hmU@KZ zvbsRrAmnU4v721o@+j=btjK^f8s%cm ziA{eWaNOuOdfxKtBW&I6Xiyrr&|CqCu3i33tdU65YRQ5taqfTcXYbfkUMC1HVde)p znW^)X4>Yv}&Ei!&-ih&Ejj?|=wS2p0RZ)XcKCqiREPPG$hb&1;kov; zS8d;06@p{02@P!=9T~7N=|?DAY+6&`tGeh06%)f=@P2;DYE`j#id>pf>L`zv^BN{`U%XJ&50r5 zEw9Bq?n2 z6Mbw#)<6PcbZ+E7B3(24!5W7KZNkqp_Vo?)^A$)Wit6SuRbF4C)%VNX*>UM=zb zcj4TBaRDkSj*QoKvq=P2xZz!&GO3MP$}2F+xir@=h&zdd9D%7&FWpQM(?!!ffa>;6 z7=1>M{BGs<+>|?Zoh>0D;&3oA$fpp_+!K;w(pvRJycsnnR#H$^hTq^X-*k6EcyrwA z$23teT}lDYo!evm7YFzs+9TrNG`3>c*pD#m-Ng-<4Y8I6Xi+8C53c{Uo<5P}_Sb|i zw2=CY|IBd1bkpUPDO5{#^@9NQvS+{HRVLk?Ye=MWwioipag(jX-m|v* zPk1#yO~%MkjhLX-T2J~e(NqLSu7*D2et)kS*VJ@e4B-@gaY|(oo!*oE@$pxJllkmV z15k+VQ{~y7dMC@RX@%r2kuc{U1Jvkm0jf9*FXK32QHqr_b%gis%K1&a(cdA9*`{li zWnt|fxB!Bng>Kq7jc5_gU@F~M_nUa+u3%mUV%q={o% z%NxUmUkm&1MyuPRiXzHr2XAR)B^XW50ZhGD+g;CW_=FCW))xBBsDNT`m3+0NYrt@% z3|Ji7SVIg~vv$YJ2y7NiJZDSPyl>iu0V+>yO| z?fy2ljXX6r_XhJ=^-rkSmz&_M4$57`DVjH}k#Y1rHK*$lis51~a;u?ytvtJWSmNeM zokbO{V(Ir6YZ28?MqNaz8%ZBF+Oxz1h)R@wF9h4wTL>ab^Urod=F)o&#(uoarQ_Qh zK1mPg1(xx^&V<7L71E!thNirM=FKT(CTX;6>{IdW%SzniKLV%rTzZol{Djf;+8m~n z?{dhB@cUF<<1NP=EJpXR1V438`O0O6g?#5SKD81d`gB4+L>|6uwY0EU%HbYwC6~J9 zZll?Db3WPbNOV(SY$sLzDleakM(y`usZXY+ret?>JHF4jmX_P) z?yqDdGpIS6+uIs^!{(zuzSBSV%GoRy6hD2n>BeK8N~!kwLJu4#hG92kt&L3ehBJI# zC{uf`qw0LbD1V(8I%Qh0tyWZ#;$2+o_YCBANe>-{rr)1WePXfYR``v6XC#9!7IV#T zl4Kx_ESUOE97s{6DvJ|JgVc<76iaNJ0cu}0V@4CnXS48OVe4if9LwPf{0!dqZEnY? zZ&S$$#?c7^L6MaM;Y!YU0G&;mQuJ;qgH05)?n6o+?X48TULQCZrZY;7?Q&%0(E))N zVaLoc5-Gw>xqub6ziDG_$k=$gv31c_*c5v{69%sRy>3QnrQDVN*hyNO_h#@Th%*XI zUskZQ3+lL>K0p2oyVE6=`IeNNlB`Muzk^!q{4d-K6^H84`R_sohXuUX?JX^0zTLgi zgjKzzx#;~wIg~ar`vQyl;`76KQG z92jX2Xe^I6<8b3 zy}OSawmSNVklVaS>%-D*%SX;&Pam$Am}D^LbwT3EvV<-OMWa;i!L0|J>5s_Q#$G0D z9Nc0|;Jv>2U%3~~JQ&X=t?byeVOBsXWM&U|VNC~8?=_(jyH0I1Ac z4x|NTer%fhSrc0OlqVF|f;t{)+@sz{zm3fFKe6EG+OJ+F)oz>>)Vd z@7j<_3x`Ww`BfM@Fj_Vb_vJ6acrrmN@<94-NU(5({}qu#&{=MMUFeg}AW)RpU?38> z6~1pi*&gu29`g*0q_`xg#Pc+9qw#gjERflL7`Q6JQ?oF^@D&&d21S%Q91JmcJ$+d! zP5>kc2{s2s!3Se|Ljs`VQ7S3SxdNBY=}U z@$5V^+`+6>pKt>DpW8XupBO-ushV|_+~_AB(14}oo9Z$}IZY%Xph;@fArSKn4~J&M z-vKHC^TLd@f`8qLoXDS0=0Ojiaa=4p4VgL2frF+ovp7RC3ME03PPm^SS)++V@Sh;Q zDD_kxTtBVUtUvJ35Q$ao!K_?US&Ij>t#2=>oIEOM6Qe0c!GPm*w#ry_no4U#plLiT zpg6B#$SBJtgs$yXp*#PG0=HSC8}0K1{gTg7P?`kDfU=)(Fi&ykT|~^yA5{Z6=hVZSni4w;zyRZZ z0y@h~>cPBdgHvv9$$@5hSu`P1w1$=n17Z?pOcQC1)}Vf@#dzj|AS{}3KT9{4!w)I> z8ng>={bsgqV#+#S!36)AQp^cVK@0{v|8r$+^Ggf754;00Z zE>}%Cy%=^dQ=k(s&fnBL;9M>c7Cm|t6lL#_g9W;1(m9Gu%KxH%#~2Yf0bp~qoTL?s zJ9LBAyMkCDNEw47RC1aG&OjT~R?D=a#-v#|2ykBO0qq2<^324FgN*tX)(UZFpfBdf z0>JqFO#rSt;KAw#z<>w2STs|8c!9_$hy!;pEvW^AWVTUoCNKpZY~Ky<;^aY=5LHc` zV^$vEl&T$RBh}3JfMaa#t;+-c$s|z#6f&{e9jU6 zvCC8^p^68}R zqqpB?@>Oqul5iFT$-k2af*?Qh zS#6sjcnf4rZIy;E27QVwHqsf`@#4(kgVwir8b)){BFM7cpo3(URQO-+ef(Mi;3X|? zfNg3Dnqp>E>eaT`tSK(%z{bn4#YMK-V}>*qD>NRYGe{`|qSb!~*o`{`T|0Ol6p%7d z4{2k#WcPXI@y}Rmbhc~hSpn}Qs<^rb&6))^2m*Qs9wrGq>^J9QvFV!z_8=Kwwzysd zveZBgqy>IBh(q`xtw8&AXNI4s_8g}a4_Ss>nXGF$k&?@y)lr5x}%ss=J=1p(ain9BpA+3+&raUB=H zNDa|{P{=iiIJEC&%jNm93`kV=f5FSY5GiH`Yg)v|zQHpL?i3pSg$VDi#g*+f{ z{-&Kc|6SrWsXDANs9!q5=+!xkf9PcXhfaVMG@}3_0bzE)iL7mc1Lsxs%8UQr2gyHM zs)bEzfwH&pA$fH`{lE1aV$)wLGQ;fIfC5It5m|sLNSi`(4Hdx|mUnTA7&c0oXJvuM z#p}s}rXvoOym}YXSaXS9;Oe+R%~W$ej6PD%S92tN%aP#sl9FZ2&>m1;Vn8U}_kwm2 zxXsNDD*8Y0DJXf$haut-|4q}1pt=Zf#n%1q)%}CLSj_Ti{ui-IQ}P?Fu6R|OR#SOb z89Xt|2`4RB>euVQ;omZ8v88^|rO>P1;ss!|WjUFhjM@$pJ-mq3rM`a2NL^-}PRzAJ zp(c*guhb(n@oAh7u00U`4@O3%3@s^o6}Ivts^w4#9)Fvotdwk`O8yFVd_OR9ZisqA zekpWSZf?U22z2>FV7SGQ!prW^YnhRv^TXZNi||edHD4Ot?G%|4G1l6zS^SpC)f3w zES~$O=X{;l(FVe!w!8Q)F|KMHD!)%3xT1ZK7c&DD#6gaPP4i_dUKoUH9%_wM_0e34 z0>a9z>@U5vb*PTZSA3H@*cJEaqkUX|xFhZZhvhP=5G{%OaX3;W2oR&mElZL$A@-pZ z<8!<8*?MVek1k$cdlu3)!MNXih69pc1*w^F?xq?B0aeDOHU4ru@MzY75Ih7jW zcSURgL5#_T>wE8@!qM?Q&_Da3z1X*Ned@IG#Hd-HKV779E!dsa##}hg3k`4H!Ru&u z?Ct|6z#&x%-HYqHA8d#B-d4KE@zQ)d(gyv)O0sPNR>s{)$@5{i$q4T`B)3QB<@dKT z?yOo0i@#kcld3^FDM1fp0+plN7B{*eJD_e@`%9YISRLY&#Y*rSR9K=?Q)1j`PT+Ge zTL$f;`j@M#3l}nZl!&J#`CFgUA}WF%W`eH?%2Z+KN5Wxelw7>AxD9giXrsr}fKY_u zJ_ZeCV%d}DD?cDO_s<%(8wZaIbSCFrTq$S&Vj)NgJC2LyVirXxH&wCm|86dAJ6;Ek6Hm94WaMVym>7-N^ey7eqw&&9BWh!C8}D|!z% zP5@L_z9tUr>pwCi?_xf$?cmi<@ldP7hC5lGD`lf`K*e>1Ip4GntP zzWSQcNZvAU^(bDYA!cb^m}T_MH$*Ie!ORc}WBB_V#$!8>G5XtgSEo@M52RD?-6jwl z+0m&HPrine=jeU-wYj=EgwT!~#pkvzET{G3vQahc^>VPykz3~Lg^Sc!J}S)&C<|yi z=BRYt^4!f{=Azo^-Uu5nWBeh{pIvc?HyfV+P+5i4p0!&`REKn zP>s)5ghf%bn$he54^YQnO10J*G;3}-#gEkK^B5gkfK3-9IUSLZzDA6xYvR5IB(T4x zDW7>utZf-q7C>Lj7}?5*rJj?#^d ziTGvCX z^&#;w<(G4c-mkKF9&4dTiHLw2WSI#ttNCZ;4cNZk`Npyw#g(Mv$%)!i?+yrrtN_yg zwrPpEUwZ_vWU*V}85P}YZp>ODXXA&GeU?c{#t#c{76kq+WWSzh9J5Q3k=UZzcaPE% z*LN_ri{EIcGsVtzZ}KLUZV5$Pos=77+M&75)TeAc+ZA7AQTvmVK*X~kVM8qoa^3Lh zECz50+MXTfR83siCoOvoC8<~P7KRkJgY1#~)T(o_MEP>q=00!spFW%S#_Xs*G#Q}GGrm~f?Svi zIwwu`rVqG5jqAQU>MAxbE&`8xo<<6!yEt^mQpzwj5Vj%^z_VGTYYIQn@!sx48XO`8o;{`cjMYJ?^;Eg;^t)^ypX>$B-f+bSh=_`S5vf-~twPB^lM6z* ziaqXV6pVFqAi6iz8t2asy+(PM1N&JaI4$xBN?E6|FfX>~BfWI!oR)F;^wtnbAhxvC zS+jv|TO)geks(!42^$4a#jbsthbUyUkOc@wp~tT?|JXLI*`US^jn^c#*Q+m`zoOv< z%IuSxzTM+40g5N_gem3q`0H|vQqtPwFQ03+IW5}%*1ttW770DHpBm+sb>wl(fQO^( zSS83+WMy3&DDi8#_d+1$JBeX>U+{_rBV&)2+T}JKK8$vjv1+w64j0|u!+olZlvOKLSTA_eh+goUe>+UH+ zxLC%7%fxh)j2`{M`N4jMMh$+?DTLc*3T;hjrV{7@yIsPvPLG0-;=cs z7{l=RP3-fnImPsne)8-}av8U21wQ|^wh6V>1giwOk+{3*c$?Z79-dDg{{Sqndo2q| zLkulHzaxNlQ*mN5k4Quc6`zSCu$snBQ}C7NGDcaa?GQdY*cE@ud6r1H;ln>>CvEf3 zsY#^jqea|23<*)bk)MLn;^{kOjFcFpOeOJZMp4Z&%df9vF`YaW;!_J*%0yPjn^uAoV}^(CFHBJr?Ux1>)mv{;B8_O( z?-{ftn`nBL6wmNK;hXJse9k1hw5`pnC9m0jErJ1_mB$isYxz^(n`SVCTO{hls>I zYguF_5rGJvkj6fVMCkr0r(vo>Er1SV>~9lbS8$W+#Yl#|XKVmNG;x>B^KR0er^|i2 zbk`n5^_VLzz&C2&541{WQF zMnE|{uzKt>{hDDj+8iA!x!stefuI+n4pUlqry)(4Z(DA?aXCr5jddHc148FCjQbv1 ztRwULR;rGG*uC)Fi7VuIBtj0zbbLn_(wovIN$D_xuYaKb83JpK_j$cjV`By5_~M2H zrKYg?k%|H_%rCkk7kJO{=@J7_ zbU5zN0*rRIixQ!OKNqW!Cm0n(>-~|HUJB$HQf0r8Q43(ms5uBHXP|RsfNPj3&{Ai_ z_G@xte$LHxWU=4AF8L10*q!DlyZDPjku`iFgFmU`&J3i8>Y#CHs>rkA664Cs1eb`D zj`pin`F=AOrMPL8Xj(wQz|@w|Fy^7vDhnve0}7lSb#o%xP$+`d_LL)ctZr-#kE8Hb zw?d>RUp|`>`fJs(lR0Yz;+GVw;9T`f%nd&A#g_wpwQ^2TbKQ$~I~u15Jw7}=?Ljo zP*jcv^ehN;TRpF0OIm%JuLL3Ehn>0byqhjWTKtSv)C^%WAKe_qX_uJF~y0~U-~osjM%5JPEco4)UTBt z`9tQNgt}i$Y|neKBAelZjSQB=J_Mkfl~_Lj#ndCh;kfU6M*7&($9lThzmG#~}k6xv?+OH&_> zzEOk9qQk$L%DGbSN43cP$8vvR&fjK@=cU~Z5;M-i7W0DQy&*od-Vebp<$d}yJINX% z6aieR|B1_>X_2=Kb%`%Kv83Bo57c57c9}dE%<}w3Vs88@cssMH{V2w0LF%|Oz73qS z9J&8fkBN4~i9k!PY}bdNKUy+EPc~;Ri`KU4F^mY`ThUioXu|cq2)GXI_rH*?gOxh} z@q3)6%OP8FS1UBMeSMpvZhedXPWsp7k)IzRjReP<7}lFWj(x2Vu!ZLc`V}sYeq6nVb$h=Hb7il?{0rEcvw6}n$4wfvm&goL zYaEIGrl$Ww!>lnI3uG6Y0&Y{lpPA>14L^75j<>z35HPVU%lrrF<}-pC!fWQ|pIgf#Z%QVC z>hms#`bc={Cl!!|uRQ!;+_l2T+uJYhEVe1+@%BHoFHixmu3qGxw)5tFgH=48Jj>iz zms9HPfWihc_?Rs!ZnMC<8zHPD(Pb|omxlz5$3WvBG9%wDGj(KVQUysfyv#6IX8Kj& zJipn0^d7U4Crk&k>%Nr!W%b`&fT+MjQtF7r6w?$hD(3{>p%*)#N$jtFT1M;|A_8uy z?+nWSkpX7ULp|J%b&5H@=2p5}l=9X`+Wgiw+qnH^BMTbN05!ZH zT0sU{Weh*ARN~D`AI!NsCjLh<%xag7oFB_D{oxq~b-_NV6HrC$%-(TDyI}ccKiAS& zR{j0y2?WiZoHK!p0ooNLpj;|+gQ6}jDKpl;i6JKAf8Hg`U-@Yai#kR*%l&xPXO(1I zPOF~Q&iQ#6lW+LVz^T5sc@cPW&_LksR! z8B^MF_03kYGP6v#!`F_tv-$fXhLrVT^!7xZc&djQ*m6PktN!bToMQf;6ZD9CDk_Xl zpImC?AQ|s9;1|Z2Ot{*_kOLgRWx7CUU5|D%sXmG6>QBg$2J=Zh@%tueR=HEhKVXU` z6j}Lqb0bekYc)SYDo5!tm>_{|**jPyHGf%Xk@*%jZfy9X>~ZuHP2(~G>;#BUE63vJ z{$f(wAA(+Bgw!J(I1i?oAb~L2}pFI4YB*I3fR zUlmmwu)DW|%5V`?>sh38@`q&-Cr?3U{*Iu90f~sq$OlDr?D2~uKYj(jM8tg3u1ekz zIu3GPiF!iop4NV`ZWq(=C;-}4!bs>3)RikpbZRSXtqnsfY25-Rbt`+rv$a4qUV^ zwCyingaMq+hbY+%JFZ4lnERq-L zG3`y5%&rfiuC0A20+z7DZCPd|Q5OFCNp2rBF&1S-n{0??;8CJA67--eQk_2U{f$~f z9UF?8-&HBt0mCzf1Q5L5HcvMLKWI}gSVR7ctKqyFf%(HbbXUT?JVtu2$(v(XhCw7d zIPllb^28&1HKSenNe+$MQ`ns;f?XB4c9Do7H@^vF9GzlfMs^q>S(z_V1ds2+3wBjB z3jE_EB41xty3K}1yHK})qRSU*&H>{v0no!6_)`f;u1m~rn(G81R>`nxxB!iu5dH*K z1Yj@vi8^CwN9skRP2W8Jc1eVC*j>4sW*gT?yEjmSh?lPHwgiFj58y7gfET^iCR=>*bxO!0LUsNKDm8aoYIQ1=AM z^s|pvp#ss*1r0Oz@q$J{0x^LwO*iT$l&Dx9ZV zvG7KCB1`LRStJKT7<;TRE;51$XPyK~C{%QmS=w){gWKK)CVLRT+y$#bVe6crxFHx& zYStpF=5jLEw}7jz{%A+l|qr9kK_XVQdZf*c0$k(%ZI8aT` zZVg`rRDf5|nGma5YU0|_%gbi6yUrnuheKy-2o)P@i^9haHkikkI2|s+aiu&g2z0BS zXvBoHX+~9%LR~no?>bL~_mb{Y<75puWq@roGlWE{IEzQ_#wlVm&qBMY-M^LSr@ zEU;x_K{m}i1&Uq?D`v$1Sxc+v#p|u-ankBP(>th- zDupaI8z0iDM^BuZ#9~@wdrcZ_w!1XQhbgG~5H}a5A5Pf32wvPKeMrISx@OT7@b+Xr z9fJS(K~4GU0eEKXdoLe;PW@IeGWx|A($>cw?}^W}X=VH-Q>8~oznD%l@uJ&c3``2f zK8~JoV=?nOkdLJLoYYKba=Dj4^ZgkXI|L*BIA1wea3qX(jKqkb_Qe2Ybk0b~@Ro!w z>LKZTVkwf%O`YpXg||jvx!9TUoJSvHxol3HV|4Lv=b@rKPp|-=loxZ`ifBB2zyipf z(2#@hiFEDc2#1+(;m<<&jx;e&`~g;xl#}%<=RzNjD23H3A0?jzZ`6wkHFC61Wad`x zIdSdnmn*^+z*%B(s#JId+@Vw+enP!d1G4y}-%8UO_9q--qltS_$5(4+Qc}<%Zmgi9 zZ0mjgFmkkJY#{>k0eosw1UkE!Fg785$>I28yOT-X4=DykdrJZ#3H;fIo&?Nx1IhTP zyYjseB*B2$Y5InOp1g5mT)pHP8J|DFvlAm{eKg(h1F+{*nNE~ALpPXN_`FTto6lSn zXVMRuh$i0lPp!HqGbwmR0WokMopWyyT9hrXvVhz{t@xvR&E6ZnG;yrA`{J)Ol9m{8 zOm$-361A1<7y8{M`b59;!7qTLcScb!O>3q+kF~c7jBeZR(qvze{1qr9V0Q8g%>i%^ z9q0|X)SX+A>{p8q>1bZ~(Lw9F7#kVZy+(@!0<{NUmVkRTu4>&%;qW)iv_X3*HmhJ7qszXBbxiD7 z_WX5a@lD+$ULKjWBacT};+GLJBV?^ApTfIO3g8fwb80mVB4zQxj(3mo-uECM0GX)? zjvGYQE4evz?%eE@+4~qdto5X+!7zNmU;-TEquB1I-ht6qf>`(`|F$xQwxeZDnI4Z_ zlp>sVhN(AjT>AWL|M>NguSFU!yjII060f$V%OOSo%%p^SINRSz3Rv~;nE^f}sdt|%~*ekbjKf zrlaeFk6*6dTJnL525p8;*IyQq?*R%WLcHCz8)}F%dy00J=im?vfv|purgPA)9T>i* zSSTvxBO6SOL@%HwM*yPNb5Mgt+EcS*d(q20bhppjYs1I6OQ`+`fv=VuGjw|YEd0i| z2j*{Zd>1_&JtFwp&qw8ZeO}+Ki+tu3DzGXHu9EUT9&uxsb1pYg?@>xeh5ekDl-%OS zQ4CO-6DN{remR8ovUNNm3JpDSh0syASSR_qWw*c55G}}8&%VqRXPWG}6dl)Ka?Kr3 z&jDEry=l%OX-(~|&r{lU&N@1?OXq(l-T{vywq$EDV!Px0!)T5P^u|+coI5$*!HRILxku6|n1P+=?HN6UL15HHAZnEr%Cq zUK0G6uJ0b&I$aur0uX*#%j!47a7~USv-KTh|9P2$jpA+xrP^l*wqk16k)IsT2L}kD zS8PJ5CaNoIA9PPbW@1t6E>@#&nwx|5-zokgCRH~WCC8b5|Fulm1ag>GUCbM|tfiWm%1;v40vq~mr`8{k|Qd##% zKml+wYwwC_K=#}9_eNhZ*P#(Kn7RA8&xeixIx!M;65`?jIdhY7<=T=`_m-`{*pPBm zHWfA`){Wqr;^kP$yZ)FL3LpO|j@b zW`&OSN*h`Dk9K@BJPNrUJ{0WvuNkq+EEyIj5+>&j(A_5&89p?`ts$^jyh7&`k5YnY z_*4EWGIAI&M00KbP%94v|84(_l!|klAV^c6W>|~3&7o_~8s!Ze0x?6OQT>4&(mPoF zg`rPdT_wF6%ud)robDzl%9k}sEEXJBN=XyIfeuAL)pQ^LiAev5KnQ7HKgdLnsDo~g zMJdQ?#;)@+T9FWOu1Maj7AwH0{%fWoC8GKz4cGIkxPfgl!a0H!NccQ7`E(Mi8_vva z3^dg^P$*^eEI@}+)WS7Y*h1)+BV$o8S%>0+dXo@+aV6VAHSMi?ioTKep>2SIbwDs;NGtVU zdh_D-+fMC%Bn{E7Ky{?_nV_0;!$r608`z5 zq3+Qu2KuV7Tn0UPWtY&;yNc_&jbAIpTGRAfV}(~Pa({>#a2H^a46OROFHqOI4?bUh zZ$P_>olgSuMg=?|K`&sF)cPOPF->CAFpOucl5Gc_FBIT&n11 zSHXeP!rpKQzAUMU8fWa4v0j=VW0dt@yw~B{?@lJjHI%+0KI6R3B=c#*FSI)v#$uXs zIz1~VLRr|^h(Ln)XKuRdZN@TY;Zf|8*)UUL+5hxY+@}uGGMwssCm&4s)KA{~8l(=9 z@;C&Xz(h+;MD$Ly=mV-Nso<*)@nf?W0o?r2W0!H58mXP>t=H&ynU`#Ch%1uk(JRqgc~{qKXM zNCUE|$5Q#77iJJ2_yt<`W;U}Y%&e6wDiKYL+4*#P-@PuNq`+A)4AT0OTiX=Y>&+NFW8?=*bA{uLxcsf*t`B()^=rrM7NC!hl_X zNpeeC6_M4l!Nr_^2dGdSpb5dAf@hSOZUA04GE+avoan*YfuaqgXtMx>S!cP;t1JK< z`fv{pN($Zo9o*O3+d>Ud4xK0)9)4GH)s{g=V3(}?me+_=YlwWIi^&?4QlkTK_Yw-8 z>Nrch&$9BPaj1+=WYCD}!$N-hj(rYKm~hD-wg`jGggw z8n_L{Zp(Lsfc066K5T0v+u}apP?Y)XXzTF!ecpTZ&7GBlkD+~65b?k{Xs!VG5KMLT z{GtT8;$+2VT18Q32m*AQytvo^K*cP8aHDKE-2}nB3olqem+nn}jBbvY`?x*7<4TpQ zV<=`Q*w;nYRyG$Dh--EMU{XFq{Y2K>lKPSo+aI=hWS<YbkmjWgbmp1#CzSK`mq^O4N z@?rseFn2c|nA7D8s*S%Ia~NSRXTQnD{n1*2ucdpJepKAmEQHPPEmVZ(!y}i_Y79WL zet1VaICvNsE#Cv@)tI%l^7`PFj{pqd0WR~U&=ujpbtNgN2h4V~&2=T?cgDzA{QgH#znZmOlGzIl- zPo}rc36xi_IH#8X7f)XS*VOy{f5+%91*8!HK^g(+4kg7v=?0}iK)`Kug9=Iuf+&I# z(z($p9ZEAgq;Jv4*I@D7?LOx@=RBwG`)qG)*j+z{4OGi#4I+DX1xG+c z+F|ek;R&4l;Y1j-u}V5gP7V;07)m8jQ3^0`^q!;+y&-`8kl%aUi?|TB%z;nJDg@h| zo;Km*e%rS7y}3@a%b^N8-(Tusajcpw0VjQ(+d%$!z0cs#f{BS8ztBcDcxIELT)Pfe zJ?sn51>r7tGBY#ZGYJ}vfk=Id4+V{K)WqZhIahq|fOk^<_?NrX1GY2YTWG}F5E@I? zhINgVPfn%{CmnkJa^>YJ3x;e>G^AXl5Y#(-h(FHbR9nk`J9Y-2?mS=PG_k9m;SUMd zBhy|}o#(hp^5H)L(DE(d0@t;@sjQxlWtH_7iB+w*qQJe4(@}Ux4=sQKkt{VfrF-f? zR*rBx1>vPZ+@@x;EnbDug4X($XGjoNv_l(fS?fOO2QvK$$0!*Kv#psh4>1$}Ny7HK zou17IDy52f&AVHV-*%qSjRd~Dm_|rRju`%dx2$H-Il8zIKv?Y7()ErK;albv00>c5 zTvGCT<={=UrC8nk@~>3udG$*4FA}P&jx5caR%VlvlTHnmWt6}HB!Q!(L`R&EfMhMY zM*jfXe#5O4(l&A2cl%B`EnxD13Q-Ov91!jrMI(blvzIX_gv0-$zkuDPr&c|i82C23hMZIHB*KCcom)cM+k`DytWPk zd(?i$%PvQd{ZODOP(ij3eMX9IpOA5i>>QSt?*2PZ2~Wc2#ipChz4(2ziYl2K{-vbk zpOw8DZ+hQ4@yrW0_XO_>43d55-RXsu;yoNO>+;Q_k!hZ7P2H> zi*JjK#&qY-ML#GnL7i4&r7Tzr3>Vj?wxR=-x8`1X*h${i-sAOL$7M5}gSzY^iJ!`V z(xJf-a$je?Jt&1!-h07GF+iy&nPUBpae+$57@PgMi0b)pgIshprOtfj(yip*(rb@D z4<`54I$(Qq_C6g+vdFBv?XJ77MbLxiS8V^_RIJ@UpE*H=@@R~qujV6@Jl00=)|k|* zuTcHR+*d75RT;z|q6yt{bE%*<>H{~I6Yd;&ANw%j(l!B5*grmN3%{O+-0w~of`&`+ zSl(x316M>tigHJeh-+BHre7Q+H$lIm3|0pfL*tt$Jo0}rw7bQ0yozjPza$5z$^skhApkLm=Is(BD<8h27~ z+IpH~W^`v|BAkRO{Io)i78RE&_=Sn#dMxAh1M;sXWIV|XkB5hoKeZW(V}4p7yTAqY zXxsnp+Sym;QueDdAF^xvV;q+!X1%AufEbxmCB+;voiz&$ATca8{rWsjo*iJ@8$Ic* zu)Kazm#BlqoWTAZ9_xs47dSV5FQ(FW<@e74T`yx}Ivc^u>0_+!QC(^?4l&uqTmPzF zd9Lr2QTk>*I9Idt>5w>ge?hj7aryAldAM@%uS-w!#kIdL>f`_`D~X81ZV(^HZHboCK(L)$Bs%K zoLk$f7ZNh9?p}P_7H>H8Iy4>N=o{WJF_7&6w2Yn z@{!?DwfmpR_8<{L*B5@&#uwt_84gT>-@kTNcE694#Edtt=}EQ}Ac#4i?&Ea1{ycUJ z`YEM9l5yoDwc6Jm&Cx^SPqeK+n!mk;%}k*}wO`>=2uhyG9CsFzB2Pf1Ul6o62vk+g zEe^V-!L_286^a)}UBmZPF${+L(vy1CaTg_iKU{|k3K&-8j~;?hS;azBd=#&0Q}U6b z1Rvd2&elx&9K38CUe?rX2rV!iXb%Q^2A3Akk?|HI<|-p6YN#&{N!*Dsk{ zH1v~$${r7u%uk7&yA1z8`!eY|R{hWTn=kgRCrR?TZCz(B#H9JGCAQ3_Z!7*`7H#g+ z!B8_DYoOv#$K6}xO;bGq_n*D3N(Xu0W%3U}ixfbYUx&waG2@@_nbS6^7>0Q!Vn4?* z3H_7q(JT^IT-^WxKu>9CqI|;(|Dj)WU1N|AxFXA3lCs`GQ$jN_2Ag zjk}W{^BuMu4RdjUshJ!hKYl;74q&EIlAAl$jF*1np#A2So3j?9W;oBB8q~__G^LD) zy`OX_NG2=i>n;Zea8X>|SUSAETWWLhI|`mze)sTIV-~#?W?NGJCNl>R>zVIraA@m#*#$|b!HJ(P&qq&#KQNk-f7UWVQJ7L=65`O7idjUkh zxu%m9-DlY@09#kPKYl{$;%%$3@p~4Ll$AFVV?G?SN01*+Ia^J`QNE;YWhZ%Bibt`x zGPSVK_1M;RiTte>{(l>$PZ<(pA1G`Gf17=u!v57iE3UHaWc(8*EVp5KyIg-SKBnB0 z4xUPn4~GW_H!i)?;}3-$^CnFyP$X<6aMm4x*+)yhlqkc2nl$)apP>YPQ?6Sixx1bGl$l2l8GLySnG z$I4ES)nR#lCTF)nfS>^ktTzU+d3%2UX@=f3^!n*~Agf6St1Oc%Jpb_8#0yUOm_PM2RX%0hj2Bw1 zXaP0hT<5x5Vzt}~zy!CNfPJ`9@aFfvZOBhAruNN_FL?ryx!gd>A7N_?EA5)6Bt`z? zn(OilN-#xLMBHA&V9|ZAY6-&suLYn0dqH@>c(rCQ+mo1(kJ;o*&DNON&iAS4ehDUx zF)vsX#*m+Jn`_frd0*vFJny%2`X!ab+_tntgH~*!X=w2)E&ezn^%^9nx;4Ri{&W{j z1%G|2YU?#i=-DTH0Z`I57bVVF&OwZ3-csH4aax}syu1q#m;eI@bCa*CKg0bFauh97 zLEgfU_Hs%{H+4wttL&b8uaxG`H@Q#K^cX9wpw>x3c|%oT^x=<{AvyMk^>~!=w)pQ2 z#T(C53qSSxmT!CY+!fG#B*pgj?w84aIW!0$4FdByUvkn5D2oE%`NWbKm|;#@{OrnX z<0Ye@l5h-D&!7XQ=!O<&jhPC@JHAYJBUKKjB&BDPEb0wysN86&9u*tiH`RHkrL1g*J?gbK*;YA2)6`{_Qaa$(Ez? zs`2_a`~%sLLbFJ0KizaiyxHW|kI_hP9Zhm*8ZHl zV2RM!1v-VGx~&Mm7@zvPy1IF+O+hf2PyCaC?9EedhjnPNkr+oMj?3DHNDG?YM_?Dw# zqQpcSvdF@A5H-J_bp=0=Di}w96Kuk_{d~vN)19Wv%i?c2S2*`$>o}L7!OvC(NxzZR z)sY>|9y9+W_3Xau+}{E{UQ>Qy15o95GF|M@cHS=54s%!W-xazC%68#R<9C z6S{ch_%Zj`E|Oi~1>rE9XNO>vxJfW}`23ai``>T+H#4<}i2;+lPPF6{6m&t;O?X7; zg%|#M)5eqZW-6vmF^0dTb*GaHpPjY@hZ0kIT6m%G%CwP@&WVo8kPQy=bOZ;JG(>v2W-LqrCBjGa@Z&5DLAGhS9nDT9hZ z7?a0#ov`rO+UJUO>T;dnud34r0S0yQyfA-(s6Ldl2IeR7R_kuq5;}@17l}URKH5dc z>7xlJ3f*UfFOWypq@)JRof6&oLU)50Eg2bE_}xwE%QhwEmLt&kY{E}ZB1>(TrnM;s zk_EDvPRpJ<-hUU)7qp6F6)@-Rex+FRo!(zxb*@c( z-dttT0K!HeH^1V0gK|o@`U}J4fgE4HSE1=H66^p;>_k>nNSJU&>M^w}EG-6ZzW5-c zS~0pQ9-Lw9R3-O$WTVhHg>XTlIYaj7T+^je6VMqf$ z0)L?>xq-D2C-xznQazRD@N~<1^f`@7#*hi7t6p3}**$?%1})Nm5l8~o(B>CEzZlTG zZ3S1`>v3CUR`rl)WQM(3c-HKp@xm{P9;SH`3B8CB+hT+n?LSv!LCuGUrjwI2o>ZTH z&xUr8kDc6}zdLcp<&Q;I-}z8W7VQoXnHHyZ>E5b232aw6(g@9az^oNg9F>G_m@!Vf zdxM{mf&*nl-2JJ5`-G^o5`>Mdk>A4|Zu@zI?W=3YQ`i?5ER=AR^3$j%#C? zqH~+F)P(kSqG!g+D-E=syk|@EftxP_Hm@9Kqs3IT2X{mh5{##{g8*DFEfZ0Nwq{}+ zxNA>I_i+1To9y0>!&Qm*v4NTb)Q5oO8(eP;BT&}D<0$DNFEWb##zdCa_kBc*cL2yVpNvUO~>IO+b?$nrq1K;j9Z^F^pim<^M2kK zdKf#Eeioa|bw*Kx6lttMLJMnOAz%C@-O1DS2*I{$)*%n4mZ!IVqa}&AG{rkjsKu4< z6{;yw$9JXz^Cy$#5~GU7ANc2S0Zi?lDwtnhG1(9)it3(Xn?Nfp?~yKG`Mfl}<%?gA zw@RqEsHmNr+t&y*g=#P!F%YxW%S7R?i0z1{tK)yxaR7ZJbOwt30NC5>rIR9MTkC*0 zjQ0oRo@+dpnWXb;+R}Y-~E2L^z9Qnvo?e`Qmb%S2vL9z1*L8 zqI6E#SEhJktuo+ew@X828Cl$-V#NE8Peb==e!!t!d5x-^ZgaKrP~inu8+&A~vU4b5 zf;|o2&H!_voigbnnbZvWf_b3r_+!yr&by7vM>snwBbsSFF}VKbwXU!3e;;4(bkhJb zV$Ukx{&F-b8kL*-QI9z~A7Om-`0*P(eg!UA`uq3ZnpJL5Y^NJe9JREZaR+5hp5w9+ zkx%HLb!3Jv%W*c!@PQw>J>uQ*({*3llqap^*7s0fP7&>t=(kc8vNav?=g8Blu zn~NYhQyU2+FA1lcgmPteZFvr{hY+UFXGW@RtWaL9fk<9nNgyCepU!?2TCRK%z^h;& z-W3_oaeudWtz5J^n<&Unx>yzNh0$Z0Og3?8X!-A;s?fJ<-k~=>>1a%zS6pepGxz_BTu}W?` zln1JAF|M`*Z-(@JGW|*|Fkx8^;hwVbhRnL4ygdkzDX#f#RlR9rl>0$=SRz~grkCr` zNjf=~y^;T#FS4J^g|qSdVJYqGk9t+mmNbY(SetFp{JzmS^wu!+Xo;-iUNQA=k>8B= z-2+}A4wY8&EGBonvygVlV9dCB?NV2TtguWQw;bk9fN;R`btz3O1={Z7&R6R{PP&f| zTU&#AtoGnNc28UplMeok5UgdM-YvScsdJGj`DJjy@bin)cK%)X1%2lQdO*31pn9-R z2ip@(8&<9^XWyRPbCrXi@!pnQ5;f>5G$QMFgUE^OC)LQkHl0kfNR z_Yf!l9tPZGBG*AsZZU2k>Kvm&CnbpdA6wJrMceo%A=pp|Ab9+H;YElx%|r#ul$BaF zQq9<`eI<~eCia4&jtr%rNf*N4xiq0GYD``P9<8INaodo@TSQwRW6%%jH+|wTp`*ikW~@2Os;+L$|f8pq&`&7lB&(L1LxTccwa4 zp%tU}vT=w)O!QHU0RIWiBdN^9!z=!|;hnjH#*C_5tu00(fos1~m-j@<6K}8;3-ubq z>JD#|eY`ZdW-;62nXj-LqhBg3Dk>6?(EeY^=2~JiNIWILp&MUy%$!hZ= z&^AlJVAL^6Lwx`N>JR?bR__n&a!M)l-^X3AQ9wa?CC5rreP(3>ok00jA}bm+I>7shL@k8w4*rO-qPNd6>r)NSL9yC z?oVqM>B+A1Y8?yHkgoyY#Yp`({seS^3-i`T0M6vFAvjt3jLzfa_b&5y`+pstEpM&A*l@f5}-vm74!g=I$NdDt{H zDeX~K3rgkq5{1P8BKyNDil8M-LpQ`&Up9AdXwGP>=Y*3KR)dV}jG_$r z98z9j&#|bW(FQbwNdZj7`trm=e&e z`ZMzE&p#)f(ig6*hix*34}Lo_*VdU%%+>O78u*O|BuWa!OWn3_0SO$u<<=&vChk>N zOzI+jknxwn^li?XFMfU_M$stp>bueU%zJMRQ|$xBrKuq8CXefEO_!`eMbQrKOHDYnuwSvT|;?ot(>I4 zuAf+-#X| ze!|fv65m%2_LR-^Qo(NdMZ0;{JQaP9o@zfikuA1E(2p1e+~no0j9JK$9g@AU*DVj^ z2JNVkvJJ``Cy>T!RRn(9Yx+?wG7^j*h56k&<8kQi;cW%oAcb~J*DW&GakygFX)*33 zlj=O~1#KG=^zc@3y&xx8Ox~>1Bk$>>aI5r?J5ctUcUZF>;524p7r zX(NwHqdu1v4!h=CmwtRynpvZxIiB5rh=!d^u9enI^$IvR3EfQ)y2}*F{QJ*80>{Ag z_^tuh#T56tgNnQ%6~*N-NZ&FzaC0a4SR=uM)Q~mf?iVj&wXMZz>*yB2SvC@$&KhYS zz9BY}A>GI?VMd2-KGbEnP-OLX705MyEleTvm_WO?+v2!PDr$zY_WSrL%>E0*HMg=aX!xmmn ze>Thf4EchDvs?DB&TssCF}`s5uIKSf0gi6luyf$n{zYBD{`PyV;Q=_+UbVTvUn+<= z1~g9h`u+)n?pkQ0jfT#bv-$U02jGSfN>$N!mfj`h!X}36on^eg^KOZSy!gV3q4RRV z!V={l=xNyVe;NsFh;}Y_qz@ub zJkLYm;(Cju$S2~VvxTCr66X95Y`zVhd-3ruh|h5GbVYcT$Ml-kQJgQ>T>d&UL^&Qf z^(7qIn`{L_dET{da(3)Ay?wdNUbv&W)e2q)3+c#)OjuD5Uxij+I8ql<%xVOf0W{_X zP1N^r{{U*hn_>PMf_2U4;Phr|C@T!AmgMIJ6@nBWu6RHOQf3E`!2EsSUNe_z>zs({ z5{}0FbBC}^*&)k{xX)Gq-VI0x>M2o96$a!X>_ICmYcML*lh)=oo9JAEeY6Y@{|SGy z(pd6y_DjBtn}2;5ef&%P^vN%!gGrxl)kFqcIWC=98;wQ#XiZ`r+qhP8f=VognVxS9 zaYKQ9f&u-x>NNAPv?934p(1jf`SQc+Lo@T1*%#&lYDw@fsALGLp=)2)mV!WHuDtJK z&HzLVa0u}MT69X7)2nMgvgyKYqF&6=0rEs5lssX%eiG!JmFc#}_y{;l&#p6!3V-ym z;jFGC-goj%QBi$?(8t}-(Hz@Tc9C)v(roUBW`C zc|uC)`?vD%xwAjl@DS8jt{z_Md{#uBl8hW7;Gt=m!jI}S6XqLA{P5BI>gv|olLH-< zQ&GUCJvs9_1hfXXcqc-ZNjViHf0`tFe%2boU2=>%FSvee<2Z6_GoL2vK&(R3TWo(&OW0+ zXezK3dyAAAWv^^RmJA)zv0B^aaU3 zRps(>?yXY3^by@%qzfh|C(uONvPno+lo5ytDtCzuINwt|1OpoeR29_nmo&a9PlDyq z6l|tmS!W60khxUjT?wW!+KG+GY{~id;XkgdFW?k$2^<>kRQuw=?lBu-WVhPBBT_LeU7rXL^zPck`4t| zQ~i7f(A!U+vD-$zmOu=-@%UQ>JZxC}S@e6R@7AyMgpBM=?Urv)ptko0fO>Z?y++k5 z{T}#clm>aoi;LUGGWk|ykwKX)iMJHt#A+BB`c|=~l4MkQE~&;i#LoJ&2z*FW%^lam zXB*8%G%7;WP3%Y<*~!&a|F)2Z-Gg3+0NN8jK=niDFpf~ame0r-LRV`YM8p%|>Zwv7 z93SB5rfQO)m#`ikXezLae0;23#7Gsr6q4< zB;Yy&nCLE#mqBH$Kc^px8%P{OT3>y&e72h^&Y}*mO6=PKDXIb7X^J~ubyUFECXMOU z5L;dI5QaVV12SdePEn%OJy2fUxWc5Vk#;6et-ua8YYY-Lejms{z9Wu**LPiuU#bco zFkNdiqA$L={f2yCTi}-}wayCnm5^Mtm*p0&fOcg4Eoe3EkvOW{`2rG%63`yia3qE# z`%OM1d0+h4H>#Nh@)=}~>ZDLHVzocjuN8y-uO^e8cAhK zEri(rcm7`kZC8r&ow`tB7~S;dAaO)8h!Xmk`yMH z*fZ*<`Q5ssZ%pRw?)PWnbY>rgo_!}>Wz=_nNBPKUw;o+m|02#_n3=@kTg%{MpwGaN zYOZB~dxD4$lJzi*8 zJ(w!J3{vg?lpKqcRtnY)k<(ko7)5^%b4|g%(lw-M+m~W`h4F2iV~-RsYS8KNFE=sa zsJNkozuo2Du&Be-hRi4T<@^~Fw5Q)(0|!ourRzz(*)o@vlfK8S5gP%g|E>w7XCPj z2mmFG`V8CCuvHQ~Md?dE$!Dv80X;GXp>ypUpoLNC*;3XL%@=zy^IlQ4=}(sztejPl zAn_VEd)BfgCyYce;~8N*KY7_$+Pz;>EwJ*R2y_df$kZ(iFtz~o2y{CJ;QB@u8j6D+ zqijAAHPc+7^q*H4b(^?(2ke3$PUzL1veH7+Ct{iHPyS3oU}oBc~Rt9k8G zhl58T@#W9aJq5`6xvK%%ESo4IsDMURbdb`VN}jc3k+viYn(ck{2gQ_)^|96ky7N;x zef&q7SY5A{cXw<$-rp9wzi}kCbNRApWFv0uBm3Ydj5w)3Q{JqWiyW`QH}W)G$9|KC z>Nj#OM*&7v47P1Ek(fpJzhCbRVz~TGRaXdy419=4-W6uQBIpEk1Qf+)4Wk~&ghypM z_A~^>kAFXqUHmBYxqx9=grvDK;40tvhEZlnp6WUp&3_gn#lzKd{OIIZ2Rbm$ZvZBf z`$4PJ-H*r>-sEA|N5X{gsg;rUDT4zZ}`4Z@rp%ZVoEDWg`}o9X9_ z*n3;tKV@6?=>K;`$P}U=dKfWk5RiZ-4s?I+Zya{yCLRJ_moiIc8!Z02SH9lpr^Kv% z>za1i{mvMOJ0PEKKBKEE^oo2xqL8yVl z{U-*gLbAP4Cjqm>-r)UWW%t!u@1u$mbhn&n|3FpjV9tols!F#<-yTnrL6m5Dp5DA9 z3Cdk6E`6ZoUt=LXDtm=Ug?hdUpnXD=@qJC!Kzv3PR%KppPmSCAIf&^cww35kgjUv{ z#T-*&HGy)QM(REpQ{k(M0p~ZSUD{butgBy`Fc;4#kaQK`FpBP{poz^qJB=DZFXH^E zacPHj=X-SwN4s8caZomT&()5Aj|gb(E-Z`wgq+Hh4!f3JFdUb`19tA+<<)7UEgGoJiSKqLQ&!~ci zWUBg(xTJh^Ca+$BTqyHAHXIE&SRzu)fRHjZHBz9eMaUs>idde_6hXB=TS~i#BZne< zA;}EH^7Vk+5E^jxgBAnD5&18@6&P+rR&am&a0A$jz9-(}TofB56z>qKhx(YwFZ-LM z(_YejZ`1E-LWL`TyZxw{;axXQwLhAi2Ie~IY-;a7pg!K;uW+#(U{r*Nl-1c`l(i7( z3HIy|QC=cN)t|Lo1E>+dSRKghePl^NYdK?ma_4bOfVjLv-!iTc{4kMXe>WbS)Y*P4W{s>%%{zV5G~F7xARB7W+1Ltzv;0jh22kZ7>uYCb^h^E zr_Y@4PU*6+w(s#sQPBPj8=zM72bFlWZE^8N(0)x7fJpL%JQlZ#Pk%HBNvzz!JV>}- zRr30E zR)Dm~dDhVxq866klAxOUtHNJFbgD%~HCri9V@S(8HP$dp!8#mc4fmn7pm6``kw&A_VRqN~| zBhC*W;s&L<+cgj544hX7*6JQDEv!E+nk=?kQ}9B86oiIX>XQyir-xsErq z#(7zPIqDvD7!C^w+#%Lfqi)+vK+{SdwI}QAs{2#7k@FBaaO`F6+P+mvUF7bmh3(zb z(=#9~#Ea=p!a3S~9^fUHzp?7F6>5p&I1zBwt$~(4I&t#zRxTMrRJgx_AwUlZBZBx8 zu9#lA@rgc)UPCWAMgzGp(!0OdARQZ1P%KYe5k#gyEMJ&b`?pT^g}L24GtlcO)fZ($ zLJz6Ph&8$ax+FKXhIN+Zgo=)jzxVSYUhI9qh~ciSA(a^7IPb^4eLx;JAmH-n@!!Y# z7Bjx`Boc^P;KQSit$7?r(U?1{fN0L3mj@u1W2*mlM_o$`P63B`Kv3MZ4SFKPIDvdCjj08Tg0-Bw5+Yza35 zJb}FvE&dY+>9|a}=Oqf|!q0-#@SoM)lJB3lxWhJg0h~Cnh?y-@r9sIct^+VhhTQYh zk^;-`^iJ>T3s!`?Y9Xupr#%I4Vi~eO2;aYJ^AtUWBSnZ4nM1jg`Tp4|o|*z=5S$~Q z!m;y1)A!5;24IB}@0pu>aLL`9R#xC(E(9`Ml<@}0?O}X8J76UkBAcG??33SmRNf-t zvh+kkz46A!oX9g^i~3?+Ph&&wE6vGA7JH#?n6btk1LME>?Of}*N|JhbJNhGN{xY&2 z+y=VC><;86VyqGy2@*Pp*?Q2+jZ0u}W_ho6)GqBTm71BD@r>_I0&fUP{i|D6AM?j! z1Me4KqhkTruu1{xCm9T8Y#+&HK8<}6kj|cn1J<*lwlLWzgIB0(Cf6Uh2Mci7Cw^6H z3T$ZcN#SzUy3QccUHr@7A{177l}>l_opVRcX=YwXtV3R&;d{R>4L4bZ+tSKRDN`7- z4TwvkWQU{kHaM1F zbzf^nM#w{|y9A&FPl(O6_O5%L&l&bc z8)UdTA6gU@7p$kK)rTcj$gu6cDc}cW9vo z{)nDFgxCm@c;zLrLE0f5dzhJA=99=PkSY-(mw8@RBPJr0Rv%fI+2pNGnVj%ZJeYpk zEM?&N+-UjBF;-9Etdq(3^_3n4?$UXMrKssXRxHD8d!ufgZ3TSSMT)pz{NFqa@^R2) z&+`Uwr-%L$PfALl`3iBaF!#}yzw-|tvF!7IAtHP4pCO&*Z9v7@B!B-Es&04xySX3Y zL=q*5sBfS$e;FKx!g^z43adxlkJw4ufQ-W`edWiu)gbk!-#vD9Tjqy7xk6&{tdO7Pvg(;K9Q^k9(C11$!)J^qf4}}d~ZjT zcwV!j;lWCf(|j^O+}AIE+-(ayD2RXLsFrzndN0!LnyulU5^I#syOQ{JXBQVX;9x>C zZ*%^t;_QB$O_u}RE84)B3m>gQ1__C8o*pK^_h>isJGYx_kZy>Liq1wAQoM7A%)g0W zZNvSc6z=4)4&(+7;2!W!X3du0D(T z4dFE)A74>%xRJ{HWyDS3^Ad5u=VhgL{pVu%sG;4OIb*yv2X;1eourN|*E4)3C8i)D z7kw{RK=f$@4Ab)ZEJCF=;fgiQUF1oiG^wS0<29PX9dTZtHxVoGB$O&l;lDCU5S69L z&1GH~#UWlqrut2XM?_jr-DHDxxF-sLKFi7>;(Y1urveTO3>ZV_Bvr3RSxEuAE~=2? zFd2%WTN}sk??39B?7S6Ck3vvLXQQ8KUomu1Gm}dyBTei8ikb4QM>c7Sz72sx*u(SM zi2GOTu9<3=O6Je?0u|gyh%<_@Pv@iQ?T6ZJU~6{3Rt@4#lutA2+Ad3q>^UP_W4R;p z6pX1rJc%Ua;pOX8A*R&tDeSK)y`*4;+EIJShu++&$1Y(&S?T~~seTCur{zBD?0I9- zuGiNm5s_tI!$zlT$aS&Ug!)SUjZrWfF@yfsmfyc^^g9=5_g%Mpm@Sv_)n4$IYu$4cF{(D6L>t2R$Jyb- z>c)dVLw|TN4_hX4o-z2Te0%mJA~SxQb$T4(CqOe;5Be&Lp)?kM^Fj9`zz6;EfIl-0 zK(f*x^gA-WjZvAnyP@2HDrCQqNKBL61n~>7Lcl5IdfZ$Ej*&$mGH(4Os}s+NCHrA0 z&aoHc`#CIwm%i%L_>&q-Ckg!+_e&*Gw`oV;>b@3Yfv9qaC1_viPZY{x*{3ikRTCk$ zPdjQf6@A>#fa!M!1yA^?NP(+pP!8!3P$+8Nt^d)~>D}E1(V24!TOa_^XG`JzPaT&~ zkO6V7zQtffl~nTNYuYqB^-pnX#CuU3`X0LpjicbxPF@6e2*$5zfZ#x9v6x3?`LnB3XRvIO5qmH!yO@*#4+xM6#*C3YS2%i|Oo{ zM&B!99B?mlxJyx!-aptEEFWrv$z*}S4EK0>?lP!p+qpi=>K0Soc|5iGE#d{u z>N6*BGi_gx$fnfIP8*Su%w!E;x)x@?JPC zHd5k8&&39lRU{oFJ5Xv5`*NY#CjtzET*iA$DI9uZ4SCuCI^@z z%7BDX?)mJ8FwO@=GSiT<+Q&!h@rR4l17h!bdAwEQ`bwn9d4K--onhJmmYJCwaB0;{ zs%eg&LRF!*wYIWXUJJ0g@-x~=hz_b*hRpJmsRQIO*U6(as1a-lI>!ngFFC{8pGsIz z#zIJ?8RKk;VSsI=YxTn~-vjVWipa}6hf*U&gEf&)PD{^Qn}fh5Zh!8}lm|teH7n?0 zLEKs9U)eE{wgafwxBw^u4B%NWoO)cwF=PQTdk8HsWC&#_AfnEQ@9LEKF;UEXo}4FS znjpxLY>o}LQ+Xp(+CN(*u%iy!S9H6{^ZDwCfln=W13}t^yiM1AJd^2C_&(By>+TQ| zTjZrb74soAZJ1t{%Z1LfFz87UY1r?g#Q2(ygH9Qg^xW1W?Q5G9#^aT%eP8T`zGTr{U|syy z4w2_yLwt6v{(5b};RLMq**1$!bja?xJnY!)l+Q-oOOE~gwBzZz7iG;|0b(5R$T|h~ z!c9A_aW4FfPGTJmeq0KEO|KZP5AVAme)-Z)^vM0=qqCUTw=Z0J^#y3i<6c2{HA3P< zD(A}iU%yo~$HS&EzjjI9+Fawlj9C@({4aI`RbytMjEO`!vRVStTjXPQBtbn#-!=Dk zm*21=6g3{0xr|9<^*eum>XAFySG$A6aveIH!bTiv7d+sSDBMI#p5rO{6(WQrF0xhq*xl9`T9nuF=E@^*lvMYTyG)|H7Q)PC4lAs; zN@T2Yu3xrUZ!<2`@)%?LE>$6gD2cE!7@vf_I{PK~0yzJoO7PB=e9le!Xb$YLSg7?U zNvub8>=x@~$PQUdthhCO{1p8h9NZz;|e+hl4m-1eLd~E~2h?-YHcDmw1?P z5q)L;ftzg7wUX-m@kDU;x)&g&9-QYAQf9IGGw@U8qt+O%Px`4N-ZJ*fcS+2keO9xB zEoU@ElkR^^Zc_$-e?gc%b>(h4O%>ksxkU@R?soq=M^be?L{0gC3SwO@{ggK13c$Y; zvaa5Kt7WQcGzYT!icZ-T5R$HF*YRoMxbdu|ZJmdx*#n3ah4TD5)8sm{@MZ;|dsXD7 z>@+%5fVIfK;(jduX#oDM4yl>HO*CGtpL1G%qp9w% z>tE_PJwYxsQOO`Z=FF@^a9!5C&k)EXf3nKmwC;L<;FspcXrC5rWdxN~!key6=W?-THh z`dg#vOqs6e{@Nt@g7SQD?(j3#Z^S&F(m?YbdqptnUNc$qu|ccdT+qkj@j)VUFNvqiPQf1oZ~r%@!J#K5M)^Q4g;Vtd z*f~Z5vd&Pj>aSyyL!tYmVRC|aj|j?_W1%1E5ZhI-ojbr%*OijQXiK8Tdw1*)X`yOt z4Bs8nbyrhyQyu}tqsU_I+~IL~I0NdACyJivH5X0*VgxPLipzQ~(Rh_kJD%FLVgDXf z!``^<<^&nVX25j7kZ<@ZSO!pEFZr)UW9~V4%Zj)=QO+L|Cz6(KP%=M!XaRK`WZW*{wv#?GA%MX(M5Lu}@+3hQTM8Eb9>stM-PqT1D3joz_z(^&n@BW?&uodg$x5!@6_};c2pv3%3o9~ShLZ_%GB$I@6e`CX0bG$bP zNjr~gH<0@AM9h`zEUDjD9pr@M7``q&{`;gu->Q$S^j*P}MWxI9->Ti3IygrM^nXk9 z%6{xJ1owf$_cFE0sZbcp`0fwe?G9UkZxuTq7EXyQ5z>GFR9Y^6+BvPb&tbQG-o>;a z>xE8I#R@x^m|G9=s@!L%{#Ii;BU_+VWEmQK1y$YV%B1$acw7YV#(LC6fgvb0V@O{; z;C1i{l+x@sxe7rGa@P`NfwcHw<-s!tS-ds4+U19@?$PLMHXDc&aR7{*pdTR$F&Y=iX+NmMCTm#XqBSiUB zFiJU>fH|t38#?A=LEQ#Qsic2RAc*ScY^z!6v=83seIi#o6+%I813~OE5N6jxT>cn$$U*@gz-~4i%2=T=Ebcgi0nU=HvN1U4= z^9ag*oP}TyroEbyI2BF7>LOz+w3B) z22=^U9t)=z#PTFVpmdDc%5c+ZKeMI=!Z1hvr5`sRiXqs6+N;iQ7eFQ=Q9CEMt(8dq z1TtS$o9k_^_y>G%^scD&ekYqENjycQyDQI6g4vTacEB0~a^1&a+v@fZ)ICsjwNUO| zMKFSeGc@KzL97s?24Ghh(X>bA4D2an%#bsVx-bSw5IE?g^C(be%MnR7TH&$$pE{li zwxN$3uV)%K|NL=-Uq=@i8Q;<#*Hf7!1K#n*AFeUfapQlLJ3f8qZ^7!6WV=%Q;Y~C;#3k-GA$66C{D8{WP7T?}!<)YKR*2kDXmOy{raC(t8HS{70 zcysq&3P3L2$6sT3kNB+wy6hL4#rZ8@%Ys^UZm)AKqp9F-X_RUOrGa^DpBA#Na%io7T*h?-?C_V12ei&O`jwD%}*>E z7Su9Gv47L~V?L`|eX*#8J#F6Ofk~2biqd}qh^^nlg{d-mZxnp&&qG_dko;Gtt?vX^Pr_3w zeg7X#XBpK-_qF}tTHHMloZ`jZ-Ab|I6n8By#VKB#V8z{Op@m?@-KAKuV#Og?^5*_O z>;0BlbJip?IWv3DwSU(>#73hctBC#PtbUZjkfDd9crW0Nvbz~tQ_Rz$_H2f!)+Ui)*v+6x4^0l}8Q%tZc0KF|E3C}XK} z$$JCaL~U~B%CPzUHtrhxU(fuxPXtBm!k?dCD~EhFlI!uNnx#uYJAWx~7LtOb6-mgiG8<>{^RN+qxdl ziygxfe*J2#CT49xTxqR6bB~Af7xSA3wf*HyBeq_LcK$WyY!WNQK222jmp|nA!Dkb> z@QczY2}3s_II}OJV6b0GUx3hYA4{e6icey7sugs(+$s^Shq19rX-U58=xcg~aw4T> zBejs@x9zHzm2^Rg#d@OQYPNKlYQ&Rvz}s<%seHQ=BN5+>lcPg>MIWM4(VK%bWWuXi z>Zv2xBtK#WKtNS^y>oy@rr<64pLOi!evKbk`ZwY) z&UTxI@}`hg@SsFbznX2z93;ON94hXtr|d3H6$h4B@=)N*vU+?$aJS-efKANpY=8vn zw!P(T$9gl8^GftfJ0CFg2fz^U6M5U2_#mb4F(tY8F)YAw;@J@8`>S62t_y9?P)|7R zVOT!;$?DE9(r={g7w%_WBlscEAFh3mO)4%gv7j$j?;+5eEKAh#3fIlU0f4CFvT#2m zU%|EieEl>Z3;;;L{FN1=ij2hkPUrU#Cy2lEv=xT3v>Zl6O)VWgIVoJB1&-7BwDtUa zNIwOemkvplgg-Bi9P%i41~XqhP;LtR6YuHnxLfCuzW)tZv#u>&3&m{+=&7SSZMwdXs&?(fN->Aw8bOWOBT6*1 z#wK$lin@roZO_LbO@_~thh9GPxMmWXQ)ge+d_bct2nhSsiLVl>MUZgMEr!2gaGcJg26x;7KHh zxxzwFdf~{axxA1FTALqe+cZPuXoQ~@JulD!%ieUX(w4alggz_^G#IB?LOjvFQa!G_ z_D#t_R9S>p7t7y^FI$i}`%BRZ&ygJRQKsy3Jn0~8(^DnAl3jbB0?;j56pkJ?MpV4ulAr-#T)uw>aYB{k%Cx{nCL#YiuOR_< zF8_8D_#sBz5Uhu1O&t>K?FYndZ7a|K4ia~B_W)%u&t|y)n)tEBWFCi=P5X0QjaM+2~{-)ec99wU{~q*W0-LA z_2E{s_hHtILmTg#Hz=B|jDR{grbSxdX)}9W1B{?$HIg@xmn8b@A~M@+OM5voxDE#) z$!9UOau&7%WFQs+(I>|aOIiq)9Gk}cUMIai3@?WTr5xb}(RdluPR(o#sSimKdxiOb zI2r=uqX=(8;Al|~K3==z18G!|GWYkX#)`dqB*Cim{03wTQh!8u`t zuONuFbk03Rcg03bOj`uo<+|q$1msmj>&szMrWYX~Bjo=fU;EerJivSeE2b=TC5kLF z+m>2PA48A8Cb0oRMPQ~*IoKzn30eHU?<_E@Rj|9W^i($|)LjGxX7x#Sk0Lcfma6c=a z<^ZfXTrF=Om%^FiBhyG)1 zrxo?5l9i>~*B^U7iH6D^6qOK{TVU83g)ZxF0kn`)l=Ub}I;>>$Hd(JIxvPo*^ z_MDdHOL@!Fm*Tb^y%-T=8T>DQUFm_mV3kDi^;@qqxgT!zj$Q#ZgM#gO z(f&URKu%Fw+=iuQ(Mu7#+j-$`R&fINw+CGnuGcO)_fUN{lP-5uta8GuSXGgHbO_j= z5)bL*DMuU|`UK%If5+VzB1H9){r+2rRAIufg%PL>`<-i<)OGIISR=eE41Hv^bzbBn zcVeJqf{p`H{gRN683s`4csVqw;duz5;p6T_lar8OH_9%{Te=|CP(?Z_Sy42WyFnyl z?OL0!e(^ls7wK^6WvG$1ndtHk$*ABg!7W~e;|;L^NGqznt|NK{k%lnYn0Ymkhw8G= zAmgH_C;$Z6hAt!dstWNZC&*#u=I1i|%Cj~bwY^mKm~p3_dBuZ>N0V*61zHt=QHXiM zQTZUz@pB^dAo8}4Ut+{jMl{=undyRfN;@k44_g1Z$g6ErKT>Sqe{kr=jQD{R!ZXoi z#tqC>@#D(>9~(MlYv|c!wl}pCP(N%QLjl_k&VK%~OWvq@rKSQ+WT{i><4!j z@?JmC_a7XjFk}aDj_v>VFzR`A8~TPwmqR%@_}u>8Ek>SWjCqaz=7%gbcZFtXAPF{x zZvCSe4WoLTE`IEEu-v>FAeEggOrcSqTd@z)#wmnYC2J7~b z#;M&=zqVvy+Tu;UYga>xdZXQPT5sP+w3k&C=NQ0DW;Qv0m=et@T z?_p>{pdoSDQ0|AwU4&bQpqB|t2q5ul8!~{vBkd?tkiR4KHUgk;07cPnY=%yApwxgR zq&j3a%WpDw`4IH+C;~|WMxwq^I3WOnyG;)GNtu!-%QHy4I89`4_&97-%MPY`wChkZfCH7`p+V6_6X2-u7w;3Brd>TQ4C&$QTi zV%c_ci!(Lm@Vk=my%3kuz6>0cyjTa?Jzfx@?Toowuq0u|zhF1&z6yQSXM{+jt4Og$ zm5z`F&uTa|--eI@tP+b2^841-7DYlHlbZg04!vkaS*$VVOC<Fn`vSyMYf2zFTm@ z+PgNiay`@Zzg;}aEL9FUinkCA%rKjE5$bqf&uDA}o#Fx1!+#k3$aq(4SfcZtikjNn z|G{=^A_Xyel@WOOxqj(dLD&4jfvwH2O$SO)YrvyeEf_he8FucvCldw!xC*pkW+y^)Njd!D<@dxq`YBTxl_03 zoRgc!Vp07L$>Jgfl7Dn(WiNzy%7Mfs%@Jfd+TBWL>NFVb$lns18X~KXOQKiBQY!2Y1e4NT!Sd(tmXF+Z$N!?YqbLjpK|skJg400KZ~Jka~QSy zC|K=JUi9+}E$E#}OlX&Qi^wIp6CbWCSYi2IUT9k862)5X&wkIi?m11f(BKinACL1) zz9fxrsZRQ`DzzSK8f94!iDq;-aiU+{@BeoMp1PJ>pV*hsOHk|QIvo3Xh1f2EvQz2P z{0N1m!>ADgUmjFUa1XXgnwY5LsG!WlxZtRx2ag$1#9RjIbHLs9|IWhyP{X%iuAEZR zkaD&$=jAG=Be=k%!{=t5GII!`{)($s{$}g@YuLd8b9Nnj-ra9VlET!pZmDOId9^8d zJz}BJcQ0hYQ;JPj(A`^Sx6b`_4v*EKH)rWvPVLEi>gB7QPVI#4F{setkmv7(kE=x? zcrtVqotQ)B7;5-m7rW52RJSxUm7CGLwkwDLKz%j@KeOXt8~b)m0dsSb7Hsv-M1fotgx3)=;4sqH{wG{O@q%C zB@pNhDtEYA)0H%rB`e5+f}rPOJt`Y(n=5=7MS`JmKAhm$BJ$0%+~N97h|J#Cc7VEn z;{eeQZ;A6r|6)E%N^C<*dkQ5A@d{Ox-g`?$8Ja)i1?Y-AFzmW(&adjpfE=~*`FEi| z#lrcyt`#R#h}6sH8Ks07^LYfVWCe;< z_mdQRODji5`tPuNBt_udCtJa|I0C|u*(uk)twnt?P1@)FI)a#AGjGeqV)Cjwrnxe; zzEx7(kK;C(Ju!+6^)$F5KR7Ch99s(e1|RxW4{)1~C?zf%b0hLyXeP=ZKttz&@0dDI zrpCO40E(#;%JvTgo`gxl9P#0*3lWXzO+^E5@I$s){fEUFXUWZV-aiB%`Bvmg;?g|I z%RFeyVCLQNe815PyC(R#OMAL44fpOgVyo*xylRAydMt+7oo??Y=ISiI=6d}Q`a)~x z;#)A6`4RbZBgUqeS?Q&Ee%@UyW^71Ng7>~QTrm6bsHlSxsPPt~T)Ec>rDAnYl;HWm zz6mzqaNK?F+Ao;TJ4r?{-)DrHh&2#uo#w`=E#>%1HthZf(hy)gxR{{~O)>scDjQ}A z!yo|Yvd;r=8R+$R!=TSLbCg^nSZ>_^W2q(ZcD#H83t}@%fiN97)elYGDWUkvD>s`c z8NDh|?atLF7l)er> zx=WRFAG?3q!wjD;EOrFKrboi{9~)li-QI}d8a+_bp?P3uSxTaucTfM=W|Sg9xWxjD z7(s)I$14x6zZ1^dUyXy}JYke>G;u&;o?iY5JFDBD_B)cY#%asK=;|)qz5GmhD}-(9 z;Cld98r>m!#C90g5*M>H7H3{@w3NJ~i!RDK_*~B%9sp~wu{ZiOI{ps&C5n zCSt<5{$woR1hHpGUdJ`s>E8WCzqHCL4)@QaFmPZ$leqZtoZ4viM`^|kG7$LF_Y&lF*jVIU&AehQuyNJ$xTxe#0J2Uz( zH{-zU_!w923m#AoGs=N+P(EF;QB7tL)U{A1Q%vJ%Lx6kOli;;J+Y}%WkHk99QkS*thT<7UFD(HJdwnJY`vI{== zHg7!e;#J6O?4i{s;1j;4gd=VDn&8P&yNN9@B)QV?XhRNl2Ib7cgkrqFn)@*n`-5Ah z>kGM1!cIgCpyr9v(% zvG9EfD;`a?T^y!@Ha(761>*8kEz{uJ*gc~p(Y9MPs$$o9o~d#g(-;sj%uwwb+3@T( zU_8ybR4PbOoG@VNu0bFvKh8HNU+$$}ZSl;y6y_tE{;PI!MVMq2y{qNJz;j{F5Anmo z%e+4oCH*xYe}Sf){2@1w%G&di>(lmE)Ix{VyIvg!z0Y82(t z&+_?d%*%M2!HMrPHsfryT`3%7uG8E1uI*d@=!SFPrCB=orkI3EHKEUqCiS26#XknnRBx zW**~yU-^22zvki%KlQe|jvv`<(f=+xMS=}zqRPpCGO%xXjSqPLQ?D+JkJ4FY0h+!b z1Bno^d{91l5{s08FrI@mcXI9~vxVs_u4v*)E6b&Ww86v2E zH5JWm*ETdwZ73i53BA~q#T7(LUL|eCdd11V6t*?;J0H%cavlXE`6902ziaLnW2N2w zTezZrT*N|=_I%A8P-m)h)RC|Vu$AZ@NJFMOb;_V->nWAs!#m3Sq`Rlw2-^geftPlr z3LhIP?#Xj^UDs0kg;kkfg_@n8yO>PZj(=gw z?9p;hmlm!t>R@>{Qb$6bm?!}tZ`!}o#&s)wKFy5|sKRlakgfdF13u@d@>@EgdZ&oY zs4u{>32+j9GC{7}O3Vm`4J`vu?djeg3cJV1EtI0)3d6&}(PqT`HU=84$j-`lK$gSI z4-5f2-HQJ9U5+e&c`Cgsl*D%-p$`xG7qPlZbNh(r)c(0@ndjA~?O;O1fxq6is$&{_ zsxfi9vi%oEM~DEPwRPK&Tpyafc||5mVR!Ko`eSybgCa(J1GH)g~EwxKYK zuS(?IyLjLH#3svw+M!&_+2hl{-}%}NYvx} zSQYY7M!IA_ILQ?MUS)L{$lT0fN7q>z;}{tX4}bM}*q7s^`S5UJVYocQ*`PDcD<>kh zTGm;VdsrR^8qIL;+y~-a)SyP`*s#j-TfD28-La-eOWXG^CmmWVyz=Sb*PfkBpZt(h z&CP3QW;qO9>Ii9YH5;_ZZtn>Ba6zwmr-E1l=LDMH;h4YlPQ8|T4o@Xd-+`5Wj_+b7 z{oqHP4{9P&p9uZ<2Zb?0hwRMC^;GkKH+%91VRkf?;Rc30bqSff%e<@1dvZ=(-1o^L+prrn-0Wx;o(iiwU`VNhu_ z_U8QlbQOBe${JLy&s}Wr19MCIGaD6aa_fxs5W_x(3YPA|u;jf&ByVu4S7)#Z6mY+R zAxl7vDl~b}8MQ-P$FSlk+hI73WH^Sa+ZOHQ%bDeyqg1LJc=G<`3PWlp&BheAjbVFK zQw!?Z;t3ARrjD_?5})*A>+b{9=fdcFHikc z{%>!urI=>m?Kk z;o%@%D||gFBAIG}s3xCZ@yP{;<>NfsJOm?i-bK#;(hjH&fKh6gugg0Pu*wn%Kh5Eo zTV}g=+Wu;Gyf0yviOLA+{N$p51c~knoYE&hIypZC)7pcZA{2$yx$|u+x<<~6|HEk(*ykeB;{e(8-6 ziQkZoHq9r>W*>)0uEiPwiKzxB`FnIFAVD>Yy%yZZuj?E-yOcFyd?-(SG{O4CrX z@WWF^^S$Z93!)`erN%6Qr(cb2g^ zpMyrW^^?rNsae;fsBdPlnN~}}J~q%r>fGN;yokO1)*74nj#mRSxw^}ftmfvgfN#)* zTGvB;cK^Bh%Rd_Z&N;+dS~n*|+j=keqL1J2jywfwuSHGvhDF)hN8a9?@OML6Z|+~Z z&N_zZ7eXZ8!~gN?A1zd#EDPMg(Ze|F11t~fC?Ntm3bV|QAE%KEE7rpb|LqpLHFl3d z&lL!T4v#w|WFbYhDMvyk*m219-V;$ViANzhJ*LI?p2<=jrPVg}Lt7KB@?MGadGLdF zMSAfs=b#Wt-oqb2&ln%^j(O}I%F6O3$0GQ_noR?xlB1P5%WO?&76qEZ6K6NR0LuXd z>04Jny^yelwZJc0e$LW}Cw7pL>F-|?6UGZpheW79;&vt4a_E_+P15qr)i6KNCDX89 zEL0|E-<_XJ*5jc@Xx1O-HR9w=hBK^irqa&i0JLAhW5 zLKxMll4Qkkzp<+F-`IF?qjYMj74d3R8N4PV`zzAX9B4M@lHfu^jOlqQUCxzJ>`4hy z&>eCT;3m? zT=D2?{Qb1BnrE6ZcVqPky8NEKk4hZ2u6jBqJIV_zHKdZ1fd7_Go&8IMDc{41QYHj_ zYO{kl7sS<0yDeM>Bh&koflD6v;O`orf`Za%{Z$|;Z%>AmD&yu*PmLYJOK}w`I6h-M zK2R(CWoC#iSS&nc$fCX|g-W0VT`Z+P0V3WE*N=vcH)_H zJ7!VYda?ZUOgs8lfY@kk@ywr7E_3whNzZoy0-2%RY!*#>#R7&|w;_36dir(vT?sm8t%G4@UV6C!M z3`vxJV?W-VE6&sgO5Pnc(YB_$k5F5<3xs+?-IlA|mim3~JM1J-wc$ zf4-|w+z}3EakqZ=#fBmummzVb?;#RwewQb1t`j!Zx#oA!xz83{f_^F#+#@3YI`OfE zKdoR*Qv738#ry6V3})b6-kW;g%}va1Bc1$^4LS;AN(AGFfplUy$X@%EnrazhAX) zd}P^SLv8-i;Bniebzjs^|6c9}~#qmdgui7$xSy55Cv?{VN~d z`;aAdI4R$Wway#QIe#r(pT|G^qg(oD*6pqne;@ekhoyQhN%5ZuCRrGVzBjLSy2iYV32H{-?Ksve`L+xmiZ7erevU%=`Z5~ z1Nl1R%E0ntis>LhQ7SF0lX4zXP`o0A$zZc)Iwn`GOgc&G+${9Chpn7(AevVpPS+Np z_9IdZTrLG-_JJ$N%ews9yp~LkQHPk`k}V^S9>~o-tO$`9CwO<9Z5LwD1B$60Z$v1E zhKIi&rg}|Pa^iqnT`{C3pBYrxaef8U46Ejh41Q1*N_-jRS}MT#z$nR1RQnAwy~Yqq zG_0C|*vDqhBaq2p%Sg;#rc(A#x-w3?Bq!SwJfgrt-2izp>TpY^N_q3F+)wBDthwGc z9Nt;I98UvIDpWpNRBufYd|)u9tVvUKg}&y?ZfE%bY4oYs4!Cd+Y)_=ut}l@Rp5^Ud*G$0=W-vVdytPEEW-1 zw3JGsy-I6EQ?D%_U0bw^uzRW}bY`Duw00_M-z1jMfcZ9t?x3Lpg$L*D7n6Q=eav4; z>8wX$ebUv4Tde!3HA2&T;M%{CgzOA{X{`}A81%nNav!~`FGfp1+`HSVNZ1{(*EQ=a_eJM5uKq~Cb&Plt5uz#27!J?W~X&o zf6pSh0A`yrY2uBF)4iQUhAFM-1Wr1mc7o+80*wq}cqfPyx%CbNu}T^uIllIBeZVwB z8Zd2LZ2!eZe-qO4+}>EfR(SJk>Xet}-$^6a8)|i;Rkj-v#%g&?gnXSxD&3$kX?wVy zv&xb`s={uYF;XV=M)*B@pz+(n69r-2n~#?s7Gd7is~61tTsI^{#C;wKP!;ws3M@Md zzw0b+T38Hx>Twzn$JWluOHyF8Evf8v-2O76pfx$kqR11}5-ROvECO5uC?8Lzygue%?}O2IH=6D&$i>7=>AZOZm=_OqO+^R%pW zyC#L|n=s#+ z4csj6(H@nzt3gbDWhYJa-TXc&$+REb)4On}25AYxs0$*|x2p8!0u1JMw;H7W4nDiP zN2-DxulmZ=R~!5^|K7Y|OY&~fN!N5yT6 z3uEN)yuwJ3)Kkb>=zRwXB^3gf5sB0|;No)T)WPlRqVy*mPxJ!IkOC__z*M;!8dC1M zY~ZEK*WJ(iWRj8rUY$VGkK`R8y2#{MjS7_D zs*SLnv^K`y7P+@xZ`~gqeK-EP(XkWEkl#M~f&aT3;q=L{Z)|g&ELSZC@CtJW7$p;j zI*#3R23U8qUYC+%>z5r%1zo=3^On0p(nB3Av(_Mznd0U)BHMG0umBgmACd4ljeC=R zz7y7SeHILjq1OJcaI-`0w)fw5;$Bcrtzq3mXY|DHIqTWh0#gw2K+X8*yA{fpT+|#h zQv$N@?Y+|z)2~JFX~Y?Y!g&r3$-tfEzY^`m%|XPoF}DN)Mbq5emJwBGJ#VDHG0=(l zMZMY5d3YaHRP&lV9GE3ESc%>QuxeHGI!2c_Bo)!Y zZ~Q4)e@8J<#7b+TgBw~y7zGsa}VTFuhb6GWwToCcznn`E&S^YL-mg2^~xJ z6J2Da^uhD>Vdvv<61zr2&zkj<-)PorRemv!qa&=5{jV#Yb)wy)osZpko}j_tKVA2F zY`=fa%n(kAlup@Z7Zi5cKKZ50&PF&`S_=RAgBE{cP9i!*oWiz)A&qgJWlJlu*QLzS zX{vd5BS=YuOF@60NDMm=#u*y=x!TjC8yGl+*}8ho(GWC>1XKewM#R_}x88sMrz4qv z=1%gNTVDR_&3njV+I5xB;yb#KkQWl{_kWK%0n3v3<6W3QgtcV2MX9L{b2zu}`e4K^ zL`hlH?0N1S)=>OSSiNLMTSz?Supnahbg0FzbirvLJl6J2^I3rDJzMUCEPpQZGEGeSPf~x6B>e^Q#JFUlZZ?e!d=-3TIhvzjLWFqD>eR1QqrUte_bo^S zJfZnayk>}y7>XcELK}k^g^(c%A7Xf9@B1YNDybF4XG5eS^GFB(cjT8v$ieonzV5J_ z4Q{o~3(Vg2tbN=VlAf(`s=PG(vE0sjbDGs|lMn0I{pdWQ9pzrRsh#0mwhlc@D018W z_TD5ub?WHCqrSH?B}}YH{z+(~L#sMZ$f>}<&v$Yx=q`?EWL`}v;C3+sp&;o`%^qz{mNmFdiG5`NWjv z@vsYwN@bbElz~5AUASL&CZFILL{W5{+@8jkvf+bDvwW-EjAMz{rH%tO(?Hp^Gt1<> zA}f^A_Q5n+S#@2mhcTZlpLE9qz0m#Ox)ePm+ZsTlwlnz%SNd`LR-DdYsWON~mh@HH z{1A`X#{x^s-mm7D^@AbKawwymmH9~|Al>C&YmkLr_wOdy=GN2uIvRs#Hp#CFb>3X_k0=t&ZE_ZH-Z$1Nz zVBSG8CJWEhHGMQDc-q+qm7R{l-w=$%kbv8Nf&?$d7<89rR^X z#m9Qqc@t(J6+D0erFRcHsS$rlg=ql_v->>FC>2U3Y+F4S-E%Ht-{5Phq>IF%#xFqs z2wsfZwyG|=*FAl}RrT;uFl70%BlwsyRCz3H@G@yL(RF0%_NQo2k5qKYMP9gHhz<>E zn89)f6F*^~82ch@HjDOrpT%<5^VydGcYid0a~W9RuzB-4BG7#Uxb0pYvs2dz|mxd74 zC+7z(xX!l1=#!L)XvE2EgQa6_lZtB7*Lc*y5+hx5-#_pVADu}~%*+Ho;KMBCJ6R1@ zMpVLGc|<(i(fA)kI!+nl3h{RN;+WZY15_TZDh$U&r#rGo4)gb=U*?m+@?HHIGx}-vev> zcrgLxtyimR`a=A!(IEzA6Bm74Q(alG7_$pGxlK9nI=Nk6&T&=H;kF)U}_cY zO~cynX%bBrWwb03H##~>O0S`z;omESeDItg4tzx=|0 z9Rg~-zC9M?;1)1Ou>d5;W_p?qpN*2A)}1uV27h8pOpCg{bs~-vlIKO#qyDRq(i-ID z@a{AIV3&=}#G(j!!PZe*3(b&t`Jnn&i+nu_U06;_9W(i6!-vCb$G&`_HLKz{+j76`oR$Pu>zi|y{%yywx?ot5j%5U5V?(fi z;y@JwyjuL`XbZ9LVx>SvrV~%|^Gs7WH^!r=N}Cs5+#Qj#M_0 z1|njA#|>gXQ8AWRdpD{QZH8)O@QDCRPN!!-%eSDh*36}}u8CYO9V70~6ADDs+rzHL z^UU}BU?XU844%mofYsJK_9(E~eP54o^8d(n)_?AGpYl%*+LG&j46mJ9^{2)2Pbc+b z0_8F#*rPy<#YF^2-2l?K&vujEzgMFJeWw;}tCsqUz~BsHD^{SY3Q26lRwCY%#^}2X z!xauF|3!Y<;rAW6ZmKS40{WCUoSLVZ2ez=S!LYpx;s55QJXxjrh6$E1YWS#3kpW6x zBD6y7?YFhmsUG^dF?LH1xtzM^4V5exnqI*y$H?lD8B5#rW3BeS#E`0H4P%}8Esin1 zdS6P2DktBE0s~65FLm>v#M2uZ-l@h$J~BO5Ou;*@vBoQ7QDO1uB8Q)fBuMRXRQD{L z!&`f}M@!Jk<_V}Y_NeoCr+ZowzprZiiG^Lv z5fLhh4i526bOm{~|MCj5$mW#^ttIr<>Spqb#fD72A)2nWcW!68JUxwM#HfEpP-qbwf%p{ReD_8UX!S)86$bJPc+5 zLkmA~|0#f4UG(cWu-&1=iA|AS z{EzK1n$MHR6bNmPwkZ{Hiwof=rEUK0%*x89M(za(2qxPVWF;8RnMA+AC#sys+YP2V ztQ=B1pDyoMNl^SSj$_=8nGZr?)AyccTJ0*7m z%@1^I;jyRlz1tXU!(r&^?Kj} z8aR4wN>~&XhQQ_qqBKHLb_h{TUDL2qHNiP9_>Nva;EcO!Ju-C*(%)#y3c=d{E#0SN z1|l-ZboMnxDt--sF-3fqq}W7$z*JCc$S6KAI2^FpdNeT3%fYm%Qug4*zz1Xf$VcS9 zho6B9UCItG7qRg!g6Ra<1F0d5f(Mp<1a>V>q3_KGq&*mv##nUsPBP)>$G`b#^kqBa zq2=-MEDYj$39aUap&cBKjvn4!dll82Z&9twd}hYR<^~l|LDX*Y1mPLz-?03v_41Rs zF|h4)6+GctoaZTmJ!&6Fb7^c{lKNy}wGVSXEKD%hHAKB76`mPU!DO0Dp z+(u~*g zD(xkn*ful&Jl@>&B%>(nP95UbFT!-fq>~ttlaC?xj_hc-#$Gkh2-q2Tvk~hl=j*$| z`6y-@B|;>O+pXc7LnX@D20UY&tyH>q8$}q7(X=#kyH?44f(aDgwcW2}Y6|RV))s-R z1MVLmHAmvHo`CZxs7`V=muN}@OuT#TcXy>fQ^6y<&h4I0y0j}kI3cRgyPMSy z(%L7hs}o@YmGeO3qnWxJ-@p2evPZi!3r~W}89re`qy#75n5w+dBCL<_q7P#inaF06f}SV-j3}9w}%aB`K4`$h?Fk2ubA}oZS8PJAVd` zziuJVqZF|l2;m7oZodG#IOBbsrgsoxwxUP}eO3{Tq_X*J@UDb!A!Ee*lj2K~(F66C zib}f5VPISuzl<8OUAki0;%=|sMhr}=t>pQ(krkw>LPMPy+hwl8E;wtY=0q-N*XZ{7 zLEOx7jJvuGy>_iel`TSq=``@|khi3{fdMiEZ$hoR8!&saKeFF4E}drr7B&oHU(l?} zCH4E2eHlDExxhRabz*=7qO`)$q+AaA$(4!7LGl)&M#U};bxS}!JiAJ>lc+>Q{l4A= z{7k21>^6cus9Dqyyk~+`W5qI%qVSiIVaj!|ni^Cf9^#02B&FauGi&ML2ORO|9@RY@ zjbYVp=-3`h(mGk~Ejo_+CYqP9X=(`SK^(uj{lnu_zsV*2<5S)5L%r7gs?bx4stt_4 zyPXqi_!d$<%aQW8VpB62cRqRXV!a@YNm$qlW2hQYbOVh61t8U54SeR9i6l2zTK~+O zb9=Y?3jHefzZ4d{?Wz{!e=V6?`g{0#iUB%!sV(#f^J2y zA1bvU%8h@j(FX~fI|YL61@8z=_WIl0vUQ6mI+EaA^`Z`AwiUyWZquXDp{=NIWy4{G zWDi7$qHi-SsZT4rPIBYH{b0xGTH2D?G0gyybALCN%i0AiTen=Z8d+p)L`@5g;CeHv#UjDZ($nKjygD#$35B8OkNFbdAUyL_((+mzmjZ`RA_cn224)2soDW&-b zG`Y{CTW&YpRaZ*G1JbK;OONc7@U zaiP_;45(;JGfBSCG;#q((h6aF{AJYlR#xD5?_aldA5>-tr~h9`K{IILz1V@d;hXnB$#0IL0JrsfMEl*eP^f##xp~?X&{qKO zE#%txD4c?oEk7_oVgX5`_VwK0fKzSF_zry@;PNe`e%_1s)s7X7%r*a>jCd&3`ko2z zxsq=ho~$Y{uVZznP_*j^#xCG~7Mq+Gf6cMd{mrjoBFU8))Wy#^9hf=Ye zJnrbn@9z<<87(57!jS**$U~nzCWp5}@a5X%tF^_nLjPXtZxqqkBe7@ucnvYiodSrW z{<5l01o+cb6>($f7J@U%vmp|UxY==Ecg40)R8~J{h}J8OAd5z^9ZygAdcxY)Qpedz z71E(KY~`sc#tf=nm?d&7q*>UCg#Akh=2yiLbDdPx*N_Qlkm)p`pFJ^<8o<_6!HF|o z=N{ym>v-m02@}TmQDt^v$!rQxBU;KmPVcPFq5d)hts|ySV&$}YYtVndP8$w^&yh1T z_$nrX+Na+hNdq#QMj>@yp#F8nj@FI8K}i3-Wu7%Vtzq%w;~iyA-W*5jGL;p4@xuUV zO5}XJerSmb%#204?gmOvphS7{Co;K!QextGx2U;xpUW)HL|F}-BOUE?j%$y;DLON+ z5dek=1*Y+a9)uK>18)aJesQkN#LzdThdX@iO(b4R2|PGobmeQlI@-%}Y>&p;;yvRP zIkU0s=S)O#xpM|f&));}%M+0#@mS#bo;|Pbi0XOCS|45GQuaSovIi5JTgoX*YSh&S zQs$me)abBFLQHBep=UFsgJ^QuxhuqGbSE|l!efx*J3^BlU^#35lT z^a>Ffv5cYMEW9TyVP05w*R)M-A_O=!XJaYnKLM>A@LwC=nh0y97igS(e(wsa#L5wT z_;Bz(&qL(s84*i|%Hy%TLsSmed6((sqbL~pC6yPmXo}Q{+#A18-BfkVv1gGY zq!b?QZ>aX`Fg4TA2l4MG4dY)*mHCjMt&dLymSdjD#;LE*5X;0Plow$if~|vn9{N9j zXRp6v(1|SP=bxN73w6F%1BTlp6O!=rT1r2Rme0Xn5E|jbxz-L!hSUX;^JTjF)y~Zg z!=lsHor&i2mdMn1OEaurO77=qzf9dYT3y$D9O0q5o2`|lC2Z)Bz|)og2LeI;z7W-F z@0qol{Hm0_O?bjmE_d03o@dG7;iPoqjYrDYUfWR;qV$0e2%hl_o4Gl`>}-hdR|vz1 zI4&SW4k=wMD@P`i;CV5*Tuh-L85*jWZoDxrUwiGw&$si>kEvAZEG^AZuiG@6f-tm* zB3CD(RQVZ%C}3F`97o`~F_}z4KA+Ij)1WP1A=I;iWjP4pA%u$%4nkO1mOu!wEU;}u)-T&b%5bJ_q9p-=m5l3pY*`w&(drKq zD`Q7CiqGSz`oyEjHVKGL+q6x4JlQJoitVeB=4Bj(_Uabxc_R`~s~M+&+fITQ^212d zP02o3x%!_b9NGzxleQs+zZwB!R)Tw2>41q8wjlx1YKt@xb3(_b4SO|wkCpMJX#&Dv zr&Sker_barIN=zqf}j51_!~W_)y1>}Y#i`(xJR0BNRPvM@!K6x%$2+~!pC&#|hHu)C4)HMrSYBgpMUem_x=ljk7;Hm)q?Hyc@;7W?{7uYpdi?u& z==ir2PeyH!CZ0}s4y-Z%%`qs_n*XleF0DRkR~xNs{;$#oW9@Co&{9LB3CMQERr(sV zF6>9EmG!Q;+P}ZVz4uB4HQHvE@Sl+C`c9`RB}5D$oACdi|^lSRZj5d2TlQ zz}&#VeTBinZ)9w{%u}Cwpi?A-!9O%JvwK^;esN)be&X1|!WEYW!RRcAul4qR^NPX2 zfBTl}{$$(m@DF!x*>a@(<~MhQgeZOVqk>w^rCu*msf0OW2m+;slQM^G z`*_}A^7(tn=kKFXc#vXomO`OXe&;(kRH38vXMZMWHeDKx0=3!zwc054`Y4UY5Y1*k zQB=?bgdziMJHYd1$YviTmpep0f0Uk{Ib7E-Uw{26pZ}%nuNO3%Hq~mDTCE4)@1@!7 zquI<7$2Lh~ln;(3K~y`0NU-fDwq3<>7IB;fT(^SjHgMgreDlrAxo1vFKy2EkZQ7=7 z+NS+1TU#tq9#rkkg8tur z@{=2U?|bhnPfq?(2k>orddA{x_SsF#`W1Zt*?Hd|Kh|uzAJ=$WfES}!!DMVK^z!*{ za{v8*Ql6arKc|ZiPqxJf;ep;=b`-UWOC8{*YTO3F3%w!IR znanryy}jSC4;(0$Cns0Q)44JHW4^z&8U#q zOkUd4^Oa+c^MjrF{B3=?+(P-Ln@&5)YUxdH5+q56I36I1wh#p8QmZ|cdVM=_?CNlX z43_2Nx>I=G{bVwC<9R>D^N!%U3ph@*{1<<5>IA?w*9ej%OC0wSMWZyEXV7SzMYB0d z6y-<~M~7ip2qCbn5Z9f>b&ueA_ma*2luTxdOvc|3{`J>e)axFNMuA4758of4ULPO` zGDxXHFXA{ulGvJnu(awyV%q_ZQ`7yQ!*S+u-72ozEPw1{%Y;l<35e2f{-!AZ&EGuc zFM^Lnn`k{a2q1dAsX!j@{d>6V{d@LEfM49XlP_q7zg9d|EMNctAOJ~3K~$>&oz0pm zfI^`Fz)QDm;cExgy(u3>-vxN_)~$T%_;CR0_4;bNh$YO2mi2!YGnr3Hi1JZ%S>18I zJJ4)i3*aWnFPy9m`FtLL-xwL;OGl0v{Nn(>Ix@n|^YZ}s{z~#(!hCF5Kdw2>R~#t^ z=Q5f9_}}~YH~z;fUpZd!ys5Jn7rz_}al0+$g(t($W>wPKs|N=72i@0v93KRDRewJ> zEiC~M1cAY&?l^yQs95~gzE6Mpgg4XIz3Nr=NTac^CO)~c7PeWbd@)KjyL}&I zZfZ#ZzXB}n1+GeEyMOHluP2{eNmdxOglU5djP3*fCKXQ)@NFR33-T)UeXvpN6SSq> z#6GZY(x>-RCMVaOnfZ~nQmG`Q#93HmFb;X4m*Ep}2oF2}qvKp7X_ zNa-K`kvl`d{K31+8(MK&3*Yw{%IA5q<8Xn1nWj%QOc?YVc)$C*-1(W$@uN=S4-S<) zOR~jvdBgZt-YyeZTI7|@2LD-YFmuVJBtQ5ej$?CfqsEUexDYB8Xofr~2>8k2L*@2p z*;B^11zQU_el=I%sel*we7Wg!OQp`V!FL@l$YywDCd0Xw#l2C&XM%v+PZz)4&Og88 zBr&6w#WUlWzn?k=Lcqu-e!Q?q{rK^6$E%BId@(i6U>xz{>0|8MwF_()f+nxCUB2Ak$D9yE z-MaRr@P7@-uiLgF8Eu=-+b)0K-^XmX@Bwz7TXI~0vmExT9X@d)X|roy6a^y_E4h z&da#`u%`#^xE*o@E{(raHU zND@oeMWyuWS4*Un5no1J?9|8)2;FWtFwnS?Op z!)wOI0622w2}m%&(EK;7zDcy+;PW0Enaxx8@~Si??2~F=b!%^ zAtlG}zWWze{6<@?R-<08bNAhMvsLf^Z>OgCjjdakNeDweykTevfaAxHvuoEbve_)z zVsTz1NjCDl!Ej;Wj}GMXfBrWI4%nZ6|NDC?o;UUSOD`S!`MrBz@ZDFw@@-GrzMX6~ zOD>mN#&0wl_`c5r4?Mt#-v38uXSsT0WSN98wVfBo0nYtMMb`_Dgq{OyM507a$*LBO$N z$LQDlzj1Mqz5V^mB!nR!-cu+bAz7$a&+^VZ^FN1z;L5{)^;drpeBu)Y?{%-Mooo(m zFBbWT>%Pt%9F(5x3X!NLhG9q;hRn~;Q`E=hJ+&Iw6^n+17~2ccRZ!cfl1RBIiS>iD zWZt>5I>*Ntf@B}qnuKWVh22-dz580bDU>%@&TJnK z$tz)wmC569;3|09KHw&`TI%eD;3}~9LDxc+t;^`KU`H$|wBb*AE_X}V*=&+;H0W(Ku}=qo zH5(lzIeLsGERI+b3O&5e^T4wB1Qti6WNCDi0XJC|G#Zf2@O2^hQr6>#g(B6h+epggj^hhJH0op=m$Q=KI$WG%MJ9G%!wsD0Zw`D6>HUv#xn$7XeVv$<8+S<%a^7ye6QgzqBKP3X9^p}4rsMTzIUjT9Wo$p+paHZG0#zIP!j6%Hw zNRlKWNs`hlUn$F<``l*T;fL3ZT+ql8A8+<}?%%^gu%yX{Oh#3Z+P!->zVGAvKC`p4 zE4E)+T4ML^-4EH%$$n$LH})%AxAMReqN%k zYEP69%+~9|x%AR^C&l8irfp9ODX*B%=fAo0j5D59kD}S;{QTB=tz<~su3fv9|Nf1U z5k7VNIKQ!VD+7(jGWp;*>TdU+581VO-(Rx+e*%a$$6fB)X#ARn8XT#H{OnwQp|jdCbi{Z}>Bxnd0eB|F3rP;m-HGXZ)G(dC#$L-EhOTrJwxd#yYDj zNQQ@pm;c_|+sjQ$OYH6MXTbND$p_1_0IZ?j-mzMvF?h^zzV&yX{G`anas3q!+2cxk z&&NNWeBvV?`Tt)1t#7^hCxyZ{&OCnn_37`^q||l!JlEIjTvse|QN7-K70m8ab9{tW znL?*LIax1FOt|IA$#szru$-~l25v{G3@$_^#T!P4PV7@^i)5c7_|DPzF0J@!gBz|F zH*KYf30o(ZGfD_k_OS*G?}NLqg5CRc3Bs$u+LsEO=%l3y4MRrkQ<%;^5M6p!?zYK7 zfhY`_nxBWkA*k0GuT(iZXcF5t^QBU$Yb$XYKMX^TCXy)ueM!R3TAlNPCc)98%yk@J zl#~AcQrxIfw`_u37RJV*+2AcwQnYRU*b?+0vDV(%Y2hzfHcd+~Y};fVxHADuCiGc? zJ}Em>2C!T%%jxM-bioBwGaf&29bQrF;qP~z!PQAj&bG-tco5NS!a3(qKR&H;0)Fp1 zaK_nG9n}iK28DcSe9z`iOE4w`&v7#}dK`+DMgGBqG1u~aq!E-o>1p;yi^<5Y7oo2{(OYl_JgE)eG zo-ZKyjOX#+Gsl@59V6(X6Kn+${g%Z=z}XTSj>Z22zT~*vGdn|lbgc8M?x38&qepQT z7a8y}oZVAoJeP;LS?KF$s!&)CIqHfT{G}xZy$t6S3+%KkBrs(=94!=-%5Y_JgY zV1tyrduWhqCdUVp82o@BiK+MZ6CXa*ojG8EEd+f)pDXYan*{;qTM_;jzDV)W^3d{GlOoNkY-KY1kI?Qu2R2n>#D<+W6}xAW9$l zkf2)4P_1UERuh7tS$g9eBWg9N%Y(FHW0m?rkq=T@Bnc!*QhMo2MfnR~*i=G1JZ9on zP1g3un?2t92M+_m@`a;ExuUmsnS1~hDqzR}P^;J`EWyb5*RqrCBb&`~<*r?P{(%Q@ zqllLk3M;nFWHQUnI6xFdG=o42@Omuk{HkSDN2=8e0dhg`b6ymkBc#mOalG}U`)D?o zzkBW0t$gyx5!^83w{p1^+j^ddZQIK$$Dx#d*lZ?S78c&HP%OTW)Xnzpv9bGh%*~CN z|C_FRdnODo)caW8XB@}Np%t#{a?R){ADW)V4MX0P&916F4r~W19OGKzmE9+i+bU_ zhU47+oca0euD86Uu^P59dG*y7e)IhE?;Q1g`yVg6>{Gw??Qj2~ZQINH1W1yEI96(Z z+qSvBSme5Dl^$s9Q}g?L;0LHga#>U|J5H4Z&`!1qjSYc=DCNN*Dv6u~*ax-_`H1!@ z%pr|EgUVFDA@V^x{BdbwLX=h5h+mqRFl7x3x(&fTr9{{T+@+Nl7TtV^)S)4U7}*Em zRp7o>jnQM#Voz|ix5#fd>iktE!~Z&Ri2s$(@w{4%AO7ez=ICzUB2REgTHG4NY?Cn; zTarEt{;^i$TR*yu*-qk@N+ogR2r`VYWPp8q3eG$mESnL>;ax&Ne?Rir(M}b2+qQFawZgCYA;V$BOdK(D z*IhVgpG{$U3NCvJFI!w-X3Mr#E`$!?&qN`2CUBNxv&C_Eax-Eyj5rp@97T{3f}&+n zaXfCf8yp+o+IgpNW(KF>Q?zY{q7ZUk+}hXAvHpIdZjlf7A3*dL z$vY0aq~u~L=@%ALj>``kb?zM=r7|!;(k;UCN4MeRa}3(>q{;$c9Ug*49eRuWwkJ4B zTV;VR;SX8xOiS`|8M6yP&9S-F6CC1UTKtP*7#~G0EP&_n$5F(4g@A((Ku<5Wu(0gr z>8<#m%;Fe}7#s&jSd4lZydyCk-t&_3S0A5cDcfyAt;8|;$i&&24A$v{MUN+Yy!Y>6Ay{6vZQBaxH=E5a zheo9B7kBQ&_x%+_!HI0GeSmU8U$$)<1HQk)QO;yCeCg=&Q?$8Gh!=0!A{$}2G&MSU z!(grU?0gVBwGf6|LdUtsjiTM@ZQJ&-Y%kujWtoJqEQ{BSjWN(@tibm?Z#gs~)rS6; zY~6Y%_4@f|G#W1*xcA;cDMb8RuYUD6|N8I#E}7Z8_o}JBzK@J8F1|4nMHj5H4?u-_ z7!pDV!5fB#=x;PuIO>k$EQdzS4h;Os(ER)#{>o=R`@g^b+0R-pKEZfb z)7jJ0d)xPswpaD{FOv|KWpQm^9|OLR5UtZ^#P?tH$y!ZHuvuJu5>r!8+Vz&VeDDO& zsxLR+e7pbQ4_jB>dh74qa?wQ}yZh|3KlJT8?s#+icCRfImPrU91n(&nxUgCkD0PC# znB6Q-PR@R3Vq%bqiSQ|tla-TUx0_Z#aFbFO>_VMKHDGqH3daCNZVc>G-`#;C`VOHh zEVqY2d}m@pJmnNaBg&JL@;h1q@g0@8ueMjeqm&s(_Nl4@0+pyQUL{Mm4 ziC^Np*x(Jvc48aUB!F!|Mj#LfB(#mBS$d{>rq`-E=e&PZx6~SqU?lYb#_#ue`kCpf z>htZYu0DOv_xyg}pJ%(f7iU$n&Oh#l{1jMY46js*4ao#oSjoYdOZA*{yke{Pv)Qa& zvBYzQpv}ONdWIA61Ru2~8idajm{l(3h8tjH z8LOhG2Pq+yf~R(Kdv70`LqnmS0@KpTc%474BukZGJ(gGyV5I~lXt#p(NSN;MYJ(J}x9bPsPXyu{eTL6Mx!qSm8>pK(N6WTm^Rs_-QJ} z_+s%llAnK4wW3g3?r1aZPpqP4*ojn-j(sZA4xhA^~*A%r0Wfk0~--Vnbe zhy$sH5b-Rd*|}McEaKqyIl>G5{GJtoB_59-nSeJ72e0VwKk|U127=9#b$~BE{P1yY zHjbU!#t--HquHOJacpA(-Ygtk-qX`~2tYWlYoxX5 zmU6t_oB)mpDot$w@ZCd)j*0YW9NU+FmkU0njONo&_uUH5^M)|)5W+jri( zX3ZV{a`Vjw;6FBQ{HrrQ@rm03uvRp#(UCUl-V3))OdJ+oZ)s~g@&Nd1K7WkZ z1d$NYIDe%SH$?`d;$4YE=T%)@+b$m*{N7x?`H%<#aj3KNd#`@@;osbF;J`Zo^Ug$q z#slD{Qt7z+he#-Rj41VD`bLP?C;U?l@!|esO(hosNo4H!#D}Aa|4N|q#-l59T^vn$ z=%H?24ygG&7*1AvsK00NVW9q)1}Zm3o)lw5D@KiomLnxS7t^)=f-PHYHhLIuWJJ}S z{TC-(f05A`?9T+$tl_W@8Qr%xN=fMM1|c}Rqmy;DknV{IV!eG{OV6{J-&hVA%|2uC zr9<3_u|!HP?C9j|T1Zc;_&v{)scw{X8B~g!mn{QRU)Cs@4BP$f8V! zB7TQK$6>QlbPI3=Od88w(*?d~LPlH7KQfZF1Iy4tk=K?T9qn8`F%CjT=8NeRtKuM|=A`IWa-37Si3($vPo8ySqE;m-YDJF^6Ne_GNPU%aRq*P&Tr8L7OnMh;=@Alp_jgt z|8?Po^NJ92F;|3Wtb{`po9X_V1X4dypa*nh$6UP%NC#LehGlC4@c=0 z+!zTD&7KmLC@rFVV~azk>wui}+QoLP{x?74lGxRzazhc!w0+y?h0ar`nkQ*0&Zd99z|*@c%P}WTgB&Gk&DV@(X`ne&Eb$Vp`ED%E_8?@X z4(K^}5XbX8d1N*3H29Mt6BvGKEw@>?2MMz?oEJ~9+!5@zhKGzGgnw%)(a3)@^~`II4~|HkJq=YH-@uoHTw7NA$_|108$Zi9L}DaP$D z4)bMzAm9(Qp(oviT#QL)onJYMW!7*JmTql%OiCUIL(0amR2x$1F2w2FU-RMY>EN_#N5x`>DFDzrmV#`&Mi^V@5 zzV$71s*UO8D|lQA?yi)0hm=uYSjdA?EUQ&Wu}Bfa4SpebL^<3cCI2A=qf(HPij_`` zGmNF}boo8c6Q1YEg9mYRKu-{|G8SjM)_k{E;w6FRkkKqnr}4@h zGDvVbg3uiPz93{Rg3U&dvWABo!TxxH<+C%KhXf1vSj%k~ewqxKI2ry0e`&Ly`ccw#7@ z|ER0=irVz_KrxxTU0Hjcw6+Z(9t4|D#NTMUIqCqSbb#ilh4~N*f(_EzR9m(BGDmAy z8Y2MmfAmKm`mMLVHM4VY@b}BH*ga2o{*AVkQpcn{NGWNKS~&Is5R=9%8$Nvach(&~ z{9E^Z@{`BC!SPh;^Xk3t{mbA>UwVHr9=}UVIW-@DqwTr=3{eT`=y^jZNCd&g>2&(x zd)KV_cYwQYxkUoJ<+|&R`(gRh*S>bmgUgri`-11){4Xzm`Je7sy?S2$M%&F%7exJJ zAFvA;`Y=2|6d|DMf4P5weP?}z-vXxonx#Y~Js$-Q)gd`ICT7r3^ zCfpB4!owP%0PF=GYZgtOZDdcPwCVE+p67`jJCK1-mkC)1e93iSc$oJZ!!-x?Lt7iT zk{?+ZoT}lra)QvrpD`il2sleROgj!g#BxU=k8dq&gyogivg~yE>w`g+NU>B&HfMUH z9QfH;emm6sbYPIt+is(>`>AXzR=rNlA7{Ceyx5Tp2q@@~EukhmFv#B9Zlko zRg#+yAA+jSQ$jGEPBUHgdFt>XP?DR%fS)SCMN+V)EltPn-A$p?r^eqcCF_*na%*_A z4%rm?6lwuGgO4hZd={{Bd`g@RxB&kG_B};}PaWT~F z!Lp}VgdpHwjK!_^$i+y(@H|f>lDP3Cy^hO}AL4`|`;BHal_o5e2#vw5__Wk>!1FvY zRl~I~=t_Rn)&>XmgE3q)Jj{FDXsGlh6S6Mw>DsY_(-PQD$ZuIz@59y<^7vTpa2$Rp z9i|1GWkSvgd@`-(KM_VovUc}VS$*l9M9%;KAOJ~3K~&pqR0aka4K+WVo#nSXIv~>v zO0qeTV(Gzyix&m4`>Cw{+0Q7~YV0+TMX*IcA?7d;b9u4ru)JD5ef|d@M20?HLb1Lu z!+n(suXQ9FyU$>Eps7`={6I+9{UrD`9E1 zKN_q{q?AZ0vfuyyFY?OELg5ez5X*_eZJ+HZh{k6tI66^p8J;H*9`M3Gzr_|RfE9x{%#k7EUpw!;3Qt2JO>mH~o_2ru5>=^6p{7Zyba6aNf{4DBG4aP`W032m) z&pG?||Ha19(X+q(xz8oLKJkf9D{B*L4{7drrw_dtq$N%}rCqHQ} zyZ7F;jqN)>_OT;%PQUkW|0X{6-S0lRr?)qF)uWI0t(csQzxK{M|9Bz%jj9_&#*azh zAW<|zp?IAV6m^bS z3;P^NVc9aMl(|#I=pS5yy5WYF^84Dd&sZMOn(3)24z;yWR59`vb}7M>8)Ha0T%uwu zIaU5t3fFa5GFxO@JkD+DHaK(;q~cOt<8YyXUo7J58i%Fg(nAL!-3IYEx6KyW<~l4% zrA~e9l1kyaE=#23N-4Nh3fjYfiCW0dw9o!Rfm*3VP5bPxh5RfGn2>^YDY#Thu5{hg z;~yI*?O+4%>x{KIidqejp`%9SKw`1&{{6HS`)o zCJZShQ*4PP*rF5q>idMEzt#NDg#P}lz3Z-Q)s1o3XznSM_-IE5gqn}}J{K5E z-=o_XZ@k>!pS4dsnXLi`1l%DNcL+g6D$Ymn((y6+Plx}88(?q=O2z1}l(}=+GH@gX z3;T4AStTe6#p@0ogpO|B7#hZ6af067)7Zfc_$;Dv4FFUv2x>FQ~@m`<#1%&J=x3S3XYkj8WY!h-+9<;#Bu;F8B5zaAh{sraepeZ-|iW|yfG9Bu(wFX4HzV#h*Y zIT~frc<2U~H!>m?8tL)>11cJnME3PZLkq{@O-eGF>0vAk*rj!3(&zj1nUGE;TN?#Y z(cnrP<)DP1AQfAcVoxT+fiPry7_v7EAP87$LNcer-<2UA)))$Ee5qdb;6`h?JCR~f z`F<9?Gp_Rw2R@s$CT0weS<9A0ie1kJe>1Y#tTh^wh(p}Pc69-evzk(0AATZDs2pak zg(XAaD$=flxc>Uq^2cLX*Fg(O6_`A5fZ5JY{6re zyCZ?ER^z?xX)X!^c7%}c>OyyQp+m?A0Xy2$TvV&^ULhkd6y>5E=hP=cj)PDRu2i&J zOWax>HHPnp0oy{$^bvl`bQrMB7`|^Uk6KGyD%zEUd#e1ahP+fE&&t5(5-ItRHLzre z8-zqA6TH7#jRc8G1?@PkPr+C<u#$3fu5lF4Muvnze_i^j|Ela`h zJWnWzYeG7GpFZEOXR!zD%JeX%B%_YQn}mowP?SVgTA1|I#GeTQmWBa@A$!A+?U@V* zlwyxmY!!lna!{_sX(j*3pnN~IM2bDua(B7Jjaoxc<4a+Up{@)ISlv236lbX!*cFCs z(IJm%O-u)D3POf^`%j(!`s=}U5UwJ>4g?YBp!lTrG`QNzhd zeBhY4;}<>@Q3!uK(V#aza`I+sr-R0|w)Ov8eeIv?2#*)~`N84}ET@bGMJ}`!jS4#w zuyNN-WQxW286nETS{ET|9hJ&kx=N)tBZRd=%(6&%fC7@296I#7J*CoF|9|KJyqr*E`?&Za6j-;~#Ii zC4Bp}*V@lrdg<2=c6Ak|y1GUIcg@(?`xZbYiKic8&kBqd}jT2Ai zGad9sMjWE=?Q-BwqVM$Fu#ZO6gG0R<#oUHkBn()hCQ!%?d9Xwa5 zAEyJ)^Tdi3o~t!+0aN>QoRPTl9_2)|%l8^RzUZ#1Kh z!}MH!$6?xNMuUL7HiSYjeyaSQ=gHy>j;^tOVw}HL4un3RipSZRO0uL_gz0IB$M|$D zVDH2Pek)TjJkJxw8Km|Zs#frHNLos^$7AekOEZ{Euq5yy^x07hn3$MoU8SAzabzq; zhmfpw9B$pW7nH*l7Dk1j98WTBCF7NH)b}YDv?jh{h1U{+^$5RU6PELQpQ$k9E^FB< z1f^J#DFg?lU{Wda%0(DMqE-ASgT3i&*w;rz8z!dn9Pz#iHC^Q*&SJlxz5BAEEmN*l zITVECw5DVXNuV!3eR_g-bp{ax*h(2nW!^^=`RiDVqZCFNOg;~Z1m9MQZlhb922-0w z1OY;8s@gCCgaXu59!DvJGH5AqrQ%Gb=sQ*ZmQQN3-~WCT2@$Qr*`~;cXxj@glzcAg ztK|++?RP~KQoI0aVOK} zTm->!SrkXkJ@9=Q_`bwi)t*YF1Sn<9x%pJ;D^`e_6`~~Seh|;l<_Xa#RXGP1Yeg6Y z*3@e409Rjgjotp4&#XSs*7oI>?B0F((&_2p9YaGONmi>bEvD0-71k!7q0MLHw{vQ$ zziR8&x6W3{r+37yUy(H>-*Qhb)R5P1jxzoHyc#ey*K>bpZ#pYcbvn` z=Aq5_>X*MP-hS=1b||0koa*c>g^u$`;5d8cZSz>n67`Rb6pZ_cgxlRj_kJJIq&>Y* zv&Q;lezgAjDWcSi)xb`U3INSWP!|{*6(Z{8JR63VtrP}AqKJnt3 zPAS+R;5-RKQZTColfhB`31hiWNbW))h2lzM7&uja6M*mIDg{bGD#g{wB&QYObW;32 z1U^z*lEzRlmfguD#b=AZfyU?H#)%2&@_p#)0x777097f|39PV!GZG2@Y2RL`lqrWH zwiPKD$M9QvC8VUH);~lkkwhe1I)T+zuwH2TgBq1eg_$snN~4}Es#OdI-x|IMkk4}q zf-WJDuemZB@Oz#oUUMZ<2qc28e4bkXtl^6o{AzV!>3~neU#%xpSB+tn6=a0KnTOx8 zf{Zb&vNn1RhU%&CXR}#j6^^!a1p!zC26h`u%5nMKa@_)2Yxad9hetx@@tXK{_8H<9GWz7IVaF1MELuER87 zd`X~SI+1`d;BykzE6HlVLg#@|j+lO)>SVOeKOhuWB9KCIm$BUEI!pj2kOV5KgfJ^% zNWghgu)(jkhW}KMOj1gvxVq6l`aZ5%^unMKsuGl@C?vaqf`uf}ckz^Q!wnFI*h-o5 zzP*r0@K0872C$-1rc(qcDX4UHMNxhNy4-l=U)751UgtNJ3Nt~CiqQ01!FphI!lg5j zMD!0)l8Tyyl(6)kD*wqV@|Rxvv;^K2S48_G(LpptKX62lc;TZVK*Wd!oK=pB5YOg& zXiU%nM2pi1o(~ZoFUa$ImIRh#&^$qp$K%Hd295pkc>G8N#Ha7Mhrhe;KCaue>4a@T zBtA4pP0S|-G*6IS*FEl-`hMZMF0SiZgfM^ezysZXyLD^k>hsUPQyJ5vjOi~Vliz4+ z%QpC${T}9HY72ZR7ZcG35h)@fTfv zv$N}JQQ5~M(E-8dw>7;GI{N_mo>ls?blvw z0UlVna^ivqAN=4fRIALtnZ7$cdB?{EjKAtyGRVPAk zuP1lzM6O)nCHL*No8-hIEgOk=$^W7hBB1em0x6ra~APCX8mcQdC@*wlE~~Z16WQGUACx z9z~2E#1V#WM=>BJVEJ_%iYiH$kgOE&u!QfFiqO}Or!8ZyA~;=h%sKqM%3(OwM!d6& zgSA;^k}-OOU@e-9g=LMkZjpftrP;w{lapmkmOH= ze~afykw6Ntt_xGseA8&s*3b=6YK>n5>0p(DJ$qWakh;b5gp4DF0Bg~qW~$EL?gzwz z0Hh*R4n{e!XHV?Cm}Iw3Ir3TM*J^EnAht4%cO74*!G@>=crOqqx*{cwH>cnG(_m z_LEq-(o3Bx|3cw;p4f1f7aJQR8HRMbF*@4XV5R_}X3~^f7nSmK{0WC-vV%-KPMdP5 zNXc#`nMfrFPnCaUBx_wope`r{+~hJ#q{wU)fFtU+_J5Ufqc=&8*z)7izrR2y;SFf0tcr^0_yH%MK45Z+~% zN$;}DjwA6dzg*PQE=1Eq61mt5z&u^4x)%@x^$H3^E0F=ut^mRk6lokYY^GAKl&W3l~tww@dInuF7GUtUlR+% z6;;>0zpGSwcfMRcw7|BGpj|x>-4|TYb@NR(3GerQZ@jBq zep%IZN6Y21utLljDQBz@<)>?_foko!171}bH+f~SmSW^fQ~EpA}wa1_IiWEe~G&_SryuvD=N zoh%>2Zx{@G)&Uo|E-y-^*qlhxU(f&FV+D^JOQDIs$5ou+NLFD<7Yn%68k`J&GfaxA zg1zwsSJrCK-p)Tr$%t}TRmhWg^2xT#N%JP&{+^rNdQgV?L{Hk&|bEZIYvH1bE zY{}ZHL6*yOR0GzucW_%W1+{=!rA%hF#(Kx$zEJZTZMevB*%)(qw5^T8(5h390+`ER zsnAvR*$|I&o-uS6CyAG8^!p*_gqrg;Gt;Ma?aHXQNzU|upLh_h$*)zC=nRMH!pL?CZpj>te$u=dKavavW4x6N+ zr-{GEb=c%MtW}aJA=#!}b`CC~aH{-L;7iFwG6kt5S2-?!6^5+#1HNqytXK)@G|BJY zPW;ucCRQ(X+Oi3+lmt?eSBir`dl2&CFl2=>j4Ow-);OsYiQ8_)ef6tRjcAb5;q*LD zP{mej*h2>aOVW`HJBs1J&|xj^;2_#qW~|_;N;&ES*KL4Q8yn(r&K9uAudzyMdb^YL zsJ@fw^CEtV1zap?N3zOQoDrDl^RDw3tl)8AkC0RoN&1s1HoGn_0xk%A)=9(Q$?~5J zo_rFwkSC!WR!PZ7dprM7t3f=$l?wKnRO=0;n_(?(C`dYS&P4I67A|rWGl@8Nccyr1 z>9W(~A6kWJYoiczdDL;)s0|l|n%6iE_s!N=Un!HR1;mmmXz$>*YQUOunU1PKZrO7B z!b_b$@3?FgF5fYhEgEv6=6pZooKlVc;v{in=#IxZuj;d*QlaZ)`4?ov-Vh#W78JmG zmtA&jE%Bp152Bv09p$cDD-a?wq%`JvJ@9D}B+=k9O(Z@%O94U0y$3jU65A>~A0j+n z$mh4H0!uS`dwYRMBzS!H?s-!sIy*aAwQAM8`x>urMx(9q@o`qKUVUWyu3fv1YpcC3 z2Dq+E`+)=VMn|-_w=+CEe9S&S7TcECx%0g}-QDg?XXg)7#p2}xdX(1Ib={$D#@MN; zDY0zXvLmnAzkmO6ZME0M3CD3rkB!Y69g$9_85kItyU$s=ckc~r)9HU(TdNJ;{i7c} zvSjn-&yNldA2|E2yMCwb@ZpZx>1hTB2amkq@ZrP9wUw?<&K<`gnaj<~pG+jkWHLuz z1Fyqz_{f!4zVv1P`+xuDn=if80_^|Nmy+SSb^9`5NHUir$miF0WHLwE$>nm#wUwwx zBPgYa&Cbr7DiMptSQ?AHLK~xt>GYksOlJE}&OP_eKYQaFk2`qu3txzD?(d%}#N&V6 zcGXqayG?02v$M0rVlmp=+nb{>93rt`2~o5HL}rl?P1Nru`Yv4Ljg0&^M3ZN4WaLQo zh!aev8=ec6$it5e|@LLNssES;I*p-d(^-U8ZCELX56u`1Qz z&){=js97%s0*euXxUuY&iakp5n6d2Z>84iak1LnuN^pgASc9cAVJR3(;UxKw;HbT;}&2hpyQoPxSSBlh)u*PPV=rVV!@{!Zrj$RDv~&mE5z<4AnC~;K6no=w9=AS~)8)@*v)1!GgPGaDb}kd7Q2vM4ex!;~YZpeG99DfVGapG6g+Wf)unNIQKp8VLFrH ziNj+|3=R<1`A_MZXR}$`*YDX>l47P8(rtXz_n|NY9UYug$g``fo3N*waAJZ{$6<4| z%BpgSZ}epNSAf8Wd>)2|xGWxL$Ht9bj-$VW3*|4kNoL#_mmoM-hCHb)|5?aW>FTD` z(@kw+f_+NyeFW=`VWkvwW7#YPG8V%+ipSzHwr#kQ6?)s-I8%pg zPNn$NR1O@MYuq@G#NtdXUyjXYTfuld|5;}d%T3aUVS{hENLns5notNHb`{$SWhT4D z>7Vb?r35>7lFuZWjm1dZbQ5R%+W&xoZvJy(f)C{;_;j@b%a+4|z1)#XGn{FoP|UUB zOpoPvV96{+TdjPPbffmzw#>rt-%-&Le&K{ zeRF(d&lBy&wry@~+qP{@Y}?#uW82)=+&I~IH@59e-h6-Wz4>eAcHjBjsh;kxt~zy2 z#0i=tI|npNb_vy8A(@Iq6*jv00dwk?I8g#DY^DuX!|Pis;$vEH{cQPSqYWV#2n+e5o*5yW_KDlTgVb?A+$*p%xNdactGjKZ+Lf^wX&RX~3sjcQFkm_!8nLN+eXq1A7d!odC26XCD> zAmgX}=Y#96dnFejMUqOD7Km#4z;&TPR9~MUOCeJ3YNQ{z?>hDDj4#j+7_D8L``aRa z;=t9K&y?p?cpK<>J7@fP#`^rHp40xL>^k83-|eryM@yp1%jwzKX6E#_pjG_)^UKT2 zmzI`$RTT7p71k=sA(g^kybE4820QNqY&(tIY{fBS$DF7{DP^3=vM`JFIx; zA75{dm!f`*xO6_<68Zc5gBIfS#6_3gvJeZr>LPp)XjnO$-=_w;kWJvn&66>w{y-?R zuw@tv+6?wfp9&e>aSBC4@BfwL=E|EvotnG7I!=R3w6~r7bhyRWHGx|BxZO-k?$ z6wFmn%qI-;LTNj-B}Na$17pVeao<*+g#Vs4H4H1&R^A%mXa66j^^wcB9GB)=dRf|t z3R0NQIe3|xR1)?SIfF9Qgt0;FMu%RhZ>Dt&t3L*Wd?Wq=uWdg|Okf#?EQ5el?JNyr}M`#8U#u3gKEfYzuFp=s8Rs<|3y%4V*nU4m+M%F@j3heuup;c(XD=piWGJ}E zJO17Z{%`i=z&^jpq*^^zXaVd`gFeC_);Cg6$axqAjo&}o6wtY*XT$_49yk%t`8R<~ zpCi6O@c!X7$B2ZOPr`eWD&Ge*el|0j>b!lrHFu}!)*?+4B!{jJmzU zso|q~3#n6iuiKdhuFRmLV9{-0`<7dh_desVzW@-$`kh?akXl_(?-38JhuAsvXcL+z zG%f`?@fA#;^a0$hd1ARlx)VO0sz5Jm8C7g8?tbL}>n}v>eLt(86iOV@aMPdtWMT{& z$(1A+u7CQ6z_`ABwZW!f&qZHkFqU6|-S)gG=KmDIifbL;LmVa28b?>v@u?dlD7DCG zQ|M;e(35atHgkw?&kEjhWx@|85T{O$9coS3)ubOwl*s+NSQPPzy!y%yVi_6Dd;4af zHrTAF7YMG<#WbcjVc|SBZrgDGOWb0I8p=MxM2gRUwM!s5njQ3~!zk**H}rWSdwP08 zLqxhSANO)T??P&PrgK#MQ(EMHJHriD zhxJ!TKkTsnkSoXeM`PBiLcN6e<65ZQ;F2B4^-#va2M$V%ov}jRj8z>}zPHWoRlV7Z zr`jihxx@tZ`N*)#O9R24G^Y!H!fMWwQ>g7@J9}OmhKPJb(eE{4)4SVCD`W6vysIv_ zi_op*%Cb+kGx=J#*3!+9aMcp~8CAC~PVaAz{@i(cV>-E-Es}v)Q;$u!xWkW~vh~W; zqB20=dn@7r-z2(Bh&K2`B;)b9#N5B{lZh6L7~vA;<##U~++Bf!DCO$@-?1xDhF|4e zsxWg;d3wCfa%ER7t@&m?kMqX&S3oGWVU4=j{@wGF3vfY^x3~F#08Ce?--~Q@;zm?d z!m;D8o}JU@>ExMHXpvx+kf8i6CJjxNhoJ*%VQFc%);`iL&$iYNl2^?w6@>N2KbSC^ z8$S>6#)3V7{`DfV65#feHcW%fD>`CycvFY4L&3U`sh^+IN3NiOhXhlT^Nm52H8y2% zY9~9@nm6lQ<^6JzOVVSJf8xjJ=zzlH2khr4Xdh9sQAnFpHsD3!3 z8(q^x%qrmu!v6Gm69hB;*3y#9r8GH^P8ij0y z_`8rqP)F4TA3;(ofg zzX5+12#e%mVrOS(1ac>W6yT$=is?yJH@lzNL}vMBuiWdNo@~u?y#)dlS~dSyK`SEI zRoKa>e(V$tL37vjGcRxSIf-+#J=s3!W%oR=(f85V;9#V`=x0u2wYo)Qo^S0 z^x{IGp0NVR%P|u2DzyLRS=2TbzWY06)3N)a2FLj0*m}rAfTmGZkA_Ip(c=uSZWA7iWSYA`)0$8MDyl)*Q(CSr|Y+-kA1?df>aD+pk5EhU}tCK8uXmsSxR0 zgi*}*6^#61$ap%U#zN-TYALOsJz4K4=K-8OrPGqZiy$QkL(9m9OX(}$p$){3s-vZ5 z|A%lK#Ag9I0BoMWhJ_JMEAF8*9Hfu3Fu5HcsyqKKU`Asr!c%5+XyoqGaz&Aa6`BBtJzLL|D;iIjed=Hnc=Dir&)8tgZR!Mxtyu=Oo9w$RT?(b=f;dP2bP@n=C*zuLMtO{in+t0;@U zw^xOt*5>^5Kl;t<_Ciy81k6r?<2)xCZNx&<6(tNw`ysfbE&zRTc~SZ;{MD8=W332s z>Wt3DX%P&H>?J2=QoSa3-zWcX3(T*IJR@Vbl{J?%8-ob>- zfci@!J%0f<*cWi`%f}+5M4ie@hXR|uh;7$~Z>U)GIRoJI6LCI46%-U4zgJdVSYGB_ zB_TI8b&&OY_j#?a?>~R|)YOXR-(Nn9kfqDy9`AeWQG?sF0Y49I)=3FiVqL|zMqLiL5%$Tb>}=obH_o52GA+rekfHW_0)IPS)st* zy_zTThnl6h^9eS5bD2X4qBZt?J%rv#X$TSohSceQJpotyfe=j%{)bKkuI{*zl&R8; zFFBibPr-#6*}`&VdQ>Sgg>6!!W>)?tJ8{>(FS}kOp+Wh6Cy_}(Jw10_=R&|v17uZU zoVrKW1(JmJGaJ|qq^23FE@^X#D){4XKE?0eFwQQY%o0-RTz40(W~@SN@CU|w3vlvhSR~-U74`2r>!)mrR!7x1;Y@KBd>IFx}z;o6k=l;k<9^#i63vU*u*FVX} zAM!o7;=ERSq5gHhVNzv<%n`Y5htu=u!0nH}99xrvE>se;a24>v+Hc4ia>RxQ`MzS@ zW|Yu6$=xX{pC0bys5;FjQ6EaZGd;bh_3BT~kA=TuMfw+Xuwrhi#U~`PwYb~bljFKc zo+zj#jN)p;(@}=BIdBT0K*#1E%Ig3Vy&B1HWO2od7)L{}?>61RO(iW1y6;^k+*{-c zyv=ABjKRc`6=<*-+kTht=}?|7G9V(eWf2_1nGe`ykjKbIxzqP~r_4TTkV3=ICMDcT z?66Zn;xTA@c!;)*{rZO+mC1M53fG$hz_$}z*;T4c4j7wlHa8sod(xK*jBX5A4AE`9V{dp*d5@vBJ7sMtyy&|qm4t*Mt%9tv(eam z^?H*ahnF_oslFtzzLc;MsS*`mzLbjv{QxaA+$r0)u_dX`mIxYF2In7tcjnRq0u#+N zsBNTo^rrN{K-Eij4AwHE&*kOoy2lNt!2wb?hL$>3jP})7Mnz`s`IKJ^+-7KbbiNQ6_2Pkt=v!FVd*9`TZs3h{8PsOl8hKnXzMOZK zUK71ol4Vpjy`l?bhtp!4))Q{`x~|8)lX-lA=7#1NaL$Gy=b`(sX>VU^e)l|`iFaG? z`W_iZ<<`cn@m%tET_WspBtA++T7 zmiv}>Rv^X26^ap|7v+$<>wBa3oTNMTt%w+{xSJ`}LPJ z4dQ#cr6M?F)gSZ8_jbV2`ns&OHBE1CZ;gkj&f?VzDA%8WdK5~N|5CT!-rk^c&FqM4 zWUY%0003Is+ZWf@efV&~-I~X{ySDCML85oLA9>rI#5=!Xh`rAr3O**gja{#MgTPs< z<`);m3+ljONu~{@qXwplM8crtphQh<7Y%@8rzE_X{Cu&2`Gr!-ciumn19X(R|<;)?W zPJG;^zJGJ^rETJv4$~Op=AX>M(W`-BwX0FfEkZ<(jJ!M7l*7jEX{YX%PK}s7v#5Nm z?COyTrb{~Dwjtx7TXn)*bmGc2>j@)D`>Q*1$C_=r)DT%_QhcCwf2V>y{!mSznw+?` zP#+$i`oKeV0_%{CsAhD#UzoX~+*yrogD_Kp8X?nQ%p+yDgNx9(KjfTE*V%xr3KO8N z&I4l5W2TS@y)L);Mbz9rla{jwoN$)FON5>L1bwK-{inPKL7N(m(;m zOgy|W_%(qAk)v+G_Q@2*Vk(?R5x%37|%P6lxusHjMpTC=CG&ITvBJ za_=Zd#9EWjm_nu-@SE~&$qCrsftj4(p04BTM@hff1;F1LmEgh(B5y(~N4I&TWN0qR zIp=E`)L{bj?hOGi*|FZ$b$J`Jc{Ag}F1Wf(OT^(9iDJYpl-q5LK+f2X-)+2WKg^oj zG7GgLKm+#E)0;2Hl8bSnMsavOcpELkz*NkL1_}zHOLHWw6EmrtJ)Rd?h=q{~rOXi7 zf^9mN5jYtp!G%z7-&os`O36xM#tnZ)$6Lybm$_Xtd{JK~X>3N*RFC)_YX=+!Xl_Hn=2*1zfxg|wYe8=s(L#_x-_sLAN zB^L3F3|6NNOc2d2IN$JO!M59CAGKNS$ZWcauIv}jD9Bj>Nf+{!aa4mR5)1Nuy>T1A z$_3u1HyHc~w{dbho-Y!Aczj$~U6tm`%byEv%57_JXXE4Zm9qs*l(KMeKn9}~zZGTn zjJ%%28M*J1_}}Mfwd?iPm#O)fx9bHcs;&M;6_C0^vs;wRz zP=aKF4VXaeEBCrA8SJYbpcH&Xn$Ke>s;ZCUESH$~MzfXBdjxYXdJvi4d0knQ@l&%X zO?vgr%uI@Gg(Y9!SaWUq$e_$0n1nI}Z?GocUEHQkv2Q%rI$|No%$RJWAt7*PcZ?|) zGG%jb#{(PMsg?x$HK5RMI*&==}sQE#m3UW36eUWFA#3WD>8*@yDR zv-xoy7~fe9!`!p&s1e4TwK1D15GQ@m?sf)ww4${h){u>vW`e1FwNp@1`;xIvk!W5pLdv$44jb`a2Qp2* z^)KJs%$jVF1&k1TqV)h7ppwD$E^eHZ;)=7;DzE~o583UCT5>kM7DHR#8e&iOTNvor zqrHDWfe8{)Y(#WYZINm*%%%F1%ivb=N6{hj96j|^F#G11jDuY&yNHOjS4P;o%9YXk zHvZ;o(Z!0(KiMK_nqHJCy!BxDP<#ITa4=v5Zf++&K)8xdAa5QSVclgT%pPZ1=bO^! znf`9_k&5UUYwzTSUEhT{*aAKs0l5C$ZVo3KjycCzvU=Z+3Or7;E0nS;tZ^ypVuy`6 z%i=aqq1ZT41JyuW9eQ;0XhVvlc&g#wD1Lep(i`UWkRc8Rvk-U9TX+=$Hd*MwvB*5a z>-HFn2Vjp3qGACHRFE00g#qrngt8McF~xl#Yo?TpZXC_LKvx&dHO(^BH&Qy$%>-ZG zSk|3@jSPnA7=yQ)qgn|IXIqt~2m(BC9s*5q*Q+g3sfDMz4rNyj?jCs-rm*hpTJ ze{f+n$-~w=J6J8+{yq*Zm^+qS9**66QmqlK8*>0;*fJM;?%eKWcNlW)O(C{ZoTg)M zrjuhtrU7y$J3meM3RKxC6xpyxCfN96x%`!(o`w1<6)k?LQXV}J z$CcZ&xk9hQ@ig22i6Z+qil?re6`V-gzq&sWCsHgrRVJ1Mt)_-(BL*V7H<(BHb5uka zA?`rpF}VYYl8#8b7iu%OzbX(VCkE%lkl`TR*dY?jLX-!=ua8y$-EXVy8WBD#eT^55 z!Fp4enwlDf=>0ES4T`&}RsEqW)1Y^GxiJM@x3RU|Jy|HZUrj$}!kqj{@OXTDoRPm2 zoGWQ)xGwGb@6POOGdsIj5KALFH+R%NPeod1CvPH&@a&&In4s)XQ4v|7JaNd>pfL zagC|#eVGINKbp@TT646jlg!7r8tZgEqV68tjn%aM{NDY4=90pKmO^))YMcBdMtxgOHiyjhSaK@jv5_ntnZ3wO$a3PW#3A^_K-`6?W=Zi*@Gb3lC(QE-A05OItj^QZSRN6_(+3UrJO2(7+uGMwOHDWLj^7E4>; zR8L;gPcqeP+rr2ND=GymC)K1Zrc&3u{$s6Oa`J~psaRcPy!@MClg^)oG#B&f(dFk*PrEWFp@C3C#-VjMIPU4MM>^=-BZDob!`?D9J#wGPbv(sAT2cPs3 z{_5@i^CVc~B2T62w*2l*e2pDx9b950Gg(t4rJS6Vm8Hxsi1BvoUy0Yx@8O>{Ie%0- zfg8ta$^%RI+ky@cri7DGFJ)1MGc?9+RQR!|RtriFuXW|#g&3V3$%BAGiC#~>wS9i0 z9;Pl{-HV>;Zq?|Wf{Y!Y!tIW6Jz|K`Lp*_T&2g;rv&VO&Z>sI>t42$NW9Jt}Mg69T zK-DFck%<*Tgcya=(&w#K;f>9hSMLRKpeb1%kpTClzAVucy~XTp`)s5MulkqH4@mwz zHdCr=X0I!?=C87|--k-V`OJa+b$S7DEYzBcWr2m^pz80)%r!XxtC$AMHvv4C|Qy2!s$@)c+r?elwJ7seE#2n#4{fs;AGJu_wX zOUd@fiP9uTz%7s3sZw2TuCdQf&nun}j-NbYL7bX)MmZQCEPE=bdy?64&@i3lzmk9o z*?}dU)Qbj~;ohbrMOORF?fyc{ets_M$oikb#+Mi28Q3hLrrXD%4ha3_LD^B z7)RXV{+tY*e<1SCoxLN}1^cAmBhYUb!*oeq5Ws_+etN7kqRQQokEsxgS97-!M~O^; zL74|t2arSR19I#^HityP8}4%(WyX#xFG-E|W|ZWEs^fhsXMc!g$g0!7n|ZD=3@?~L z+rZvmEVt5aUBmvDVKMx|vtF0pHmLl|6lBUtG5L%+@QjeknlKr<(jOCv$TtFx8nL#v zoDE4}rFyK1VNDE+8KpRlNVH_pX+yLzWk^L@0%e%{$FV_Y7aWLWvD5xBldwyLt~wL$ zrt!6zl!_HgDi@K@mVGKOsyAMW(c#EutHGJy8ot$&YKd6rCZlCWQ`9GcV`cA?C-3}1 zW2SW*L6~K@4dtGh+_v50b6z3Z=iq;tqlp;j{dLXJUj0-jLgrR}t}Wk~tN5kUVMB#5 zpT0G~`^TgF1u@||$5&5d+l4rN%!1L}6K*2B{j-&Y+KmRkYJ=G}f{Q(+iT8Tdp+tX1?RCz%h!^efC_}wg0j8owC5K z^cAS`Yu#;7SlvJJ?HzrmOf4Rnj$^Rj#yiui z;vJdW=i0MA@!jzbgws^*Q?Y^2yNeJLzWw>J_~s!UJ#L<eH&h_)<7{Bpmi8JCygZmnh$aqaydWF*{-@=ezR_xM&+3q z`VoA}xzG%};L;|{a$nlSuFTXHXYgkPiu5s9<9xcH=X3LHri^8(8QO zk&s(ieLLA|jmc1hTdgsviPj=Bd4UX%mBTd^x=T6Qdj}(rZ#)aU5gaP^@FxWIkVFH> znMR>4tFYqGJ=opo&x)^#9i{C~B6zuc9#CEgkZf$8Odg)B`vm6FmDi-6r|(YcO&Co1 z%(%(c?PsPPHPsXMZEyTGP(~pF02~}9n^^OT#O01!kKX0(br?(kD13}+F<^UO7O~^i z0)ag4hPXGv>0&4-E;-4CoCWR%eal9}6&;GE5V@Oue5&J7mG8Q%}IG1c-ZY zlhQ|K){6DW7zLG?0iTemQ3`0e1f@jAV#oV#yXuwct{j|7ww0P@J=aWiZ?8Je*_Z%w za@?7y(>kbQV9c7R^TaO(3k$!w_(!QXt&#vO%bo)+xIeg3YX%E&hrJw>K-QfeYf^G- z0@P=O0y?#_GxY=Ta!8H|=w0x1c&?_a^ z>xK8M3h%bXU=(?tRuF*p6_P<%XUP1OPF2ar8JXx0q3O3kqLQj$}i@K7x!DYVqNSMDD5_FTtBz+zi<=< zd~bA9Ypj(ZYsm#S#pBlwJ#_!vr_`r!8EvtRW7DslfaD1Q2Ve0lmuqWXS6pxB0SR7Pu8x{%g7HZcj@3(kf2WvGmS(NqQ@5+Fp|L5NBgNjC+GFIDW*Nrq?ip;nA@M=6++6r16tSy zocR0}C3{5+L>9oerO$juUuII`Il>(=Y)qp2<6dWzowT3$_NH(?EtoO){*4I)EE$v% zY$cozkD_(Ian!k(n*dMWG=4W8qdU%L-|9MfpdTOJL|BN)Q3GP4;+Z2a0=6IiKC#|;R?HiM)?;w5ma^}XIirvT$NX@b8WX% zq1fUYBYcdm`~V*}yf+%O&NgBP`6?Ub>%6-d0!>cSAaL1942OBDcA3 z*i1fO`R`Agn%W40ysigj27j906M>=FDM}5rwa>Jf4wT#1+cE(GzXm5*E!P_f?S3qV}{o89wF|BlOsSlzgaiONp-Ur_f7Oo}l!-CFLiDUxfuXW^WC8MDt zV2D$q>sUi~fb;(g+9o1`X#;QLB1u`09C4ezkAdHk9>GOhRCtqF9-AGC`#TIq0i*K5 zWw1Tj2bKoBLf(U6VqzlgJ_(b&!398qf-Y%m$6jqUy^#G93XT^wnKaP>CH8T%ir}4f zJkh)Go;Rt!t75xg-?s;aE1v2Gw3hnPX)R`3r#kgQ4;4Q5OFc`~SVMA9!JZT91pGEn z!TFdhW&b6ViWf)9VDCLEDCV^%QcjfAJ-#W}pF;+-SV;oOK<#lr38a*f>W*#=Jy}gt zx|~l}z8uDiupI&Es;SZyfQRK;bH<;4$)R_cAIurr`Qx-_CofujuuMp${$>GHY3r<9 zPxfJkhCyR&0aR7pXu_%#loBJ`zEdGFO(gaK~O zeZ;S+&;#=9Y+v=RH@BX459^iBj3j(>AF?hDfxP^37qK3K&Jc|h>x0Ueu&-id;tD_C zL_*e}hG~G8w(EY?@=y#T9=G3uoIXA%A#07?9nqtoO8t~VO{wYo{fkJkJJlT^YkLva zFh=(EVFcdg!a-Z?@9}!yxv6i8plGps87x$Mc(!)>RHH3B53-jA2-mryl6RPAzAxZ1 z7%_dZv25^qD$uv{6YV1kRRGZ40s7lyjMhN8 zlc&lpIKde?$O3yxAj&HSpM7{>@#HF0XVP++$AT8(Cd$>#VEf{d#t-Zo~;hwSCBfq2LUvOXN{sT}9C z5dIC#IF0uoT4J1eTiu?G_RbYgmx!Iyw>2M!wwF;e)rzG`Qj3XaA8%iLKE8n;ADvX* zF7%RLn%XJrfks<;fX4O18*WDlAE7Y0`%f8myTX6XbZgkJ3ux_qw+WylcF^mg&8FoT zEpq!W7ZAgLflvd9o>+9GY)F%~Mq8H|i)c({xVECSgP zT%<1}@($^Lif(EfIvEiFc|z%fhJIjFVtD2I4$R2GkkH=04rU0+9Tu0;M;p?u$!hd> zoXp_6fdLVKN&4Uz_U<(d5aI>@24I%ulBFYucuT%<%+b9acgbL8z)*98YctEVCFglF z*A?)+)mnVel~12>&~*dI%EIEjnBi9(d?S#g?X(V_n-wm@#_NB_zrCw`-Cy8k=z27B zRXPi5`TfcSpavr|fM(=Yh|X&-a$Exs^KR8-r(U;9s+E!zF(hG$3(-cZAr zm(o!n9K?#UU|9pTM_)ZU_?n!*03>uUgcm0K6H$cN<|XNUgcuA$ zh&dTCH#&FqE1wfDZ#UB8y>;-EW6Zx^H9zxW_S)579gJF`E^fWKgODs;+tfQ zzbADKvJ;&UacZLN+m3wAPgWzVwFqOt^HV}yTW;@PdvJ*dt2W#bCd*7G!qyqQ6cj^q z_Ga?ORczKwcKk9%?I8*T6KBw-Ozrl^*1m!`5egyut(M{rM#XNVz?j9u76mM1p#gC- z1l-P592%?w7i$8xyz$%+!c8C^oJvN~QqImQIw8ZV>q``rdt2Ly$2y9$bN%k=??^9o z`E!m9QkmK%_Vv?_rZ$H5A0wb7UHx<+@WEh||e$M8)148NV`T3;%P6xw^6Ue2o? z=Z%9BlHA{vZ0WIyH640x-)icR z9x@4E-1ciHJ6`!{mS2_DZc$1m$79i~1r>J6Y(PdR>A-J{Wr@ZE-)9?gqdcfwM)!S`UCM0)w;KGd?7-K&!_zrAE+@iR`LUYYk+PYv zoG^zXWR7@huMN5n2cOHESlls|TUk+zYl;YDTrpSM<#Io7Nb5FHWrCY=q8u7l0S2Vy z1cHt~?Q0IQ(CJ5H9I)P5s6A+tarRuj)?xh|U@4U(@v_(=E-yFk}u4Q-jTf4*ba0*IisyX_C|wlb}tQ(dpHclI+L7TkGJc==;TMntY8FXlUrr zHyJGf<T8zq{kV?=kxr zrIb*^-q%*Ey8Z*w8v1&A?5zg+8u2bwmfO^tv%V&;xq>?2&n^t%J_~zYF<^t}R|?U^ z=6bIKK5^m`%bAJs-^${mA_J=e>vgIVsV1UEGAPN;s7}3wSjlcUZt(Z++y4^7Z=smBDM}a!ONss%C%uVeuvQFY(L3ufSteT3xrYDEW676{^xwhH3 zucP{jUPUbRH;K;&oI@?hlPGM{Z3g{IB4!uyEHJk8Av z?Wi_7$XK5$m+2bQjtF(kc!t;v6sVECM;rv!;cB7vL2{>C#pRd{>+LePhlKRl07f&g z&#A|J=3QP5e3036K?PZ*2iDY9cvTuJN}ux^v5bJXvR%$G=LD_?Qdm|6eQXrvjO-*~ zmSmig@y7V#Vf2gay#4&GKAl$s~V8Hy3Fxox!EJO%3 zHbO{y>Bjb2alham;#DY=_}m;`FJ?J~}q;SE^BVy^x0>jlkOcG!WSD0Mo#ommDN z-D}ox)Lv7A08HZ4G0280dbRd|QKRoz5+3+v6jH^}QR!wIA~uE6@b#w-$DE7h{gW?N zOVmTz%9HnaT#>GRFqP3kIA}$=`!_E-0@zPagBOI)I-!PA3#`8JR+X&yx5_q(K8}g` zq$W8ed)oGd(PGG8Eg6!T$vp~kOzg3<>3htAV6i2=_TehHC1)exl;IJmO$3o?;O0um z9!%kyH1r~JOUZMJCc5N_w3Y-8{7SE{;x-Tv5UNEgKf`>!*p?K2n5MsU)mzAb(@F)~ znZ?S1X01k%N+mioyn<`3>@xS&jxuU0aq0-9MCaDivE@6cU7<+DMq?tL`|lTvJS}QQ zqeVz+ZQ5M632zS2XLTOc>EycLOPGudA3`$Hw1d*6am|05CS9(sBaxX}%dbN=3y~8E6_$^ZF=izd#iV8 zwUpnIA1(yA2{xT28+<2uq9;TUr%ocK`rFm^+P8xAlFmWMd4ohs!_cmW?Z?v7ktp1X z{gU9h32=VED?ME7@{wnd0CB+v?1Uvk^fC?S7)kh8gxfri`Ybq{dJ%0m5%MwQD4C1E z6LUx2GfX;Uj@|-mXcH2-aK6g9$#SvP$V>b2ov)vWRPy&3jV5fom@%|)Fcx^)E$>tJ z&HozKEb3;H^_sF<>ICR@@dfIIJ1l{s3yf@PHUi+J%*3BzKYrvS;4O*U$&6ExKwxnPHKc@40nRY# z1*|P%Mzl6}{X$yVK}=FmXw0wPJd=-+jVjSZ;!zjEF2E$hBBMVKuj8fxvk6P=4RL@w zU}HOY+giT|caXS@7H!nLG`K`nqAcqLq^y_ABkI1u^czS!to~SK$v1ONFbu=(1lAz+ zeT2>_Zq$mbApY7XEqu2l*cPCYaexOw1kK0oRBrALdECBvlM`ahfDNkF!I2rcVO_i= za(T1mo>7*HZC)N#@X8X@EFiAa{S^T7#p9mq*TSW}hMb^z|_zO2L^^roB+wR%L zuB+$kmnG!?lNSs_?XI72&{w*7(z64^9VsznLDcU{{ZR%7y9rIlIc5_d!=Hj$PP{!> zje+_nX`EkZEI94MI!AQJ@*}H%p?)>!T{5ryUCAD~z z|3$W|qe8betY7Q0ff*?O_>OC3I%HhJR8i0TKw;*US+3NIkHwHH{;uWvW!=$72RS8o z{WXR}phQlF4sOajL`H^}(LA5RhN{Ep%SgT^1ZgK&Z&k{UVIDzpAO$2aB zOUq!auQyk-N_>Jz!u07!vLJ1@m|~mtoiq=BQ&JT%1$>p_zJYeeDO-VScQ7VlF5XE- z0Knasn516gNH#iLL`SMBcqRK|Fw64&&npfRN>VPj5KwHpy+B5CA!5?!|2}!U zLx%isOP~8m%5alcLvb(z@!IHWbPSjuI&Cbn0$P9~Vz*t6M`!j*zH&Eq19!jL!U^7ge3Hp`zhfm@!oXF9cul|NoXl!M{}76jn$DXmL)nFap3 za=4{Q-{arkpO&3GkJy1n(gsUvKf*PX{}{Pgo798^vl+d%QRGdJtlQlA`a(bB{KCq! z6|Ic`2Onsjf2^yVz#RiGpaaXJAA0`?Lj44}#@R8#Tp2jMy&Xl$75k07K^O{(w~lpd zPP&9%4gyo)rW1u#tzH9PKx{9-=Ah-UxPsFejTshvIP?ecrd1~6NfIUqOa@bS&}gn6 z=djk9da;IUS!bI7{zN+*l7dk)?$ioOMny)UsfuJ;-bYl)t~Dn-zY)hL-5$5k;3yFu zqijk~LF8h<+P8f{H?EnX0)9zGUmdenEORwO8Djp2w0jprX=_ zAnTyJvGX6h^*P`U4AT`sAr>_EI1Xh_801>A7>*`VbMB=hKS)m31jcfIuSG+&m zG6Ds@)n~>)*{Y*GK_6as!q4R(@!nU(+uH$a1GzvNHUB@JsP>WpR4?>mvT-u-)kB4f zBheuuu*H*;-ti7>t+>QPv511g-of30dmbt^YG{$Mma1+JRt!8>J|HT?t$+P7bF=Ad z#BcEkD(2=s{S8i18eSeKRQjmzj>FXm3##Nx~pgkS|}jfh%5e zwRhKZA^g4bi`~Ep%oNgHbJvoeEB22wwyQN(j$Vi4*O53#jAc9$_|9NkzHQ?xr3Hcw6fJnpqbG^Jg z@3JOkO->{H{_CmaD?AI%5%m8$eJs83e6g?(gC_Kc>OV#EvKR2bX==iB_~Ua_>g?yQaQ`&~J7%3< z<96YcR&%K%lwsta{Wm(W#krP)33M?&X*v=L!Ia@LA`B=-+QNMmK;L>Lp^08nVp`0_ z$0q_ESc}e!s9*3?IPi3&ZtNP4NrvLC_906S-?8JQV9BSBU*x{rF(BjcXM7o!rz*0zw&5R^8P^8N(tT23l<{(oLSUVu)9)byx;)-Eza0g9@ zU%!}(RTOZK9XcrL-YLd)a|+$D7csvjr!-b_SG^}h`4VE5$<-ra%O_qi{g>fzQnoth z7iy{6$#B#}q)>p`V!mxr8>e(mqgGV^T6i#vL^#;=v`8Ct{jg1Y#DX0svRId6fPbP+ zSpHft^AKtYhvv8?ZJwo!o`%=Oz(bvMEtb$o+?O2G^NUNnE}1YD;ira_##uHhG@xP0FLwi}PpXypMAOyj9 zr3iDxGe%ocCF}_?wZp*@&l|yp`N~lB*iU!_Om!9N;QA(~vOok-u@{QM5eP1g3!Q8Q zm_L%}p*C15R?b?C2b|;q&zx0W>Vg7`&uyJ30o(fafq=JPPUkIW#}SFc`qiZW6}PEnI+@@VoL(#Eq`m=LuU ze=EdqWaO<+=kV}htoUW*LoBKqwDGE=4FQ)vo!%e)|FpWpwnyH*m9VI5+DOXZ`>mam z34S?b(UARq96gb{Xn4BRzwPXNWAYOdqI~+_q)Z?eg4 zL4U8fb=ms2`G45@%BZ%!Ct9GmyA*dQUfdlDEl{LDvEWi1ic4@OIJ9W7Qi?ki2`;5L z#UZ#9_W&Vz`Tf^=U*39a@hO*c&q>yuJ2QLs%$C+ssvcZtYmk@ub>#~BEVZvmdd1xE zpMhnAKmnxv@{xfhGjgwGy0*RbZ#T1Wka_dz-s`qKuWMw5POlVGj{zA@HGA`Cy?pBZ z^T&^c`M2x9K--!RCQPL`J(Vc_uLgEic$D!cQW8=!G%-()wUO}tiH52L-))DQ?$AlW zxAH-xOw5ewHbFMxNt1b0*vV00Z%8^nqYr+<%=_}=4VeJ{;KXIn=^$>r3w>u!^kz13 zXFB_`I57OiL7`X|M2mVtODws3B z4;E&AuSxdE(4ykSw+V2`DWav_t6FV4s1S3v=p6H-2k$=_n8l7Zj=mZaFd+=tDP8Lb z2@3V9xj^F7%U+6dUihW0svADs3oR9OMPGV9wiUYj+tvO}cwY4rYzgr0Ir>Wc531bT zrhAeg5}xoSJw1Q+B#9-sG{EDDki#hPzo5{_&*F_TUW}37=i#2o8gowMd@89bTHfT0e#S33r&Pk+x)(Ed+`AXRNQZ-owo*wsXCHaSO zs|AAh6EIkE_}76$9K|uMOAd-l_7S_B7f^=gUH`dVk@8k-*LTD5iH( zSowd&893ACp`{qnPT++%$2^tq(tgE{1zaX9x%%-9han9XL_felTR!d^KoA2)^)UbO z_lHK}`?wao;IEr0DYLGUYh^4O=-)(jiS^PbTUvVSc7B^AgWfmr6l~F!vUcGpa&3;+ z;-xVYC8;?pgt9>k)g7ok<6WEdu^Hxay?z{B{cd*;!o%vhP>sn={_lrGeDCr#|IN*5 z*q5AiQT`4uC%fvM+j;^%+B<$_*XO_uUUtAA+hUP{s)5vs7E9lj9ZTd2FLQfWjStRZ zP-ZG9Dp5|=J2q$~FNKYSJ$?=fy_BUNxu-&O#RwHLf9Cm>hWt|Ygf?1^VkiQJBmm9w z2Uirx&iyRS#_o5h#rNMHBX|3RJ&6}j7+re(fBV0qTZ)`!549DLL;e`hnBWD6ZESRf zY(;<8n!5O81?}WYSU$WXgzIab{jq$Vp2$+DM`FV#Ick5D zSFi_bHIxHXUS;TAy%@J|WPi(sZg07{c4kKsT4&g`M$JDL!>T(NN+C3#9{DZ?-XY14 zEc+{6#5F^aB2~~&mt;tM#yT)JbH?R9;H)mz#n@O}mLSpo;hXZG5 z)1xK5ysHS6W}hf-ppVKo(MXim2}-tFjGdJWKIVXuCNlRLj%~26zba`Tqc&j|C&?Rp zz3_T;G}^RQl;n7p=DHb5M|8}{2WW4|0eR)GP@+UFwi2k6+|v6I&IG}p+P9e2!E$mQ z5XlfV0%-C*Gch*45~>eu_-@BJ3FCWc(f-bh`+{2u-4Qt&ac(@QHBRtcSWz>gTBA`F z%86l74Mc2~sPsIBT9l8O&b7Orknt~K=kgw5ZR$zx#=Lo`TXy4gkJiJ+ zhy8-^hXesu)@#5@ec@X*G&O0APe`hFLJcZ-9Q#fMGd5K{3zNIOwIx}$rbg!VOTjKm zC`zYaDG$Z(zql!7da$1}U9EK~$7Q?ae_sjQ%7mV6#nJ>kjN@EA$V_lB`<@RQyn=c+ z(dkrlU`-ESSmWeSCj+WTykTIJB&*UyyI zr}=Tz4A-fmVSnh@k|k;~KxNN~>=Dzopmbz|G%>|?i#anqGkUbVSDTe`D=|NoTZeXs zHi~^xi=}gL+u3T%j@T!-0lNs>%8TKbjBB&|KfGq|0k@mYTH`8;42esJ>S-X2@_e8GE%P=&_VJU&bvT-OSH z*THUh>l~7n=@mj9Q!Av_UdvPU_fzJWZL`pDl+~dox4wd!=2tyU9Bw5x+vY9G}RR(EXURt%MG)_cu7< zUTn&%E2kl3@`$?e^tqa%j$$8=Ni)%(e>ezg#RREJ*z9ZX^%sdo?|~u9nVX4x2%gWv z+W?hsPsChwl7p>(dbT-l8lew>;w+n%D(o8$5&q#`v$E7bdyur3TpLz()QsBf44*CX z_D17i-S@fMK8ppnhav883vctwle(vd=fjl*9Bdm)e`;3zvL;W$g^t(9!2*-=&Z~k_ zXrRQ8JUGVm5Ncvwm4)j=BD6OZV+>MJOYICzhEU=P>#>7tMUH{AG#dCvN41F5M)r;d zb}WnJD*lar*1-(W_XDO{b@mU-ykrA&!Hh*t+?P?iNYxlt+z#6*d(3!qc0<1Cz+JU6 z({h5P^_Ab^Ack;|nA^|4)PHf$k+e|%O(vK1T%%cQ5j*d>8P>Js#S!sW-eyLXSEH=r zua%G1&i2x1(<)z{>UlKeZGZSZ%}fBn-~Q~#xn(LgP&-7z=U>k5|6z0IgR_6i+UQNk zHfMJ5S?}5sb)g8Cz~*x~Y02)+lP)3`6?`9GNWZXeirS#tL=m zVZV@&uzZ>(ke)=uO_}(b;xT9KA8*(xpa;^8MXX-X-6;b1U~xm`sda)kx@9< z*vIlO7=aG?2}F3!+%t+c%gd~uBRbB2QyF*i4iH4+{RQtW0u!cYdV39=5M5kS=p?r8 zJbyAm6G$p?jC5V)hTPY1B}CbMEItS@;f~&sFr?ZEpYL>~BIUtR95LEuvuAOt~M z@aC)835oWF1JHM|E5+&9!R?SCU)Tui_YI0(jl5DQ{lKTF##@*)j|@Bb(g0*7%Z+mt{aoRT)XNQaOW51CX&oa1-7nOmn?ngFN0W}3kDk(S+!QvyR+4E)3^v6BnGT9ChWnTRlk1ybXyNX zs`{vZ5Y3ZapWs-Y_)ZrZ&Qj&R9t1vE^LG3D44*vj!*PXv@lts6k5k91qb+A|U>h1FUgE#ML)#Oax59x zMW{1Ajdn&e{s2Ke-?wXH=AfkDTclEH^T%f35nG`!el3UhOX|4?4i-Uw)o`e8)mAS* zkyx6?O@h%96`1q!iJ8WjBD#n>=v=lI1@e`9j;!P_eX24_i0}KsJ3r5}vmD50$C#vH zKL-T7Q9na7s3y0%j;!P^eQ4QLnT-}sdccgWIN(*A8Q%vZE`wMIb0pbr^vQ+a6C`kp zZX=K3kqpo_QN}g@J9oX!s#X}j9_sh-moju@Y?FA?7g}IO*iw$z!aKNt+`K{F)Kn*- zzhmSWSay9*a){7HvO*^juCDFtpvVqHqDFc?rIHL@m$*i{@WM(Tn?|rr61ftaM!K<0 zl7Xg^f&^%Xt32xXmmA%Pl4fO1i>9Vi23v!kW|C0Djzkul#;j7Doy{NVg%#S`2 zJ0XT00pXH2_edcmY97}EUvedEs~Xx7UzYfZ1~B3t7`*PYmvm4`P*cM=v>zq9aQ>3v zSN%c+ald08$mIJ)$5colUqTWY=Uuyy?~(~m%@CYO{@w-;aRmsubPbD+DTr(4i+MTn zS^KXL8#>Q$50I}>2dfCNYYphF>Rz_2{QJqSE;^V=%=TAIEWgybUD=qxe1?rO_>xsT zn>HTcwCtcXu{`*#dC2Uk{9r@s5)TOFMB#1ahB28El&h1B=B+cpl0r_gk;Q(1}9Oz#j2ght*1qPh>b@em1!G< z$5+}7?0R%1KRmhAhKlyhc<|4frSh9>9_MKY(Ew|GEAFq!s~Sw&k+-oqsIA6>F7w7z z5djL{(LgV-+h>2i23CzdT3z|g2%&wk%Q0pf99EeBw8#RoDTK!&QpIa^$Ovw7#Iv)B zdMMr1lUD4olq1Am+VG~e*k*ibLL4^zG4E6pnFfHevl)5ukrtg;A5&eO0l_YABijCA zvFFj$^h&2D<~Z=?yYTy(u&Pn2z*H<kL?)R;w=2!nA?|NKkE4rqxUr%dSvOq z9|lYW|Mt{TwT!fczanN`D#z%aYU(j7cHreThMCuo3ipOf=P99!-xx7P2rYQ^*AcDU z&GF|pADzoBrU?9!RJHvprQOF=MFAFoLaMS%2;Q~x)K-@l>cIn~Y~v5B6znONwlhwk zgS&^$HdT>g_J^6p4>QJBhpKycql7@1^At&!SNP2}c+6TjrHcrDx~=b)po2wW>w)XE zW@aJLA-DF8iW8uarYskdxKJmnewT%JBZJ5@bKcjbhlhlSpD_0z1u)5MJ@A~m%q*ZC za$Vo3!~wlWNx+@O!cypOjK@NR7Qg7V#Qkfyx-5br9L{(PWjumG7GhRUCEA}5`8yI* zY#LWC#0Y?wTF%@TzKM zwmT_>EST^_6I-V7(H4Xti1|Gk2erdYbpgFNXn`j0(Ty!!61_*ZfG%PmMPd>T zJd>44%Wg4jiBsKhuHxCXttl}?Qe{X~t4+pZ4rJS@hUe!qL;j65iblkoRp)4od60V! zm}FB?^?7o=853;A=`3-D=ik8!JVg964)O8CKgnPI)g3&|1^aDJ(B z+p-q_-7&%x1@dqt1rJ*(_3tU;+z&H;`S+M-Ar}Y6tkW^Llys`8xTEx#2*Pch8Tf`r zg9Ip+u?!oRMz6yn?Tm(FPWl}OL?@MhTbI==v~XukSmvP^vVC9Z%!Ck3QJ?!XvfP1x zLFl@~FSjCq2a3hli&Mhhz29Hr2_&e_GLfi`umH(@__9RipM<@diSB4*qXYIpTtO7YyXxXVh<7GhJv zZZQ}1As{K}v^~DxEIg#+#OPOtSOqI!*AL@HjiUM|BxjSPkuR*fy%+R*N%ITx?5BDl zp>FzmT1@Vc)BP2RRsJ}Rq%DcLz1P9C#r*I11}a9(Fk^Z zG?)_Fb=IDQitWFybXxz=$(1vnPT9EfZP62&zmO_$;huq>CU7AR3CIJSjUkH@9|?;; z+jW>xHWUBFbmFyXG=F)fxgETv&h!G=Hhr7p-RL+eL zqJN6NbC5Ysg&JJMm`s+v6H;5d{sPf;ENCY(#R|oap>PgR<*tuOd?{xwl1A~49p@Tr z3^Ei*pw77qp95NNJ{+vZh;v)nl9$Axjxe`bu%3+32g6ge;9s^G;ozi@8`gFydmIIB zGl<r9Yb?SBSTRVh_qLB6uqez;AAoQfZ{rz5_E2tm3{2!)0Z7v_t;+ofahnDsGdR zVV1d2255>4To&zF{@;t%lVBME)_!$8~aj0%l)~xIzRzfzqr?VmF#B*d6|NZ3p zlDaJOltPnv+N3nI-=y>5V>%l)v*56?b4{vVNv0Qyj^+_A^X~n?zj+&(!1g?>{%(K9 zHN1oF{I<^XP>{EIi**uVQbVLi{r!;PzySR!YLXAiqrSD2SZhVOWY(8eD{8Fp8f3s$ zhT@8%(aGUkB(CKWWNWMabx8ti4dHi*#~kO1_8BUD_>v6iC)~2#S8Vi0#M)eMW0q1b zt(-05r7!;0^^eH+n0DU7fKN{apzhVsr#|1Fn&GJRl|}$--*a>6IGC|6;XDVD6GFrE zd#@3C3W;%^lQ7IUN9qh_Y#HsuO=05|j?{_K!YIfZ?oOWKdLA?-;bTR+;Z=es{Sf42 z@pi8Zy4X5PMQ51;K{pmdqDY`LvNit?k&J%!@b+C4z?<9eh(?ft9uE~{iTWobg>(1~F7#q_dENo!P>@LmURJhqr z99+L_YvG)lPGq8`LoSpt*i~cp6KN*lvqBimUxMKQp`AUbmAvvtzkM;jxPTyHxr_@! zLd|cB8Mvf>uzlyk(2=>P(=n{7#_i()p)&^*?Oc_GJ+N`0XESC3sV)y@DS&d}87u`8 z>GagZ9oy8=GoH8u?6^a^jc&LjlBx~&8ba`u%;$aRu|XYChELseFB9Dhzqd+l70`>- zZPq+h0(|U`bjrz~9sHd4L%L;oN)i?CyLE8STew%Lf%G9E)JGP5pP{D~Fh3H&?@L{6 zT+X~9u-Bg_XYcAyg4 zxB_`YjMT)6o=NkE5=UF4mD^lBc}kKMZ|>!|0|9xB;=_Q7fDmd(w^DP_F*p(Gdzj$P zIHf^i+f;^$sq#xg4O!JZ@rXC`%rtO-d3Wn1Y%P92q1~x#@(lUX929-=|1+C~XW*=f zH1UY1g)@EGoD)e5^Ri2}VO4Y{DdZmYLWXF>)3L<_CCaMZ$v;&ueazNTERWg-J3=AK zDo#iZhZ)9%9ie@t$x{x4`zr+}siQsJzG|mBk9@w`IPZWDJu)VC(jy+Gz)R2*2YFfN zq*I}l?~DstR(up;D^no>uDgKetn;W`W@pzeCIaFhX0bcU-g$Y48rc2wIq^T{N^ZyJ z-j1F7=+wi71+bqm2XgXTZ#QT98eiSuGe@Hg?uqSZ|E0CgZt!ZWI{njKnE!c@C&o>3 zlBZQbynr+z_4u&{dLhw7s(|SPCx%(zdC*5xLXo-aAV?yQm8E0m{jd<@>`U6AV6Bm` zy@BDY;=!<}-R^U{qi+vwr5k9a+>dhdRpcssj~K4up?5NaB%IAw!B%Mmo4py@KG3=0 zSpnVvZmw5jNjX;B7t|W0AR1*vKMM(wMcROI9P30)AG2IT>u<)}yYOg5i2Fg0v1v5& zBNDYWTr+DzG1Lm7Y_3_eoP?b4gWw_t8=C8o`j|oqt3GNAkjP?4>|xkLhiKx#6Fxf* zfSZz;;$m!weS;iLPp$|*7;fpBTqi+z-XZ!n`GuImS}yxuKvJBbNbE08FffR z|4RCh=Bewy*Li3E_?jn+A;LCXvoue){iKvGmhw}EOnXA%kuq?;vIX#>=Z0#nD(0%;NJ?S7fzu=9kU^6P&dg^uk!a`U9*kJ#ZuKZ+&EwB`H$cQ!AJ>685Zp6CNl z(He0?zm+#F9%kO!TKyuwZ>!d`_rmWYQd%xtB8yHpcVp+7FT133i!z#6q3|cZnFnfw zk2OF@_11Yb^Q|_{WLLmf`NQMLHb}%jsc~9bUhp&J&28Vmm%wl64to3@k1fvyPYlp& z&8yviujSuYrI}iMZ|s?@dBkk%=b*3|)fgk<8q46$fhk_Ot9O`XgCbqTW}2FaV>Sa} zU3#NwLZLG+Q`3RO>cPz>R@=Ldk|DjYeox{F4ygnWvI&Kf0C46TWPhk;!#7c#5h1Fd z6pz}V>~*ZIyxiQz9ror-1Mme)j<=-TUcfi9LW&3nb1JhG9qycQJw18>`e2&hm!u}x zuK@mOM*7@vGiS5XhkD{*>Tn)*AV0kYMZ|B#YxyUakI~Gsx`QgO2qrj+a80{}q<$+E zk4EfVsx^&O=sCr)aP+4ZIu!9$MegfZPnx_%Z6}ZE5|jEJ+|%3T6+qB#%NNbIe-e3d zt_&+LAYWDj_4n2v(&kz^`loMQUMIcFcYrRjy%-S?{A^`LzQ2DW<=zmXQd38=SjE=j zlNY7+ZdR%3E&fgDpgMExOKQr=Y4o!TwliqJTKu)d2!|&K(AzD@KfjhQ+NBy1bt~%9 zjoae$b}6dt)^fWlb%2(d5m7(^s#qcJrpLU=<}3RdAF{N>-rLp&m}Wrf&2)Fkvpvd0|!EiAZ!ou71)M$ zVf~=`Wc@IN6m9IJzg~h~P~S&{XgwM-FpIsx>l^3P8BogtKisJH+^w-}Ow1RIlqspH|SG?yVgGe54UUQ5EaW?72v&1+p%){t4n)i)&} zWE^#J==jmp*b6-;c^79-kcEAqaKx|bgO}b#U%kdh^*`>-#v#)Q#055`MbCMApX>@W zN&A+B;75TJKRIv zdyB%0J7$st{{C^G-jOd{Ooo-+UF0P%ga^SObkDHqXIN-uW7zk9xd2Vk41t(2s_uYz z_^i|8$kdFyZ_M^IdWQ>%JQcR6QIqa7{VNfTS9l^-Z$+G|qG*rVqLgC!oafKbsuK%_ z)OAdQZ?ZfzD?Ep%iiamR@wJ$mRBic*|NO140V^w!nSSgw$PsM$@Ml;m`~6bA-SQ+d zJp1b-?T07Z{$im2oQEV+n=Gk_m0CJdUL<^VE5}>3>iC@42kPU4V{WSIzSXwMr_yOC zeHiC4GUB5Ljb?}lw@N$WN#iTvkPZd?S)!R$CPQClLF!mkf|VmVzBekEnX}Z^kh)jf zU`HQaxSu23B#F$Bz3x33Ear#I!h*bkkD9x0E4Y)2N(Fsm)~3;qTuAB$7#AT{ksQAo z6{>!zRJCf((*T?1pp3V$AoNGz{0xBu8OW$@059XMmy5rVZIn&!nOAlDj-N`;CK-IdU|r}n)*Iw9sSg* zcH!J8^_=r$^P42mFFvf(hx#I4<3!;5;GjMeY~_&KaX{!1NRpg3FMt}hV&XP`vWPfE zT>q6m@Ni+k1*-J71sohBj*Wl=Xu*O1;8zkS2kk+9-E7Xmse>TDD%%EGNWTSzAmOK? zg1c3Bz`YdXi3RhnZeI^Rv0lW*53Gn36yWwFuXdsR9+K;No2Gj~hqmZI!gTTQ#=3I+ zMYDr1lvdM2RcbeDZ{dN{7-ob>Um3;rCrqpz;p2Ie<}vi@CDs_2%-$g$Gxm$R$BS<> zVenA73~G3g{3g9K6G)nZg?v)+ApA>#DiJ{g$aa!Kq{dExtMIi4dx8CT3r-D@0M}9M zXeq7~l=Axi^e^bST8CrGHK!*<_=MJw4qsy4petIZ8Oqt=X-*VpjTeC)DA$wHSmWZN zqIN|RMjU%Kcx09Y*wg(Rlh*va@hGkYNjeHu@f3HKUa6lSUJ#YaR1+Jo1n2SmK*P^g z!LB~A$?9F>K~P>cnZtZ+&N{aR**XhS{D?^Zj5mMZ}#kiRkfcjSx%I})tOhrX!yYkQc!)G~kH;#P$( z9$B3=mAh5;f#5OT7Y~fQ`34c*c&j#Ye`y?r4%OfQE>On`ze(x`iG>$6b0t5?E2ZeG`3XJe6apX;>3<=$q7;*2bp+Z z&j^1u_~Jj^SR`Fw^8_({YNmo{vr99wvkvxfJmCpg2B#2A?R`qW@Z7rs)OHQUlW`sr zU|bggZO38HAI96rPbO?1NaW=Sy% zK5zRcs~vw?u)4?@w@Vu@opUm*-cpZ7FV(FS>1mOez|^MRrcEX#MSh69|5|<$45T`i#$$@y`3~;L)&zrglJfgx zpUKa5RrB>7bj>ekw%W2J|D50lhGKRLCR&*H&i`D9V)iXvCXqAkiEP8^m5#djz8c`S z=a)Y}N~2d%#3CAyHecD~Z+`iAYcWeQeVL}@fukU`3+HSk}vK2)o4p%J8`VJa?Lk`II`=6QIf?`Q|WpAr&51;TKhAqfRGcF?1!&QFQ ziLS8qs6^x|{x1pSp~o|U)!`6%+>i_^?tH1YwLCr2Fi$(s{t5o=1C1D^ePta#@xo8B zm42|~|G?KYIOFnvFMCM;lo&kL3-Oj4Fk=Fq{nSzm?Lj738v1Qbeap46%IVFbZ^bpt z(%DpWo4;n6IftlYBq0kL2LZ;;c61|dP0N4YaARfZjnuTTGpoo$MxYOcDJwN~u|pj> zKY(;-mz$>&yaQwFE6n9Tym|vVeZ#T!COef%UJTLE`C`WS+9mBs>IN@jg$GK&r~}e6 z&i5e^HY48$4R;0%&tq#ntvS04LdSXxdghvJ+ftLBIhtg!i@N}ky}Aik&mIu>^fC3J zrFycvJyg%F{>-COzL7-lYEwmF(B{N=*SyhgB<7c*9ril&`SP#E3s~xL0%j8J)G$8S z2R4F&Y1$TlFzXM~-j^FiZ2pulsefWkfGPGs%v)=cT@w99gq0gC)C8XWIZ0avo7aAG z+;JwBq}gQ>?Ttz1x&dc&uRtE<%1r2l*_ib|$cE{2c4TFD4Q<>$Dy#mE)bRa)3}bF- zjn$_=%Z55xrUFoY7(mM- zj8A`5OLMcG5Q)M4I9L_d*Ev*l?!UUWF+#&tU4UgYFMVCXDY)tC_&%8| zb23#bBz%5Q6*kMg<#r7I*sb_lTI=)i%b6>mlE0=ZEg$j>ULMwi!YBVVtFeLT-761Xl;^lso75 z3aqep$Tb}fr9;BE2UV}i^;uey0d*VSgrp~iYn)wp0S-2|l*ubU33v#$>$TUm+D!kK z6SF+aH(tvBdq8llA#};jn-&5)%-njZg{#n&Q8C9_dZDi-~w8IX>cP#*3^G&YU5V883fk-wgZ+v*NQgPw0K;XZp}ItGp^gq{#INzk4?U z&lK9Z)MC3&d9p{*kf&R0y6s(eea2pUztYO63uoF6m6y41np$58X!Bh=HS?23ltu)7 z%%Zv_cIMLx6Lw(MlqhGb;FxOmtIxKV9rTiLGbou+qE?p8hubO;MDZ&ZwYJj#fB+?Kuc3=s-CE|ODG1@ zK9xtZ{d-B78n*Ma)E3Im{T}%qYo1O9iw|VX&=8~7RAMt&eMH}^4N5i6VRYc>MIw`d znvbD<*M~I*67_?LL07Rzx1{{j)i|CHpPmCutiM2A5}5ouFQ-^eDqy!C&fJ`JW0z|v!z=20`lF99srKWXk@^XR&;Ut2E)OwNkV zGx)^Q+NxVYv*1)5Pm)&!UR_vpooq7$Fr3=xtZS+CVYvn?R2GmNunm` zM=$#<7I=m`1`|z>&O_4j{?huqGamUSUAuTrDc@#ft~zqs#oE&-xwieDbHAIXr?5{z zYlFK->N%wX@?F#~dI2WdADyStLP6_3FTMTNJwc$e24VWJ>UM8YF>g%>mSCF=VQ(xK z-qi*$iC^M>o!u?iZW>_J25Z@z;od$t&r`Y0R@W>os10d8Vw$5jIpithTw|WCx3D9zunr>{rf$t1d7F;D=yMsuICYI3 zf#S?J+)U-s$u5~Jgk)+;#b8&=IQlD4ayiy8E}>isb`!OFow1z}4LofM!LN3_i=LY2 zTn_c)#hw=!;MX<>!w@t7)2CbTKl2(k#*MgB7354T+td57iD0Tdghrs5Yw(xA*H+fo z(+_RiZo{z!7qf3WgH%3yith|`Z(Bs&lyd!I+z~tD=4C2C-JAYR1wBS-d5Lffhz4SP zql5qQax5nj%F=w5{DDww(QZ;{?q$Nt`^<#z$AT4fxs}SVcAMIbvvc@Ky1cVC*!DGC zp+cn(KD_b^xXjp03BCOX!jhq{;-M+CTU8Bqcd`JMz-c<-#6&yKBhpD}BMnX=o0SXH zP0o7Qw-$1AM;mOiiDMofSUBiGzp|aqbYbJV9IFoZ@@m{pw-PC&lDRW2F1XaXuSSB8 zA8|ZO6;t+#Vt!nJ@m>3f8?1I9RqqDbmW0O4-d#IBZFPwZie~VIYU0WZ(WX>zfaM&!4sB+<#)xK8i{WANUUK z?d@+CovSN#fG~aS)NB-tv@mJ>r8f{oz&l3IQ`8v`T;4L$#?3nIqo*c^zsCWKXnguF zEl7lxll89`BgSryRhrzVb2~NL1(lndZA&$i*<8M9oDl<82~gUGDpcJPrWj!1ifIh5 z()hH}X@L;a@Upb{}U zv?oOmcj_8BjHlKwDl=UIByJwMcdBB*k}-xo;+bz)wTIS$MbNiolD5@w0ZckKGESTy z-mg)W;cakCUjKt?mE>cx0%F5_5R_p;vF>KaifSd~6SlTyWi&)6m-rogYu8zuaMTSw zDi86|#BQ+pG1$GYzoa7<)eUVs_^@>PrQk~R7HOkaQ2rU#i&8C5dEltNQptj#-kG?HO%> zw=0V+*vCK0eZ75BuUqjrS^NzqmOCxoSu6t7nmJx#ptSx=RgoK1A&gHMWaZRQz|;&x z5&MTPmWNcr{_;QzjQkx>w)cW3dU>xXuat?MQJ1=}_OOTHq>T??Da`3iA7N|lU^EYPMo_8E*z67Tu&FUA= zR2~sx(S2$7@7ro^fPKI|U-o`oQ)8=T745MLn^vxd3f>z>&hwL6IfxVbVH{EZM3#=E zAk+M`#7~iU;ZRD4D~Ujym8TP<&gr8u0d(+@%I*Qdj= zH89c&)*i3+7ccs0UycZ9ktQLBNC%UGKco4@!a0ouW^#MpNnBG-JRCpb86%s zvi-YxXoW_u@?4~^ZtHAqN^q~a5V~6`l*J5d->y%<0%cj;0q@*hZU!7pk6?t++;jcNU2QhN~ePbocQ4oH$ z5j6YY;#f^Nb=x6=T%Hxh>fv@zwP!B~zYJ|x@xbcvBE{^HknxTVGkNRv1qL@XqQxvb zTT%Ve3SzVS?Ew|Z2In^A`sNd9pI+bCjI9)Q&_W>O`A3s@nwOk#0a{N6%&-3@S~YB) zJoIwl6J3)>5o|pR(hAjYSHuLTvYVe!brcIF3~(ONel0^{`9o>?wvh^-*K6Gq!A2iL zo`QHMyT-O*BIC|@t$H6TvZF-ODVd1}=(nfVW@2hho0ZUMY?%{z@9;!LVqVI{3%`yR z_GA$C!lgjpUfvENjRA9_{t4CD zG&TG}1D2){5q}M3t?=+W1bW?mFmVT_?ElFVIjC@|;amFAsGT3hrg03S@Eb4K_CEgI zq*5G#@5Y>HbVAiPO?|YLVXMY5rk&3z>y==M1wZ^(C9(l$X!$B$Iib_k&}x~N<xqZp(C}>6iI#64mu+-kzQ}NL_POUC$XT zP`cDKYO~_tWEgUuqvdVq@$LMFUg;v~!l3`qD}IFT2BKDogQuJ~#_Ef!Se^yBswTD~ zxoTc91!%`INs&8RFF^vNkskFw{?y?8v$T?E*n~}|6`d0H%ox_C!r6lPRP4wDA;ZoS zjb?(e=BJ1tz-bR-vr*U)!Wnp)!4S4nky}XmRvQ&3j9DKbWB71N~+3HC>#&YflSqH7AY;A^m3SdTb zo_Y&lW|s~YV#a~Oa*WYzXp+f#W?dAJ@RjpN2_eO$49@24Xtu4L3CuwpfKawBFRIKJ z5^ElCYf@fRqDF*B%wmn**&zBvp^TRESK*k&40I<_{!io3$O{AuaoL6S1V+t6!RKCi zIbS-u9K@V)kBHbpWsfCv7)f-7&HQ`iPCzt+@<%aq_2i;zNzj@P_@P(bET`GvkMUR+ zv8C03Nzb!8oB;CC!rs$Aj=DZJ4P|zvF_lyxqtxS0h8!2xd~hAg4An1(&IxWmYhKJ9 z6o$P6MP&LfFqmO0<;WKlgJHU_WdmyO?yic$>)s3*MQzHz9s6sL@J>n@p?K{c?K^Ws zUNyi9oBjQo3!~Hqrbpgj!bKNKX>(dKhgwxT5aBk$`wNYdAq>$9O_xxltdm!MwaD4{ z!e%#CXI45eeWO7mftB-U%r2^l=DNVLPG|M;uhGZQC(=Y=Bja4~56{jsWmQj{R;Zd`q)ED%ZLV=_XE~KJfq*>!@l#Etrixo8;kFUm7 zbK)FoQ~v-sE%Mp|I})^Wzpw@894>dshwkmkH{=;@ih)n2zIlc8(^C)7%EikEk^)^w zfxB#O{H(jJ@DU>bd+-zK)*p)g|Gdt%m{~0;yH+~e8hL>|6&&etSR#3U%17oMlfiqb zE4MQKt9{etvB`R+BQ0m)uhFvq6KTs=9+y9WidHfAo2T6~ZDbsOAf0lP%>uqRA_B*k$`_ruM@X=6V?tk6doBU#I^uukCpJFX%wge`E=g zjNsablujc`=@6xb2=!2ebIqLIZ!7M-FPUD*&KU>&%1lxv>_s1OS?WwZ$C~&Zf8iP1 zHq98l1hvv|J-?U+zhugSSUKmUnT3@l&wMOx{B?pp|LN;Bo&#-W#uNhP6i<2R9`F$( z4>!L`DODzEtTYqlLXVphqyDC?$C1-(`&e^UkEj^+qmdkT(&W_+apuo8vEYmIjD1Mdx+}3HgzThahakMfBNKGh2t7>+S2{B?Dllh ze6GFfC%vdW(pR7s(LD)l3q2VGhagU6f(ouf;i2U92T67AOa}*tGeTqw9)!J)g()^0 zBDp__2YYl}ME*{;9-vll<%7O{DJre#@kG?B(!;wzk~ReAGcg-%TblVEV~&Px7j?rp zIq6Y6E7Q)%3qlV22cr-HaD)G_;IxZE=@?bU7vQdh*{xY26=|)Ga<}$1_*vHkjCeYw zBf_!@UfLCJAAUcbtNU$VDtN%Nou55Yin)edqf`;P7#ab+2Z9TBwgi!cNw1H=n=gL! zvL0|hqP+C6FW>zHVD#=8p^K^dZAICue}lo$K@^PQ^PWKvdB}s;KV)F`8BXQxYmljT zo5GQMjb2|28F~(0Q~U1{B>;JlB}-)K78^~ka72KYueFT|7Z!1xibhz2Hfk6u&%}x` zu+)mGq!}Zd^C#r$E$=L9*2K1*KD49c%`GUEo=^8sUeWV}Ji2(tb}m}GQaK)5+1bsk zh1NaPSs%vt2VmprI$3M@(;y=?nXL?`xm`cZb-2hK*8`6*&V@2fi`h$+IZ!>dl-&S< zGrz<=KkaGoYnq@oMzDFU{nJDqgeBmKbnG4H(b`J>->g?sIIC4fYZFif&i$^5x<+n; zTCV&JlC>F93j|JAgFaMw#B&yTh(2G$X>yfV=(TB-JD^0;J9-}`n(OS{`k~U-Fm%B0 zzGJ}2Z!>3^S6eJPg9o?G4;|R7@)Lo6)SzD$1KO#;E6_`9doXnmO$<~IuAKsuwu(8> zX1$tVEBi|V?o62CTLh1v+w1#xlw1Uy(?l8_f0sN_S8F4s+iw(h41Gca`av$rx5XBHK*qgI{4gj6j33%RWC z61>Yh-fm#teIf#1Jy4l~c-&=@n38I9e(A9sx>do~a>Nq~{co*!@p({{n7j)QkKFPe zA*Yxa_kUy4BJ?%mm42gM$@)Q_)|ttJq78x{=boxkk$tnvXD#QY3F=y12)o|e?Ji_L z#REo}=#4QHWYAULh^Eo+Q&7LKs;+dP-rbg>!dcD!f0%j;sHooOe|#4fSW1?XZlpv? zknRShBt^PGx{>Z~q`SMMq`O;0sU@UD8eta}_^rM_-~ai~*>je2_g?Ni_nCQSp4ZHs z!CcnSmS8h%IHR&V$TVsf=L~&;Kzk0O1D!6CXEVNE4|%L|u^#}~GZB`C@ojCma9b?9%xjR``(adGztkx>gFzJ2CGzFET}Kfk(F@6C~P6g)2= zB>4-(#B}Y(=|}rFC-EKelJy)jW3LsiLYTuVYfQ;xr4$hGMdjSLz(j;$v7}LLv=ErP zCoDjMV#5lzTPl&4e8|9G+`6|d+|b_3sJOpR^4w8g*oL70Rwzdly3zU>6fX~Hc_JP^ z`>uo=rd>pdmx`)Um>Lscgg_~jw0tX|5|}-`bAyw7NX4*hL@(|Wn>Rq4xdD8Yadhn*OeW+ijk?w9`2s-wqvPADZ$3m0DS|fCxH>IM95fKA1367NRt(0NjUr$XQ5m| zAy&xP-^*u~s=gU^2j}_6dEF9>Pf-kAE=Ml!ebA^Z8vF>M$$dz9LzfH4oG$i3clH@| zx>NQl9zDYf5$Hx0(7$!8Go;J%k8`>un9k%sff%WiwxW>=*CRFrnH_J8gn(?>qlaY3 z0<#PUoJr)Oa#dWBP~pI~Fe9UGDc4&*+r@OFe6`xxwS4dFk{N&aDzcu7%(9fmp5Ed1B+UQm@yakH z^?WHs8GgRypW-WKt^b6r6L4hIWa8+2KE%M$)D!1krx`|?DK+khy-NrCQO z3*-nOr89^*Lj~FQIQ$U#!2GehC9)zc(#-re5Y{GbCzG>Didsojqa)e+VtHnJdu#Qq zMUIJl_c^&nlPQqS8er>uD0adZqe-w^qW;;SHzdzQ1C_xXLk^i^2l}DT(-G@rOJ`{| z{EEc#dxl@k#BXA4%MD9!|E%2>Z={f1JT~7Pn`mfS-JVufo&2KS8*w)VoJJECHw3b9 zYeX|WygF~{_|n0X4B>r-NltTkSXHA;O&-_=!Kkpq+^-`@ZfYS~Ql&0)pc*I} z&(l&&W;+?7(CQm#eksPdf=55Un0E-D7Bu?cl)yhVV-=on4o5SWhE_8V@cR?|JWrw3 zi4WJ*!|M$aUz(3KpNxoX^9{7V6q7+-y72eX8NvJy60>d2-+?dBvGx4%i)ppup1J&y z8QWnlG({GEe=aXwS0mqGON8Hy7>~CcdM74RvWt54>QuV@-q`ZHWIM@x&1EiNQss-l zcg*m^`}Ea^3BSi(|Hs|d$BTzYAk4QXT$lYD?W9XLOSIOZ+lnff&c8RGH2oWhN7+d! zIn|Eqms#7NyhdcSQ-U^7lMPMplk4D1lpp{|a*lx!{b$smXbz=$eJCV%(f(Eh%Zw{0 zZ+sxkC{Km88uWZxCKk{~I+@mQaAV}5rD0}9=E~0+;0#N^P1mZ6H3%c3!mf2gkXP(F zt+N)gemWf!P~W|rxWobUP?L9cm8G?F(dO>wTX{^n2)$vqi520>GovOqVW!VmY>hEz zk+J4dMOdc?RNup4$9rj9r)|QcUTepU8M}eS{gXTj^g#tIn^weW5UZyK}+60%NuOfAxB4#Z&wDbbDMAZxtPl@QJ0x1MwF~-f zp4t{i9=2?2+jx4lm}bJ+VzX&g{`EQU%p5tGo>2)VQVMfZk_}*s@)(bJl~41QHyS;u zsIu&-L3zGmmln;GcP5{*I>Wty20y+I5GD#7;fj7Yk{HblkW*I<MEHKH)zcDx>|e97rI{6*Rq zz(&%ORNp?>c{?Y$Y;9R#nSWEV*gbDa%sq$OL%w*-iemtUdsTD;pbG?$k>LvzdV{Qb zWByEwRvdE-QUXXqS(?(}LwA|>0*x*e4v>T%hy$103CAj0sXzU8kPP^Y+W091+;%MO zxhgN<1A~0|D5R^(xOhpSzJofjk(=Agj=~d3M9Zi)t*}H2=G&o*tq$454u+`)>hcGH z?L}kV+azK<0$V9VzqR7MTa{PCqnUUuKyrxohLLBd2Y53hfBj&xNn$r5O{s&yI(b^1 zE#Ye~`ufO0QfLL(vP-LBf0t-|2Ob}cNc??hJgzVT*H~(IZx^k}sW(H&U_t2AriZGy z6KzKZ`Rkte8$p5}L7*chNJni%<@yT+8R0}*!AP%FF_~2{sVgVTmJr<%l5rUnMLsc> z-y0ink!u7RtHh85UrNLuq;F-%D##OmansHLazN*yi;IMsHF$!8~0>91Y=-G0vr3VZMGAkgp)ZF|vF@6)m^b<5-z=pBCE$rFbyQJvQLU$^; zsy_gYV~oV#)~}|n#k~eZb!K#~AKd+Us?bgUkShGxrxDrW)#zvo8`ikPj|naGppq;4 z128?tfE-!Nv3IUWYQ!}6w@ike&!jxyF6K_<{8oF75&AWv=$C0F-m-g{w zXyI`aa+XBQQ)8ZM;PNHDshd2BwnPJ5G5q06&KA4c})iEmI$!s6}4f$Cs7V2e@V_y(s%%ztUFONW2>!a>GF?4eC5H z{0dXjdUpNnt@WZQ>BWaxpekMDFgU%Rpd~v>`AQNQrIafjm7Qp;pVw zvBNi~4GE1TxrdC_suc9c(+76;a_#$EJ|E*79-IOkS|0`CYhM|kc%y$9@l>J*hy%#Z z&;XU>65_hHOra}eG7dfwr41yuLYP;dCG8y1?d`)?TuDFggBJ(x3mkIr^!J|+)D7|j&U>=ub#vhb8a6p>Z($Fy|yfQm!0%WFjjLG|I?EjhT4%ri_xyPM0>uO z@G$lOAwI&O6*6UxjZXQ#;=oI^l2$74f zM@?HMHe0L2O5~`X{Fe3nB>rt9*4pkRy=Vmfq2Pe&mjBR_0D<1V{;QdQ+b3rPe({Kj8vO~=~u)_(w+hnpV^@|f$*$SPG-Vf8}s)QS2@ zr2_)Q1E=P20HF|it`SD5$ZEw+0lB9WWPZq2f5+Yqf)Uv&hUfj8$`-joQs6=Wi&@Qq zGyy3pDXB733lR_FEgc&qkOz!1o(fGZJWy96N9Dy@A-BjBG>%W3H*?FX zkJT9*T*4bv%?^@%1yqZzGXyYa8Mg&8x!vT8CHfLl?Cb&+h?W(_eyj6Qmf>tE5LJ@B zn;zkWfn2iV>nPZ9)V2RF<3?u{rt+>MLba4{>1VW-KO!^$kOwy~irIqGMqUgmm zA3jhYe63W%!Lj%2?i(*hnFp(&^szk$O7^uF!)^*_G}Va;zpFzE)gs^IR+V5%r?V6- zosN2;zkUXYlBHYvDxvf&>B((>SH@`{=*<;fO(pE?rgwC??h97$FPoA2WE8GSY6Yfq zKE;8EB0LkK*>mbXPWW7L>G?*!QU8!PiK$p=J1KxPO!duf}Y zt|a{yh&A`5Aho9ZAwo3CY=zoGFjlufH7a+%t<6B3VSTbX@s8E{{E+shTP( zelXI#jcx@xyuAe`u%%Sw%XGb+?mqnhM(j5ACb|6E9W^~RAs&H&kO7pSsS?=I(o!t4 zl1%kGh2&6k9!w=0l~|-P>3AlH8U)xr7ckdDrvp`01#4g_vC74fqp1`9@q3-j_(_40 z5g=JE;_O6PD12TT+eaD?-qHqp|89i-Hf%qe+*gZ>GYzDL5Rk|$Nb81&+pz5c+aP7 zXE1h@$SfQC+usm-ax**Zy=ln0DIn#V-QBz<-&rG)9*@a}vpqcBgkj7IeRUhb3G=ww z1e+ER2!T~cG6EC>#KsxHA!j&8SdR0#tBD(ZrjSZ{kD z+$j%#1Ik{bu}r@nQUJ#fk>09`^mk_ZHX}rJ48lG+;VmTN?eqhxwiGmEmDz)+IbnWc zVDjO1a{|uzDiANOQE*^)Xo379KykqE&0x9=e(xKm^CF{>az8S4`+BAuUz!nFSkFQ|)hwW5nF)5>kI3~V8G3u3-E8U-I*|Vzj zdCy-Q)?4quexe2Q#m4K$1%6Zo=MHiV>S}!GWo6;}zUFYfPeyk?-jDgYa$i@aJHx&j zD1_V5S-@LPJSzOC)OOZi$H^2{a#z^es?|F>blpQ>Z^g4?qI)_rT$U!kyZ+*k8EiSb z`6CfW9k#L_uW5vleD3fmTBfjyyJYEWprPZXMvRBaqny9xrYhnCN7e1#c5JobNOt*& zlu`TBpdRXyV)>+B4)R6ysOMh%$}&X?mE0v?zZPsg*;}GsJ4;{uAJ)Lo|1f#|hyhS1 zx&ui@zExrX1gC0j-`ruEy^b65EvNL`Ke~ucum&9lDVxDOkEs8*_ox ziI6eds;WebOcXV<#tgPe7k2WvCxSdFJ22Tw1}?0q9zgihp!0*`UT>@UqWb7m9zCr? zqBmyDJR>5Ri5iQfq|#SuI)>9}*o2=R;AppllfJCDX`-yJM6)bkR>~7<$SnZSzT`jd zlu-s8ltz=J9%<$$mZX8pkxkcx7GnidTFzC@NxT3Z-fc;LN9M5j23Ekz&>4qznPzJMLm24#N3Gn1i~Ekrpwc zkwp$$suknCbbeW({uP7a>jzD&DriD$LF_c-Oj>fNmXO&Z{@L4u$~wt>T~y+aG5wa~ zs`vg^Xb7(e1yX4~76N1=FUmOPIemkW3^mkW#J%w!WU!urSg+`lse%D-P~+WDwD=+w z=rsTpIw>aPu)F?52-;T^3AV638G?JmGvvmG;GVV;#CGMuTxxxDhtCAEHK3Yv6E6_OeZIv9hKGNu;C;Avy7D-CvwV za1iVe%a!oAv>$TA)L-VwUw#%XcGONnZ0#rA z9YT+G>ML%!#F`Lx%gemc&c$ommH-}ecbe^a!?_2Cil}0>yN{XVQFK&MlCmo6 z<{DrS3S*j55JZYT2|Sk4U)EQHM(NzL`btEx0V?P?0;#zz%-@ji`dL4kd@e-IFu zz-*f*8F9r%D}Ak0eux=sLTOgB$xDj*m3JDq5&}X|Brwi%P2diMXlB%_S|@%?{_si3 znSg4*mXaJbo{3aLuS1v?SZskZKcos&U|e+IvyhMz5REB2RFuXyVkxy|GKjP!*{PO- zr2P24#?@$sAQFpg@%UAq3rob4JMXtC#byo~d=mCLPxrUt)8qEbTJ0^qHK+K`n9Q}C z?<|mg>aS{=Q{9paUEfpHMGl{tHqh?`j+pkf3%xJ2IluuckbGnb4ie8SvJMLDrWN?H zk2=pQfou*(`ox;(MN^?@&)CcR9be?H!6#SauY2mlKvB)pj|fEi38&DDgs z3MEWSr7cuWKI>89iqSys7Xl@ITSss?YdGf^q^mK|4>0G&%66O7R9B&lycsI;BHH@K zpr$HT%81AX9jNiKgaT*}jB#>nkB9g1!lXW|WMVxNyV6DvIw?k?qYm@N`-`*c3x`Bs z?(PD!$Z1Q9_$g8S0<4_1f#VmR__(LGLWSi^)gBPvQ_5KoPaKO0Iy3K#fqnVy=K37V*=U0yb$A zu-o(K();ML8ld<12-v)YZ!Gb?AWj%Pl2xaCp}4^EW)US6(pyy}W{%3o`{vRniwR#! zfhY6o8387;Dl<4$gFc!bnfS&v63M9eT1!h?PfrnP0GPm1LIhDVV7l(qg;)8rZ8};@ zZP?=s81fxk7FS_q+?m{(cv`*+<*e3BMdEcfzav>pKbP5Pq0pVd)`!1&*KKNsR2r09KHqm1qb|kkaprc#{N+ zJ5YX|QMtkoW{46fvt>g-06`Le?wmpu4=#frf2K$Pul`(b*%xg^8KXJ8W&}t%)v=fc zIFcULF&t)NzJrpx*X$gphCf&Ro6G35^7C=P8o;faZ?gk==5RFTkw6Az;> zXsHEJ6d|-4fgV;N2u##8naIcU(?kv!jxM)OV8hnUOO!Xt($iRwEXDz&4-YHkvR9K8 zZ=P{=S7A{I3kR*(`tnuMe>xELFl;A*$P5MZ^sM}dGE&V5yt%t`9uLKwSgm9n*xD$p z9aGmYj&uPOFELueE#BARf5pPd)*vUa^jDV};4D&RXxBB*$WqxZ{UT%`&l5z=?2m7} z#ieP3LT7~2*yBZ9LLxUPehXMwCsHE}%mT<#vYF0(6<7dRe}j{KJ&Hxi>17umFyXR6 z=_iqX9itP}#YJv@1++%@r+pGmS}@Wq0^$-77bN=SYkrz<318IncfJCup^8gW5^*=I z@dS+Ks9LrLVMdDf9XzWXG;^T7({I;l*4sYWY4d6B{yuFGqPb{;l= z7AFQ+8mgy9&oZz~vVit3wFfNEv<3C%{Dq}xF#qCHMy-$HfQqUWMz9oy*#}d$H1cAb zcYJ|tBf4{^H+OF|^ zNJUjuRhf;mlmagV>_#Xh1n`w%U9YuS`53mB60+k+oXWE(?oCUI%3`6psLL712B0^i zy_Jm(;t4OF6}j9t1i)^eU#r2Z0WoYjp9zRZhe9Bg6MEjZkyH5Z;BcJsqmd z0OO+&)8WwbU}JlzW5I_om`V3zofyPoHB(m`In9R?lH#RC$?)TXqf9OL9((*>pWgwi zfWaVZUIxyAMi#QCJO~s8k*F1O6lR!jAWPx5{YlEpM58o60ZPTKS~o0yEEGu0R#jl^ zL`itm($aTG+%|)(dUOw?)zhz>bd+yQ_)7(-h?@DZ!T`W3Q!{tI2lBY>$RZY5qvW^h zLM=c2eH1+yT`uI*4Z2|&-d7dD3=mt0GQxPy zMM2b!YsIz=!<1OYhtU>r;1AX#e~pwogBzo5pw2CyiC7;LnVjEDNOmcMQBeBBVz){H z@lqt5zYd9G_9@a!Vvri9gm|U%T;;)`-msV583(`2)#OnX2%T17peLFFBbrns2@JJ z`0JNB@1$xILS_k|h(_StAVa`D>FCkp0w-na{j_UkZN)oT5AB^%ZAOgbS?Q$U?rkl< zJ~e9IL>h+X%Ol$+S&WAyT^*n)4 z)`Xr89E?8_s4G<4Qg8I=;;?-z{@@&fzS$iBPoGpJlI4lgfDtIh;iK>+&28|fybK2i ze&QV-Cl66A{b53tiBl0vmstXX1zg)Xz88`eDV<1oi55%_QH!HrOEdo1dr^$r(X#A+ zv8uBOc(_`yPtOyckS9+jM~PsFRRUG+`M284t=sAOm*wSz|5BC?LC>Pv#n58lC6m3_ z={#Gbz;=eS5~{hD0Se^;B^K3?p`(sAkHvi#L|iuYoAMxWShZtoweS%1T>2W0d1&%^d0^CYCUw*}U1Y1I$s3)Q`lDoF=%TG{rWXlQ|Q4KZ~AF zf{_kmqV$X4l5zqJAdQ3oMoeZNsj8k(_WfWl8}5}ln-d1t#Q_~qI;PL+D*4* zy1p+bENY=!vkBeZ2CmF!%q>SOGOK`!xZiJG?$j5Bo}BL#CdnCJ?wMSA+OlO;gagbn zRLEwu$v|&pm5pfB-o}jI-wP4rlp& zTy+7mJ+Pu%wJ~961@9&ekpmb_EO#8O1cefZu2D zbuZy{wLES^U!wtN7<0ZHPKLnZ1_lbu&D8mMq881In(L&(=qnrls z%RM?i+xlLM`Q1G~RnexC(yje5s-6y~dG^bmavFoSL2M3Ln_BF!Ul?GAJ|z)PQ1to`lM3PB&z**My~_^kMxEn27rU#hxl(A5@~fI} zCscLT#-5HIhr%x=U#^LyDg(B*u`&KfqvxPzn6cjsv#KvZ4HjEZ8Iawe@3?GRyDDYu z8AqINFckLoYuMW?4}>N2I*WM*+7pIeZqZI(J%jRcyR;qy>ggLtmC1IFMuRUNH@YlS zvwg8!WvAg#Op(Z#kpEHf*Y7toH4_>aqIW~m_9M`LgSme@;j6o~+QwnHb^Trpgme+G zEa?W1U3fi~cVkAzM)w(OzUS`CDKrwwPVMjQc#@B3eDJTfdS`7OvZzMKk1*`BA%!HY zZT^o)!EMr9M7tzPELU-f&iT%yBX1LGJ}N>vcGYmGM(D^4afi9K%Vd@Fe0|qLpbKs8 zTZQy2A^-p=k}LraBf6;&c#u&b9#GtOmO@i!U?Z~3E|!sy-H!&2ZyKCXY;`@$t!q@K zAf^0coc?Li39Fhn_rii7I_w0ylr8x#c%zL71EYA{@M=Ct$%4!2m@OUJkVil&^wNch z;qY9Rw<`Wm{zt+%?oYrkr(C7HUP!HdhQ*TrHqTq|-dD!p`S*TS5my2G&=}qIrR6zs zzPl)K7A7x`>*GELj)5TnHFo>~uy9g8+XY=dpg+RcDV0j)lKp2kYCl*QW8NV$EZZ&j z!g8-Qt9ZacIKTMx^RY*TQcoe3$Dm|RUb_B6q0B3ys<1Ea59?*>2OS;=cxyxvTu79L ze=w;FgUSiYX;3rzRLNRIL!P3|w(hn2Itw!aNyTsoFtc7-|%$W_u|{2bB$ zv@x98VRu43@#lTuCQPP(=7%!{z6o0KpzSk8(wkMPHlf**j2W9fPgnaMIBAa8)J+bj zUvq&PxRhQHU9d;+RVxA5+_pX`D1Sh~p)CPw+r71MO>exle7T&r-LRl7aqmJ=3n zHCPJvoyP+hp@r-ahD*`YhbKGqTpc5wIe&h9Ooxk8UdCro?wvM+s}O&7qrA1fr3_An zsX=8dDuS&&5!aHabuP4O5y4Wkv`@KC+ppLdp!ciCoIlAsZxT5j9WD*W_yz^rGL~JO z{!y$ii|g`Q+zgEO(jVnY$eskXaBkqwo}Z*33=PnJU$^_FWhpI^nXqW&f~QFrbAlh3`|Ules8t4_-eae4tf+ac@R25t%f?_rEUYzQSKTH*KZ zkuW)IU0IHwgaS1njA}Sd&cbYZYYM=$2V=+G<0jt`Iq4r??oUqq@L*^aI2RT?+q-k! zp1oPCk-@)gk=|+(=BMe+Hgf>QNHOSRP3w#OPc-9`66RV<#m5j6G7_NRAXfnLO(;i5 z5XE+*%zPNebI`7YsDvc|K&t%e{-Q>&`4PTOl~C`uIq|ai=sSY=nA7K(7ytmqM3re3 zx`KVd=p{z&`2!QGF5cLxm7f_pIv=RtK>=aNlW}WG4l0s1#5i%uQBvnFo zBRwfkJb+Z&twoY~NX5f5^<;^4kDH@~oF|$WFWEz(ClBjbf+}$Kuimqs>*p*WCt&Em z^~KEE>%(!@59LqwA28-{0jvD}x6y*>zx|zW7BgAVq(tp3eey6zl5b~!JYG5ANT33K zQ?*2j^n7!@mi!K1`+TeBdg$$*^KsJfw~x!ANQP{TAHqq>#yXaW%cKK&RSTx2L;nCodbsWy|Glp$!^wi_KG#x?(p9U^)ym_7Z z!+<~aBgaoKIu*Z;+((y7*MCyttI=rgy@TD?=;Jo?EZ`V0mZLVC74>Wq)KA?IdoV|o zr49rX);=@C=o12HlskrHktBL=)3?g%?|Y+~E!({W+K9|_J28MH0i{HC0S(EaK3J+T zs#4?q+$fujSQ%8WcbJXd!53Or9pe?aE<4AY*PWT^hA8nj-8e^%k^FLrD+`xHaii;EkEZAPxjHNXJ(u0>`BG{Q|A|F>5{gu$-ZQGgP5AA1L={xl8*4d~{ z+5c(15{0gU*gLAd*54gI6g$4K5rIy-PNdH`!E#%%-L0`(dQJ25XD#EPhUcArmWGjN zB0j-?g<{7mjK|?{21AF>kQH*#LksTb=U1gcy#mm9_Y#!4j70APHVZ%MOgr2vTYtNL zQ9rTz;F{%lhi7MDL8fgV1wFJut7Xa55@;PdWh8muzif6&-RNX9OSk_$dzyt7HTY@68Dx-vZn+8!dW| zxBs8Xc1rlm(q-L-)3i}?-%-6oM#t`KfPbC&TFT?V-kS&P)uyeW-J=vJFtoa{rcay;+5mZ2R%u)2~HvaIIIW1Nr)q_zG0U9X%Rx1U~U7PR@3Bn zN))E0g^F#IDdqHQr(;?j{9U!e6W5ZEw6}JAG6QjArscv83UXXp81{1YaMw+pPa=#hBM{@HN73K+l%h*YBD*anxb+SUjx z=JP>z7hS?C<8=R2>x2D>6H^#Y7{|I^ko?(~n0;_rISYd!F}FWzz;kLi^Wo5s{+X4qx5yX*?=kxvc{s%}t##G& z=g$I)dUpadtj08{B+hq3toHogZqNI0!g@8GnphbosP6x>AMrcDOWQnhHM&qSUGKPc zNT7zK`nNR$m4_s(fA@Au#f1C7)}Qz_kQbTsZ2a6xO^2><7_D#dv31n|=nZEe-`sk3M3Y=Xm{)^X|>0wmP^3o~w<|LRtVS!i*FXs!08 zt^jU#19=@c<>;g>&+F<)VD%Q=9yp{B$F;%b;uscZqd#4`RC14M-q@jyfci#ReI0H5p)Qd1 z-(3-$^1snj$~REl8hhqB3mY-Y_3-Ava&t7R6(G+?yAnmnklKRWWto$VZ?=xEP3t=I^h<*kEJppKj5f zCm!Bz6Gk@<9CYAM9q{cTlPh25FsL@uzA<@YKNE^?Rl*gs^w@Dx87f42*%?Y{er;qb^lbu?y??US8%7BE7o5w7T&qRp&|Z z%rEpuL4P59)d?Nwv3|G5#@FQ%I_z;lV{%^_96->j-LT_UoK`$m z9QkET1rRFUPBFgt!oxq=h#2DjDlO96Sb~5!jrku#i#}MhpasxvBK;a9$^Y1F-4`@+ z3t4sYx@-wMBiW|h4-vfRV};&!Xb(gnYpA;8jo9TDiPd=3%7BG`e#BF`aq!20hlWeR zroG2K^U@JvC0dcXJE=2jaAj|*fB(}NAIsoNIg!ZTIA@$%>NlaCSN|)pO#?xAN>JR29P?;?Njo zFCe<0%!yw;*T-b_fV)X?!y-bq5akm=|D4uXc9w~(&dJ<}9W<2`qj0G|R3rBPNs?14 z@gP-mp5yBWHQ4k_d77D3x?{EL)Fo|3G3gYg$2@Sv7dIUW=HHH4?ZCY_riphI$>|_o zJ0p=Mb#m=WwBlNGRX$855xywQnP-;XLOKSddf>264+S}h(H%BQhra*jEWXKX zt|EFLCXkDC2n+E%L?1?6r$%F?AvvMo&JEvAkxaqblkqV}_o)nwP6c2&9o^pkp4%gw zUhVe@lr3Ky&a*d&<&i}00F5#b+B?cAGPsa+YsV+LknPDh9mjHjVRvjC3U+M0NDW|t zJEx>?MQgq9+uUTq*;Dg#6iCIY7j#RtC4RyjJESErwl|$UnTw&%60Ly@VwvvFj4BMa z@NbA=0`mN}3tx4b3H|$ipzI$0)5iVsxIp+rFI3y5Iea7>Bt4@jqi<@;?PVy6kwc+Amng2)Si{P4KoU-t(Y#nqr#vc!x!y zfi(QX)MjEDA0EBfcGmmG9|blF)1yZ9y}>vfgzKpR$(}#R#B#7`gv;xR;uy=r6XDN( zf3!N^GJR?|GO@ct;h6uk3_^+-)~@4Z3nH%GZcy6)%b1G9%(O$#ZW=gA)tBp(Q+_Z9 zQaHmRMXAc-IXDy(4t3fr#ocoSC~wjF-+dc??td}Z^8C-S1~T3%>^u5=YPWa3)#2Ue zpNaslzo^Vb@M`7B!*y+p4ryDQ2WILw=PwVRWcf+$7rKst&|Qc4v}XK=>980};?Dc> zogd89w#@`|Q+I2v_z~EgzY3BT99nGefV(6nK?_)oNJwX^MD?D##xZ@O^#v-LB*+ zw_k;yIV*HM3<_@{hrBKkh>ZzA?c6Ov;rXxK-i`>pHd&ORe^0Jn z2K+qZ$dC#-+`_HXhnu6@Rvi!95BookIV0k-jx6hcnHS>9eZuM^3@e|O4SRMKJhnD-nq?le-t+$!q@5y;UvD(+uL^DyzP`TsC2DkY_4g!W zU%^r-Sv9W$dX{j9cW$E}`ClM0tqsDrSm*zczognw4j$hR6tcsC&ba!`2Kbv&^R>D2K<|-^Bv-Z#$!~R&)nS`Ezcigv^bAup}Hq&oj8cWH#_LxWhy77 z2|epXu9B^ws^vK3qmCSS%7+OD9ws`}E<_kURCZd+?^-ZoSYtDf$90!c$nF-!!#;(f zVM9CuTrS!3_Xhg0VSX3&7WuvE0d#v2V)qZ%2HA0e8qm;tVUsm9yIkLs-d zaMt2rDF&b^NbTjv@i2)p(}mprkke_A;fq@A%Dq$&4=uC_M;B(@upA6KkR^j9mj+VWBn09zT|LhSGeP6St|Y)J;er(e#;hG zN~{#yM?J4>gS0yKwe${JZ#pzpiu4j$Jnm+H8wdQI!E$Q7o8)t|o{^Yq8ZNb;JgXTb zy9M*t)7P3+Jaa0WTykOFFCMbb!$v!$`nb1@IPtoF`dYy=B&*5Z2TT@C#{FqbH~qlU z!J=~_dVlbR%I9wMJ++V4HI?saiSkt|v{_Z;YuTzSyUOWV@NDE?{PQXSo>3@GH2Yph z>x!89%4ey{pU*?+(ET$>k|5sW<@fjH@o%a0vBZbir2u_BGzms()}wFxQ9>V#Lmv9> zfdQLQ1(aThy=Rl}%4Tgkp|H6>1BKt`XzI4`pn!s{&Y1L9tP{o9v3SsG61vF+EUCGV zuK@z#f1?9tP+?~N)MEaX$Q?RL0~#No`ETw6yws}3wC3mN*WXlWysg7HLcP}sEBJlP z_1+b(k^?kPd-KU=&qG&fIS!x`Yg4xqG5*9aez5ntNH}~AIBLcgznqRvuDQ%jS{-)5(!_TpB2t3;N(z-q@%mtZ01+IbsZR_5i zSFILM#}4}+H~N9Ei&vkYZ!wF%?_4;5jRQN>+homlDl~&b$@rm->^d~wtWtmwd+r$Y zOu8-#s4UI;=A(>pdKDt(aC0ZaEq@)jT`E zt7)+NaC9urIU%`TcXg{>AJXKT_bJ4K>rx0R+9-vpoT%O88f@(DUMfdS}dtz)OP)Z@aKknWJoD)z$-n@#L0h^G)3J{%TT~EF&NaN2 zDEPj>N>}MftI_DTRzJPa0e%AlkhPUYn|bZad%23g_ZV*j~lfoX*=NaFR!O_L@Sxv-w0Z0}egH^=#H=oD1 zt|dx#Xxy&aHW~9rx}xo~-rGx>RsNB~_{%PUlQ<_%`{n2PEFI@QTb>VCMm}%d`PnWUBDG{OVo&KTymq&a=F3eIrlObZ zpuQY&;6O*v2dI6a*~>tojct~AfWJ$0(Dj#BX1)>0*Zo&NsUI{eMfsI)}E!IIX3k*ido`3jfAm^LkQ4hYehddV8EK0uo4i#W+zatfP(gRRl8%*Q3X%% zs|*5Rj41fG7huEuN1M@I757cYo}-GOOSe<@14}sM`z55{U!&XVL;aOpuy~N z>_!wvbEWq^QRYXNbr~SEm*C=SSEK$RGlB{Fiq`W@Dfd~!N@jUkntS(>YDDg0a8$dbV_$tOQieX-qBwMmlH(LSEy>z)<(E%H+i3!G0%o@10 z9A;+Pv5YK)TBEK-?Ly!qudD0B)hw9ex_3Mb;>N1pF}89h*Kqna_K(z6x$em?wPO}z zzk&aR-FB5lQIi1gjF6koQ|V1@&xQl-;zB6ctH^)}<6DF|C-;&-pGoo8jm_Oz#7RGy zM)aVmF~3;h=g|3g`XuGw%h#e+*FQh3Rj9duNmaugA)LIPq%WLT2KO$}m&Zs$uJ{Vl z8dn>h8>*uRt)}i7l^=}gp_2`EIP2ng*}84^)K`e20UY!G1KW8*QixL2i>pQ7>F|Xy z#MN*69xKcm%Dj z&U+)y{@!69XA9d*DJoA=Yi))D}yUfq|tvD+m(O-PjcZ|&sn;sWihJKs{ zZ#-wOJ)Uw2a+;{W#*hwaiPp#s-sO`QU&LtL2fiZii3K?CQqkr4VPKk-$gX!5{Q@|g zb4kjv%W?E+Zo_xlbMB-0Y8xvDQJKWU2v_j7zZtk{t@F;?;(_gLWVZUe_wH-ob39%w z2xj&S3_+NQA?dm2!|78^GoeC;;2)W!P^OU70-|{6xkVU`zDVrW!uPBxWAYIXYI+o@ zb-i?&po|uHs*qi4E%)q>|1;}dGb{R5Sj5azK$G8<*cetepP-takEb_feqDAE6p;1i z+`npk$QJVJMFfxCjgTs=vM4hm>`8^Bdml6DR~GE|`xAompnq$TD*XbOz`m-G`*v}z zPL}Pc2`D3x4!C_&ias{=fFtZ zuGvCnP91?R#CvVVsCom@vxU=Rd)W+wTD8a~BbQO;hN_qbJm-z>mtrksWZ_i8^dMTo zH>oHH&4FgcBx3)xAoiw}O$EP4{s`$OmXzhE$@RMHQO0`#*CjCVx=WGd5iY+jp$=E; z9x2@l7pn6$81i#H$>MiK)JByAFr37$?0z<=9KY}kMDIsgx?Y^+f4X(v_Q^BpSoIW_ zUi%R-a?c8l)#=8&4^x{#9DpL3nEvDj?itNQ{U-$dcNvj0T3bE24G(RJCRaQbIT`213k><_2fJ*1u>wpph-8$o|7m5*rtq55I4@XOYpd zu-Mis#4#H?mqGgsU_W=;5T0L}IXJtRmC;E{ zH(6zt|F>3Jf_}^39G6Jumr3pD(oD)78(8vC{nZfGQm^m%@@~IFfyXG_@MB2Xlt`&Y)(wSz#s-8O2aLV4Tsl%yuu&KZ18x2UlEsdx;1 zKd+3iWVwviPsQQKJ3MX*rABzgNr281Mj+489TK7i#`_aoFv__BM^jXeI|08sMj43DLRvqdTMEnH9J^dI{A#t_ z<9J1#j-2(ni{o6fow2_L3I9PHnZ4d*(9;;S!f=kXtR1-JXfuD_-J|w!So$(X zq?>Qxbt#k=4v%8{m+s?j#_kT9YYC0l3}8uzyZq6Aayi=LDqA5R%3mQ6%1jrOzXBG*mI?=W|Nwp3Jw8Ioy?6o|ZY!0Y(b& z*koWP-kcKdR+)vKam+WpD~|{h7mcT{Fe&y2OBc>kHa15?Rwsmh$`kp%S4s()_T{;f zfndba*9I6VGjF!_XS==zcLXD9^j>Z&3*cp&_|N-i&C5R6eS|3X zA~{!`&0!u%k5-zT5R3D8A+l5SA6{3)MteQQB#2Y>0A(Z35!kcI>e2To45= zNWSZ5VdbS)ad90KO7=G^dT5K71O>@L`}So!^i4Z>cbT9y`7emj1PetHn){3z1;O!B zpEeLsXh{cPlFAm*(A(e>g<Z)n>yNBu_KmXmAm1gP^xNu$W()Kvm2x%CbS^_K*gCxVun7~23;?(ITy zSKWl@|6Z%n#I&05L9^-Gd?e+3?}Dzg4T)Sb9ealLTc>g3TQdbDCtC6<@&?pCDF8bR zzf1>4KqgJ6$KtcJ2W=uJ!-n?C-gjDIvZW1!t?XUXrg^@4XsJ_|R$<%&@?hUsuw{oV z*zWY#;dd`KR@HgY`)A)xEs21ck`JGh4IL2DcFzt%V18csXWg;%L>u)J4bT2& zJX6Q0m^n>HCT(0=Cl^;Ke@{684(5m`Q7kriqkhb9^KX0$(#E+ zVh@DU{!jBEvCEYi$Z}uX&RvcA87TU*xdMEC$1)&D0P{<2%Kc64Ux$l!`_QlWj7BF< zCodTF!2b@Cd3`v4zpmx?=(R_QXKnB6K_KubT-zpQLyZ;fPJte{)!Wpc=QbQ*-X%7! zFC||kY>l4(lj!PxB80MEESeRrB^u5jtt2_vv3-)HeCoN-AQy^rp7x_?F~qj{#B7je zPJxj9Y{2RZi#%3A4Z=%L$`M|AZ;ddvM}#ZF;WT|u*(7U0HX4(pLYn4@s;afnqMpXD z#MoWQ#TC5pjuF08)8OqD>x_VS=O^1W-Inz^Uie59;{EeJyro}8JJ62CDG$eM;d+6` z8NecXBE#>1ERV_fGT!?-bpBd|O^%z&sfzpU$nXH^>`y~q#(PHyLpe?(`nW^xaK_?a zjUP#X-xXTNU_khH+O|F)Y2y zVbco03x({U%RGON#!)GP3KR-Q9Aem0qP+O$qiv2PsYp8k>SfenNaraFGO1!M zEI+=5j@z`QdhF#Vr<>~N7Pe$|`7AQ$q37rv@7&y?IVvAM&+KB>zxoV`5HQ-PG|=Z5<-d_x^=L;#4!AGfpP@ zLBXKjglCKbI6e?;{eq4qEW(&iu(<&9Iq%d4W*UEG@vx_10}I*?m)QH_N{i~h*%4PX z8K@^fX`>)*#IvBxdm$LWlfnu>%YK*1phqAskM%i$gD2z{{Bf8AqhK0dl6Y@jooZ_h zQq_c-yewj%1U#{QD%4Men5kBhwEPVXf)R(RR4n&--xwF^f1F;P{_4SJqrLM&x7}?! zgMH^X4(29LoU5?R>`uGLODz_G|9NweqmWqN*2iW2bOwD1#0eI6BeWk{e(Q@GQ2elE z<-PjZO>QL(g_`&z3@aSal)ab@fw#V)l$EypByqRe8E^@m!Tn>1>1Jxbs4@0@JB(43 z>GGD7{V7Z2C=&NOnA)Ur{9nOp3R|#dp%QA=a^5{LMzt^fbYA0uU~TK zx0#B{^`s}{eYoy?CS^e`5WPUdiO+$TnW?Wb$J2Hqz4On-p{8$r081ueROQ@a6*oZF z`|~CjN@rSRwK?MO6K(c_bpC#kT@VT#-3 zUK_L&gQSXBwO#&otG!~nBP2y!kDw}KBP;U;<)oiAr^4Wabr>+4V#L;I>&>!jr=i=w97mvAJ z$Q&gKurz*dv17Q6fc6;1H4M)3O5aNDQ$qN!SA1kHWA90Y#N#>GU$$CtI!k;H%Q_c- zjU|ly=9JiPJRl2;>b1Jf#adxUm>0r>!-(ZnCvuD=M!*O8pwZ~vQ|`WYOK-3)rAVz+ z@o||uzWKoQEOu?rlPk-;>ub!|s&dxR`TT_OakJ6@2}x?kc|~Vn&iO?tTSh`+twO}r zD#(IQg(0_DS8rT??4gUL{ zvwyGxoTLN9UNYft?no>?#OciFshGlJb|K=w?dUvv`T;ly&=eAaUa zBJ4CH=x?yOebBvTYMG3yZwx1VCd$~fq!X&v%Nt{VAg@K0Fok$?FE!#RZ;SDCfv)>+ zxt$POl8JopoJU&s*5IoPk6ZCfc^xhcvRFT!+d4!wc<3jZBxsQ>tOUB;QR1QLs(!{T zefR^fj=rZi!4QTP88LBG$PdE>j29i-y^++Y+;_iw=e`1kdc8w!kx>IVv8aR-IEA8S zxO`bJL9!qQ^_MwOGm1LRy*A`MA88K1$e1=OK`AN|D<{@Qlerm3oZ9z(=Lde_t&I|y zjYoSKt;lS5sCHF0{J|P2FMhCw?tEK%L1F2qb6A<|-z*Wm;|TorY` z?b%e&4h9DP*t{5^B3eqAh%%D)<|0cb7Wc2)?~sFu-ay(c#yfPv6}hE#Ki(Uj@qe2I z&dsAu{ic_Jt!v$+aLchFWW2kdNAB72|488{->3@LWMX&bcX!Y0cr zg^-A7O5eSSt;pO@S+X3iquE;j!$eP9tLUABU;`MP$4@;-1JFAV(|X=t@k7mUS@5lD zeL09P!w-~K!QL&V;@^Gv;&m@gfd(Yq)a}+XpJ6zkAa)cA$m9^x8=1*tM)~M1xdMyykCR!tEu@^ z2wL+rFQ9c>w&>K7AsZpHeE(9GU*_}!?DE6#bNif z9jVH1;tjqbC*{y%GEV;1Q-(93l~BumHT2kkm@&i_zt#QmFwgsg`jCRCf#f8qysdnP zEmnTe(-sBDBS`Zjd8Cn+RjcWo&>h{BlQ~ZhaOi6QQd>~J0FE{L&EgU#_RKBe*u>WXs-%CCB z`24%?SK?)UX~ZPct#Gxi4w`U<)YbX-v4OSU%C zI}(BzbIocxcnRa#mAF&GF7NIF4*g%mbRbx|Q&LG(*N0(xqZgPUjn-8S#u>v!SiJ~y#AtLLfkoob`qJ8r|$Js-U3(G>sUE?&` z_Y*_v<4Qjl8fw7z#LzYvJ!=5=weyj8OMo%WsOQ1Y00LqCW;Fy`PKO>NS?A&NX)q3{ zOrLGp#*d&s*jx2$=~JBC05DGFINcSb0WfkeIqns)}J*~N=xSHRLz|L^~ zKdoa5YJ(2yO$%p#;rxUpID#575u0cRSHAUs{IXf0s8UW9bvddeNI4BTg1!90D&-8M z!$eUSIixRAps#C#>nb?c7RbVH(}e1PWnn?TjKWb~&ZgV>Z`MX1eos!4fBEhD2&U!4 z%1MN6;}2c(*E)P^hLc%oZM!^Y`Qkx{T1MIv2*sY3jw}ttb-A)|0>!K|k*{VNb!R$E z-GOPBL42_Hi0Wz>8cw#29cLG?7jhefS%Y)=>+)fb`@`3P8{i^!*}9hQvod9&)9T`* z)6_XAl7^n@T-l&71~(}1%j;4#C(f0;ulM{*$kb%vDsgxn8L$3MQhx@2K+)u!^EJF^ z`>ttBcSAZH=A-~az75d5bK*2x< zG7s!Dv`-P@0)PBEoI@FJ+E+7E&O@%ode3z1X*sEyDSxYI9fw-eQb6#*$O@vn+&Tt# zzT4*LL6|s#S1KA*9@&EMOYEoyG&9zZ*5MY2NU@R>7-GXD>a5UDW0anG=$U!O7Z^0& z943C$+;|Jm4^VN%=M3G=w~^+}jnb(y-8-l0 z1G`75E{mz<*_&;_k&zl%Y@Wr6azFni$7;#cAENUA+Z`IR9D<{FRs}q>I?e9seg4h} zv(w)jGKy^p0@G^UmpEBhstbk0ltNjJ??N%d_}_4rAh z@YpxSd@U<)MJNAWoi+ZWJ*N*ih92XF_PtpLr||5)(W0JNgQvWa#be|>dk&M5__ z(@Yzq9S?r?CX~`(Cca5&_wzd|AwNEp^l=e>=7HhNWWV?oJcAfyJpR{PhgCh25q_

    q2RwZPaCEGWSkDa@jf)mVovvy!T|G>OVr=AZGLsI z@Ut(2cpRi!jcaM$sct>?9{i65NIIL2ZTd5s>U2-0GxuCVacpyaznL+I?(^9GoJ3d0 z_17F6&H(UkxC&!d)N_rQ8S2SMC;RQ?DhJXr(gE1g{+YeSRo6`k9RHebaviyazJ@ja zR0`w!wCImTF<7~ue*a+OZOd&>n+>IZGT8KV&=RR=>VW)+ueBl}Ddaf3Tyun@Vyo~J{?1PrDozIKY`eGU3bLI$ zbNnW9AN8MIHqx8yGqbux`FSuHXGi)GnZ7qDG~xMenjwrIeU>?d5|d{;7unpngC4V| zu=7=D_%XGH=9CZ{WV8pD^dZNWhDaO;z%t{<#{O-cJv5U=Z2CT8n;C|L!Xv1WS}hJ0 zqO>JH%=3n_cHrWLYVSTz25E{-_8z6W*fwzacj&?-^-Zx*B`LhajD+bzvwl&>%N0JK zO8$zLlm9aP!p0{*UOxM92=n5Iau;FoyEl`)@RNEpd^m}x^qVi&IWJRT88ZJM zXdwp5GP_KHs#+eqrqr)B??^_B-jMvQ+sw8fB8j-{Fqow|>k>b>z3lt3F7UloyWBqe zw0D^3tv*U89s4>>#Q2Pb4D(e)LuBJMVr9yBlu4ielTrBQuy8> znAx~?h#pf?h%wV?++9twx;z;THCf=2uRMHZjf)%+gMJ?Tjex|BEPCf(+?^CdP<@+M6!Y9-F z*hl}oplocb&ZWjlG1&U%i0hT0X~RiNMkr+1Hzeg7cuTy`hO~)7T1wf< z(k6#E==X!C&%~akqV#hP&K7J`jFqW=$A?9!B4-HbyswMu!O>4eu z6ev7o{7+iqOI^4<->K^NX4o|$v(dvUST~d2D_oD?_!+AXgfbdR5rI)@sb=_MmW3u; z1-|M3JSVcM>em6NB}t;L9-qF5QW)weuMB*)%~Cy*UVBhY8f!{?q^Cc~Kj+kpuNBpK zt3PQUaoqA&zd2vZksSE6$d9;nVq3M11g{XuMtp`ls~{>$A?F~jn*3*fDcjkL@?Ti* z4TCVx8)m_8J70+Ls2ZqLPF?G$>1=7+plRuwJZd{jh*!C-*Q)l%jUw%uiJvvm_MxXg zGHkn&oJ7Kz7%IYZ5|O7aB7v3{DNe7yL8)72Wbp9Akq!tYL^b+2N04Nwu%UDiei}V(#FpkD-H?Hb$fc~IP^GAiff}mO`$-TzF$6S~@sM7L(Enpj6 z_^d!#3FDjsw2r+0A@y!DdE&50IYzHv>Sfo-xXvr6cda5gy28k7GPmFQt>U<^=iiQR z-+z!Mq*dNuhspD|*S#Pe>JfA`_jRc>?x`^w{D{b72+FEb*o{pzg``Nn>Thj2b85j{ zNv)4~!owQI&*8RTd%e#vI=D1ttl$1QeGf#fBYP=BF{#g|%)f)BMUPWda~P>e&l{OM z1ye*%j5RGc1F2F4o(Cdg`K4!BG&5m*#+8OU+wI=9%KP! znH5sc@;!vY+j2G_(4eK*s8UC?gt0p^Xypd?t>}*^G*MJK_t@Sp&~s#phuX)7`bo>8 z*-FrG^0r}*55URCU<)r@#2ukXjji>wk)QLW?Cof$v^Ehhxndyy`BKr~>@v3)4QYGR z=ZggADNT`g{u}nA-_t8`28g6Cu~w}3gN=ZJY%E_PMp5pr+tO*sWsclQ)2Is5hL|Xg zOpYUUs#YaP@2hIu%kt#wTaKF=zX|X6vZ);xl;s#}Y6ZWZF4vGnHr?8e+M9oTo-Qix zGLGFj3pK9A!?tyE3w6$mVvi?szl1^%dAi-eY(U;)ZyMTYMsJ8vtB!}sdq;AwWQMk~ zj@NX5pzTuLWZ_1>)1hr`*JO2JS9j%dZaW7bhq6syRrx8U8nbgW_#a>APNqLIc<>+r zMT0aiW6Vzr7^%)Z-+`ldFu1Dl={F0}meNB#o3F31B75VHx3A@%Hxo!a@RA}F1haH9 zDbbF<+n@WwR)8!@CO`ttU`h!_nCQ@i!)(ju!@T4r_pKRE_HIe~m&Vtt7cyKiWa-BGr1Unoy56sXA4EzSdGdyq zgEdq116RR72sxc7QWoaZh+1Hpu6Z8eflHD z(r_(w`Iu*lg=^saX>ufjJ#wy}h12h8#M{q#Q$+w7KM5^7#`(tKoRs?+atZsJ- zl#S;ZA3LeD|L`PDotTHzd!NS-#uD&?-Q>EStTcX%Y=lkJ-r2CnxPnKDZ=zwsH1 zfdw%w_#luvTtB_t*Dk#|WcQb0;DGa1_|grG;<&XG=s-1QEYK_tPi9NH@kREg2o)|K z^|ZHnBI-<>n*R*%=iv{9B-31@yT{J07nA67m}ciqxgYC0=3Ni>PMfATC;XNQgx)PcG1(3KgLWTxhiNQXhwA&LaDe^_*S3mgr{5fZ^@VrJG z78%)wXRcx0Z|;FUYWGdtFLhSLfcrUVMa65kCE4MT*~jG?k7*^?8%}u*trGup+M)_p$(It+9i9|5S_G+*0+O{fDc*(IK*POjhcZ1J)w~lBm zAQKZHvcZ6inu>xlvvG01vJHpiKk87S-Si&10vj3zxBq06rfgPYm z`59el5+-tDl?lA#CYcwecY`-~lf_eEsP53Y>)E^kR&W@%? zlt)K*a{RbxBWES>DFlbExb!FI+n1h;t#f=lMlpqLs8VP=rVC<^-P_C#?D0y5BHS}} z@z4R={b|6wO`1L33I1ie|6=<>31$1~)BVM7T~nCaGlSYurs?M!0$Dp5r9T(#s;oJp z;y0q6#2vSU9gXj2oUubSEI1VL8eAmrg`9qHwcgpdOyfg6Q$m^@0=X`WLHSxMekzT_ zMJfc|Z~DB;c?P~@Deirs)5dSNX?QDe5KXGM1r+Z7GOxWC!5v#|MH~ZyUU{|f6hOeQ zNrOl26e0WEy=_ifPl&x)Kji!Bvex+|4Mf89Wsb$)0U4pMw~0h(m0rSO->Bm4suD;1 zK7ZqfIS3q#D1=Ij(hyv7`3;eYj>Gnxl57-X%`dd)m+6~DIX8(%6NMuquQh3<(f^1w z*>1O(c&P=Z;=On;j)ER$@Ixf-BNDC#o}{b&;r`W4PTK53fXN0dx$C^L^g{#AqdUls zqHzn*AjdQ#b%(mTOC+%Vnb_z!HO@hz5@{4Zt>LI&(wxlZ{VuCeut-z=EZ=5rn2UPd zVhjC>(g;)!Mq-^xPxzEzy1=)OrMTGSv0Ue!*^>1JE%lj9fp|9A>2Nl|{_mbhv!6VyK59V^x{g zvdp_X)$A>J%#cWuk0IpGT^m#OIdV&KF3$HWP|9$ux)N^ul97_Mc=*d>_8?8^PWNq) zPN`#ROr2{ONF|%F&)uJ$l||$c6HtE zF;bNS+*ghQ6DCCF^@mP-1O37F-Avf zU!@2eM_dGS<{tg%2v1{1ya4y=-Uy;&QKY+=rX%WX?V{S;`W3lv&-+3RQ4`8I)OT*V zmnub<3`)|A!=(&T83ofXYk(}qLia35IZ`v#H~3A9zENE}zX{}u;#m_j5k}!exY^UN zPfu`(k5rr=vT6oH9bkKV<-Vbpb##hW<#Uwq{`_Dq`R;bzb4>&xbghw>)e!w{K1WY+ z`Jy!hv{Ff5yjxx%RB=!_j6p1Z@p9?a6-pW^4J$^F&0Jckr@yOq-l5(+R}t1C0*)B4 zl^*y9+ZUR4vsI)g=$>&INTXg&s*R6d@ug`E@x#0s1{0gv@w_*+ zTvldL|JqLadqbU(p$GCgM{^OhovwEKE5<8L3pX2O>~6jd5t=z3QnP&V0JQ6Hh?V8g zyh3}uaPBcCSv#I5m31IlQEgG@`AHa66UfM|KeN~;W=oAa$tjwnKi+hZpIENaCA*2` z$rq!qUT6TvX@d;F?}rC=WYD-`r7R;ugmdhy*ph<3_tw$t`*WlKnwMUmE{9wZz3QRW z36-gIN5;GO#)R~5=XcWq9~u3xSCQaENJ?{zT)>y`|BvC(MX~;5|X#eAgjcuRzGr|v-78@9iNd*VhTemtMUt;L&rS3FIpht6 zKB+m^{O;5FzjP~|6WC{JoDkxmGsIKdldTwn6&8f}@H%bJrDkmBegZNN;1W!qyTwe= zrmE{DCY@UEHRrh)u9s@yG$k7?G`!}6QPX!nxF8Ikw?q4&&~T)E)!(}7xUt=|`!CZ{ zl0^a_=dq@i39JgmKvqe8rcCZ*srUU8PLYEG%;aMuvfhHe*B8b%A12L5VWe7xmZMCJ zALqx|LA5Lq=yn{t5H`8kv&$e_JQd9_vt`X-9ZsR*!LV3chd1Ph>D_qJvnI1z4`b-7 z!Yo`zO4YrP00WU*_fz`M6$wOQgvbEa){s?)*~YOAa^5)tT1h{&gVOg^>JetvSM(vg zh6JJO9tnS8@kV`AfJqZA1^_rPE^(BTJ?nMLRq99(xBjsma<1brE)nOG`% z_wEm?|K4}s{=Vvx{e()^(pdU10NVZeMlr|+VDczvYBG7SJ+!4-!UcTkgTV1+t)_nt z{2o?x1U^^To=H+NgM+||aH*+tvmL(dSJA(7kWN_ly zRqnlwFy( zZ6|!QCh+vH9djciAteg*Afs(g1{H=tHzke`sGW5zV3c|)K51KBC~3lQn_@shC;CP2 zdo8a)yfy^^uwy13OD+xqY~|4I;u&u^IR-_*Oj1{(UIX%2RF({Kxp_7f)yUP$scu+I zE$qg5XSK!R;*E{BWg~OCuXj(=Klb#n{YalO?bt6tz~$8ZH?Pfa@zB}jIF+M8S>8WX`UDpK_wb0YdTn)ctl~3q>3lNv%T0w|VzDIK)zw_-p z2n%kLk6ot^3MK0V8O=vyEulaOOyh|F)*#tR8~kyfO+l^%8~rJJj}!EkxNx!Ubd+z; zVoe15MM+iyLDa2qK7N~unf&`M`?gSePT%7UVOlv7SjP3?^nd!?Ly9w1pgh8Sjo501 zi7roI$&9~G7t~kTJ+4#WdHFq~5LQ4mP zU>I)^ik14WX?j|)o8VUAtx;3%aT&_8+Mg?!!8$^|rX@s)c6Xr!J4!o|{@t%w$j2g^ za5l}iU`xcg=3=a=NgI^(_@}}2awEJlYwT|#)~+e<8w`^ZOHit%?YD>-?3&Eu9+*vk z@J>vOX3V--Czhy`O}F7J@=yRK!LgJ+w_ByE`O*l?X!jwiDi-YjySE&Gc=J+NP)xNZ;Eyuf&Xzy}t#1ln%(X z%*Htgw_soe+J5OD{`6>L0aVlkxM)OA@@Q!sK}?2bxQG?iH{1SLNeP6+3&=oT@Wh-~ zpu=GdRD;kKya8YIlRN*Xh??%N9ZxK}R8)QZ{X?@U&-=_|k#+hf1w>y;4@ef5a>yfFMAb@n(V%0BRgG)_SrL8Jdsldwr8k=xR34PAj+kuiMfSoVz61THmctnKsteF3eu z=1-NZY|a;6pJx8uqYELx*l&W=(|N@WA0$0-s@e`;xN{Cxtx)Ye5u92uBAv2UmdbP3 zml}f(dy2-`H`ez;@5+$vj(0QjV{WNs+oU^eR2l_#vg<#nK1pPCOPTu2sP$fp30DVL z2$_GTWw~BVeYe%caklc}^5pk;Cvz!%fDduleG>j};T5Yo8C2-}J2B79CotCEOC0P= ziz4DhfYJL~j=weQmbJYw&94Qs74BOCW(K9yiQd z){+=-$NZP)g}5TV?Zx@o)UWWj{@IH`?GxonSg)V(`C{h1dMDG)IcbKa7&qETPT#Mp zt3CF3DLp#fo(ef$e+NJ{Z`92J_n#KA#nr#Frk0nK6BehBc0L*3w)D6hhyiJut3KR% zK1Y3Tuu=K5=sZ_(mvTVByM$D8ka*-?E+!y#J2W_7eZu@nS=9O+9zCdCrmSoC+aJb7 zDFPBAnQS_PxvGq&eSueh5ih1`(f>f|cLXr^REReckSBxs1X7D&x)>ySsaPFpwg%OE z9ep>&ZMwiwJvG*2oXW&~0CZ~0sOxc$h}IqI{MbYSz4?x4r$1dR1*bpxw+p7>a+&Bv z@Qf%B>Uf|IT2`+5Tn<2)oY&da^BGv4-}E66aC^&@!2^&uvz}v2H#>)QAFS*d2%q%_ z`_gqIvGf8?b=EhOv(9DQ8vF>M7$PyTi2#t()_sf=WZg zwc#R&$`suDfbqyNPz+R0w&*3c6*tNQQA1P+Q?c@WF2%R7a+XO;58}T{CYG{nnwjbi zR$>19KTeaIk?uf8v)e372r99S2-Ky2iabe2?rSG}!o{57)f;t)f^@H)4^EgYUF|U$p&-x;_!#&}$QhWLFPvVoK>UBK>d@o!XYJybRTWw1j8nYTMn9f-$@a|S(|jaYJI2_g+AIB{Yaq%g#o+|HlH{*?BYdNALZ8!H@aHdMcV9Y5z+hIxGmqe2{Q9ibO8#j=Cp;=Gcc3bNfelhB)4Zc_{o z4}Wo=$((19caMp1T2V(O1Z$ja4B9Y+SA`FL1!kbve;Vu%1a?l{d{tY4Wrr97O?ZF9 zTrh|8ua!}=d|XjP06h!+;Gra00`fFRIW@g_hgcika4ov5*0Qx1L``GSe6Q%qG@Ly0 zhW-AED%9X|5m`*wHLo_^4O`Z#6sMO<-S>Dchb<0s3IWH7)ZR*Id)R1HR@$W}^#VhvR;Ojr4cJ1@Y zbYTB|7_t8qbm`IdMD(iN=8gpWErKH)Y(=)akKw!{Nzf>yG_S=goP9(L4sxnJKYZ<9 zQhoW=gf>0=sCJ8~86QH(v#vJZbl_>S-=N`Z(@+&ElBuaed*_HirZ4Q{^zu z(ZQH9jn;bYKCbNpsw~Z1DN{JKR3)BA@__>ZWPbVnw)OP1g?EwP69zAJLwlV5I3yG; z@Jdx&K^WPG{cpsiL7^x4nVEOE{6^?+m=WHCTnkWo(zcBSXb04Nsd5bCycx9rSlqh% zV{2YCsO4JkMzsX@#cJE-WSMVi8i6CWWtF)bHX*#bUa1IO827OE|Iu{TVNrI^!@uc8 z8tD!dl$KOF1VK^-M5Lq}q;qMIlu){*8>G8Cl+LBQW65RTo9Fj_|6nin+T9Z~bLPbT znK|5|!ooIZHy6Sv%aM8x)AX&jh(92Z+{pQjR>ODqiISmxkoTva7&~BF+4f_}m`TQB z*d7uwhH$ph*s6zX?R&}v8sizPsp$&rz3WXzIY+Q&1xpTBbbak4^K%zR$ zsT!H0eZjAZHdUc7GT%f5YB%q^l=`{J7F2;L$LQHpB-2zF9&fqff*&QH1r zTFBzKGn`7!(>rYUsi;Hmlacuei0Ib3o|=p*t;fC_Y^`YO>u5l6z9V+g-3NuI&1Xb- zqhZVeqB}AK%_th!C&`zLex4a|H~T-uW@_{n?Sr?MwF&0Cr)|lUTEL`k#DAJl0M!^I zpC)FLfTssO;cHB)dw6NyA~abr97GY%jnJXj3f106q(3=->LMK^l8pqeC7%C0U-zeL z{|Z!r0Z*#RNMmu}sxSDp&p*FUH31{I6yT+Ir=-WVP_(TB?^x@z@OHm!4;;AiN366{ z^Bk3Hv%3iImr7x+yRNV=#wa5xaM<+Bm1X?<0(542VEK5~pWg;e-Exx}RiUitM3*wc z!xQWx%`1eV^qWcQgM#Kcw>LPue)?m*P+GPi0Fa3$I4IDmej8)E?5?7?)LHZ92LW(A zbraaavM67|$&n5s*f?V$SXKR48HH#*21S+AENdJK7XkOYy!}`bdjR*%7lduI(U=tH zqA4!Nn8Lr_7TG^Nq$rnyoA;*rgOOBzFdfT}i2ZPhd~y_neRlmJ-rMQ33q0?1YHchn z95?CZ>ytwZg`Bwkr$Pv3yM{uH;@m?lg#vTwM^Q-3yW0RV&-7O%*3*u~5t123-hGp8 zg-8o7Lohl-ASGeakIoFihT|CV+aJcmSBcRquqFQG^v7>0CGYo{p(`C!BBHGg^~{-Q00 z|D43p75qqZZ0o(TQz`4nk4Yih95IEh_r5X9Jze6yZTot?agky#J1G3G2L-wAQ406d z#e@W_ZvQBssvz^beP1WgLNTPS)egFs(#1BAuSTExu%ke4_c6DT{C?HNg6N^A#%&&f z!+HsBHeqtMNX0xXZO8oFGHFvy=dQHR}+j3gq$$kCtl{rdZ~0u&y>vqUUL z_aMudi{#CyP~O)g(%&NZxY68u>{We~IEes&+n+_1ByS2PkoSuB&+n*I#m4GxTNRuY z+eG$VH*BvkgHQ1A*Rbv$c?qIRzZ+%9N>3$%M11zM7n5iWmxM{#V9qTSR%BFI12nVy zy#rXHbP7+w31IjK@{GRl(@a?F%6QN=cp%zN$5ox9u0Aa}s#o+FhzPX5#=$wfkemut zh^Gqi43Usl8gxbVhEYEOLkY^|lF|qsA{&i;Io>&5U}J&q_ooV*JOi!upZzJek375_ zyI3aR-E7CbtML*$2e2O+PF1ZY9cIYw3-O}e9eO3ifu%IK5dc^Gq=^t&!p~#cPe_*@ zIVwGgn>|snwgb1OJyHRQCo1_w7PprlqCSXS$CJzl4qkR?4rAE;>fSiYEhw@o8uaf`FVqq=JZ4FfR3jsrTJdroud z@gh>(=DtPplv)sN6^txUQ;*L@)y1#Nh51cWE$2qwJUhxA5Ez1uv9u{siukSP<{}^B z5Pf65(7_X&^eSYsO8YsA070x&V+az-sE?zz0AN32d0Yw>(c3j{@oo_QX}TABQyju)9GIDCx8@W1^C$VKT!-bprU*1HuR( z!H4N~Y-Htf+mm^Z=q1rt9$d)8+~;dcX=`a6|8}9f_k2S_mqA%#TXe)AcmodyT7tPyF}Vb?;x zSx9vi5&y}xr(`~qfZ@uPcz1npAH~Q$pwmh4@r|-?!xLK*P!i8J&dSm7X!WUZm9&r- z%jyWLZGBjfMq9+Xv|;*-kMycZys04VoqMkodr|)^0PUKP^W?n)13fT|g?@&1-VpxN z7oHqp_Z_R#*OOa$nE>lFljkvl*({B_>NZns9Zlc6mpF&-^_bnXJ~*8wP@$nqrDBJu zmgbRAdQM`kjO~&uT(5-KA(W&p$j-*H|v9&D4ehaZknkf z>hw0ET}pH-N(pqL0MyVdn)f6*BlZ*o|Hdf%Q>Wi?%VgI7;gKEVBP>Omam8n_JhYxR zNogH@MWgtMu5hJDiBf3?8>nse@Yo*~;|I9{MNi*1 znd|18-^=VV#1?ev#uf?)XI()=(WMQdx6PL%plIUET|!l&A6 zrGD2#>E)_)W1TYIVNE7SD7qC*5g>hOCe*9O#8`OCICF;$PTiM2J7=_+hu(xdedR5x zBsolRr_Xbuo91y~#JB>8=I7POH+J64|3YbLqH|uYL~Wi^^K`IGkdCUZc-rzuT_GV- zcnaom`Rf@498TXEJdYbKBj*0`vO=(lwfq>UqOVz2aA+U%p5YvjQU!FLUqU)?qBZs* zBc^=hrzm3~!Dp{fY}rRH9W+4*F;lUR>ArO*t90;f_&VBXWXA40o%|=2FQ0#gbyg5B zek2O_1iCmRg`~xC>(29Eaf(CuuL<35P=BttIe|uAYOr=M?g9r=MoY=K&GE6SY52w2=ZS0 zQTEIAJn2ON)QF0R*qgfN-!;WJ%>;LYXF!Mudk|F&3lKi4d0gcw4|RjH^; zST~~it%pg5!PM>#fTzdk;L;?z$r)f@qfB6O3D`SxrueU~ti{NcU$T*Hh*6_nqn*z) zIlV6n!&PLNH5GCC_}_mK?k}W*|HJ;0K64O|FWM>#v~cR*OfGzFZt$7y+B6~X-4#&# z6D2U$m7A6BE{+p2U1E1$mG!k<-+QX~lWOT;JnE|qupTVJAEisfv`ueA=K8SK?p4t@ z1K$31C(e4sIN^&O1z!EVT;N~5c+N!JCD*Gm;Q9b6S!u5y(eDP7)q}ItMFT&`x4r_{ zhf@V(g7=e%%OAcrX1jMmOqeW$M;|XDRTkT0jem+cu~DUpxe^sFA31;7j|Drs!V8xq z^tXq>=#pLQLnKmy2_9jcqU77GC3*)Y1z>bNbBl|aDY8`*8>o4+qha0Kr|S7qOSogdZa1RCKlHwmAMDwgdfIH1gr zg0QS1?d+C_dk;rq*d`!$^fmifQq8fm5cBk{v)2_{AM=ecl;6^>fPH} zp!W&-%E#>jJh#-rfgPr^&5)=hJ~uoMdd1drfxkmnQPFodm+p(ii-{B#QcM$K8c%k2 zP2D6_EOyTDnvaZOlY8bm)_S05>;e^3OON~@Z!SC8(ia^%DL3GYSsO38^DQ9&LyQWvEM5>4WSia11iw>sw@7hhMjB`G`$o{|`WCZ$t5HA1PPG zz!;7Wco-`j|ffDV$A4yq#q(Zv~Q5iV6WnA%XwV%lVwXF_dF_ zS#<6!=poo07h|ymA{AfN4y(ZA5u!u?)R^0gr@QsvzSyHlo~{p1_9EP{jd)U|+Y62{ z{U^&+$Vq(-iILLQrQV=9O#I;^i4%IrUPA%4yGNao_egcq`fupJWD}>E^-FE)1IDVr zrbtNw1%eNN9%fZAQG)*iEjVGj=Vi?xZ1#*N_p-n$`FbwrES-WRG$$HUe9y!d-D%@L zq?tq=9r4X&mwei3s6MThCd0=2mtgqoH#-J5AXINLov68=H_g&a4`QAZSP@JNAM=GB z2e|{Pv$p;1erBW~B=)hE4?I5$Jr%?$9%XgK1ExN5inrMO6NAO+(fPVCY@V1j2%1NI zGt?~)%}9iFiM;f$x{l&<1J)_U1#c-n{a6cBfw^kl(^1CK^!8!3$;n*davnKpadBwd z9apTAEYf{TuGqCQVjGU5hbV4=Y@LVNh}B^fqtQ**`51_Tf_S3<`BLckhqKE02qpRX z(Ito1K^gc3xeNsr+{8-mIz|*Aj7(o0 zWyQ#3mry6cd|SkhACLR-80ud>Fr1+0n#$K}>ccXWD4ph^bLIw7?wU6{!TVkJY z*`n*lx6TJ%zenjdWMS7HjW(QRLTaxP1+jTJostHYs1YTaNMe8l&rM9ge6n*RSIpk; zS{<_)N?OhLt*s+@bxQflid=QW5^X0jL?mEV;;1zd_;D>S^^ci02IB|eZ}JSAO}1=V z5{$X$g=q6^c~mIv-x#YlF#fTuiKSJf6M?YwUzRfoCG_!(H?*?Fl$YjiUKf?^(yS4d z`sd=nXqc^$Tf#qU>)VE;%htxzi}XZJVF{eh)K5ZHME%-2n{f4Aie^mb~o?TXEMkz)Pf_@G{+lv2Jpoe?d_ z_>}mxmY#g^{x7QFkqprfA?NIQ5Z)yGMgowTjIPHxQfE$g>cdv#-)^JX9C2Eg@JaH0 zyqarvize*xNp_L|LNHWI3F2I5q`bNb#$GeT=tfdsjkm+fZ3g16Z;npO{cnC5PT72U z?CLB@F~5QqO)O$%z@7C@Caj5P#?7+#$D}yxqGwHdEiJB$L6XyDg0s`~}ym^b5*ST{|K);Tl>vwNJ$Z5A2cAZR%oYc?}^UnG=ymXd= z=w8~x)@&|~c$b07bZJ5S`}?^AHLfMSN3vqaek}t-e%8@&74r3u9z$d*OuwR=CDbKsTxQUoc@#hD z6Q+3hF%nsGIsY;92`<{zY)ew1FlY`YJ8XVg(;NTIKUIMujW%#r!A*|g)c9V<{rfH9 za64LB*#}7Za#jj&0Rr(lZr)uvZSqz*jaer^*rvDM-q*Ny^n+eW-B$ygBJ>zp$qdRt zV7PjK1&Vcy-NvH)?(&@s`OwHNs@dx;4opY1_KRggpS^ypR%>-@GzJysuh%~a+B2A+ zE{JS=WTwXjfn^7k6tP!+!uNurAx0a zHN|-KoZCyy;c`}_|Ba%mP2>z^VC2l6&qGUsq4`wAj*s}sPmpG~G6L5bweQ5f4q2gx zqR1*GHJQAZJn}uewRzOv2{g4#@7eCcetsy!50Ow@e+aNZpVx!=7vK#+%Js2;wAne~ zRuI$D_@JF{ej4G6&!`Mw&Ek!EFnMMuyaN%!KWeK16_FtD?5*aj5g=hKczYg$!ed?Q zNd661S0@ZZ)doaB4Q^S;p8ScN{l&UYfx5%USZ-mfI)ch7G<>%hYND}v)%l=cuFwFHnl=DZCgZniNs6ZN6fM4*w#M`taZxY~KfN)tHJlpinouAMWoubnhAk44ycdGWq zV`4b}4!h%6L`uiqr@motAJhCCBJz8Oey*m|%OUYkK=9UF(0URPFmLetLznfD9M-5O0B1>i*SD^y|{Sy~YGO z;_os?W7(k zdal_t5{KgjwV?+UfQboYxG7{f-kjmMf9!g>I+#FnA~B{a&Cm9 z%cD#Q!5g?hjs=tizs{4tJ}=Da3t3zr69PYWM+N|&H-QB87Y)5_@30=w!kFG{TzMJp#ra!;;n8+5@TfhimWJsVbt%SCy1YEB?dTQ{AyLsIh z*|fN+&x0R^H2TDIT0=g9a<{L?pa^!@arPI|8eun0+ES{i_J###F+1|;x`(rxSPTh0 z9g>gA-ypx?EH|yW7v24P$fc3;+UZ4^n1E_wR9oKGmgC90n%sC0+! z#p^KljJZJd$qxW`%NF%&nzv-18pjIr&km#AjMj>hN?Z_uC{^f1ZHH~iFW9p3#` z3}}lxA8H0kU1~nOYO!+G)DW@lQYL!7j|6c;-7&OYrTQoYpi=VKnG;rY9>C??uyt04 z*Y85K04)2Pm*mgr~QQE=A^siQDyEaKt$`vOO=M6r>vTSFgPlm{p`H{KeAV(+oy4UKBa@g=$$ z?coF=nMn1gI42@gXB&n+Og@n9vn77*-s)$><~x6c1G2DOyFvE*o@b`Qi$w$Rz3D43mW(3UK0 zqxR%{IMk{8!`FY6m71X<_&G)bfJDrbrqa8|K4cUX1Gp-lMPCkix!I4&zOV7=>2M2I zMHn&C^)scCaHN9+nkyCA#b8*DFgba9i0wl+^f!(aJe(&Nw|Vec08XTggub-9EBF%0s=`vTOD6#guzEECq~0_DyQg-4!8hc#C| z`K4tKJfaWTtvuQ4ic-U_({4-JV0GL4ymg()JB5XR*DAQH@?z{mX|s{Dq6c2Tnz%ho zgo76o-JnNE>Q_aVc?)bv+13VDQvv(eG;aWT&~QGG%>Cn12bxcRK4)H@lv86+K#ts` ztl2bN{a7MD>#6{sb&lf0wJq53voukQP*A zR+Ln=U>9hj%a6E3$<(=#gTk2TeDqd753CQfM>QTmY$Rt&19{diZS^pi1TluaOB(Wu z34~lljlcb|s(@HK>HbKal={ViWuBKdwBZ;omnyT-VsuCj>*~-t<>Kje5Jzwzk!zbxbzU zW+AzRHSlMAgUgdR*qmbN$k&uW|!`47?d?H82ar0q<_WJ3RZCCc|FSv05+1 zCXTyDBKSo9#f@TgeQc?_XZ}zmhL5kKO+AR8$`F>hFUXtHqw>*yDN-bV@1+a!#-Q6y zom@@jh+WO18M%Cs8EwE6={s9nRSIS)9bPNWAGt%SsKa#4)ZT_Ogz?m6hpV}NBs^%q z3whTiKXG?T8_@Lx)gl}x1V?JTc-2pvhV=E|6T)Yd@%BD4*3>r|%mR$&iqB;Dh-u~8 zLmHV34sHgQFzchV`x=*qtETL&ogsfQT`;r;Jh}CyNtffa;^wI z`eqVJzJly*r4nEI^@43LcGgalzXS!dmrXRbKOuie8KP<7{7qeG3ORThKh! z=CHY?*8JEXZ@L~z2Q{te;pVVHv??!LoX6oggP#T1OOwT$2^*aNrb)OD%%iXrbveC{QXu9qGYSYDC!V#Ly@qn5DGdWn)vtg4OTU@siNdyYd^z`dNpnes$O$2sxObyx#{S8x z{$$L;2PvQ5;GA52knrrCzjF^)GE`Mh81Cohq3>kLa1ySk(KzdFvgnrs9MfCoDc?m^ ze_+Aq$G=))rXnxK*DtoZwsAKebQ#y2LWuAdjaV(yrca`&B=Y7;Ocx0x?FHHJO=DBv z)WKZ6&!{)atHa%pS058wnoAF-RC*^C?+Z$Iyj**gDXr_(G_)%yNjFH@^!VsGrumvc zy@DYl?O`oFzqIz9=y7{2&T4iiHxH<-#4vZNs@slK_H9q3lrP~fV6TCZvn%I;oF$TWWxrJFtFU-Y3hdUDap?|wS z^m3*P8tiwTaZ-9*HVK?ntj+1V{*hf@x7<&;ov+4umJ6y<`&jrP|LfL5*zTsWOsY$2 z@06^=wW`vzp7#{V_(`*=Zs*f|J!AFjX*xmMLp?RMsTl%8Zp*(+napZf)ajq(GTDwY zC55Gp?zk*jvLDUv{&MPibE^I&xRu#s+8R!QF7u3Wq!%|X8#Sr46<4S1YkF8da==1R zyG{NI^(LGDO#c99QyTHX_{Lf7BHiG;>R0o{UR3hX)86XDDB5_bN2CQ45)wlgK6&DbG@GH8GkRKK_OegMv50%_zSiot@Y0E=RJK56^Rd>_&ju*vF9!;bDCc5tBhEx zkS@!=J&EN?h*Er2W&@{gT6_74I=`^;PP~=Bfk&7;Iyc8r=cqeUJk13S_ocHUx(`dT zX{i{R=4#e?hYOHVeQ~Hj)X&xP!O~Q5p&VZS9T+p>ENmJ3^hbDrbw&ak;?Wr!t*~?1 zT370Jb)CH@h@`a*jGzvc?1}u|tj)FaORLdpKg&%k>a+*jkUp(fy)96$EV(5v)n}^2 z%WSownm}o&O2O#8?EE*6Ei^!Jd;(N_MrKLQE1igO*FenW7Np8Fr@w9~*UZd6ktcz% z+@&_~*rwGg`qb1j{8kd+_?dTD>WmNnrr$}ieb=CWMdO9g!L1xemu(XHv>p!}wkbL* zQgyFtcLd$6Gajn?5O3{Gvo|HicQQ!v9ZFl}*e%$z!0`n8mxYogV8_QP1xGU5^T~!n z@PMnAvH;K$U|3$UK`t#j5#ePhvp6HjrvpuN+25VB)~I(|vIAV{XIa#2tgfRv9r5NJ zb@qmDXR3-zS&mae`93G7mq6*Ez1?9dJLw8P1%JiI!@AhuzH{Lh6|by(5mjOo;od@& zrZCrinO_0RDDPg+?)i=ivn+b$Zj?Gs$K1X4;}5c#plE1cQfXao#X3Bs@vG;lx^q<; zpL?U!A#C|Ki)y$sNSVe3`5T`mG;eyCRu{BTR`=8D%}u#o=y+4z5`_n%iN`PxTNJBI z`*y4g&oVu^?==)_Xx!nzAMC?IOa*&8f3A(YG(V<+^kC&VFNceuQ2d~C%<5LDn?vpr zzwO8bPS5ZwFRZ1mfnSvI7u}GdFLmYG%x#IRk&m74Xd}XoWyVuBkin)IS{hML%FnXY ztWLJL8m<}*=@T#MDqX1i-vZ~o{oBDjpK9Tm-^n8qt5E?yr3Hvj)G-##_t(XiZhVUu z1qomrpH=so5USzW)IU!x%fVK>9T8-ZH?AHDehvP#MQ=p%gzr**8#fVSqd}5zH7N`+ zC{4w;-(eH347G(ExshEsQM$o0hFBW_2Tq+BLb_+~HTn6@ z{dZK!WrI^kFvZU)Z~-k)erdRyD+uV|{T8x!76F!%*Qk{BCLNLQgvWwt%^n7menfWN zS``8&dfy~pqNFs)65-*q_uB)m9Gp5=K|WN}WngBls|KB&d2{wjirofxEr1TMQLiMq z(Xr>aQSJL<6kM<&$Ptd~jh?nS(W$-$9ICm`-an^!D6)5RjevK3lcqh;ufq{-5>{5` zbf;49&Il#;aTmlFzjC_U>zvswLl&wJ?^g=qyv2_au(X4>UTcv@G&_j^G`^p4>FmGb z132Ibwg9T{(=>|o{BKYBSb;}yYC_33n$JDjeTQhk|%CUkskt|@ED@4^GP`g)*z$Xs!l!t0>5xVHY24|o}_Pn3LiDy@O{0uc zS~YdgJ6X%&>8xZ!Y4tsR7q`r+VN;u?dq|uk56(TBdMa}A@H7EZ;DtStK(Utv)3Pq| z6&DTZquU6*k1m#-y=HP;G_b^g<5J`TC&QbSuxeor_-%{Dm$e-UxUZe;B0(DZRXWt; z8Cg~E)r|f4GjOGX5P4i~;}umF(QLhxDTJ4(xaRY*uqj&8s?3O~5p}resNL=vacwf1 zCc903`uxMD@1J_()wzU9=Z+t;Skh|_aGT7K@*bqu3h;C2aXUPl_E?^k z2dlk@S>8+5{_d0}^$7}AvT!Kr5(&6< zE)-Q1wM%GbvyLPL8JwHqsnmup+okyVQhfJKDf78a?b1$8`gPfv|Akq^W^NdN`~ZDv zuBosEwHLS|zF}{0WwrDPTgG!JbB1r9Ik4QS8J2!&&ptDSA)TH7Xqe9$9=royl-C(J zr{=GB2A3fC03q^NI{kF(Ugf(&;|=2`!>R^?ZCzw)7__4!_i4woOn%&KgtvG&W$ z!`yKg_hrx0j<9}Y3ObN`J-u)|fWd28qn%V!{YVb2Z_4*quJz*I&!m=jQNso}pfU3e zFCbEj(S*FmJEKg+uitZCcYCMX>(ifnrI4*%Np%@XthdtKT6iZsG+@JX&^n$kB-d2e zKGHgJ)szUmJvb`1`g{_D;N9{_V^4ThwWtd#=}p(!6E{tMsyrnq9$$oPiKs}sNT0T? zB@6;xkJcV%<*`Wn$22l){GjQ}*(m&Skqe3Q(9{$6$MX?LByH_l^~=<#?jXkQ}n{UHfH4Q5g?F zJtf8;ZHnyNbGd`gK!7VOF;r?VW+oK8^Wvi^m&l+HUhK`uBkti=8>cB3my$-P>jHDR z7jbaoX#ItyV3lC21h1=ZfD0&rqp~~rL{2fX(cr-0v0xH(JnIjXNrkrMtWDVW*IKl% zfYRAwE!-*H=&aN0sGGLu@f5{pEhm-3s{ei`ai^KNkEbFmm~x`eIbz<()h*vcL`G@)V_x;k&!qO*0^e>GN(aKrO8PB76v>~)?? zoF2AsyrJpkp0Vz$i+oX;ZuRMzh|T^jj6i@=V?jum*4uOGgpvS5W&Z-^e)r1Givlax zyu~Bu;C@T+()#gdB%Wa8ensm6nC5n7PaJUV_Eh=AVt0Q~+xj7Q?4Bws^lBZzH!j-iB`_dB^MlEk2Eni&$#lE~K)ybwReAtb;K7 zUu7*4@To>pjMT&T6gQ1oC+pCNM3Ru*f-(H|^0 zeCy=MS@A*+9w|+WsQ&_B_+1Dubtzl*j(j;~EM0?fxouD1JJ2E3P84X8a<5C9n=dz8 ztVMS_rEclG<)z2@Tu>HoTh->FpP$8^=w$Sa;nmU~-Dbl-19n;#G-)DZ=)l##pfpWX zIQ6J4=Mx-j3Km?ay@1-tg}F6?QfunnIfxRa_2Alw4BDdL%>+z`y%@!cBFHAm1WOnj zQE~G;A@}+D3ow_wL9t$`!6<;Ee#Fi3!DDNM~f<2 zwgIK<+&x(z8>NXL7u*-pbDyHJG@cYqC^roPKhi&-+jBj*d#QnZ=t)Y=?R$}{Tk5*r zT4brp%gA!h-hpbMoDQcaq!>C2ubqYpCLLj?LlP&U0QVGMppuVqUe%f2rl!i-6Fo$4 z81o3NmHPHiA$Yg`zl4sbrEe^SSs{63rlHCvl%s;$Gt=}!`%#s1P-I|iJQR&f(dtuq{>w z25qEUsz-`-nP=+`YdE)ZEqwXI-QPRyrB>d)qt~p(_iS<)a6`TQi}X~qYRbV^kGi>W z!!A51?I)qm3z3-*GC%WzqBGO-^^J}!ks^}RG7S{!}zcKz%Vfb|+(M-5ldZ6fzp**Nw5lgH5fZi1K*^8#f z+*ZGbOCy=TrPrr=&U|OKKz*smoYLFRLT__H-}s1Wmjd!0Nfh`&r*ZhSq1q?Hdrci# z>Cn1uSTwWJym;0gQ|{w|=%v=Z&>M?6sxkRZ*o#Y$#a;W2UY{Z?V`OI}_-B zkzQF~4SMXrL*rk`8g#(r$8ei486Wrs!~PZ_SD^PW0`4Cv*GHM6R?g^ma<3&2`1BE! z!NjN)URb<;!*xe2QK_2KLaLOK8uvT%+imVl1`O)zil{-rF^2O%SU~va#7yn{xtleX(6D0GMZi7>w(&r-={3*Dyq(89+H3_ zw%sucF_>>1E9x0p&(>^S)jT>X)G?;zmQ%jzqq*6TQugtFER10uaKT?Q^um#to2%*m z-oK=if3`nZ=vfB`$(G@Q0=5?dFW#uN z4tusOHmYi)=o-dkb+_D%*Xk=&rc%>O*{2GbC#tw0keZz#!zZ=+*5tnb&o3Eyu`ac!bFlY?JdVsm+16`PU{{`a z_hwByY^?pBDg7tAV(2jA_pk~%r4?-QzLXqAG}TmxtOc-g7(Js8H6Tf)u8bv+&$nEA zwl78`hRU?vgsK~beD}KBvo#X(5qV2#PlI$MmE+`lBuAIU!lihcAIos@wxu;)smqw6 z=XtLA{ZsG3)!^y1wlKVg&(x_@(t^6ZdcUAX_=rj?az9qgPy=+@_Ta2$4C!Y%B3cHS zEXeow^J@(9Q0N4@Ov=2(Pg$1=DHdC|kOjE>!8t~WxZfQD+y|cb)R*NuTRL357 zaw}8Zu!uNO(lVnSvbLSu$b~&@1FqabJASt}#n20h zGPnlUsCjGt458_D-pDu~hOaEU<)*WmxkduGzDDzf+S%Pv9aa_mopi? zSWyR-6ur6>E{QVcAJ|pCvJ0%dGLFB*6eS9J>e$A396oq8fyjvB!-zkjzV#Lz^ zv8_mw$zp!6^vs{HuOpHjXIu-W-Z=265)X9T^hWrlPnf@Y7kFl;yNVLeC>KO|pZbq( zSGM~`h1J!T7^HB2?BbD(!>^p@VB%a-L-pJC9b$RfW$*NCxBvM_tMESd05`4<{4tZ! zk;^PpocZv8FqgUAkUFGpRqjff+5T!(bE~NQz@t_-3**&Mp#0%!zMukPRrX6r-SFR| zU5>@gnaA}i5b9$Kcsk9tD?>_1olexV%qI{(h7k15G%3b;=6+YDPd%~{PrYt?Um0jm zAH3*KApHEs4AsJWtmY}06Yq=t69|)T==D91A4AuB+*H`_sIHS;Pg_ukgcS(Ht|!sF z*vM^;(pi~y=QH|Mk*&X^D;@pQl4Lwo&kC~BW8yryakGYYRiJ{Gm$g&48VlAe95x$`k5O2iOE}ypXNP+ty&C zmx<7<_1ggVpUhlydCJ26*8x6Ph9gUi9}ip~ z;|ceaww!Ff+UNayk%IV??AiI}dF7sv@W?t_6l^^lDNoS6H4$!^$o{JRp6dmr3B}x4 zS&GPk;jJmG-sA?LlZPZ;q>#Vd6BjIPIvt205WnNb7vAR{HEuy1*h15k^N>T?k7Z7t zi*?77r!$27W1M=$5Sn8@LO9Ei1lASCZ)W$h|t)nZa$CZKOV^WxOv&k)<+ zLV5?zlX`lG=_Sv>Lb=1{TVhIPhSF34!{;7|Yw_1q`>+$S!~I?=>2;nhm!|LA5cdcl zLMIw`THBG)1K9WFBy-+hNB45Q9Pm+@N#7B}%1@DUl;tC%(=G67=_M!n&5Mm>1BGYEx}=ZSH1L5PXcn_ z{c6>;IATXdoV*%&Ft0ZO8;v1A!^CY9K580YyQs0Auj}G^V}>3u#|(UoqIboIbdGt_ z6RlZ6>iMVK+Nq?d>`F1~(w(k*M)})7Apl>4Su{WXK18ehj`g=c*fMwclkVcX*2ac- z@7nwXT&>;|gZ&{7aqAY?JH{_AXV%cV!_E2o<-5BwXww0&E)V5{kY2#Swa)hr@M*S> zwEGU8IMlIU_`jFn^MBM2f-7*KB>LjDHtevEl<9VQCsx-S#gjHcBp`nM*XsZduF7gZ zsYN%aOjK;&9q0*L_q@lO;mF1(aVxGrDVfY8+epFpPKA=LM$wDwezpQ!kD4#VOv{>M z7_z|F&^gNvou<`!@Y>H7rQzZJSYR+>BNgM#)&?=iY0dJ9IU?RH)XW8C2#RJQA9 zf@gwusg?aCBPc{}DY=)zbZ2?t*N=gx{kzK}p7< z$!<(e4c{=~l5((|~*crWVOZI7!5X&zY2HayaBFk88y@y4xNAfxDh?R(XT_(r%# zo+Xu71^anH{@cY`TbQpocutc$%XL}odTXDD(uh*M3B9_wLh_`h_orkBFjk!r07aUn zMQl9?lgRtcwObz8l?2*{&PqCo4U<7^TI55}jP)`Txx&-jn7v}syE-QzL?a}1-Wbo+g8MP>|Y zsr$ZF^tw1ilfv$kSm3SWd;BUh2V~x5*nXEJz(KdPj#<@ZI!F=n{Ga_b&T$maXs|c<4V74_6Om4%rcf1|bSWghv{2)zDQTxL- zdcCOzY5;z?n7l_K@(m{X0U?`95_;x}R@u7{p+wFv;@*r6#Y-HJSTW*@rA^(k=Dok-o-c; z<=)Ccyy=jO&8X6(8IRsKKk-#U@;ieVxRP4eOj z<0(VaYkwx{<*GSOx;p*!q=kfcM0j>Uf*P#6a4kc<(dB5#X02a_uO$x@aj-V;n#G}l zV6`@_P^4FjDKc#;&l`H3`)<^ARnccu)pa_W;Mb(fRM=V(dHCllv|p3ci9bSkTjqJN z0EcF-ly^GeRg}sP#7_Ex@h7~tS?N*QN;B_Nh%~Mw}iog=pJc{H@i|5@}Nmp{`Q~EjD(@LAefO`|e9${fzwU zRJa!|gOH0it5|p5)#++Hah#88BU-8Zoga1K;9N`ab7p9ghn|-DtX-$I3*WI#0PM54 zi@BRy;gL@D=wXmGYg4oR`Iu-J=1GWXc8dWiuxX~vr?r3A(D_oDZzNUq6*U~yq_u?Rju=e08L)#4&+*ytsL zPr$xbKb+)tZ|BTz@w!HfR;aYFsSv(Yv8N&4@OuxNQY5HrK9&GkW3bvrAO5)lEeXz( zaZy%W*l-nnyXnw;V?{Y?ZBmxnkG1rv$06Azd5gfsTUR%YsvOzoi_f5qb((*>59VOp zR@bS{25k%HQ*)!(WTeA0W4AH4{c6kCV_;nR8;#)VFfUDYUG>4DLx*Sdz%p#UEcNBZ ze)>NAGmHF3>ckBc@}D)LFB69#S{2}8ChzK`NAFk5Qc{fDTkT&hEtV6STOM0m@S`U~LvuuE$ zok&ABZTEIRml6$Sf0O^FePpZ0VlWMY=3_Z>-3`+4wwIh@Exd3lx@>wrZLF&k^4zJm z4pk-T`rOPWP2)+4jJ@v|_Pr*aHpMl7^MW~|3h7gdJd@@frMH1$ZWMexq;IP|tm-|O zEc<Zv3WoU?9{tmCoJmMRmNU6{ax!PylJ%q?>#6*RdIG%-I-u68yAy0 z&2;-LHpL*(CG)%EhNS0?dZKDt+_%Zfq5I8eXJvE^fiVQ=YD_W;5(`t@w)mj<3&KnH zD0QaQ(*7T7Zvhu&*Y%Cgz{mi?Fn|b14UIu79YaV6Qi_PQfEaW)LkI)XAQ&_%A}Izb z-AE`>(%sz*arSU~zxVTe?>XQ1yyqN$I?i0NW95JCwXS{LNY8HH_J<6)*H%0Td-tT^ zQQ6MDOS)et7PP?&zCNf$rD^j{ z8e#CuMT>VjmUapAo(+52yQ{u)Dc1w>Q35@#>GCn_40vh?Uo%7T&}zZ*fccyHXm?K8 zV|ew6>XoI{f&lYAgRz}GZL1|5Z9B{Dln+Y=?-Czbdg@zc)_LmH!?KI7eSh7Z^Pwoc zD1)GEL^s0Ig?MtN_n=hG@4@k6Ja?bT>z^1x%Q9bNwQLY*8D) z!l>^@&WB6gZ6d7vt3N`%dFtk?f}$LY*^!=^yj!+;skn{g*GdSB7X6fUk^mLHwx4|l z*0<~M%<>iW{p|AVB@+bm=}tlS(#i4GfI$CA@)ytK#$E>odO4)xI0n>%AVjey}5e>Z)bwN4pM{{-ZAZtmZF=lbOsC79_Y4h@A`aI-XHyKMtwT^XotPuFu22Bqwr4 z+o)$zH1UG0#22aOmt-I6Gcmy_n1hJ;qF7vtOt(_A9{)~F%mP&{aKv3bXJ_ZTmX?;O zOj7P>MfbxG(+9z%7Q4HB5uiLo0{jW8C&E0R`E?Or6_p}NtMSOVis#zS(98SB_Jvb= zxJyReIPbib4o%)RiL^)krckiXYcW1lDK$B|UHjtICjrFdPqzv}NW#;NBRIv>f=sdY zeFsOZxN**h!_D|Wxa5lF+pP{S`_}a+=@U9~3u<$zNy33CS+AqPgo7<+?^nL`uVaMB z$MsGc8Qg5nl*MMi2bR(C3Iu2y-V=*JCNKqCE1G7 zFVp_x^FKs)dbN9T)ir^G9-@^{l;vk$*$dqAb!t}O43bYqg1={OLx?`VS|!eYh`V6$ z;9JFq%;VxGwBO4ge$S=Jjz9jz=PmW|Ls4RMhb$yKxBNY{>*o`Lm77u7<>GNix77%d zQv!7OTAP7qnoy$xdF3W%l$YfJsH79$HA}m;Uj1xRz+k59$^~g;c;>d~NiUIWZB5C9 zhLn6>IS&59t9AjD{AgKC%?wTXp1AQVgj_WmjQiQvOIRIyeY1qc z@AdbDb*m`ma{B78h=)zj=Pd&fW2R56hMS+)<;v~d^Eew0AE+N2jV}-w{0Bm+LsqCX2#8eeKI~h6Ma57Hs z?Kh;!Wn;ZRzwt@g&rbL%IUM0?U$s33a{hS~2DnGNQB|9-QzQJyFKA%ijr%|f#VFiA zpX5i@qQWl-+ce;ds;sZE!e^MJ=p5rimho&!IHgu#2_)_>}ode zC)Wv?3ewCKxF*|WNKPi9RIG_@Ri@iI0pR#?57@41^jRmwbnnh4I>L)&y$F<6+0-6N z&Jv*U?D#?_?^W=4w&3I>hwmt*E1$gbvY*%D?fW*+dZmI)OrfNi!Z^TU9^3K9qtM?qdS6{ z?j*Y*z`lYvcdKsuQ-35pIs47f1Y#knBE__nYkRM#;!F0U{praWjn*n>?<+5)oyZ}e z;6uyb+%R$cx%XTLCO@i+mTfW-mk`=sgl~MGV z!FKG+hR#Y5v6_2mti%}+A#k{sYXM=pVr~{>M$Pe>; z6YV?iMsKHFnw20S$K9k4)*kLH`kK!FIC}Z;Na!1=L}2P1^joUR8gLsCH~m%OkOhqW z_`D5od!qD!(1{QrLG_cV2m`9s*ON0h2{1BZG)DrYXc56ScHijHE=zOT_DRaY)!k2K z%eSbZ&N+mWZwfwIChXcZwc?9x2JgMJ(n-Ybqm7WhpSScTH5MCaXDF(KE*HS2&lo!jR-4$E8k zZ0ym|xY!wp0FvD))u;b=)ayVqx*qUE(ad*O$Xwu3W_V6&iD`z9cuFSA(A=lF`zzEZ z;`+B`g%h2{Er#ZM5}s~@6mW~p&+FXW^vZW7*M%^o7St4XqH;Q=lw={*3^T^dgp9Ae zQV9wx-|h<)BTP#@jH8sf&WAm!e9LQnFLsgch{DW#rJ3ZjrlsG1$m*gt*VWt7e zj`mK$JYt=+0D);uv{zbTWl}B%G|(`#@ zgJaw&+xTwoYv;%RDr^!?auYmd1oF)HSjdPVQiB_tMA~thW$Rq7N~!9cY?2feab7-r z$Jv8kBQM_VuY}-67Iy|H>|ZwTNjG}&OFxOYR{!2PFYfDWLh~b=3&H85_KktPEIFwQ z>%$-go{w055JInaxG6$Dih%Hst(fg6fP@c;0{LW6Kh^V&0}aKaKHikPN`|WW@g}hC z;Bsdov^3Q1dPKEXgExPoA(L6s2=4=z<*#=c1CDJYm1LKiDs5ANAA6@H3f>u3M@5O= zrKFULLz*e69Zob4^s07xV-{`q&Ni|L)0xG=t&jBhq!=fo=)*%aA4c3p$i2rTv{P3ZH$=yR=x4J~4b|#>2d> zF|-y;=sd%`8C~!;d4&`SgqaXL{P0xDba#|+fD%G6ITZ&rm02r#^yrjtRP74r%?hT6E{&XVa z{t2X@ds{zv37B<~sUHnD)UK{N=bR`WAGy(0?F*~P_eV*4N!P@|!`ZoxX*G-y5Re(R zO}=03VUN$gGdA2IZV!%8dmnzSy+YGuTwAXt|3rx{%YdOhF^C11dn~Chd!FCz5Ll{_ zgW`GSCjlt7nkPjncTzS^hU z=t(QCg{pxdN@)XS-c(-_lHOLocu6>l5(OaD`L1gurd=Jp3`BXgf^E@)1WlpMl*A3{ zAGwxeZ*)yDtipmm`A%$eqzNc8k*FerB!W~g9oil~TzoGqxz@|Y5$W zZ8hALi9Scrsl0xkp}`Ts6Z}K= zgW(mhkRh`KUPVK#@jH%aCx}1|J*9RRMt@Xo>U6E}2f6vm{BgWEfcC?89Do>1Rhkz+ zaUWNgfy84l6HN9!liU;M!`~Qf=L$Lpy7UHKo$xq1YOvqF!ne_WIrf~p3%Zs=c!??c zeR7wWvI*zB7y|6!Rjy?@x>>Rvfg+aY*x`U-hUSP8OieR6?r!*-nIM|EF7$Iemy4rt zt^71a`sBNG)0C1#p$8LW>&0LVqP)G99G6E+b_4x>7^)}jD;G6RM)=ymAFleuc|e&I zHeb=OzpMQ6VrtX(ReUnHNk3%?>`62^iYUlQ1qkqowvvwGH-Z&)nL-0I#jd`7p&Z~U z?<83^`bgol$y!40dyoc@w!l$dh&2g{H{oBWZBv^f-g9G+uo(3u&GNm4bOT4ta?_Tl zvOXf;MfapOf{Nj}&2XqmYsw5Ono+>?V_ z&Y63M64~In-7XORxcZ3FS8=`iL2IJ;p~=h;cZJsSUX&9eNGv}iL_Ec#eSmGFm-lrXtHv#LC{Id)O#6xTQr*=3S9CzR5a3cwmdzV@^13S5DmAplMx8k;I zpmZn)*m7&%Uc>kvu>gbw$0!@R#&aGl{m{X}h*HbFL*$qfa&q;W) zuUI6FuD9Esgk8QPh}JA(B@S3?@?an`2XADZO~J;(VndKJ*+yKWBCp(NNS6%T_AUuw9G5*qma^n?Uf3~ zi^<<-TPn6HeAD1obu2X;Fdq36uT)-Ks4yR%uQ!qn07ke;6>>tYpE07u=BOAATt5W+ ziX$P?EdUipX+;pwK05aN1q34Uh_miVeV`K`;KN^<(GrP?CMUnl>w9}p`2+VfD9s?L zjle(L0YT0L5JV8O5eJN&vb&wX|}DEAAz)FvwK}eR$LTsMG97 zzA(3?v~T%q=ddyV*}F6G9VdPLGMk>uL5%ehdmhn*ej(l(ByMT2pu@c)$?9_^eDRp* zXB#9~t4m5EGX^WQJ~nZiyyo2MFF}qxhjH|UjPz>JOe|;mM99Tku7_K#&Lft>)Iz5} z9~@?=qG9uf>T&{0ZNc;2Idfw>DU9{vQ%-E~e1vDUF21ZF$Z@>#Ym4$u(bx{Z_3Y&v z9)GoKSY#pe7*gzKCV8UW8pk9n%sN@>-QVFCzhTjoc;iLK)27jQTu6syqIm0?7jHK! zmPIoJ_UDRhXNL0+>}M_eV4_w^po8@pI(2r|OppJGFEBfFQr*il?WoXLW4 z#`>0~h~p#Fr=rszt0!G$M*i>i&YAS=HEzvEyoY`#QR8B`oF)2-y4Gzku)0;`j)t9L zxj8JTesBKyywWeoOKRb`?t*s=!rUA4X`hPlUw^F7L0K;dR)BEnPga(R)92?jth+Z7i_72lr_o@ZCNoP*Fuxm1%9kN}|O?i6v zbV#~O*UHNtnTX8wxIJeYl2Vi?`KH&xIx1K*SaUg;CnT+kTmu0rTmUJnB}@z|$A(qI zNH2F61S+pztZZG^pB;6-c5+B!W@dT7NoUbym3-p7x+giGt6l{QT-wuFTL`*d`k3YI zrp-xKM&Rp^8wg*VLQvp0Z+e7Wq*@9>&W|C9kq0V=S9-dgAB`;zuC-si%@ijKqXJCy z@syh0n+a9pYI+G1FiswMm_p}m0or|O^s>c)3;Oe0cf?Dh8p-3LNi}x$S+>!ho46-c zk^JJ#E^C{}anmUFI@adnv3cayi?QiyDGqU@7# z>)lFag62e*pYa-Ofx0s<<#X8H(n7z!mCfG+>)Qd0zZ}qD%T+|Kw>|>Bc2rYWb8H+y z$cg6wv0jF2E$OoNDLd=9p%V*-ZcfB6-0k`7+(N^?5wdWQn3`}!cKD@}gv(DlS%pnX zm)8zNt}t;F_h}5R&=gm>c2umM5r034fiQ#UdOBy$)Q`W$pSkX$Y~@lDTF1Mz%UoNgc6p;VExLJr~rwOpu)uoh!0^^+K6X$(cA zi+5Y%5nabyzNqnVq3;svA$_ZtF5)F}Q>zBbJRRn^c3BS!zkzO!;x8vuU!RsIAuiP- zU_({a4@5xh&lo$~+@8f%YWaqKnsrGqVVTC!O_+4+A7^S;MzJ3ENw)b(wC)Pl7c5?> z;>3TE&Hi+#m*H&!wz4N!TR9B57^OVn|83_6f#Uq3vP(-MhFI5FkQ0TmPbL#3op+84 z^hB7os$>vKwNg)y>7_v6uYzI$MTyDOu1?{?%?~}~WG3lOUZGMQ!cVsGpC+_Z!jbEm zq#OD=g>EzLMrvH;E-T5YO)nvZ=36Nv&Byyb=eg;Hg$a~cqM6XBdGT{^z|`?zv0 z+usXbySnae95lbyTXJ~oM@_o|C%o#2wYJ8%k}L$(#Hsn0R{eM5LA(@7B=WNclzsG5 zlUu(D9JFGboTd6tzNyyRa0D?iv$Iq%*80-IZP{6q3I@E45w5i7v!VxO-b7*c0^4}$ zcKXZ;UcmK5oAcmPsK%OtD~@BUV}>Sz|D7=$#+gj++$`4XM#_?F8Z!M8<&myq$=-zx zZcNM7lKZC5RwaJ>yKU5*A9eYx5DSpokiioir_aje5y*yUz_D&)pw+Y02CH;@H+;0dr8VG`C$p!HGS|KtDZ zH#VTruQ5DC6}Aq@mssqx3>7qFT!MZdE2NtI0bvWeN>Y&Fb{tzkM~&kv%+h>+o4X$oEq!Bx{-~&m*cE23KAM>7cHXaNd-sm%IuOO7c2x zsTmFge$c&vW(quwxxa4dh5@dF2g(ZWtl%7``@0qZR?q(f#YQro_z)Qrw5E0yt0KS0 zc|nnb^^l63Ef(n;N<NlR zNx~)#1vMmEga5+oSA=+45QiHCjFVP~4J`JOA=bS(=<=(dZ5tOqu*Z(F*8qj|{`D^> zG`)sj)v)?T!Rlz-KQ{c!i30cGSK15xl3Tf-R$b2q_enTR+~HaserO!404zv~6$ zk4q3CdTbb?FT#U&;TL3Y2(jkFf<~L+#g@x$^~o?2p;p$F7^H2nkNa~LOO7DmAl33# ze4iSADK21nlk066t+2sV8y}+xcaP_8ttpU#0>>83V&V#aG0_It=BO-Vt4-ek}Ml6LBn{&wCq5<9*Qgq);!uPtfHrynco%c=@1a7kY8 zzT6GmyAb#J6hq?A-*e`bJ`=tqd0D+)$04%8yBN+Nx0TbVTPkWMK`WOZO?0uF^k*vFf0EIrn zEK&`DxC#dj4fZ2YJ|y;&#@$~+pc+9>ymEbEOKG!yu2|p&H`psuyA4~GFRiVka_GG3 zZ2mxROPc`iji1JwnTUS3VX_{OpFC^!a?&Thoi&|QYwn9H+{FED7J{dR8N-5iTxISHH+IMd zK5w~y&irsICpoHQO5h&m^r!cH(6UAUi3cxX&}++7pyyKzLY;#(%*w$E(ML7itaE}j zZT=oAjv&?nBlho>9S|ER2)xaMm$13*H&B2_bffGv?h1jU#ypL!^AX0Hzj=c9@EFj; zwF{5^j#8XiB`eP*C3guVlX06#3>)j+)pfGp)M}}*^TXN~Ch`Ns7vI~qOln%ZH zEK`*Kn?1+$Ci~W>%ys&LMe6`!rzG=NX~ePkPJeuX-Vwx}>Jxz4-+mZQ4DatQe#VXK zF+bBMJC)*>BqPZu?~`4tHtv4EkL8bZwo7cX|7{WiV4bs3m1DD9ZlH<&RP|_0Y32R@ zMWNF1c(_9E=&sd89<$are^lo%6LHr{8XSmclKm!h@;vzZ~yVjdxw z*3SRYS+sJaEWk2$0BR~)L_!%IG;cA*ZoN^%Z~K#JXe2IB41^g|)je``Iyp~>@BA{O z(}+O@wN!Hq)U3!MrqGC~v{(hYC=QAK(YQc&I6pV=0b?|Yj6q^|yWTXeLQi!B1wTgY zCsD1WnT5INj;}FSG~$C8DhN&iw<`T0{%>vRQHB^2$dB8g zdTN%X#j#G!vx*2qrXmvJs<9;(I%w7R6elM4TwsUnq-hufa+UFIwKx+`#8~`op1|RF zWyB$4MN+d|c%Yu49OC@d>~){XF#EzPZumOFSOf3FFXyA+ge(zb(`2Is z2pq1V-6a(-hA>Vz@qA`u3UH0E_S zm~9aK;g4G^NO~iQG8Io^EVHd4j%(q0W43yZM2A^?&B@*~novACPy(PaRLCAv(qi@u zBx+kxd@nC6Kp}d&ne`)LSP89yT{R#Q=NM&Gr^k=p13!A|v1lJsr5Az1;ppfqH@Y0- z7RII(5%(D@CSn6G{EN3=9HZ4c19!i|4=C#aNO(mPF~n$SSEFUkz_UCyn;rl#APvBP z`2+}~sPQccfg$Yg(lyGMng42zQ2hPa*sL7lkZD6ahR_6FRdPuTvYu3xDIu1~4u8w& z8IIAiXNV3|gu~Xx=Ets>T!Z7hNDxLO#93IDr&pJf*_iK7p_*$h^NEAWf>~hUVCH!K zdovwQd>Av`MZu>TJvmV4hKQz6KUlHKu}n*=G|p+1$UiIvHwKa-e3^k(v8Gasueq!} z%LyPvcJ51l2y_y6)M^FMU3B1W(7(#U9C-gwVO63CLG4YH39GhZtu2h^zeL7StL`7^ z`>S_I)bw@nJ>CL9?&%i)*M#lR^pe2T5K_b%k6wJBNhzsV*DZnDZvO$Jw$70`MlT@W zg>y($XG&=!e5Xn5o4HT{=g-ezIufrtR3=O#-!eL4JJY)yoBbJY4AgW6g6MS0Kz1HM zTq46CBCyE)gSGWw3Yn_FxR_X|zz0oV6Nz5<6U1NU2AADMaO0(W!c)tGbz#b62_e_Z z4R=Jr9aS<;)wep65#RCqG2|OY$FbS5EfhQ*kzZ^|9KKr0hew(J6%eN{o+sn?ztD8U z0UOj_z2>}Tpm`<)wHO1$Q9+0)z@1|NgejpQOu-+XjvJ?+NjF~bx_Fxh4~8hFs!*!b8LJ-l={B3J(wuS*knWx?zX zYyJ3#HHJ)O%ylm{QQ<1c3=WpqIlPGAXQ|b~8m>$Qq~l*;vl>F45h!nsxGx3X_ND^i za%-NAw})SVLW2r;CY8Opa-%@W87!z~NKXU2|lE3nGji&WLw0BAZVJIpDtkVuCzLgRKEM;{Z8<%>OtY z_Lz1gXuuKQ0OBv*57dH#3nvi1mNA5W@Y#bfaj=vIJMs^r#O6S22U%~3%h4}3jR+$j7UVbz9sDZ$_0V18h&HXgTFcjK0KGo%NR_TSh z5-Yh^mP+(Svwvz}cOaf6zZ{5f5sBA>ct`UZ{NF5ZsLPxPfxNu;s8BQO{=dhGAxpOe zY8jKvU;!4|0ST{f|1A`WjKA#dy)+RMjQ`k(YI6@Di)}e$NDB|gv6(T?v%&WV(U0J= z6f}%u+WB}=(Adv;l4bSzk1PG^cp8Ph`cHGsa%aGWARNQT6nheT4Z1Z@?Cc>^PfaPK zIL~w!SP}{t#4vJ5pfGSvxYa)1+o;*k-9U?7KRmUs>qvIE9AHli5I!&qIVmvn)9~jn zgIEq1=b7ySd+?5lpx~k4bnKF;UqKpS1m}CWbVO8264*ZKkBQ zm_QwX%L5qSfc}+rlv&ON1|EI;Oo_B5*e4BTqjF^jCi6cx$3WZ~m=2|G+hdeV@wQ#J z+CL>Az3e|=R9coPFnl2bmK;C+R#%LI2$b@3p#a>u@=Dm|mn$JW)6ojvh^Gk(h$*es zKUQ?~K-CRhz3m|$q%Rwa(C+09*<+lzTNT9QNJ9Ly*#9=Xcy|ib!D=Fozsylg{2|7L zrZ2GdtTy+_eK%s@=63}*u@?^yk_d%>CysR^*?aP zsMyq<)Bg?)zt)6*8?2B7{$0J?k*k^NCz({ z31GbPP-ha?NHcEg2c(SY9}F-6Q;a5M%T z^wk`6QT_sKa@bgJm5e|To1U63&QsLzZyqd#NV0F+fKR^%X!?%yqF4)%0e zitBkSAe)16S4cODL?dGaE0^gynS9hgTAic=%r1aQn0vMSI?x`%P>Bi^X~v9%n% zHBvEDNJX(bJFcr3&3?{zgvTG03C0wmBpA@L2j_*uN;Rr=E>yzA2d(FpFGz*vdVtVz z_0+V5GS-W^H*mtQG5&*g`)c^}fgitX93MEkffuwC#uBjPnX#qf#Q_mwq=xLgQHW>~ z9I};Mnb1(`k3$%T2BX@LPpSO~2-a-rN+`cLnMF-{^S1rdyrWjlAFmD8)GHCb4!ZV` z32{GV7kfTs#0~Km)I3m1n%;4mo&n3y5N{Gp2{q+qFNWUuSNU~3CIo3j)kQmdvB-i8 z!8EQ6%KA+a@=Dh@Tohq|;a!`p7+QdqmL2dDxC>++kEf%(Lr?(rbp8W-@KPD?Bp@7* z;c-n04dG-?{ym>ef)P9I==?K=&k83W+B3U26j?)q7t~%n7cQslWIAtk@=W*WLzSFx|;p<0(N{A=26>xNVWLuT{d(F2pW}ViE~)oxqg>#lTTFRewzawuhFq z?;Ov@x0|rx*+2e!^#Ujn9k;a=MFjWC}-ngJr)P#l%1oHr@=a4gXh;-TD zcl}R5ONcxbQf{Rtiot86W&}E$9AvL1Q`p`gxfh3&i>26sp_5dx0$|+&{KwM*FIQ$& z#mdK0>?iPUgFOdeK`F(txhp2qEmLBb7#fbQ>kf6Y5gOvxiQ`Z?=E=}88^F&{l(f#wqIx)o{7vd*f z&#_2Q_E5NYOG1_!e0lLM`{ldrp0vw?C<3nyXmUZ;-W3*6+vLSJqn_wBRm;HQi~@*^rQC!%BR7`G?aAP5u;`p15l7Icv>T14fWb|?!xlc z3fw3ZdnK60hN?A5zkMQLYGmgM9B5m0zhd}+B_Y8(uh#+tVqcXyXL?33NbRb1lbhv_n#cSTi zUb>#PV!~y&z=A_x+&IM9<}5wJ`qaB=b)JH4%or{(gm6=FeU%S0U1p4MQvBV zxRS(a5um*!3v=IjZGIarBA;kLf-XDll58nTvLO3LX)=!fklpyepBt^)zvi{|rkodK6GK6$+9CKavhPjyko-*3PuIB%( zPfR~YjU-FJjwQPnx|uqu5~n@!`s#KR<+78hA@iu|CB`(hloS2fFqQ?VD<+=<)+G(C zjTN9z?C>)rAx^{P$#%f71{*a6xjcKEtQqQe^uy|327!&EU z!?2($KdoU(vtD0cPF~m_3!i=!WKW5`ybrOUM&5c{biJID6_dh_9*U*721#gmfq|4U z;}(XFjoHa2)X@+l5(+B<#ivt*NH>D}7xPJV@hBnC*oXLkXxTYY0h3G3MT(ejaV&0D zeZGTDR90-&oHEfjWzwX}7tgAO6>1~Voq!h4vG!cdm?c;6D(Xy@CCfb#O!k@Kk1|X z!O4N&oTH;YkO{X;huIy)eOT_r@)R4nQ*y>2`3mKra@(7o6AkAH%snpb)h9hMNUqOoB~&ZuFv+SEX0Fl|;<;e-@d1H^MJN zv&lMume8LtIVHM|zF3KU+H$Z?_7|>>okKRVhk_778H5nx_z)rlgb-rV&2sPm0@eio z;(YR^?wYs$|LS}|&R&J>|BE-dc>xc?eM^P{Vp=TTs3B{3f^AI55Fd2N1}o_pZ@;Dc z>LV!j{>DdZ-2HW}nEU-Z4P$AS8VZ-6)yV0FnGMng27YKB*>PynT#x41iykgD5-zO7 z$@R%aHx$k_X(D0#@4-8~#hY!tsbJ|Mx8alyAn6>yLm8I7sYiyuFTtl%HFWJ?CW3>C z8z?6VtEB~xM@^xtqytbE@=RI*(S%1k*f*3CP`L~8B$mHvkqRS`*PR>ELynFmOCnAab{6hq}A&|qX} z7Ye!N>woSo3&Apg1{FzIKT)fIA%jsy2Y%N;xu8h`uyGk`XzP< zU7MffNQG?@L{5v+Whv|I>T1bzqTH|gCQEKc6ep<#JweC+J_s7}F*VU^{HV~Ra9+O& zVxW2Fn;fp{EPWG1GHX3@@{4bL3(*J?T7 z9@d*_Hn0)q4cORB7W^Cr8ZMNPU zD0PD9rd{m|oLl8lQ6yxMT<3NGXJj?d5EkcO^fzUMxvihz%b zLw-L`)>c;Q?wosDS^2ochC&~Q+4<%kW@*w@nHV_gO8G_ehUF-&!sIPQ_%Fn&&#g;1 znU-cLqNULm+shxqbImb68aQJap-BJZki_1~#9<<=B)&SSBiUi-$8p>2sdSh{OG8Qc zEmjC|Wkpd;&trgOZ9g1^2U;<4OwyThYmPV^_HvgYeZcF7K?{3R{swULl;GHI^3vA~ zQg=>>qRo?n&PSu=)NV{uiI8(2+lOT`efSacB*e2FbdK@&7IPx;cgPeLT*mdcC<}6= zO}MVzfM9>qT7SDgx~tmomly<7uZsCD=BQUT(y#g`;Eeg?B+f|fYXABw-|sScw~CHR z%Rv%$lWgsGuh}3;h0kqvb;sx?5sKeRW6SB6PFers6TzZP=EI-8{MRN{Fl8M zh}@Y7jZ$e(D*1z9w}*mM5gTHnw$c~=t_2`UvbiMAyg(%ZrF3H#8!Z}VK)(G_xd6)+ z^H?FQajQ_DCxZ;p@6?5Wh@DFJSOBSwV~z zt_0bHH;{@+_^!x+HI(PuV&EW_C;A2DBrff;i&mjZr$YYP


    F-Yf;bHJJ!(Cu$0X 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 literal 367802 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%0A?wc-q7f*frz)>e_boh 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�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�yZrP0*8Mqcf|5O8~^=-XU^6 zWNw#B!c(D05~+$jQp5=(CxqFI)dd72j7LMcJ21?GvKjdJ+;mYe=l)yJqgV(VW|E^y zLaSkpu_UkB$8KR=5>d%_pDSkeJ>M~Pt+xyiOfoJ97sEbP4_l;?5)I0~3rKuS?nF5NW?A@POGtBZ{*?Z)-``)48Uu7!`pMT1+niPWLyQxLIAI;bx|mfWnj;8C?||n} z-Bk2V!dW8n@#uYNJNYx|v0U`2?G+!Ef>Ve;>Bg_^E*-(fZcYCE(<#3m_WB_v-KA-7 zNuGL7Ca2}kJ{uBc^wGjdb49+m2+Pj_ECO)8zFoN&OJE5lF8k87{!Hz%Rjp58&zXbo z|2}8jWf~OF^pWbp=*eq_w08u2U_y>u1=!~=U0|QPZ%}qz`&a%>F(I+@TAajeFiW_8 zre61roKF-BvJt-Kz86Ha-0rzK`Re=rtnD#zepfU6!iVJPa)d><%|jYXx@Q z)qQCF1mfq7%0tD2=O3l)X#2wQTdvVQ!Ljh|*A%~2pydSc-7XaNHz_Cq>)xaVa=QQ_ zDGIV#WZ?#_k)~{(auGGpeO^QuQM6iyy@yd{i_SXZ*AktTBC3D|kqD>rfG(4R2_IeI z5$pfVzg4`;)H9VN6)jBoJNm^0;&)?x#0wIxy2l3G=hoRj*o#kpW{Y@yakN0!K_f-sL#F+iT}VseDG1(z;UjuLgC(=t3wdVhn+p@S))(7uB`&vL9uAuH>uI|4zZ)x>sPznM`)#a;_C>w^aYu;h zI*@GSaFzb*XZ#J#WjXjS(Pr2ECm&CXQueBP>(Qq}204R0p)9FiO_si^Qkl^PGO03i zFa=q(6`MlpVJa8FzA2M0Dv9HN+IOoqOp-|)UXJs=WI8JRl`Tf}n+YY=2eXJv z;4&ukD!ojq7S(DhI_LDDI1a#+g@qs0Y>L1Q+WN&u2;xW|yz^f^x6U&xTmM7NGujaL zTY0mQAMo=HYcFqN9^8ud=1XpGFM7R!Os7hQs=NPpTdlZM<7oNfWWHp!iNe=c%S6C< zF(|x}Nqv<0U!Ni{qO%Y7=a!S@FlN#+O&@ek^A1E8_iu`)pd%RQ2wn9|ZaRNza*n_4r4|!&CX)~8vTD!p=ED4~RUKL-rXLN7e5cpIWT7Qp1A^18 zrHp(s`mb+@R0A$h_P1vAD7BdGy-nAL*LkiKtq)8v4IC&JO21*e#I!5!gm4Yuy&pkS zG2quFOnWbwscU1Q>()B!E2@ixMxT)*-dEZ=5u5hI*G_S-$DorIoYX@*NOEQ_;P~(gf#tuk86-n^_ z6!zuuP;dYL?-|RG8fzrRm{PP6m1W2b5|u3Bs#{VaDMHOyvdn07M`TMb5+=FQDoc_W zl)bW~EJOBXtYeVDSbk@8x9<0I@2@}R@yK|ebKd8?UeD+A^*rbOcE^uoSrZ%5ZcY!M zaoNn4iLyQ9o7n&6>5-pcG)t20b_l9Kp8v#D9{$b97iqkZ`2Y;%H5iHv7|Js9Og&~; zJb}*xZYqe3VY(EbS6^Q5cRF{&%GcG;XS`3+iIkR|l{n4%OGE?nj6VBOyNoR@H7!TC zc55^)Hmb89`hQeB|UY)1!0!iV`XDSkx z^IF_6$_u?_B*rD_J|D?IuMFJyzHs)Nn{@4_)Y-cgb6*cQ+#9y=|9Ecka++G*%){cJ zOg^25SGQ_UXI)WQND&7AQ9_3g<;y$Ch(Anyk1VQ(3UC7w(7adUo=QK)$O4ZZ>>UU% zSkZ3iyL?jP_Bu=kwLALZe$-PP9!2PjKmu0D{`+jjbqp7mM( z?dglH@s!1T$O)8`d5UDTsUyvFF5{*BI+e zq$>#ZI?Vf)TWoMX9AA zFU#lLW1eX-kkR5tv{8_CC~dw{Qa~M~BBTcE-U5Zq74etCiuh@KYOvjq3p7VG^*0A- za>AVOVw4sxcb(62(f_fa3w^jDSO8jKpMX>#4|sJFbU52r5>K7nN-h$ndHITx9}N*a zSv0_%atPZFOL^Lbp<06$Req}8_{FhOIC*7mC)9r+p7}-v&Xfq0F^25ZSZPAEBQy3= zFv3lG_$IPyqv(C1Xyvl}xR8hI(Fg8<>S+zECge@3lAec|S;ok-XUW%%av;kLp`K!> z)Bz^cZqOnF6oFDZbr3T4w?h`rVzm2REfANGMF>b%`;)|Ct{3a@m)~I0y%t9%>nn>d z*~SY3Lv2?XPL31w6Va7?W3FlSm+b!b#bqn|jb|{+dHgGG9b7(eH6`+%Ww?{>xCCS? z7n}ag)t^C%DQ7gBk^2dx*B)Q`g43!E%$kE6s{0+imiivo3{54*=IH~T8Lj$_?^p`8 zU-8wqp6FYn3|KX%?Ztp1r|%t1WfpaoVW7tuQ2bT+i^1j5vfw>{N{7~x<@LUE%**{P zW$rP~(_oVteQ{BvrsxrzJn@0V$eGf}2p99Kn@UO%j`nT~e!QZw2L{riwPE7h=n($! z<Dlph?tLLHO|idf z2uD2s_`8x=cQ4zg{V;T9Rom>vVt)}=JRPH!-CXf8F4JQp>YcV&mP4v+NvhK6FPgF? zuOI3BB2IgmxzexSqM>`&aRcJ#9Y4SBli9Y@X;;!MR_tITvuGlA6GGjuE~I~Wk1(nO z%hWUUB&Rum1q(9rtZq_6jp=0GV|JIHHErC2iKC6ReW)m5(5HH2)P}jYp-Pv<=spu& z?4i85_dlOLt;vW9$}N41oHnVl(Nfr(T@*REc+PrZz_~wvYwsJk(OX`_qAEU$aV{tP zYS{&YQOL_E0^s_b<{R!*y}q+e2EKDwRC4SYo;;ejoYj4MhjMY=Qr;}Ufzwm!4@K90 zV%eOJ;g1`quw`-mbB&RW*}hiu+h*8l=HfIrv~zpyjj*8J?*w0)x`jvhV-H1NyT`m= zQ=YR_>GQU-d|Cr>Y|6jyZdFaW^`C5&Msh&nm)S3R6mg=Bux;k5s89C{uiy`#ieF_e zp3Er!O#I*+tGIf@oTNpOT4`87l~$Z~{L#08RX&xE%cq|vp=-Vqp*i=bKS{TP6pEYz z%GJjbXyb@gqCE}AZ>J6?C9F?IegqM8CBVAo6<(=_BGE;7yYu#>!A;g3@nO*f{Q+^= zsN7Bq-O!DI5XzoW>fYTjYA$>+9_^y%hF!(>{3CM6scA7(Es#c6EO(*9C^uQ7`tl(6 zSJ-}%r8P-3m}RHXM=4QNrjntn*4gjcuRs`0ql?qFr5%mEIX5?x1TBQAU4Dyj>Job4 za98*4*SQ+rk65uONf3O551p=OzPaAOMw%d0b>9?CB#_f^AUc)}L3E%&bSUkIU+rEC z)E^MN+`}=n)>WlR5SIR~!q$)4c}qHp8~_rRAWUb?Ju`k5_m#g5{t@+2-TpdDmoC$v zyCGU(NasOJdbPow5wpV=kgf_C9cJab8uX0B zB-NjY@$#bi=lkaL_gg;}E+6=?y_|FCYEW%GR2vnZqF&eZQ;R4s6Bg1afmA1M1At2w zfJ=QITn?Z4_&d@j5RVO>P>Xrm|J$GSOm2N)xRZ{W@xlzMaQEl48!oWM{eJskz9Y*N>;JI0xAQD^ zLO#eIhS>Kj>h95*PX1bok*b@H6g%_5kJNbgU8vNK@$3Ni2L@EljXJu?N>P-8{K5~~ z4Q0=aN)!mpdW>v5FIBzlwL?jPI-zsH*u5_ve@!9_{49K*4^^a1BU9H=ol5TO{2=*) zwFx2+EQ>Ge|Ii~arGJ`l4T9u1wl<^$Nv1$qH)uvQq@Ui%7-UR(E>BqE(KHU*diBq& z0V6xzcd4%sKtoemF{Sn<;7%JaBQJ7VGAMf9@QR*XX2VHHWqWM%^N^4nHEhHE38b;! z2oo~K@mdT4Euuk-rq>$E9vRhdfr6h?XedHpV;S8jC-4H&GS6p#b_osi+w4B?3*F24 z3tRR4oEKa#Jw{{KW>D%VpvuZ&w0wo>w6|YT`9zOIIy0Ke?on>e@{Q4o`4yvy-CurR zo^RGZi2kvvUyWjd!0Qh)(AW)E6ShNAbzsWxp32l*c zN0{1wg&fLv=)Hk@W&3C;DnV?%A0J9`i+1hLsCD4pi zkSg70-(lK3F8p|vB9d_gk}qdr4p8%e<{bLlYA%gyJqd8bLCAHAR**_=Q}vEm8EgYa zin>XGNcbVEhr7!$(-P2o_Co{2D^NOPTYdiWeVn2oppwZ*!sIX+u0Yh~o)$pN160)I z$&^Zi^;%+xI%sk%dKRevzo~0l$;cR4R4n$+Fcn!Tp8<>-U9$(NA+caqdMwjLu?e7G5zwzUuV3EKB9SkN%tTl>hMq5q z{oM7xiCkWHZv)V%9V+3~QZc5Z6l9S6e`l5{z`Yklu{=uMW_}Q=L=dW4yiomAmO`oB zCPp=f;kVG%(9+yKJqbTTy#{cImmz35d{=pj z{=Ilw27Zpw6&)=90C4gMlOtq#1>*i60;(K@i_rg}-5+5Vgo~mlBH2U;K*T732oD}a z{6^W2h_hBiF0O~LA>;qLCf!+3L)jC+2Rxqof%#0YX?ycnBc|H=%eGuYrWklT^M7$r z!!C%w2w8+p-~W)JOMMzNGC{t#)C!o&0)?ubF+w;Z*SSTXhh`eBx@^~iygTr((Tn*e z0a4j;?!zFR{#Oy_;7IKRz$eT;PQ;(|zR?hjR7Fkses23mLGydLc?!HOW^YktOC=Gg z>wgnIE{*qtZEpgp<8#W`c?yrfhV+8u)|9`!^vmE6R|)n4t}QiKR4^p`vlMRV3d*gm zn&szneQK*{<}W`LR0`UG(8=l+)eMJ zMi#>%OShpdj++|OcsJ0wdIL0O6~OOQ9)24E{5~X#)h34eWJ7qN8Y+vw!)LKU-2o~< z53OggxAuv6ved6fA*hYQwoPL6$xnL@w^tFinB_o^jOa>wo#=y*vKte_-c_8 zKSn_kgem}F5OxCtM}}wM{NbaZP!~tV)Xu@kQjSfFGyJ|4s#-T&kj8L&wE%n{JSgPCuA^9P{X-$_^MB_QI>eRJiS@i852A~|U% zzuR5(OXH3r;cv*A2VI-+xSIhb#*n0Nz}GN{9_!J?7IuL^Dp5#-NyuTZ;qK;DQwT_~ z&*T(hh7nO-n@jR(A4Pv&w5mt;YZmMOl*VPh-2$_-p+*_d? z?~J2do(GY(^Sfh%_bPPhS56JLb?e)>IOrrn*Z*xYS}M9P>Y$Z>Kv7Yw-Z(B1A6`y+ z*FXIwc4eywOgGJ(o%Ue>Dl88Sx2S_ESsn&X4HFr9l4;7&O-!hKyR{H5V?L50bewT z1u}S4?26OdMW$mh3+;D+HSKiEz{5dmT7bN6TRha-!FD!40N6-25??I^qChEt@?Dnh_IA(t+jM^P3)7uDB>qo!^8{>31+MJt_?gQ(A$?8k03@O2!&3 z#A&JhxR%nW9T2p> zUa{m@#h`{vEBzD3i~@E5@n-{~^uA6%Zy$rhdUwCtx7Aan@MyyKU9lidGf)H?5q7ip ze~F@8Yy;*EYfl*V&H*K-%?aE23k<=TvgOA$EvGQISF|JLyyUeG?v6`%1KfJ`dEdD6 zeog6HUJ+9l%tvbKQfHUpmI;nIkxV$l7(~n8@&YC_3w%bb2yz-$!PDqHD}zxb0?z@I)x%JS;S~a;lA_ zGanzn-X*0%)>mDGHui03YArNBM$(wKz=rObJSR;Clr+`0qUX{bn+q)@!=gE3C1cSY z3fx4P zo$!Lt)VMP)TRJG6o%`PHw{^FAtzg0`GhjHHW(_OE?{7N9ixT>3+tJ*0jXzF9BS!g6 zZ-Kh%NB9P65*K>fwO;FB)q~l}m`5j|P4wa1mD10$lg-a-PC$L7BQbS}zVmCdM#f6O zA1TQ5u80`){d{`=JopvKF;a=w8+Km-CTKxzm-k(xsTOF#z|F(Y@dO&#W1%OHPhNhyZ>kvKS zkAGm$QO146P1_`+-g9j3vAyt8F!H1RuJupUZTTVWlPfRtZ=BFf(-H@Nyp(x8kKgX8 zh@s%kr%C-^iiv)=Gs$$tezcOXzxV0%>uAvum{Ju4;x!L5W| zB+tDUc6ucQnLVp#KO!B-v7a3zY1F{UzPp}5>bH*t?6!xXj4%lA0W*{`xNW_1R2m|8 z%2{p|5p%66d7h=g41?~QEoGe)r(JNHe?5Htonjtsw|&rS~$UoDtZ zcmIECfHN>aO9zfA^Tqjvm(qY%ePw(pQDkpM@ zuV)=9zcWvQ8U)RIpT;g6nk9G*0}j&dXVXAIzf&38N^GcDS7tCvGx9`wg$s~#LJzbw z%ML2l7~&;jZnD-+QfgYk*8S!rgQJVri{aKd`AD+?9MJc|Omb~(`ln_l%B zZ_A5!NMWkWn(tb3BJzt@_gZq<1AkF6zvhI2VyjZchwXT1@HQz}MHOlj5c;Z-j{8IV z0o%1r_t{fa7wwdfIdw$)yQ2Sdc(AYmu!HuiXc?w{itu8P=ZmMg9g|WtQ(oHMf54&A z_*0hd6Njoj%ZI)^q2iEN{+7>eKj%m zzPDMHbv8%Ti=3?2U^MtZ$%4Dz9p|Tp+1fE^4a+i5tER;Rb;o`glE%d$@|xx-jtD z<-0mK;7Koa;~qHV0}q*d$1zaED47+ol*`e)Z_L26i6LSdigS8GPH*@%>V-bPEhHM64H)dT4_r*yVgAdSearT%xop zHJMQZRd9E;ciNrOK(#okt2m;MiC2C}SXGvvk_rYq_5|p-%#W?9fC7~?VN>o6(<5e%h|#wF3MSQMk`$!D!XRX z$_uP<<$}63N&Qa^b^7l0=WOk|J zJIgzo3stY(JJYVbH%w~C?dfz;l~DeE!{06hcXE~sFFQJ9LT5I^K3s(^PcH=_k!~eu zxSyowNml&+-IMCGbkSuu%XG-4Z%G3ou-K9Gj__8W$+AN=RYA53i(X@2t>dyc+{w;r zSI4i9EI~MrjfS#_EN)%hGa7_w(kLBgDu+Y(@!%AfPQXsyDtbvRL=~Y6M0V57(!1;CKdX zF2+P^^g-(Em6P#aO$?VFE|R7xZzEjrBwK9!vHmR4*p7TveQR%clefG*H@b#lz)+Bj zEOwZZztb-NAg5}Lar@m14maS@uGFHNub&a^XSB=mEiOoHt7|(xpD3(q=R zTjHLg(s@}Y^A21(MC%yb@Qps?J%$*6!w~e7yn3>|^z-N!GIcow&Ah|SZq zMe!POQzlQmg0(MAU(MP)4t2C>mS+1zZHM_3gG07Uv>m0d8G?e&V}UYcw{lMLMBpn< z1P4w|jHo>7@8C81fp$xvicT3$#^XjSz9e{#jaz*qp4?KxYuEBOqFYXvfxL)=jk~?w z$A@cL&GCV+vhJFM&YkAa+ecrp=ci9YiWQTAV$3&d4gnww5#%fZh&8h+fJ&1g%rf}K zR7hBIf-B5M@VG)fOu3Anpkg^17S&L9z|KgMH>Yz}&}7`LzNC?jC6VAM4ULbt0_#>O`8om$nY-cAEsO!L zSc}4G8aMjMRe7Brylxe;UivmLh;D)dG#hpYY&{F^l($bgXZDsiRSGcyQMdYPpE_&7 zFPSO#(EDVZt)-G(u=EK1C;0z0Luaj&<^{u3fdJ12~lU;WN$!bRS z>BX`uu*YGapF_L*Pm%#s>IX=ZrBy@aOcWY#5}9SmE#*tf3V~1i&hO9!!;n~G97`&z z)_&fh9XXwTX*QxVK6WKwNYx=ynA5HW|z4T^5JYl50b(-|+I z-FN_@eet+eMpNJuJ4RaAKi$DPF_|}a;t+i?2z4Izd1(x1`Qm@B#et}ZHX&ki4=|De zlR`E<-BGLLcn)FhlJY)9z^)?RV>bTa)RIApfY{qM5}8NbFy5q5L1YVIdfu{VFRa$X za>Dr1?@BGm;(Oz_FY=qMmj_`G9i3@7Wh;O%4D}~8byxWBvk{k#V+EBjA{Tw$>i3Ec2^wJfw83Vk~fIq8<31+YP0HI zn^fb{F9~KVYYR7W^YXEeEg_9Sv5Qx~4!W|gjx{l;zqF=Y^U^vvEl>E8sm+9k*RVY%h+uIXls(dMf&hOYx(+<8y6; zg6@k)mB|a=MlPBK1a__MoJ*=4Ed1EiIn>HmQCR}CQ&T8QV!vjUX)?KBa$_D_BjUKr za(?g(JY+{IkE8d9^?w_5kxMvDCJbABW2^ad{H0-nd@KQSCtm{LHab(!-7L>XoFghD zGup&4paG1Et9)xxl-B2<753E5&awB($-X(6lbtiItrNH>fy_QNmPuG%jQY!UbJ}$q z(&5n&{FYDmbhVSS9L=Q34;8o!!GMVUrR-NXYTyU#NpLY0E9gbGWc5O6Ye31EziOwb zu)}B}bM$$q9nf+OTlJg$I$KWB(HiuYVixDgttWw`FS7!gU82R1O*5mUyD9R{a!4aplgvTTim9-$-`1 zwi|pqVdnq*(#ia#8H$RoSJ=+1cS8oW2>yoI!f{Ubv%`)Kc7T2hIRPF?n4U}aPficD zzNxChTKGpe;*uLtjfsA1;C}I&zm)pJx|#77q+Ro{LqW7pjD!oU9ha+ZoOf!^wzZl< z#P6uSbk_gt`IqQCAPP?4*-Q7|4Q{Amy;k5FnDLu!ZcYT6t}`l;ndQbcD6RB~D(VC@ zZ?XSfwsKEzG341V-u7MzXX&@v_H$$^PQY=qw{2Bgn4^P9*i#uh$G6!&)KOv*(X%q! zC%n~1%6+rrMY#W2#_KT}Wa%y=Yy)3OPvDme``7&Pj0=HG_({w z`Ep(68W;%uxmLkXVGxinsRD{Jh}4N!!DX^sY}&F}ZL9o)MO=+@`;G%SocHjP?Ra`> zUteoGW+hwajEh`#r;FFvA^S%MV2U^ADb*LNwlsO|mzL+cok|V#+_zPpJ95t7P0)R8 zRFh9dRI@5Gm5y+4mvwS`c1dA}^t++8{Bom3W~ujY6$coVXlTJ^=0%{bjxF<*zr=xK z&V&H;;urS?S%8WfDw7+?V!dG+H}{ejJUmrwpl*PcfKn$-goNb)V)lxH4?{Ec?^vyA zt37wJK=HD?-vQ-}MeCn+No({Lj#oA2gF;8_nAT6_?4wT(dN$1oH777V0{Ace6w#fr z-YXz>c+RhGMkd1Jt_J&PltEn27QmDplWRdKlxYYH6_Ze1L~csg=i&7qWs{hMgsmz4 zaW^Ra(n)I^;HBGWfI3t68-`l&02UE6D^ycic~ofhnxoMlg;cJGuh?OLtzsIj;Fu)n zVK+>vT=X97fDl`NvvhekQL->ctNTcJNsv{5e@gz;6^bt(-athQ-oKU%d&fC}pWx?R z{mQe;!gRya(7q%wZ?NF-yvi31J4c5T>pPl1ffv? From a52729c10521d797a8c44c452e9e241c9f445855 Mon Sep 17 00:00:00 2001 From: Fyni Date: Fri, 5 Jun 2026 11:12:57 +0100 Subject: [PATCH 50/68] The Eye Opens - Part 2.5.5 (#22572) - Adds a modkit to the Outer Eyes antag crates, so none human baddies can adjust their suit easily. - Adds the Outer Eyes Enforcer outfit, to allow admins and storytellers to create Enforcers quickly. --------- Signed-off-by: Fyni Co-authored-by: FabianK3 <21039694+FabianK3@users.noreply.github.com> --- aurorastation.dme | 1 + code/datums/outfits/event/outfit_oe.dm | 23 +++++++++++++++++++ .../crates_lockers/crates/gear_loadout.dm | 5 ++++ html/changelogs/fyni-outer-eyes-2-5-5.yml | 5 ++++ 4 files changed, 34 insertions(+) create mode 100644 code/datums/outfits/event/outfit_oe.dm create mode 100644 html/changelogs/fyni-outer-eyes-2-5-5.yml diff --git a/aurorastation.dme b/aurorastation.dme index 89d7a4ec88a..35b72eeee3b 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -616,6 +616,7 @@ #include "code\datums\outfits\event\outfit_killers.dm" #include "code\datums\outfits\event\outfit_megacorps.dm" #include "code\datums\outfits\event\outfit_nanotrasen.dm" +#include "code\datums\outfits\event\outfit_oe.dm" #include "code\datums\outfits\event\outfit_scc.dm" #include "code\datums\outfits\event\outfit_siib.dm" #include "code\datums\outfits\event\outfit_tfcl.dm" diff --git a/code/datums/outfits/event/outfit_oe.dm b/code/datums/outfits/event/outfit_oe.dm new file mode 100644 index 00000000000..1369e236d6a --- /dev/null +++ b/code/datums/outfits/event/outfit_oe.dm @@ -0,0 +1,23 @@ +/obj/outfit/admin/oe_enforcer + name = "Outer Eyes Enforcer" + + uniform = /obj/item/clothing/under/color/purple + shoes = /obj/item/clothing/shoes/jackboots + gloves = /obj/item/clothing/gloves/black + suit = /obj/item/clothing/suit/space/void/outereyes + suit_store = /obj/item/gun/projectile/automatic/rifle/dnac + mask = /obj/item/clothing/mask/balaclava + belt = /obj/item/storage/belt/military + l_ear = /obj/item/radio/headset/raider + head = /obj/item/clothing/head/helmet/space/void/outereyes + r_pocket = /obj/item/melee/energy/sword/knife + l_pocket = /obj/item/coin/phoron + + accessory = /obj/item/clothing/accessory/holster/hip + accessory_contents = list(/obj/item/gun/projectile/xanupistol = 1) + + belt_contents = list( + /obj/item/grenade/flashbang = 2, + /obj/item/ammo_magazine/a65 = 3, + /obj/item/ammo_magazine/c46m/extended = 2 + ) diff --git a/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm b/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm index d6d8e773ffd..0d12a0c4f41 100644 --- a/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm +++ b/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm @@ -1498,6 +1498,10 @@ new /obj/item/coin/phoron(src) new /obj/item/coin/phoron(src) new /obj/item/coin/phoron(src) + new /obj/item/modkit/multi_species(src) + new /obj/item/modkit/multi_species(src) + new /obj/item/modkit/multi_species(src) + new /obj/item/modkit/multi_species(src) /obj/structure/closet/crate/secure/gear_loadout/outereyes/single/fill() new /obj/item/clothing/head/helmet/space/void/outereyes(src) @@ -1514,6 +1518,7 @@ new /obj/item/ammo_magazine/c46m/extended(src) new /obj/item/melee/energy/sword/knife(src) new /obj/item/coin/phoron(src) + new /obj/item/modkit/multi_species(src) /obj/structure/closet/crate/secure/gear_loadout/zavodskoi/fill() new /obj/item/rig/combat/zavod_heavy(src) diff --git a/html/changelogs/fyni-outer-eyes-2-5-5.yml b/html/changelogs/fyni-outer-eyes-2-5-5.yml new file mode 100644 index 00000000000..8e58e41dc2d --- /dev/null +++ b/html/changelogs/fyni-outer-eyes-2-5-5.yml @@ -0,0 +1,5 @@ +author: fyni +delete-after: True +changes: + - rscadd: "Adds modkits to the two Outer Eyes antag loadouts so you can mod the voidsuit to fit other species." + - rscadd: "Adds the Outer Eyes Enforcer outfit, for quicker Outer Eyes spawning for admins." \ No newline at end of file From 0d92359da71a0127a83c982bd86d16cd5666eef1 Mon Sep 17 00:00:00 2001 From: Batrachophreno Date: Fri, 5 Jun 2026 09:55:22 -0400 Subject: [PATCH 51/68] Bun, Inferno->React migration (#22529) Re-creation of https://github.com/Aurorastation/Aurora.3/pull/21046 to skip merge conflict hell. Brings us modern TGUI. **ALTERNATE TITLE: TGUI HELLSCAPE PR ABANDON ALL HOPE YE WHO ENTER HERE** - [x] Migrate build tools (javascript -> typescript, bun for package management). - [x] Upgrade all TGUI dependencies and associated root files to TG-congruent versions (axios, babel, dompurify, eslint, highlight, marked, prettier, sass, source-map, stacktrace-parser, typescript). - [x] InfernoJS -> React migrations - [x] React cleanup and polish (migrate all remaining .js files to appropriate .ts or .tsx filetype, all remaining hooks, linting, error corrections, etc.) - [ ] Test all remaining TGUI interfaces --- .github/actions/setup_bun/action.yml | 17 + .github/actions/setup_node/action.yml | 26 + .github/workflows/byond.yml | 12 +- .github/workflows/update_tgui.yml | 31 + .gitignore | 3 + .vscode/extensions.json | 7 +- .vscode/settings.json | 18 +- .vscode/tasks.json | 38 +- aurorastation.dme | 18 +- biome.json | 68 + bun.lock | 32 + .../signals/signals_atom/signals_atom_main.dm | 2 + code/__DEFINES/dcs/signals/signals_tgui.dm | 2 + code/__DEFINES/span.dm | 4 + code/__DEFINES/subsystem-priority.dm | 1 - code/__DEFINES/subsystems.dm | 1 + code/__DEFINES/text.dm | 2 +- code/__DEFINES/tgs.config.dm | 11 + code/__DEFINES/tgs.dm | 176 +- code/__DEFINES/tgui.dm | 10 + code/__HELPERS/text.dm | 28 + code/controllers/subsystems/chat.dm | 93 +- code/controllers/subsystems/night_lighting.dm | 14 +- .../subsystems/processing/nanoui.dm | 241 - .../subsystems/{processing => }/tgui.dm | 89 +- code/datums/chat_payload.dm | 16 + code/datums/components/local_network.dm | 5 - code/datums/mind.dm | 1 - code/datums/wires/alarm.dm | 13 +- code/datums/wires/radio.dm | 4 +- code/game/atom/atom_examine.dm | 38 + code/game/objects/items.dm | 31 +- code/game/objects/items/stacks/telecrystal.dm | 2 +- code/game/objects/structures.dm | 20 +- code/game/objects/structures/_machinery.dm | 5 +- .../objects/structures/machinery/alarm.dm | 53 +- .../structures/machinery/atmo_control.dm | 2 +- .../structures/machinery/computer/computer.dm | 8 +- .../structures/machinery/dna_machines.dm | 5 +- .../embedded_controller/docking_program.dm | 1 - .../structures/machinery/vending/_vending.dm | 3 +- code/game/turfs/simulated/floor.dm | 3 + code/game/turfs/simulated/walls.dm | 3 + code/game/turfs/unsimulated/floor.dm | 3 + code/game/turfs/unsimulated/walls.dm | 3 + code/game/verbs/ooc.dm | 8 - code/modules/admin/admin_verbs.dm | 3 - code/modules/admin/verbs/debug.dm | 15 - .../client/preference_setup/global/01_ui.dm | 11 - code/modules/client/preferences.dm | 1 - code/modules/clothing/clothing.dm | 10 + code/modules/clothing/head/hardhat.dm | 1 + code/modules/heavy_vehicle/mecha.dm | 3 - code/modules/mob/logout.dm | 1 - .../modules/modular_computers/_description.dm | 3 +- .../computers/modular_computer/core.dm | 19 +- .../computers/modular_computer/ui.dm | 16 +- .../computers/subtypes/dev_silicon.dm | 3 + .../modular_computers/file_system/program.dm | 36 +- .../file_system/program_events.dm | 5 - .../file_system/programs/_program.dm | 38 +- .../programs/civilian/cargo_order.dm | 1 - .../file_system/programs/command/card.dm | 1 - .../command/command_and_communications.dm | 8 +- .../programs/engineering/atmoscontrol.dm | 5 +- .../programs/engineering/lightingcontrol.dm | 7 +- .../file_system/programs/engineering/rcon.dm | 1 - .../file_system/programs/security/camera.dm | 55 +- .../programs/security/penalmechs.dm | 9 - .../programs/system/file_browser.dm | 53 +- code/modules/nano/modules/nano_module.dm | 63 - code/modules/nano/nanoexternal.dm | 37 - code/modules/nano/nanomapgen.dm | 90 - code/modules/nano/nanoui.dm | 537 - code/modules/organs/subtypes/vaurca.dm | 72 +- .../overmap/ships/computers/engine_control.dm | 2 +- code/modules/overmap/ships/computers/helm.dm | 126 +- code/modules/overmap/ships/computers/ship.dm | 5 - code/modules/power/sensors/powernet_sensor.dm | 1 - code/modules/research/xenoarchaeology/misc.dm | 1 - code/modules/tgchat/README.md | 31 + code/modules/tgchat/to_chat.dm | 21 +- code/modules/tgs/LICENSE | 2 +- code/modules/tgs/README.md | 8 +- code/modules/tgs/core/README.md | 4 +- code/modules/tgs/core/byond_world_export.dm | 22 + code/modules/tgs/core/core.dm | 28 +- code/modules/tgs/core/datum.dm | 9 +- code/modules/tgs/core/tgs_version.dm | 1 + code/modules/tgs/includes.dm | 1 + code/modules/tgs/v4/api.dm | 6 +- code/modules/tgs/v5/README.md | 4 +- code/modules/tgs/v5/__interop_version.dm | 2 +- code/modules/tgs/v5/_defines.dm | 14 +- code/modules/tgs/v5/api.dm | 126 +- code/modules/tgs/v5/bridge.dm | 29 +- code/modules/tgs/v5/topic.dm | 38 +- code/modules/tgs/v5/undefs.dm | 16 +- code/modules/tgui/external.dm | 2 +- .../{nano => tgui}/modules/follow_menu.dm | 0 .../modules/human_appearance.dm | 0 .../{nano => tgui}/modules/narrate_panel.dm | 0 code/modules/tgui/states.dm | 5 +- code/modules/tgui/states/default.dm | 7 +- code/modules/tgui/status_composers.dm | 11 + code/modules/tgui/tgui.dm | 86 +- code/modules/tgui/tgui_window.dm | 101 +- code/modules/tgui_input/alert.dm | 22 +- code/modules/tgui_input/checkboxes.dm | 139 + code/modules/tgui_input/keycombo.dm | 126 + code/modules/tgui_input/list.dm | 36 +- code/modules/tgui_input/number.dm | 18 +- code/modules/tgui_input/say_modal/modal.dm | 1 - code/modules/tgui_input/text.dm | 16 +- code/modules/tgui_panel/external.dm | 8 + config/example/config.txt | 4 + dependencies.sh | 5 +- html/changelogs/Bat-TGUIReactMigration.yml | 66 + html/statbrowser.css | 476 +- html/statbrowser.html | 9 +- html/statbrowser.js | 1565 ++- nano/TemplatesGuide.txt | 10 - nano/To BYOND Cache.bat | 4 - nano/css/icons.css | 315 - nano/css/layout_basic.css | 21 - nano/css/layout_default.css | 128 - nano/css/shared.css | 599 - nano/images/c_charging.gif | Bin 960 -> 0 bytes nano/images/c_discharging.gif | Bin 922 -> 0 bytes nano/images/c_max.gif | Bin 125 -> 0 bytes nano/images/status_icons/alarm_green.gif | Bin 107 -> 0 bytes nano/images/status_icons/alarm_red.gif | Bin 163 -> 0 bytes nano/images/status_icons/batt_100.gif | Bin 173 -> 0 bytes nano/images/status_icons/batt_20.gif | Bin 284 -> 0 bytes nano/images/status_icons/batt_40.gif | Bin 185 -> 0 bytes nano/images/status_icons/batt_5.gif | Bin 273 -> 0 bytes nano/images/status_icons/batt_60.gif | Bin 166 -> 0 bytes nano/images/status_icons/batt_80.gif | Bin 172 -> 0 bytes nano/images/status_icons/charging.gif | Bin 160 -> 0 bytes .../status_icons/downloader_finished.gif | Bin 130 -> 0 bytes .../status_icons/downloader_running.gif | Bin 574 -> 0 bytes nano/images/status_icons/ntnrc_idle.gif | Bin 113 -> 0 bytes nano/images/status_icons/ntnrc_new.gif | Bin 181 -> 0 bytes nano/images/status_icons/power_norm.gif | Bin 431 -> 0 bytes nano/images/status_icons/power_warn.gif | Bin 485 -> 0 bytes nano/images/status_icons/sig_high.gif | Bin 182 -> 0 bytes nano/images/status_icons/sig_lan.gif | Bin 191 -> 0 bytes nano/images/status_icons/sig_low.gif | Bin 179 -> 0 bytes nano/images/status_icons/sig_none.gif | Bin 202 -> 0 bytes nano/images/uiBackground-Syndicate.png | Bin 154853 -> 0 bytes nano/images/uiBackground.png | Bin 9693 -> 0 bytes nano/images/uiBasicBackground.png | Bin 3707 -> 0 bytes nano/images/uiIcons16.png | Bin 2288 -> 0 bytes nano/images/uiIcons16Green.png | Bin 18091 -> 0 bytes nano/images/uiIcons16Red.png | Bin 17681 -> 0 bytes nano/images/uiIcons24.png | Bin 987 -> 0 bytes nano/images/uiLinkPendingIcon.gif | Bin 673 -> 0 bytes nano/images/uiMaskBackground.png | Bin 98 -> 0 bytes nano/images/uiNoticeBackground.jpg | Bin 40135 -> 0 bytes nano/images/uiTitleFluff-Syndicate.png | Bin 1338 -> 0 bytes nano/images/uiTitleFluff.png | Bin 612 -> 0 bytes nano/js/libraries.min.js | 1 - nano/js/libraries/doT.js | 157 - nano/js/libraries/jquery.timers.js | 4 - nano/js/nano_base_callbacks.js | 126 - nano/js/nano_base_helpers.js | 213 - nano/js/nano_state.js | 121 - nano/js/nano_state_default.js | 14 - nano/js/nano_state_manager.js | 220 - nano/js/nano_template.js | 135 - nano/js/nano_utility.js | 161 - nano/mapbase1024.png | Bin 525330 -> 0 bytes nano/templates/engines_control.tmpl | 110 - nano/templates/hardsuit.tmpl | 257 - nano/templates/layout_basic.tmpl | 3 - nano/templates/layout_default.tmpl | 73 - package.json | 10 + tgui/.eslintignore | 6 - tgui/.eslintrc-sonar.yml | 26 - tgui/.eslintrc.yml | 766 -- tgui/.gitattributes | 1 - tgui/.gitignore | 19 +- tgui/.prettierignore | 12 +- tgui/.prettierrc.yml | 2 +- tgui/.swcrc | 15 + .../@yarnpkg/plugin-interactive-tools.cjs | 363 - tgui/.yarn/releases/yarn-3.3.1.cjs | 823 -- tgui/.yarn/sdks/eslint/bin/eslint.js | 20 - tgui/.yarn/sdks/eslint/lib/api.js | 20 - tgui/.yarn/sdks/eslint/package.json | 9 - tgui/.yarn/sdks/integrations.yml | 5 - tgui/.yarn/sdks/prettier/bin/prettier.cjs | 20 - tgui/.yarn/sdks/prettier/index.cjs | 20 - tgui/.yarn/sdks/prettier/package.json | 7 - tgui/.yarn/sdks/typescript/bin/tsc | 20 - tgui/.yarn/sdks/typescript/bin/tsserver | 20 - tgui/.yarn/sdks/typescript/lib/tsc.js | 20 - tgui/.yarn/sdks/typescript/lib/tsserver.js | 272 - .../sdks/typescript/lib/tsserverlibrary.js | 272 - tgui/.yarn/sdks/typescript/lib/typescript.js | 20 - tgui/.yarn/sdks/typescript/package.json | 10 - tgui/.yarnrc.yml | 19 - tgui/README.md | 194 +- tgui/babel.config.js | 44 - tgui/bunfig.toml | 2 + tgui/docs/chat-embedded-components.md | 8 +- tgui/docs/component-reference.md | 1137 -- tgui/docs/converting-old-tgui-interfaces.md | 52 +- tgui/docs/state-usage.md | 30 + tgui/docs/tgui-for-custom-html-popups.md | 64 +- tgui/docs/tutorial-and-examples.md | 151 +- tgui/docs/writing-tests.md | 2 +- tgui/global.d.ts | 77 +- tgui/happydom.ts | 5 + tgui/package.json | 90 +- tgui/packages/common/assets.ts | 30 + tgui/packages/common/collections.spec.ts | 20 - tgui/packages/common/collections.ts | 313 +- tgui/packages/common/color.js | 84 - tgui/packages/common/events.js | 41 - tgui/packages/common/exhaustive.ts | 19 - tgui/packages/common/fp.js | 49 - tgui/packages/common/keycodes.js | 86 - tgui/packages/common/keys.ts | 139 - tgui/packages/common/math.ts | 107 - tgui/packages/common/package.json | 9 +- tgui/packages/common/{perf.js => perf.ts} | 53 +- tgui/packages/common/random.ts | 32 - tgui/packages/common/react.spec.ts | 20 - tgui/packages/common/react.ts | 77 - tgui/packages/common/redux.test.ts | 16 +- tgui/packages/common/redux.ts | 26 +- tgui/packages/common/storage.js | 308 - tgui/packages/common/storage.ts | 261 + tgui/packages/common/string.babel-plugin.cjs | 73 - tgui/packages/common/string.js | 196 - tgui/packages/common/timer.js | 58 - tgui/packages/common/type-safety.test.ts | 53 + tgui/packages/common/type-safety.ts | 56 + tgui/packages/common/types.ts | 6 - tgui/packages/common/uuid.js | 20 - tgui/packages/common/vector.js | 48 - tgui/packages/common/vector.ts | 55 + ...N_TUTORIAL.txt => README_ICON_TUTORIAL.md} | 0 tgui/packages/tgfont/config.cjs | 18 - tgui/packages/tgfont/icons/air-tank-slash.svg | 2 +- tgui/packages/tgfont/icons/air-tank.svg | 2 +- tgui/packages/tgfont/icons/bad-touch.svg | 47 +- tgui/packages/tgfont/icons/image-minus.svg | 2 +- tgui/packages/tgfont/icons/image-plus.svg | 2 +- .../packages/tgfont/icons/nanotrasen-logo.svg | 4 +- tgui/packages/tgfont/icons/non-binary.svg | 45 +- .../packages/tgfont/icons/prosthetic-full.svg | 28 +- tgui/packages/tgfont/icons/prosthetic-leg.svg | 36 +- tgui/packages/tgfont/icons/sound-minus.svg | 2 +- tgui/packages/tgfont/icons/sound-plus.svg | 2 +- tgui/packages/tgfont/icons/syndicate-logo.svg | 14 +- tgui/packages/tgfont/mkdist.cjs | 13 - tgui/packages/tgfont/package.json | 20 +- tgui/packages/tgfont/static/tgfont.css | 89 +- tgui/packages/tgfont/static/tgfont.eot | Bin 4292 -> 0 bytes tgui/packages/tgfont/static/tgfont.woff2 | Bin 1952 -> 2472 bytes tgui/packages/tgfont/svgtofont.mjs | 20 + tgui/packages/tgui-bench/entrypoint.tsx | 72 - tgui/packages/tgui-bench/index.js | 93 - tgui/packages/tgui-bench/lib/benchmark.d.ts | 219 - tgui/packages/tgui-bench/lib/benchmark.js | 2760 ---- tgui/packages/tgui-bench/package.json | 15 - .../packages/tgui-bench/tests/Button.test.tsx | 85 - tgui/packages/tgui-bench/tests/Flex.test.tsx | 16 - tgui/packages/tgui-bench/tests/Stack.test.tsx | 16 - .../tgui-bench/tests/Tooltip.test.tsx | 20 - tgui/packages/tgui-chat-dark/index.ts | 1 + tgui/packages/tgui-dev-server/dreamseeker.js | 101 - tgui/packages/tgui-dev-server/dreamseeker.ts | 115 + tgui/packages/tgui-dev-server/index.js | 30 - tgui/packages/tgui-dev-server/index.ts | 31 + tgui/packages/tgui-dev-server/link/client.cjs | 179 - tgui/packages/tgui-dev-server/link/client.ts | 172 + .../link/{retrace.js => retrace.ts} | 66 +- tgui/packages/tgui-dev-server/link/server.js | 144 - tgui/packages/tgui-dev-server/link/server.ts | 116 + tgui/packages/tgui-dev-server/logging.js | 72 - tgui/packages/tgui-dev-server/logging.ts | 72 + tgui/packages/tgui-dev-server/package.json | 20 +- .../{reloader.js => reloader.ts} | 106 +- .../{require.js => require.ts} | 2 +- tgui/packages/tgui-dev-server/util.js | 31 - tgui/packages/tgui-dev-server/util.ts | 40 + tgui/packages/tgui-dev-server/webpack.js | 83 - tgui/packages/tgui-dev-server/webpack.ts | 69 + .../tgui-dev-server/{winreg.js => winreg.ts} | 32 +- .../{Notifications.js => Notifications.tsx} | 14 +- .../tgui-panel/{Panel.js => Panel.tsx} | 93 +- tgui/packages/tgui-panel/app.tsx | 12 + ...wPlayingWidget.js => NowPlayingWidget.tsx} | 94 +- tgui/packages/tgui-panel/audio/atoms.ts | 22 + tgui/packages/tgui-panel/audio/handlers.ts | 39 + tgui/packages/tgui-panel/audio/hooks.js | 17 - tgui/packages/tgui-panel/audio/index.js | 10 - tgui/packages/tgui-panel/audio/middleware.js | 37 - tgui/packages/tgui-panel/audio/player.ts | 48 +- tgui/packages/tgui-panel/audio/reducer.js | 50 - tgui/packages/tgui-panel/audio/selectors.js | 7 - .../tgui-panel/chat/ChatPageSettings.js | 99 - .../tgui-panel/chat/ChatPageSettings.tsx | 113 + tgui/packages/tgui-panel/chat/ChatPanel.js | 74 - tgui/packages/tgui-panel/chat/ChatPanel.tsx | 76 + tgui/packages/tgui-panel/chat/ChatTabs.js | 70 - tgui/packages/tgui-panel/chat/ChatTabs.tsx | 61 + tgui/packages/tgui-panel/chat/actions.js | 22 - tgui/packages/tgui-panel/chat/atom.ts | 29 + .../chat/{constants.js => constants.ts} | 26 +- tgui/packages/tgui-panel/chat/handlers.ts | 58 + tgui/packages/tgui-panel/chat/helpers.ts | 101 + tgui/packages/tgui-panel/chat/index.js | 11 - tgui/packages/tgui-panel/chat/middleware.js | 185 - tgui/packages/tgui-panel/chat/migration.ts | 207 + tgui/packages/tgui-panel/chat/model.js | 56 - tgui/packages/tgui-panel/chat/model.ts | 85 + tgui/packages/tgui-panel/chat/reducer.js | 192 - .../chat/{renderer.js => renderer.tsx} | 369 +- ...laceInTextNode.js => replaceInTextNode.ts} | 174 +- tgui/packages/tgui-panel/chat/selectors.js | 17 - tgui/packages/tgui-panel/chat/types.ts | 25 + .../tgui-panel/chat/use-chat-pages.ts | 146 + .../tgui-panel/chat/use-chat-persistence.ts | 99 + .../tgui-panel/events/handlers/assets.ts | 8 + .../events/handlers/roundrestart.ts | 8 + tgui/packages/tgui-panel/events/listeners.ts | 28 + tgui/packages/tgui-panel/events/store.ts | 3 + tgui/packages/tgui-panel/game/actions.js | 11 - tgui/packages/tgui-panel/game/atoms.ts | 40 + .../game/{constants.js => constants.ts} | 0 tgui/packages/tgui-panel/game/hooks.js | 12 - tgui/packages/tgui-panel/game/index.js | 9 - tgui/packages/tgui-panel/game/middleware.js | 53 - tgui/packages/tgui-panel/game/reducer.js | 39 - tgui/packages/tgui-panel/game/selectors.js | 7 - .../tgui-panel/game/use-keep-alive.ts | 16 + tgui/packages/tgui-panel/index.js | 108 - tgui/packages/tgui-panel/index.tsx | 65 + tgui/packages/tgui-panel/package.json | 26 +- tgui/packages/tgui-panel/panelFocus.ts | 18 +- .../{PingIndicator.js => PingIndicator.tsx} | 21 +- tgui/packages/tgui-panel/ping/actions.js | 25 - tgui/packages/tgui-panel/ping/atoms.ts | 11 + .../ping/{constants.js => constants.ts} | 0 tgui/packages/tgui-panel/ping/handlers.ts | 38 + tgui/packages/tgui-panel/ping/helpers.ts | 75 + tgui/packages/tgui-panel/ping/index.js | 9 - tgui/packages/tgui-panel/ping/middleware.js | 60 - tgui/packages/tgui-panel/ping/reducer.js | 50 - tgui/packages/tgui-panel/ping/selectors.js | 7 - tgui/packages/tgui-panel/reconnect.tsx | 14 +- .../tgui-panel/settings/SettingsGeneral.tsx | 202 + .../tgui-panel/settings/SettingsPanel.js | 451 - .../tgui-panel/settings/SettingsPanel.tsx | 54 + .../tgui-panel/settings/SettingsStatPanel.tsx | 77 + .../tgui-panel/settings/TextHighlight.tsx | 211 + tgui/packages/tgui-panel/settings/actions.js | 26 - tgui/packages/tgui-panel/settings/atoms.ts | 56 + .../packages/tgui-panel/settings/constants.js | 39 - .../packages/tgui-panel/settings/constants.ts | 64 + tgui/packages/tgui-panel/settings/helpers.ts | 74 + tgui/packages/tgui-panel/settings/hooks.js | 20 - tgui/packages/tgui-panel/settings/index.js | 10 - .../tgui-panel/settings/middleware.ts | 130 - .../packages/tgui-panel/settings/migration.ts | 128 + tgui/packages/tgui-panel/settings/model.js | 22 - tgui/packages/tgui-panel/settings/reducer.js | 185 - tgui/packages/tgui-panel/settings/scaling.ts | 19 +- .../packages/tgui-panel/settings/selectors.js | 12 - .../tgui-panel/settings/settingsImExport.ts | 92 + .../tgui-panel/{ => settings}/themes.ts | 59 +- tgui/packages/tgui-panel/settings/types.ts | 46 + .../tgui-panel/settings/use-highlights.ts | 109 + .../tgui-panel/settings/use-settings.ts | 56 + .../tgui-panel/styles/components/Chat.scss | 50 +- .../styles/components/Notifications.scss | 4 +- .../tgui-panel/styles/components/Ping.scss | 20 +- .../styles/components/UnreadCount.scss | 12 + tgui/packages/tgui-panel/styles/main.scss | 51 +- .../tgui-panel/styles/tgchat/chat-dark.scss | 5 + .../tgui-panel/styles/tgchat/chat-light.scss | 5 + .../tgui-panel/styles/themes/light.scss | 92 +- tgui/packages/tgui-panel/telemetry.js | 97 - .../tgui-panel/telemetry/constants.ts | 1 + .../packages/tgui-panel/telemetry/handlers.ts | 102 + tgui/packages/tgui-panel/telemetry/helpers.ts | 16 + tgui/packages/tgui-polyfill/00-html5shiv.js | 331 - tgui/packages/tgui-polyfill/01-ie8.js | 837 -- tgui/packages/tgui-polyfill/02-dom4.js | 973 -- tgui/packages/tgui-polyfill/03-css-om.js | 45 - tgui/packages/tgui-polyfill/10-misc.js | 62 - tgui/packages/tgui-polyfill/index.js | 15 - tgui/packages/tgui-polyfill/package.json | 16 - .../packages/tgui-say/ChannelIterator.test.ts | 13 +- tgui/packages/tgui-say/ChannelIterator.ts | 25 +- tgui/packages/tgui-say/ChatHistory.test.ts | 2 + tgui/packages/tgui-say/TguiSay.tsx | 526 +- tgui/packages/tgui-say/constants.ts | 29 +- tgui/packages/tgui-say/helpers.ts | 66 +- tgui/packages/tgui-say/index.tsx | 15 +- tgui/packages/tgui-say/package.json | 19 +- tgui/packages/tgui-say/styles/button.scss | 38 - tgui/packages/tgui-say/styles/colors.scss | 53 +- tgui/packages/tgui-say/styles/content.scss | 7 - tgui/packages/tgui-say/styles/dragzone.scss | 53 - tgui/packages/tgui-say/styles/main.scss | 69 +- tgui/packages/tgui-say/styles/styles.scss | 112 + tgui/packages/tgui-say/styles/textarea.scss | 51 - tgui/packages/tgui-say/styles/window.scss | 35 - tgui/packages/tgui-say/timers.ts | 12 +- tgui/packages/tgui-setup/helpers.js | 520 + tgui/packages/tgui-setup/ntos-error.css | 112 + tgui/packages/tgui-setup/package.json | 14 + tgui/packages/tgui/App.tsx | 11 + tgui/packages/tgui/__mocks__/byond.ts | 30 + tgui/packages/tgui/__mocks__/layouts.tsx | 32 + tgui/packages/tgui/__mocks__/setup.ts | 21 + tgui/packages/tgui/assets.ts | 48 +- .../tgui/assets/transparency_checkerboard.svg | 10 + tgui/packages/tgui/backend.ts | 358 +- .../tgui/components/AnimatedNumber.tsx | 189 - tgui/packages/tgui/components/Autofocus.tsx | 19 - tgui/packages/tgui/components/Blink.js | 69 - tgui/packages/tgui/components/BlockQuote.js | 13 - .../tgui/components/BodyZoneSelector.tsx | 153 - tgui/packages/tgui/components/Box.tsx | 278 - tgui/packages/tgui/components/Button.js | 365 - tgui/packages/tgui/components/ByondUi.js | 138 - tgui/packages/tgui/components/Chart.js | 128 - tgui/packages/tgui/components/Collapsible.js | 46 - tgui/packages/tgui/components/ColorBox.js | 32 - tgui/packages/tgui/components/Dialog.tsx | 85 - tgui/packages/tgui/components/Dimmer.js | 17 - tgui/packages/tgui/components/Divider.js | 20 - .../tgui/components/DraggableControl.js | 287 - tgui/packages/tgui/components/Dropdown.js | 165 - tgui/packages/tgui/components/FitText.tsx | 92 - tgui/packages/tgui/components/Flex.tsx | 115 - tgui/packages/tgui/components/Grid.js | 38 - tgui/packages/tgui/components/Icon.js | 78 - .../packages/tgui/components/InfinitePlane.js | 191 - tgui/packages/tgui/components/Input.js | 160 - tgui/packages/tgui/components/KeyListener.tsx | 39 - tgui/packages/tgui/components/Knob.js | 143 - .../tgui/components/LabeledControls.js | 44 - tgui/packages/tgui/components/LabeledList.tsx | 108 - tgui/packages/tgui/components/MenuBar.tsx | 237 - tgui/packages/tgui/components/Modal.js | 23 - tgui/packages/tgui/components/NoticeBox.js | 27 - tgui/packages/tgui/components/NumberInput.js | 285 - tgui/packages/tgui/components/Popper.tsx | 84 - tgui/packages/tgui/components/ProgressBar.js | 66 - .../tgui/components/RestrictedInput.js | 177 - tgui/packages/tgui/components/RoundGauge.js | 137 - tgui/packages/tgui/components/Section.tsx | 105 - tgui/packages/tgui/components/Slider.js | 129 - tgui/packages/tgui/components/Stack.tsx | 83 - .../tgui/components/StyleableSection.tsx | 26 - tgui/packages/tgui/components/Table.js | 65 - tgui/packages/tgui/components/Tabs.js | 65 - tgui/packages/tgui/components/TextArea.js | 239 - tgui/packages/tgui/components/TimeDisplay.js | 63 - tgui/packages/tgui/components/Tooltip.tsx | 150 - .../tgui/components/TrackOutsideClicks.tsx | 35 - tgui/packages/tgui/components/index.js | 49 - .../{contants.test.ts => constants.test.ts} | 2 + tgui/packages/tgui/constants.ts | 66 +- tgui/packages/tgui/constants/theme.ts | 31 + tgui/packages/tgui/debug/KitchenSink.js | 55 - tgui/packages/tgui/debug/KitchenSink.tsx | 65 + .../tgui/debug/{actions.js => actions.ts} | 0 tgui/packages/tgui/debug/hooks.js | 10 - tgui/packages/tgui/debug/hooks.ts | 12 + .../tgui/debug/{index.js => index.ts} | 0 .../debug/{middleware.js => middleware.ts} | 35 +- .../tgui/debug/{reducer.js => reducer.ts} | 11 +- tgui/packages/tgui/debug/selectors.js | 7 - tgui/packages/tgui/debug/selectors.ts | 9 + tgui/packages/tgui/debug/use-debug.ts | 27 + tgui/packages/tgui/drag.ts | 217 +- tgui/packages/tgui/events.test.ts | 66 - tgui/packages/tgui/events.ts | 233 - tgui/packages/tgui/events/README.md | 114 + tgui/packages/tgui/events/act.ts | 101 + tgui/packages/tgui/events/handlers/assets.ts | 27 + .../packages/tgui/events/handlers/chunking.ts | 66 + tgui/packages/tgui/events/handlers/ping.ts | 5 + .../packages/tgui/events/handlers/suspense.ts | 55 + tgui/packages/tgui/events/handlers/update.ts | 100 + tgui/packages/tgui/events/listeners.ts | 29 + tgui/packages/tgui/events/store.ts | 37 + tgui/packages/tgui/events/types.ts | 48 + tgui/packages/tgui/format.test.ts | 118 - tgui/packages/tgui/format.ts | 169 - tgui/packages/tgui/hotkeys.ts | 220 - tgui/packages/tgui/http.ts | 16 - tgui/packages/tgui/index.tsx | 65 +- tgui/packages/tgui/interfaces/AICard.tsx | 22 +- .../tgui/interfaces/AIMaintenance.tsx | 16 +- tgui/packages/tgui/interfaces/ATM.tsx | 61 +- .../tgui/interfaces/AccessTerminal.tsx | 10 +- .../tgui/interfaces/AccountDatabase.tsx | 72 +- tgui/packages/tgui/interfaces/AgentID.tsx | 40 +- tgui/packages/tgui/interfaces/AirAlarm.tsx | 376 +- .../tgui/interfaces/AirlockConsoleAccess.tsx | 10 +- .../interfaces/AirlockConsoleAdvanced.tsx | 14 +- .../interfaces/AirlockConsoleStandard.tsx | 14 +- .../tgui/interfaces/AlarmMonitoring.tsx | 8 +- tgui/packages/tgui/interfaces/AlertModal.tsx | 31 +- tgui/packages/tgui/interfaces/Apc.tsx | 28 +- .../tgui/interfaces/AppearanceChanger.tsx | 60 +- tgui/packages/tgui/interfaces/AreaAtmos.tsx | 24 +- tgui/packages/tgui/interfaces/ArmorValues.tsx | 18 +- .../packages/tgui/interfaces/AtmoScrubber.tsx | 33 +- .../tgui/interfaces/AtmosAlarmControl.tsx | 18 +- .../tgui/interfaces/AtmosAlertComputer.tsx | 6 +- .../packages/tgui/interfaces/AtmosControl.tsx | 12 +- .../tgui/interfaces/AtmosControlInjector.tsx | 14 +- .../interfaces/AtmosControlSupermatter.tsx | 29 +- .../tgui/interfaces/AtmosControlTank.tsx | 29 +- .../interfaces/AtmosPressureRegulator.tsx | 17 +- tgui/packages/tgui/interfaces/AtmosPump.tsx | 19 +- tgui/packages/tgui/interfaces/Autolathe.tsx | 42 +- .../tgui/interfaces/AwayShuttleManifest.tsx | 28 +- .../tgui/interfaces/BluespaceDriveControl.tsx | 24 +- .../tgui/interfaces/BluespaceDriveJump.tsx | 33 +- tgui/packages/tgui/interfaces/BodyScanner.tsx | 38 +- .../packages/tgui/interfaces/BotanyEditor.tsx | 19 +- .../tgui/interfaces/BotanyIsolator.tsx | 15 +- .../tgui/interfaces/CameraMonitoring.tsx | 28 +- tgui/packages/tgui/interfaces/Canister.tsx | 26 +- .../packages/tgui/interfaces/CargoControl.tsx | 47 +- .../tgui/interfaces/CargoDelivery.tsx | 32 +- tgui/packages/tgui/interfaces/CargoOrder.tsx | 51 +- tgui/packages/tgui/interfaces/CargoPack.tsx | 8 +- .../{Changelog.js => Changelog.jsx} | 35 +- tgui/packages/tgui/interfaces/ChatClient.tsx | 151 +- tgui/packages/tgui/interfaces/ChemCodex.tsx | 16 +- tgui/packages/tgui/interfaces/ChemMaster.tsx | 48 +- .../tgui/interfaces/ChemicalDispenser.tsx | 26 +- .../tgui/interfaces/CircuitPrinter.tsx | 21 +- tgui/packages/tgui/interfaces/CleanBot.tsx | 6 +- .../tgui/interfaces/CommandCommunications.tsx | 51 +- .../tgui/interfaces/ComputerFabricator.tsx | 12 +- .../packages/tgui/interfaces/CookingCodex.tsx | 27 +- .../tgui/interfaces/CoolingUnitThermostat.tsx | 23 +- .../tgui/interfaces/CrusherControl.tsx | 23 +- tgui/packages/tgui/interfaces/CryoTube.tsx | 30 +- tgui/packages/tgui/interfaces/DamageMenu.tsx | 14 +- .../tgui/interfaces/DiagnosticsUnit.tsx | 17 +- .../tgui/interfaces/DigitalWarrant.tsx | 24 +- .../packages/tgui/interfaces/DisposalUnit.tsx | 17 +- .../packages/tgui/interfaces/DnaForensics.tsx | 16 +- .../tgui/interfaces/DockingAirlockConsole.tsx | 14 +- tgui/packages/tgui/interfaces/Docks.tsx | 8 +- tgui/packages/tgui/interfaces/Doors.tsx | 20 +- tgui/packages/tgui/interfaces/DropPod.tsx | 8 +- tgui/packages/tgui/interfaces/EchoEditor.tsx | 8 +- .../tgui/interfaces/EnginesControl.tsx | 14 +- tgui/packages/tgui/interfaces/EnvEditor.tsx | 8 +- .../tgui/interfaces/EscapePodBerthConsole.tsx | 8 +- .../tgui/interfaces/EscapePodConsole.tsx | 8 +- .../EscapeShuttleControlConsole.tsx | 16 +- .../tgui/interfaces/FactionSelect.tsx | 51 +- tgui/packages/tgui/interfaces/Fax.tsx | 42 +- tgui/packages/tgui/interfaces/FileManager.tsx | 25 +- tgui/packages/tgui/interfaces/FireAlarm.tsx | 19 +- tgui/packages/tgui/interfaces/FlavorText.tsx | 11 +- tgui/packages/tgui/interfaces/FollowMenu.tsx | 23 +- tgui/packages/tgui/interfaces/Freezer.tsx | 14 +- tgui/packages/tgui/interfaces/FusionCodex.tsx | 14 +- .../tgui/interfaces/FusionCoreControl.tsx | 32 +- .../tgui/interfaces/FusionGyrotronControl.tsx | 20 +- .../tgui/interfaces/FusionInjectorControl.tsx | 22 +- tgui/packages/tgui/interfaces/GPS.tsx | 25 +- tgui/packages/tgui/interfaces/GeoScanner.tsx | 13 +- .../packages/tgui/interfaces/GhostSpawner.tsx | 134 +- tgui/packages/tgui/interfaces/GunTracker.tsx | 6 +- tgui/packages/tgui/interfaces/Gunnery.tsx | 39 +- tgui/packages/tgui/interfaces/Hardsuit.tsx | 52 +- .../tgui/interfaces/HealthAnalyzer.tsx | 13 +- tgui/packages/tgui/interfaces/Helm.tsx | 779 +- .../tgui/interfaces/HivenetManifest.tsx | 19 +- tgui/packages/tgui/interfaces/Holopad.tsx | 28 +- tgui/packages/tgui/interfaces/Howitzer.tsx | 11 +- .../tgui/interfaces/IDCardModification.tsx | 16 +- .../tgui/interfaces/IPCDiagnostics.tsx | 41 +- .../tgui/interfaces/ImplantTracker.tsx | 6 +- tgui/packages/tgui/interfaces/Infrared.tsx | 12 +- tgui/packages/tgui/interfaces/Jammer.tsx | 8 +- tgui/packages/tgui/interfaces/Janitor.tsx | 8 +- tgui/packages/tgui/interfaces/Jukebox.tsx | 17 +- .../tgui/interfaces/KineticHarvester.tsx | 20 +- tgui/packages/tgui/interfaces/LateJoin.tsx | 41 +- tgui/packages/tgui/interfaces/LawManager.tsx | 56 +- .../tgui/interfaces/LibraryComputer.tsx | 67 +- .../tgui/interfaces/LibraryPublicComputer.tsx | 29 +- .../tgui/interfaces/LibraryScanner.tsx | 8 +- .../tgui/interfaces/LightingControl.tsx | 34 +- .../tgui/interfaces/ListInputModal.tsx | 257 - .../ListInputWindow/ListInputModal.tsx | 225 + .../tgui/interfaces/ListInputWindow/index.tsx | 44 + tgui/packages/tgui/interfaces/ListViewer.tsx | 12 +- tgui/packages/tgui/interfaces/LoreConsole.tsx | 13 +- tgui/packages/tgui/interfaces/Maglock.tsx | 18 +- tgui/packages/tgui/interfaces/Map.tsx | 29 +- tgui/packages/tgui/interfaces/Merchant.tsx | 117 +- .../tgui/interfaces/MiningProcessor.tsx | 8 +- .../packages/tgui/interfaces/MiningVendor.tsx | 8 +- tgui/packages/tgui/interfaces/MobTracker.tsx | 18 +- .../tgui/interfaces/MultiDockingConsole.tsx | 8 +- tgui/packages/tgui/interfaces/Multitool.tsx | 16 +- tgui/packages/tgui/interfaces/NTMonitor.tsx | 14 +- tgui/packages/tgui/interfaces/NTNetRelay.tsx | 10 +- tgui/packages/tgui/interfaces/NTOSArcade.tsx | 18 +- .../tgui/interfaces/NTOSClientManager.tsx | 28 +- tgui/packages/tgui/interfaces/NTOSConfig.tsx | 44 +- .../tgui/interfaces/NTOSDownloader.tsx | 24 +- tgui/packages/tgui/interfaces/NTOSMain.tsx | 10 +- .../tgui/interfaces/NTOSNewsBrowser.tsx | 29 +- .../packages/tgui/interfaces/NarratePanel.tsx | 46 +- tgui/packages/tgui/interfaces/Nav.tsx | 128 +- .../tgui/interfaces/NeuralConfiguration.tsx | 15 +- tgui/packages/tgui/interfaces/NuclearBomb.tsx | 8 +- .../tgui/interfaces/NumberInputModal.tsx | 194 +- .../packages/tgui/interfaces/OdysseyPanel.tsx | 22 +- tgui/packages/tgui/interfaces/OmniFilter.tsx | 10 +- tgui/packages/tgui/interfaces/OmniMixer.tsx | 10 +- tgui/packages/tgui/interfaces/Operating.tsx | 22 +- .../tgui/interfaces/OrderTerminal.tsx | 34 +- tgui/packages/tgui/interfaces/OreDetector.tsx | 10 +- .../tgui/interfaces/OverlayChoice.tsx | 22 +- .../tgui/interfaces/OxyRegenerator.tsx | 8 +- tgui/packages/tgui/interfaces/PenalMechs.tsx | 8 +- .../tgui/interfaces/PermissionsPanel.tsx | 14 +- tgui/packages/tgui/interfaces/Photocopier.tsx | 31 +- tgui/packages/tgui/interfaces/PlayerPanel.tsx | 18 +- .../tgui/interfaces/PortableGenerator.tsx | 24 +- .../packages/tgui/interfaces/PortablePump.tsx | 22 +- .../packages/tgui/interfaces/PowerMonitor.tsx | 28 +- tgui/packages/tgui/interfaces/Proximity.tsx | 22 +- tgui/packages/tgui/interfaces/PsionicShop.tsx | 32 +- tgui/packages/tgui/interfaces/PussyWagon.tsx | 19 +- tgui/packages/tgui/interfaces/QuikPay.tsx | 44 +- tgui/packages/tgui/interfaces/RCON.tsx | 38 +- tgui/packages/tgui/interfaces/Radio.tsx | 20 +- tgui/packages/tgui/interfaces/Records.tsx | 191 +- .../tgui/interfaces/RequestsConsole.tsx | 10 +- .../tgui/interfaces/RoboticsComputer.tsx | 6 +- .../tgui/interfaces/RoboticsControl.tsx | 10 +- tgui/packages/tgui/interfaces/RoundStatus.tsx | 22 +- tgui/packages/tgui/interfaces/SMES.tsx | 38 +- tgui/packages/tgui/interfaces/SeedStorage.tsx | 10 +- tgui/packages/tgui/interfaces/Sensors.tsx | 641 +- .../tgui/interfaces/ShieldCapacitor.tsx | 18 +- .../tgui/interfaces/ShieldGenerator.tsx | 24 +- .../tgui/interfaces/ShuttleControlConsole.tsx | 8 +- .../interfaces/ShuttleControlConsoleLift.tsx | 8 +- .../interfaces/ShuttleControlConsoleMulti.tsx | 8 +- .../ShuttleControlConsoleMultiAntag.tsx | 9 +- .../ShuttleControlConsoleMultiExplore.tsx | 9 +- .../ShuttleControlConsoleMultiLift.tsx | 8 +- tgui/packages/tgui/interfaces/Signaler.tsx | 20 +- .../tgui/interfaces/SimpleDockingConsole.tsx | 8 +- tgui/packages/tgui/interfaces/Sleeper.tsx | 27 +- tgui/packages/tgui/interfaces/SmartFridge.tsx | 43 +- tgui/packages/tgui/interfaces/SongEditor.tsx | 8 +- .../tgui/interfaces/SongUsageInfo.tsx | 6 +- tgui/packages/tgui/interfaces/SpaceHeater.tsx | 16 +- .../tgui/interfaces/StackingMachine.tsx | 12 +- .../tgui/interfaces/StirlingEngine.tsx | 10 +- tgui/packages/tgui/interfaces/SuitCycler.tsx | 22 +- tgui/packages/tgui/interfaces/SuitSensors.tsx | 14 +- tgui/packages/tgui/interfaces/Supermatter.tsx | 18 +- .../tgui/interfaces/SuspensionGenerator.tsx | 15 +- tgui/packages/tgui/interfaces/Synthesizer.tsx | 14 +- .../tgui/interfaces/SyntheticFabricator.tsx | 39 +- tgui/packages/tgui/interfaces/Tank.tsx | 23 +- .../tgui/interfaces/TankDispenser.tsx | 8 +- tgui/packages/tgui/interfaces/Teleporter.tsx | 16 +- .../tgui/interfaces/TextInputModal.tsx | 89 +- tgui/packages/tgui/interfaces/Timer.tsx | 87 +- tgui/packages/tgui/interfaces/TrainEngine.tsx | 15 +- .../tgui/interfaces/TransferValve.tsx | 16 +- .../tgui/interfaces/TurbineComputer.js | 23 +- tgui/packages/tgui/interfaces/TurboLift.tsx | 8 +- .../tgui/interfaces/TurretControl.tsx | 18 +- .../tgui/interfaces/TurretControlPorta.tsx | 14 +- tgui/packages/tgui/interfaces/Uplink.tsx | 340 +- tgui/packages/tgui/interfaces/Vending.tsx | 31 +- .../tgui/interfaces/VitalsMonitor.tsx | 14 +- tgui/packages/tgui/interfaces/VotePanel.tsx | 27 +- tgui/packages/tgui/interfaces/Voting.tsx | 21 +- .../tgui/interfaces/WeaponsAnalyzer.tsx | 28 +- tgui/packages/tgui/interfaces/Wires.tsx | 149 +- .../tgui/interfaces/common/AccessConfig.js | 137 - .../tgui/interfaces/common/AccessConfig.tsx | 202 + .../common/{AccessList.js => AccessList.jsx} | 135 +- .../tgui/interfaces/common/AtmosControls.tsx | 82 +- .../tgui/interfaces/common/AtmosHandbook.tsx | 126 +- .../{BeakerContents.js => BeakerContents.tsx} | 2 +- .../interfaces/common/CharacterPreview.tsx | 2 +- .../tgui/interfaces/common/EditableText.tsx | 27 +- .../tgui/interfaces/common/FakeTerminal.tsx | 58 + .../tgui/interfaces/common/GasmixParser.tsx | 137 - .../tgui/interfaces/common/InputButtons.tsx | 39 +- ...oticeBox.js => InterfaceLockNoticeBox.jsx} | 7 +- .../tgui/interfaces/common/JobToIcon.ts | 14 +- .../tgui/interfaces/common/Loader.tsx | 6 +- .../tgui/interfaces/common/LoadingScreen.tsx | 35 + .../tgui/interfaces/common/Manifest.tsx | 2 +- .../interfaces/common/ManifestSection.tsx | 35 +- .../tgui/interfaces/common/MinimapView.tsx | 4 +- .../tgui/interfaces/common/PaginatedBook.tsx | 404 + .../{PortableAtmos.js => PortableAtmos.jsx} | 9 +- .../{ReagentLookup.js => ReagentLookup.jsx} | 9 +- .../{RecipeLookup.js => RecipeLookup.jsx} | 31 +- .../tgui/interfaces/common/SearchBar.tsx | 58 + .../common/StatusDisplayControls.tsx | 61 +- .../tgui/interfaces/pAIDirectives.tsx | 6 +- tgui/packages/tgui/interfaces/pAIDoorjack.tsx | 8 +- tgui/packages/tgui/interfaces/pAIRadio.tsx | 12 +- .../tgui/interfaces/pAIRecruitment.tsx | 22 +- tgui/packages/tgui/layouts/Layout.js | 49 - tgui/packages/tgui/layouts/Layout.tsx | 79 + .../layouts/{NtosWindow.js => NtosWindow.tsx} | 120 +- tgui/packages/tgui/layouts/Pane.js | 40 - tgui/packages/tgui/layouts/Pane.tsx | 56 + tgui/packages/tgui/layouts/TitleBar.tsx | 73 + tgui/packages/tgui/layouts/Window.js | 212 - tgui/packages/tgui/layouts/Window.tsx | 199 + .../tgui/layouts/{index.js => index.ts} | 0 tgui/packages/tgui/links.test.ts | 79 - tgui/packages/tgui/links.ts | 46 - tgui/packages/tgui/logging.ts | 2 +- tgui/packages/tgui/package.json | 39 +- tgui/packages/tgui/process.ts | 30 + tgui/packages/tgui/renderer.ts | 67 +- tgui/packages/tgui/routes.tsx | 148 +- tgui/packages/tgui/sanitize.test.ts | 36 - tgui/packages/tgui/sanitize.ts | 12 +- tgui/packages/tgui/stack.ts | 28 + tgui/packages/tgui/store.ts | 126 - tgui/packages/tgui/stories/Blink.stories.js | 4 +- tgui/packages/tgui/stories/Blink.stories.tsx | 20 + .../tgui/stories/BlockQuote.stories.js | 4 +- .../tgui/stories/BlockQuote.stories.tsx | 24 + tgui/packages/tgui/stories/Box.stories.js | 4 +- tgui/packages/tgui/stories/Box.stories.tsx | 27 + tgui/packages/tgui/stories/Button.stories.js | 4 +- tgui/packages/tgui/stories/Button.stories.tsx | 67 + tgui/packages/tgui/stories/ByondUi.stories.js | 4 +- .../packages/tgui/stories/ByondUi.stories.tsx | 63 + .../tgui/stories/Collapsible.stories.js | 4 +- .../tgui/stories/Collapsible.stories.tsx | 24 + tgui/packages/tgui/stories/Flex.stories.js | 4 +- tgui/packages/tgui/stories/Flex.stories.tsx | 68 + tgui/packages/tgui/stories/Input.stories.js | 54 +- tgui/packages/tgui/stories/Input.stories.tsx | 74 + .../tgui/stories/LabeledList.stories.js | 4 +- .../tgui/stories/LabeledList.stories.tsx | 73 + tgui/packages/tgui/stories/Popper.stories.js | 2 +- .../tgui/stories/ProgressBar.stories.js | 6 +- .../tgui/stories/ProgressBar.stories.tsx | 54 + tgui/packages/tgui/stories/Stack.stories.js | 4 +- tgui/packages/tgui/stories/Stack.stories.tsx | 59 + tgui/packages/tgui/stories/Storage.stories.js | 4 +- .../packages/tgui/stories/Storage.stories.tsx | 42 + tgui/packages/tgui/stories/Tabs.stories.js | 6 +- tgui/packages/tgui/stories/Tabs.stories.tsx | 152 + tgui/packages/tgui/stories/Themes.stories.js | 4 +- tgui/packages/tgui/stories/Themes.stories.tsx | 28 + tgui/packages/tgui/stories/Tooltip.stories.js | 2 +- .../packages/tgui/stories/Tooltip.stories.tsx | 57 + tgui/packages/tgui/stories/common.js | 2 +- tgui/packages/tgui/stories/common.tsx | 19 + .../tgui/styles/assets/bg-deforest.svg | 3 + .../tgui/styles/atomic/candystripe.scss | 8 - .../tgui/styles/atomic/centered-image.scss | 7 - tgui/packages/tgui/styles/atomic/color.scss | 21 - .../tgui/styles/atomic/debug-layout.scss | 17 - .../packages/tgui/styles/atomic/fit-text.scss | 14 - tgui/packages/tgui/styles/atomic/links.scss | 12 - tgui/packages/tgui/styles/atomic/outline.scss | 47 - tgui/packages/tgui/styles/atomic/text.scss | 44 - tgui/packages/tgui/styles/base_original.scss | 32 + tgui/packages/tgui/styles/colors.scss | 52 +- .../packages/tgui/styles/colors_original.scss | 100 + .../tgui/styles/components/BlockQuote.scss | 20 - .../tgui/styles/components/Button.scss | 172 - .../tgui/styles/components/ColorBox.scss | 12 - .../tgui/styles/components/Dialog.scss | 105 - .../tgui/styles/components/Dimmer.scss | 22 - .../tgui/styles/components/Divider.scss | 27 - .../tgui/styles/components/Dropdown.scss | 80 - .../packages/tgui/styles/components/Flex.scss | 31 - .../packages/tgui/styles/components/Icon.scss | 25 - .../tgui/styles/components/Input.scss | 75 - .../packages/tgui/styles/components/Knob.scss | 131 - .../tgui/styles/components/LabeledList.scss | 49 - .../tgui/styles/components/MenuBar.scss | 75 - .../tgui/styles/components/Modal.scss | 14 - .../tgui/styles/components/NoticeBox.scss | 65 - .../tgui/styles/components/NumberInput.scss | 76 - .../tgui/styles/components/ProgressBar.scss | 63 - .../tgui/styles/components/RoundGauge.scss | 88 - .../tgui/styles/components/Section.scss | 143 - .../tgui/styles/components/Slider.scss | 54 - .../tgui/styles/components/Stack.scss | 35 - .../tgui/styles/components/Table.scss | 44 - .../packages/tgui/styles/components/Tabs.scss | 144 - .../tgui/styles/components/TextArea.scss | 90 - .../tgui/styles/components/Tooltip.scss | 24 - tgui/packages/tgui/styles/css-variables.scss | 13 + tgui/packages/tgui/styles/functions.scss | 62 +- .../tgui/styles/interfaces/Accounting.scss | 42 + .../tgui/styles/interfaces/AlertModal.scss | 10 +- .../tgui/styles/interfaces/AnomalyTower.scss | 33 + .../styles/interfaces/AntagInfoHeretic.scss | 193 + .../tgui/styles/interfaces/Changelog.scss | 13 + .../interfaces/CivCargoHoldTerminal.scss | 23 + .../tgui/styles/interfaces/ColorPicker.scss | 150 + .../tgui/styles/interfaces/CrewManifest.scss | 91 +- .../tgui/styles/interfaces/DeForestLogo.scss | 7 + .../styles/interfaces/DetectiveBoard.scss | 230 + .../tgui/styles/interfaces/Emojipedia.scss | 8 + .../tgui/styles/interfaces/EventLogger.scss | 16 + .../interfaces/ExperimentConfigure.scss | 108 + .../tgui/styles/interfaces/Fabricator.scss | 207 + .../tgui/styles/interfaces/HellishRunes.scss | 20 + .../tgui/styles/interfaces/HotKeysHelp.scss | 4 + .../tgui/styles/interfaces/Hypertorus.scss | 158 + .../styles/interfaces/IntegratedCircuit.scss | 143 + .../tgui/styles/interfaces/LibraryAdmin.scss | 18 + .../styles/interfaces/LibraryComputer.scss | 11 + .../tgui/styles/interfaces/ListInput.scss | 12 +- .../tgui/styles/interfaces/LoreConsole.scss | 17 - .../tgui/styles/interfaces/Mecha.scss | 41 + .../tgui/styles/interfaces/NtosMessenger.scss | 101 + .../tgui/styles/interfaces/NtosNanopaint.scss | 34 + .../tgui/styles/interfaces/NtosNotepad.scss | 43 + .../tgui/styles/interfaces/NuclearBomb.scss | 102 + .../styles/interfaces/OperatingComputer.scss | 25 + .../tgui/styles/interfaces/Orbit.scss | 19 + .../tgui/styles/interfaces/Paper.scss | 18 + .../styles/interfaces/PreferencesMenu.scss | 240 + .../tgui/styles/interfaces/Radio.scss | 53 - .../styles/interfaces/RequestManager.scss | 93 +- .../tgui/styles/interfaces/Roulette.scss | 96 + .../packages/tgui/styles/interfaces/Safe.scss | 92 + .../tgui/styles/interfaces/SlotMachine.scss | 186 + .../tgui/styles/interfaces/SpriteAuditor.scss | 3 + .../tgui/styles/interfaces/Techweb.scss | 68 + .../tgui/styles/interfaces/Trophycase.scss | 5 + .../tgui/styles/interfaces/Uplink.scss | 103 + tgui/packages/tgui/styles/layouts/Layout.scss | 62 +- .../tgui/styles/layouts/NtosHeader.scss | 28 + .../tgui/styles/layouts/NtosWindow.scss | 8 +- .../tgui/styles/layouts/TitleBar.scss | 186 +- tgui/packages/tgui/styles/layouts/Window.scss | 59 +- tgui/packages/tgui/styles/main.scss | 87 +- tgui/packages/tgui/styles/main_original.scss | 80 + tgui/packages/tgui/styles/reset.scss | 18 +- .../packages/tgui/styles/themes/abductor.scss | 77 +- tgui/packages/tgui/styles/themes/admin.scss | 24 +- .../tgui/styles/themes/cardtable.scss | 61 +- .../tgui/styles/themes/hackerman.scss | 60 +- .../tgui/styles/themes/hammertail.scss | 75 +- .../tgui/styles/themes/hephaestus.scss | 78 +- tgui/packages/tgui/styles/themes/idris.scss | 75 +- .../tgui/styles/themes/malfunction.scss | 75 +- .../tgui/styles/themes/nanotrasen.scss | 75 +- tgui/packages/tgui/styles/themes/neutral.scss | 44 +- tgui/packages/tgui/styles/themes/ntOS95.scss | 67 +- tgui/packages/tgui/styles/themes/ntos.scss | 39 +- .../packages/tgui/styles/themes/ntos_cat.scss | 66 +- .../tgui/styles/themes/ntos_darkmode.scss | 39 +- .../tgui/styles/themes/ntos_lightmode.scss | 48 +- .../tgui/styles/themes/ntos_spooky.scss | 81 +- .../tgui/styles/themes/ntos_synth.scss | 66 +- .../tgui/styles/themes/ntos_terminal.scss | 62 +- tgui/packages/tgui/styles/themes/paper.scss | 71 +- tgui/packages/tgui/styles/themes/retro.scss | 59 +- .../tgui/styles/themes/spookyconsole.scss | 84 +- .../tgui/styles/themes/syndicate.scss | 75 +- tgui/packages/tgui/styles/themes/vaurca.scss | 63 +- tgui/packages/tgui/styles/themes/wizard.scss | 77 +- .../tgui/styles/themes/zavodskoi.scss | 73 +- tgui/packages/tgui/styles/themes/zenghu.scss | 78 +- tgui/public/bg-deforest.svg | 3 + tgui/public/bg-nanotrasen.svg | 8 + tgui/public/helpers.min.js | 1 + tgui/public/iframe.html | 283 +- tgui/public/ntos-error.min.css | 1 + tgui/public/tgui-polyfill.min.js | 1 - tgui/public/tgui.html | 744 +- tgui/public/transparency_checkerboard.svg | 10 + tgui/rspack.config-dev.ts | 29 + tgui/rspack.config.ts | 141 + tgui/tsconfig.json | 48 +- tgui/webpack.config.js | 15 +- tgui/yarn.lock | 10379 ---------------- tools/bootstrap/javascript.bat | 27 + tools/bootstrap/javascript.sh | 32 + tools/bootstrap/javascript_.ps1 | 116 + tools/bootstrap/node | 73 - tools/bootstrap/node.bat | 20 - tools/bootstrap/node_.ps1 | 60 - tools/build/build | 4 - tools/build/build.bat | 2 +- tools/build/build.sh | 5 + tools/build/{build.js => build.ts} | 259 +- tools/build/bun.lock | 19 + tools/build/juke/index.d.ts | 481 +- tools/build/juke/index.js | 3352 ++--- tools/build/lib/bun.ts | 28 + tools/build/lib/byond.js | 195 - tools/build/lib/byond.ts | 237 + tools/build/lib/download.ts | 39 + tools/build/lib/helpers.ts | 11 + tools/build/lib/tgs.ts | 15 + tools/build/lib/{winreg.js => winreg.ts} | 32 +- tools/build/lib/yarn.js | 16 - tools/build/package.json | 7 +- tools/requirements.txt | 3 +- tools/tgs_scripts/PreCompile.sh | 2 +- 930 files changed, 23130 insertions(+), 50520 deletions(-) create mode 100644 .github/actions/setup_bun/action.yml create mode 100644 .github/actions/setup_node/action.yml create mode 100644 .github/workflows/update_tgui.yml create mode 100644 biome.json create mode 100644 bun.lock create mode 100644 code/__DEFINES/dcs/signals/signals_tgui.dm create mode 100644 code/__DEFINES/tgs.config.dm delete mode 100644 code/controllers/subsystems/processing/nanoui.dm rename code/controllers/subsystems/{processing => }/tgui.dm (71%) create mode 100644 code/datums/chat_payload.dm delete mode 100644 code/modules/nano/modules/nano_module.dm delete mode 100644 code/modules/nano/nanoexternal.dm delete mode 100644 code/modules/nano/nanomapgen.dm delete mode 100644 code/modules/nano/nanoui.dm create mode 100644 code/modules/tgchat/README.md create mode 100644 code/modules/tgs/core/byond_world_export.dm rename code/modules/{nano => tgui}/modules/follow_menu.dm (100%) rename code/modules/{nano => tgui}/modules/human_appearance.dm (100%) rename code/modules/{nano => tgui}/modules/narrate_panel.dm (100%) create mode 100644 code/modules/tgui_input/checkboxes.dm create mode 100644 code/modules/tgui_input/keycombo.dm create mode 100644 html/changelogs/Bat-TGUIReactMigration.yml delete mode 100644 nano/TemplatesGuide.txt delete mode 100644 nano/To BYOND Cache.bat delete mode 100644 nano/css/icons.css delete mode 100644 nano/css/layout_basic.css delete mode 100644 nano/css/layout_default.css delete mode 100644 nano/css/shared.css delete mode 100644 nano/images/c_charging.gif delete mode 100644 nano/images/c_discharging.gif delete mode 100644 nano/images/c_max.gif delete mode 100644 nano/images/status_icons/alarm_green.gif delete mode 100644 nano/images/status_icons/alarm_red.gif delete mode 100644 nano/images/status_icons/batt_100.gif delete mode 100644 nano/images/status_icons/batt_20.gif delete mode 100644 nano/images/status_icons/batt_40.gif delete mode 100644 nano/images/status_icons/batt_5.gif delete mode 100644 nano/images/status_icons/batt_60.gif delete mode 100644 nano/images/status_icons/batt_80.gif delete mode 100644 nano/images/status_icons/charging.gif delete mode 100644 nano/images/status_icons/downloader_finished.gif delete mode 100644 nano/images/status_icons/downloader_running.gif delete mode 100644 nano/images/status_icons/ntnrc_idle.gif delete mode 100644 nano/images/status_icons/ntnrc_new.gif delete mode 100644 nano/images/status_icons/power_norm.gif delete mode 100644 nano/images/status_icons/power_warn.gif delete mode 100644 nano/images/status_icons/sig_high.gif delete mode 100644 nano/images/status_icons/sig_lan.gif delete mode 100644 nano/images/status_icons/sig_low.gif delete mode 100644 nano/images/status_icons/sig_none.gif delete mode 100644 nano/images/uiBackground-Syndicate.png delete mode 100644 nano/images/uiBackground.png delete mode 100644 nano/images/uiBasicBackground.png delete mode 100644 nano/images/uiIcons16.png delete mode 100644 nano/images/uiIcons16Green.png delete mode 100644 nano/images/uiIcons16Red.png delete mode 100644 nano/images/uiIcons24.png delete mode 100644 nano/images/uiLinkPendingIcon.gif delete mode 100644 nano/images/uiMaskBackground.png delete mode 100644 nano/images/uiNoticeBackground.jpg delete mode 100644 nano/images/uiTitleFluff-Syndicate.png delete mode 100644 nano/images/uiTitleFluff.png delete mode 100644 nano/js/libraries.min.js delete mode 100644 nano/js/libraries/doT.js delete mode 100644 nano/js/libraries/jquery.timers.js delete mode 100644 nano/js/nano_base_callbacks.js delete mode 100644 nano/js/nano_base_helpers.js delete mode 100644 nano/js/nano_state.js delete mode 100644 nano/js/nano_state_default.js delete mode 100644 nano/js/nano_state_manager.js delete mode 100644 nano/js/nano_template.js delete mode 100644 nano/js/nano_utility.js delete mode 100644 nano/mapbase1024.png delete mode 100644 nano/templates/engines_control.tmpl delete mode 100644 nano/templates/hardsuit.tmpl delete mode 100644 nano/templates/layout_basic.tmpl delete mode 100644 nano/templates/layout_default.tmpl create mode 100644 package.json delete mode 100644 tgui/.eslintignore delete mode 100644 tgui/.eslintrc-sonar.yml delete mode 100644 tgui/.eslintrc.yml create mode 100644 tgui/.swcrc delete mode 100644 tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs delete mode 100644 tgui/.yarn/releases/yarn-3.3.1.cjs delete mode 100644 tgui/.yarn/sdks/eslint/bin/eslint.js delete mode 100644 tgui/.yarn/sdks/eslint/lib/api.js delete mode 100644 tgui/.yarn/sdks/eslint/package.json delete mode 100644 tgui/.yarn/sdks/integrations.yml delete mode 100644 tgui/.yarn/sdks/prettier/bin/prettier.cjs delete mode 100644 tgui/.yarn/sdks/prettier/index.cjs delete mode 100644 tgui/.yarn/sdks/prettier/package.json delete mode 100644 tgui/.yarn/sdks/typescript/bin/tsc delete mode 100644 tgui/.yarn/sdks/typescript/bin/tsserver delete mode 100644 tgui/.yarn/sdks/typescript/lib/tsc.js delete mode 100644 tgui/.yarn/sdks/typescript/lib/tsserver.js delete mode 100644 tgui/.yarn/sdks/typescript/lib/tsserverlibrary.js delete mode 100644 tgui/.yarn/sdks/typescript/lib/typescript.js delete mode 100644 tgui/.yarn/sdks/typescript/package.json delete mode 100644 tgui/.yarnrc.yml delete mode 100644 tgui/babel.config.js create mode 100644 tgui/bunfig.toml delete mode 100644 tgui/docs/component-reference.md create mode 100644 tgui/docs/state-usage.md create mode 100644 tgui/happydom.ts create mode 100644 tgui/packages/common/assets.ts delete mode 100644 tgui/packages/common/collections.spec.ts delete mode 100644 tgui/packages/common/color.js delete mode 100644 tgui/packages/common/events.js delete mode 100644 tgui/packages/common/exhaustive.ts delete mode 100644 tgui/packages/common/fp.js delete mode 100644 tgui/packages/common/keycodes.js delete mode 100644 tgui/packages/common/keys.ts delete mode 100644 tgui/packages/common/math.ts rename tgui/packages/common/{perf.js => perf.ts} (50%) delete mode 100644 tgui/packages/common/random.ts delete mode 100644 tgui/packages/common/react.spec.ts delete mode 100644 tgui/packages/common/react.ts delete mode 100644 tgui/packages/common/storage.js create mode 100644 tgui/packages/common/storage.ts delete mode 100644 tgui/packages/common/string.babel-plugin.cjs delete mode 100644 tgui/packages/common/string.js delete mode 100644 tgui/packages/common/timer.js create mode 100644 tgui/packages/common/type-safety.test.ts create mode 100644 tgui/packages/common/type-safety.ts delete mode 100644 tgui/packages/common/types.ts delete mode 100644 tgui/packages/common/uuid.js delete mode 100644 tgui/packages/common/vector.js create mode 100644 tgui/packages/common/vector.ts rename tgui/packages/tgfont/{README_ICON_TUTORIAL.txt => README_ICON_TUTORIAL.md} (100%) delete mode 100644 tgui/packages/tgfont/config.cjs delete mode 100644 tgui/packages/tgfont/mkdist.cjs delete mode 100644 tgui/packages/tgfont/static/tgfont.eot create mode 100644 tgui/packages/tgfont/svgtofont.mjs delete mode 100644 tgui/packages/tgui-bench/entrypoint.tsx delete mode 100644 tgui/packages/tgui-bench/index.js delete mode 100644 tgui/packages/tgui-bench/lib/benchmark.d.ts delete mode 100644 tgui/packages/tgui-bench/lib/benchmark.js delete mode 100644 tgui/packages/tgui-bench/package.json delete mode 100644 tgui/packages/tgui-bench/tests/Button.test.tsx delete mode 100644 tgui/packages/tgui-bench/tests/Flex.test.tsx delete mode 100644 tgui/packages/tgui-bench/tests/Stack.test.tsx delete mode 100644 tgui/packages/tgui-bench/tests/Tooltip.test.tsx create mode 100644 tgui/packages/tgui-chat-dark/index.ts delete mode 100644 tgui/packages/tgui-dev-server/dreamseeker.js create mode 100644 tgui/packages/tgui-dev-server/dreamseeker.ts delete mode 100644 tgui/packages/tgui-dev-server/index.js create mode 100644 tgui/packages/tgui-dev-server/index.ts delete mode 100644 tgui/packages/tgui-dev-server/link/client.cjs create mode 100644 tgui/packages/tgui-dev-server/link/client.ts rename tgui/packages/tgui-dev-server/link/{retrace.js => retrace.ts} (56%) delete mode 100644 tgui/packages/tgui-dev-server/link/server.js create mode 100644 tgui/packages/tgui-dev-server/link/server.ts delete mode 100644 tgui/packages/tgui-dev-server/logging.js create mode 100644 tgui/packages/tgui-dev-server/logging.ts rename tgui/packages/tgui-dev-server/{reloader.js => reloader.ts} (52%) rename tgui/packages/tgui-dev-server/{require.js => require.ts} (73%) delete mode 100644 tgui/packages/tgui-dev-server/util.js create mode 100644 tgui/packages/tgui-dev-server/util.ts delete mode 100644 tgui/packages/tgui-dev-server/webpack.js create mode 100644 tgui/packages/tgui-dev-server/webpack.ts rename tgui/packages/tgui-dev-server/{winreg.js => winreg.ts} (69%) rename tgui/packages/tgui-panel/{Notifications.js => Notifications.tsx} (80%) rename tgui/packages/tgui-panel/{Panel.js => Panel.tsx} (50%) create mode 100644 tgui/packages/tgui-panel/app.tsx rename tgui/packages/tgui-panel/audio/{NowPlayingWidget.js => NowPlayingWidget.tsx} (51%) create mode 100644 tgui/packages/tgui-panel/audio/atoms.ts create mode 100644 tgui/packages/tgui-panel/audio/handlers.ts delete mode 100644 tgui/packages/tgui-panel/audio/hooks.js delete mode 100644 tgui/packages/tgui-panel/audio/index.js delete mode 100644 tgui/packages/tgui-panel/audio/middleware.js delete mode 100644 tgui/packages/tgui-panel/audio/reducer.js delete mode 100644 tgui/packages/tgui-panel/audio/selectors.js delete mode 100644 tgui/packages/tgui-panel/chat/ChatPageSettings.js create mode 100644 tgui/packages/tgui-panel/chat/ChatPageSettings.tsx delete mode 100644 tgui/packages/tgui-panel/chat/ChatPanel.js create mode 100644 tgui/packages/tgui-panel/chat/ChatPanel.tsx delete mode 100644 tgui/packages/tgui-panel/chat/ChatTabs.js create mode 100644 tgui/packages/tgui-panel/chat/ChatTabs.tsx delete mode 100644 tgui/packages/tgui-panel/chat/actions.js create mode 100644 tgui/packages/tgui-panel/chat/atom.ts rename tgui/packages/tgui-panel/chat/{constants.js => constants.ts} (83%) create mode 100644 tgui/packages/tgui-panel/chat/handlers.ts create mode 100644 tgui/packages/tgui-panel/chat/helpers.ts delete mode 100644 tgui/packages/tgui-panel/chat/index.js delete mode 100644 tgui/packages/tgui-panel/chat/middleware.js create mode 100644 tgui/packages/tgui-panel/chat/migration.ts delete mode 100644 tgui/packages/tgui-panel/chat/model.js create mode 100644 tgui/packages/tgui-panel/chat/model.ts delete mode 100644 tgui/packages/tgui-panel/chat/reducer.js rename tgui/packages/tgui-panel/chat/{renderer.js => renderer.tsx} (68%) rename tgui/packages/tgui-panel/chat/{replaceInTextNode.js => replaceInTextNode.ts} (59%) delete mode 100644 tgui/packages/tgui-panel/chat/selectors.js create mode 100644 tgui/packages/tgui-panel/chat/types.ts create mode 100644 tgui/packages/tgui-panel/chat/use-chat-pages.ts create mode 100644 tgui/packages/tgui-panel/chat/use-chat-persistence.ts create mode 100644 tgui/packages/tgui-panel/events/handlers/assets.ts create mode 100644 tgui/packages/tgui-panel/events/handlers/roundrestart.ts create mode 100644 tgui/packages/tgui-panel/events/listeners.ts create mode 100644 tgui/packages/tgui-panel/events/store.ts delete mode 100644 tgui/packages/tgui-panel/game/actions.js create mode 100644 tgui/packages/tgui-panel/game/atoms.ts rename tgui/packages/tgui-panel/game/{constants.js => constants.ts} (100%) delete mode 100644 tgui/packages/tgui-panel/game/hooks.js delete mode 100644 tgui/packages/tgui-panel/game/index.js delete mode 100644 tgui/packages/tgui-panel/game/middleware.js delete mode 100644 tgui/packages/tgui-panel/game/reducer.js delete mode 100644 tgui/packages/tgui-panel/game/selectors.js create mode 100644 tgui/packages/tgui-panel/game/use-keep-alive.ts delete mode 100644 tgui/packages/tgui-panel/index.js create mode 100644 tgui/packages/tgui-panel/index.tsx rename tgui/packages/tgui-panel/ping/{PingIndicator.js => PingIndicator.tsx} (57%) delete mode 100644 tgui/packages/tgui-panel/ping/actions.js create mode 100644 tgui/packages/tgui-panel/ping/atoms.ts rename tgui/packages/tgui-panel/ping/{constants.js => constants.ts} (100%) create mode 100644 tgui/packages/tgui-panel/ping/handlers.ts create mode 100644 tgui/packages/tgui-panel/ping/helpers.ts delete mode 100644 tgui/packages/tgui-panel/ping/index.js delete mode 100644 tgui/packages/tgui-panel/ping/middleware.js delete mode 100644 tgui/packages/tgui-panel/ping/reducer.js delete mode 100644 tgui/packages/tgui-panel/ping/selectors.js create mode 100644 tgui/packages/tgui-panel/settings/SettingsGeneral.tsx delete mode 100644 tgui/packages/tgui-panel/settings/SettingsPanel.js create mode 100644 tgui/packages/tgui-panel/settings/SettingsPanel.tsx create mode 100644 tgui/packages/tgui-panel/settings/SettingsStatPanel.tsx create mode 100644 tgui/packages/tgui-panel/settings/TextHighlight.tsx delete mode 100644 tgui/packages/tgui-panel/settings/actions.js create mode 100644 tgui/packages/tgui-panel/settings/atoms.ts delete mode 100644 tgui/packages/tgui-panel/settings/constants.js create mode 100644 tgui/packages/tgui-panel/settings/constants.ts create mode 100644 tgui/packages/tgui-panel/settings/helpers.ts delete mode 100644 tgui/packages/tgui-panel/settings/hooks.js delete mode 100644 tgui/packages/tgui-panel/settings/index.js delete mode 100644 tgui/packages/tgui-panel/settings/middleware.ts create mode 100644 tgui/packages/tgui-panel/settings/migration.ts delete mode 100644 tgui/packages/tgui-panel/settings/model.js delete mode 100644 tgui/packages/tgui-panel/settings/reducer.js delete mode 100644 tgui/packages/tgui-panel/settings/selectors.js create mode 100644 tgui/packages/tgui-panel/settings/settingsImExport.ts rename tgui/packages/tgui-panel/{ => settings}/themes.ts (64%) create mode 100644 tgui/packages/tgui-panel/settings/types.ts create mode 100644 tgui/packages/tgui-panel/settings/use-highlights.ts create mode 100644 tgui/packages/tgui-panel/settings/use-settings.ts create mode 100644 tgui/packages/tgui-panel/styles/components/UnreadCount.scss delete mode 100644 tgui/packages/tgui-panel/telemetry.js create mode 100644 tgui/packages/tgui-panel/telemetry/constants.ts create mode 100644 tgui/packages/tgui-panel/telemetry/handlers.ts create mode 100644 tgui/packages/tgui-panel/telemetry/helpers.ts delete mode 100644 tgui/packages/tgui-polyfill/00-html5shiv.js delete mode 100644 tgui/packages/tgui-polyfill/01-ie8.js delete mode 100644 tgui/packages/tgui-polyfill/02-dom4.js delete mode 100644 tgui/packages/tgui-polyfill/03-css-om.js delete mode 100644 tgui/packages/tgui-polyfill/10-misc.js delete mode 100644 tgui/packages/tgui-polyfill/index.js delete mode 100644 tgui/packages/tgui-polyfill/package.json delete mode 100644 tgui/packages/tgui-say/styles/button.scss delete mode 100644 tgui/packages/tgui-say/styles/content.scss delete mode 100644 tgui/packages/tgui-say/styles/dragzone.scss create mode 100644 tgui/packages/tgui-say/styles/styles.scss delete mode 100644 tgui/packages/tgui-say/styles/textarea.scss delete mode 100644 tgui/packages/tgui-say/styles/window.scss create mode 100644 tgui/packages/tgui-setup/helpers.js create mode 100644 tgui/packages/tgui-setup/ntos-error.css create mode 100644 tgui/packages/tgui-setup/package.json create mode 100644 tgui/packages/tgui/App.tsx create mode 100644 tgui/packages/tgui/__mocks__/byond.ts create mode 100644 tgui/packages/tgui/__mocks__/layouts.tsx create mode 100644 tgui/packages/tgui/__mocks__/setup.ts create mode 100644 tgui/packages/tgui/assets/transparency_checkerboard.svg delete mode 100644 tgui/packages/tgui/components/AnimatedNumber.tsx delete mode 100644 tgui/packages/tgui/components/Autofocus.tsx delete mode 100644 tgui/packages/tgui/components/Blink.js delete mode 100644 tgui/packages/tgui/components/BlockQuote.js delete mode 100644 tgui/packages/tgui/components/BodyZoneSelector.tsx delete mode 100644 tgui/packages/tgui/components/Box.tsx delete mode 100644 tgui/packages/tgui/components/Button.js delete mode 100644 tgui/packages/tgui/components/ByondUi.js delete mode 100644 tgui/packages/tgui/components/Chart.js delete mode 100644 tgui/packages/tgui/components/Collapsible.js delete mode 100644 tgui/packages/tgui/components/ColorBox.js delete mode 100644 tgui/packages/tgui/components/Dialog.tsx delete mode 100644 tgui/packages/tgui/components/Dimmer.js delete mode 100644 tgui/packages/tgui/components/Divider.js delete mode 100644 tgui/packages/tgui/components/DraggableControl.js delete mode 100644 tgui/packages/tgui/components/Dropdown.js delete mode 100644 tgui/packages/tgui/components/FitText.tsx delete mode 100644 tgui/packages/tgui/components/Flex.tsx delete mode 100644 tgui/packages/tgui/components/Grid.js delete mode 100644 tgui/packages/tgui/components/Icon.js delete mode 100644 tgui/packages/tgui/components/InfinitePlane.js delete mode 100644 tgui/packages/tgui/components/Input.js delete mode 100644 tgui/packages/tgui/components/KeyListener.tsx delete mode 100644 tgui/packages/tgui/components/Knob.js delete mode 100644 tgui/packages/tgui/components/LabeledControls.js delete mode 100644 tgui/packages/tgui/components/LabeledList.tsx delete mode 100644 tgui/packages/tgui/components/MenuBar.tsx delete mode 100644 tgui/packages/tgui/components/Modal.js delete mode 100644 tgui/packages/tgui/components/NoticeBox.js delete mode 100644 tgui/packages/tgui/components/NumberInput.js delete mode 100644 tgui/packages/tgui/components/Popper.tsx delete mode 100644 tgui/packages/tgui/components/ProgressBar.js delete mode 100644 tgui/packages/tgui/components/RestrictedInput.js delete mode 100644 tgui/packages/tgui/components/RoundGauge.js delete mode 100644 tgui/packages/tgui/components/Section.tsx delete mode 100644 tgui/packages/tgui/components/Slider.js delete mode 100644 tgui/packages/tgui/components/Stack.tsx delete mode 100644 tgui/packages/tgui/components/StyleableSection.tsx delete mode 100644 tgui/packages/tgui/components/Table.js delete mode 100644 tgui/packages/tgui/components/Tabs.js delete mode 100644 tgui/packages/tgui/components/TextArea.js delete mode 100644 tgui/packages/tgui/components/TimeDisplay.js delete mode 100644 tgui/packages/tgui/components/Tooltip.tsx delete mode 100644 tgui/packages/tgui/components/TrackOutsideClicks.tsx delete mode 100644 tgui/packages/tgui/components/index.js rename tgui/packages/tgui/{contants.test.ts => constants.test.ts} (97%) create mode 100644 tgui/packages/tgui/constants/theme.ts delete mode 100644 tgui/packages/tgui/debug/KitchenSink.js create mode 100644 tgui/packages/tgui/debug/KitchenSink.tsx rename tgui/packages/tgui/debug/{actions.js => actions.ts} (100%) delete mode 100644 tgui/packages/tgui/debug/hooks.js create mode 100644 tgui/packages/tgui/debug/hooks.ts rename tgui/packages/tgui/debug/{index.js => index.ts} (100%) rename tgui/packages/tgui/debug/{middleware.js => middleware.ts} (71%) rename tgui/packages/tgui/debug/{reducer.js => reducer.ts} (67%) delete mode 100644 tgui/packages/tgui/debug/selectors.js create mode 100644 tgui/packages/tgui/debug/selectors.ts create mode 100644 tgui/packages/tgui/debug/use-debug.ts delete mode 100644 tgui/packages/tgui/events.test.ts delete mode 100644 tgui/packages/tgui/events.ts create mode 100644 tgui/packages/tgui/events/README.md create mode 100644 tgui/packages/tgui/events/act.ts create mode 100644 tgui/packages/tgui/events/handlers/assets.ts create mode 100644 tgui/packages/tgui/events/handlers/chunking.ts create mode 100644 tgui/packages/tgui/events/handlers/ping.ts create mode 100644 tgui/packages/tgui/events/handlers/suspense.ts create mode 100644 tgui/packages/tgui/events/handlers/update.ts create mode 100644 tgui/packages/tgui/events/listeners.ts create mode 100644 tgui/packages/tgui/events/store.ts create mode 100644 tgui/packages/tgui/events/types.ts delete mode 100644 tgui/packages/tgui/format.test.ts delete mode 100644 tgui/packages/tgui/format.ts delete mode 100644 tgui/packages/tgui/hotkeys.ts delete mode 100644 tgui/packages/tgui/http.ts rename tgui/packages/tgui/interfaces/{Changelog.js => Changelog.jsx} (93%) delete mode 100644 tgui/packages/tgui/interfaces/ListInputModal.tsx create mode 100644 tgui/packages/tgui/interfaces/ListInputWindow/ListInputModal.tsx create mode 100644 tgui/packages/tgui/interfaces/ListInputWindow/index.tsx delete mode 100644 tgui/packages/tgui/interfaces/common/AccessConfig.js create mode 100644 tgui/packages/tgui/interfaces/common/AccessConfig.tsx rename tgui/packages/tgui/interfaces/common/{AccessList.js => AccessList.jsx} (73%) rename tgui/packages/tgui/interfaces/common/{BeakerContents.js => BeakerContents.tsx} (89%) create mode 100644 tgui/packages/tgui/interfaces/common/FakeTerminal.tsx delete mode 100644 tgui/packages/tgui/interfaces/common/GasmixParser.tsx rename tgui/packages/tgui/interfaces/common/{InterfaceLockNoticeBox.js => InterfaceLockNoticeBox.jsx} (89%) create mode 100644 tgui/packages/tgui/interfaces/common/LoadingScreen.tsx create mode 100644 tgui/packages/tgui/interfaces/common/PaginatedBook.tsx rename tgui/packages/tgui/interfaces/common/{PortableAtmos.js => PortableAtmos.jsx} (94%) rename tgui/packages/tgui/interfaces/common/{ReagentLookup.js => ReagentLookup.jsx} (96%) rename tgui/packages/tgui/interfaces/common/{RecipeLookup.js => RecipeLookup.jsx} (91%) create mode 100644 tgui/packages/tgui/interfaces/common/SearchBar.tsx delete mode 100644 tgui/packages/tgui/layouts/Layout.js create mode 100644 tgui/packages/tgui/layouts/Layout.tsx rename tgui/packages/tgui/layouts/{NtosWindow.js => NtosWindow.tsx} (59%) delete mode 100644 tgui/packages/tgui/layouts/Pane.js create mode 100644 tgui/packages/tgui/layouts/Pane.tsx create mode 100644 tgui/packages/tgui/layouts/TitleBar.tsx delete mode 100644 tgui/packages/tgui/layouts/Window.js create mode 100644 tgui/packages/tgui/layouts/Window.tsx rename tgui/packages/tgui/layouts/{index.js => index.ts} (100%) delete mode 100644 tgui/packages/tgui/links.test.ts delete mode 100644 tgui/packages/tgui/links.ts create mode 100644 tgui/packages/tgui/process.ts delete mode 100644 tgui/packages/tgui/sanitize.test.ts create mode 100644 tgui/packages/tgui/stack.ts delete mode 100644 tgui/packages/tgui/store.ts create mode 100644 tgui/packages/tgui/stories/Blink.stories.tsx create mode 100644 tgui/packages/tgui/stories/BlockQuote.stories.tsx create mode 100644 tgui/packages/tgui/stories/Box.stories.tsx create mode 100644 tgui/packages/tgui/stories/Button.stories.tsx create mode 100644 tgui/packages/tgui/stories/ByondUi.stories.tsx create mode 100644 tgui/packages/tgui/stories/Collapsible.stories.tsx create mode 100644 tgui/packages/tgui/stories/Flex.stories.tsx create mode 100644 tgui/packages/tgui/stories/Input.stories.tsx create mode 100644 tgui/packages/tgui/stories/LabeledList.stories.tsx create mode 100644 tgui/packages/tgui/stories/ProgressBar.stories.tsx create mode 100644 tgui/packages/tgui/stories/Stack.stories.tsx create mode 100644 tgui/packages/tgui/stories/Storage.stories.tsx create mode 100644 tgui/packages/tgui/stories/Tabs.stories.tsx create mode 100644 tgui/packages/tgui/stories/Themes.stories.tsx create mode 100644 tgui/packages/tgui/stories/Tooltip.stories.tsx create mode 100644 tgui/packages/tgui/stories/common.tsx create mode 100644 tgui/packages/tgui/styles/assets/bg-deforest.svg delete mode 100644 tgui/packages/tgui/styles/atomic/candystripe.scss delete mode 100644 tgui/packages/tgui/styles/atomic/centered-image.scss delete mode 100644 tgui/packages/tgui/styles/atomic/color.scss delete mode 100644 tgui/packages/tgui/styles/atomic/debug-layout.scss delete mode 100644 tgui/packages/tgui/styles/atomic/fit-text.scss delete mode 100644 tgui/packages/tgui/styles/atomic/links.scss delete mode 100644 tgui/packages/tgui/styles/atomic/outline.scss delete mode 100644 tgui/packages/tgui/styles/atomic/text.scss create mode 100644 tgui/packages/tgui/styles/base_original.scss create mode 100644 tgui/packages/tgui/styles/colors_original.scss delete mode 100644 tgui/packages/tgui/styles/components/BlockQuote.scss delete mode 100644 tgui/packages/tgui/styles/components/Button.scss delete mode 100644 tgui/packages/tgui/styles/components/ColorBox.scss delete mode 100644 tgui/packages/tgui/styles/components/Dialog.scss delete mode 100644 tgui/packages/tgui/styles/components/Dimmer.scss delete mode 100644 tgui/packages/tgui/styles/components/Divider.scss delete mode 100644 tgui/packages/tgui/styles/components/Dropdown.scss delete mode 100644 tgui/packages/tgui/styles/components/Flex.scss delete mode 100644 tgui/packages/tgui/styles/components/Icon.scss delete mode 100644 tgui/packages/tgui/styles/components/Input.scss delete mode 100644 tgui/packages/tgui/styles/components/Knob.scss delete mode 100644 tgui/packages/tgui/styles/components/LabeledList.scss delete mode 100644 tgui/packages/tgui/styles/components/MenuBar.scss delete mode 100644 tgui/packages/tgui/styles/components/Modal.scss delete mode 100644 tgui/packages/tgui/styles/components/NoticeBox.scss delete mode 100644 tgui/packages/tgui/styles/components/NumberInput.scss delete mode 100644 tgui/packages/tgui/styles/components/ProgressBar.scss delete mode 100644 tgui/packages/tgui/styles/components/RoundGauge.scss delete mode 100644 tgui/packages/tgui/styles/components/Section.scss delete mode 100644 tgui/packages/tgui/styles/components/Slider.scss delete mode 100644 tgui/packages/tgui/styles/components/Stack.scss delete mode 100644 tgui/packages/tgui/styles/components/Table.scss delete mode 100644 tgui/packages/tgui/styles/components/Tabs.scss delete mode 100644 tgui/packages/tgui/styles/components/TextArea.scss delete mode 100644 tgui/packages/tgui/styles/components/Tooltip.scss create mode 100644 tgui/packages/tgui/styles/css-variables.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Accounting.scss create mode 100644 tgui/packages/tgui/styles/interfaces/AnomalyTower.scss create mode 100644 tgui/packages/tgui/styles/interfaces/AntagInfoHeretic.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Changelog.scss create mode 100644 tgui/packages/tgui/styles/interfaces/CivCargoHoldTerminal.scss create mode 100644 tgui/packages/tgui/styles/interfaces/ColorPicker.scss create mode 100644 tgui/packages/tgui/styles/interfaces/DeForestLogo.scss create mode 100644 tgui/packages/tgui/styles/interfaces/DetectiveBoard.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Emojipedia.scss create mode 100644 tgui/packages/tgui/styles/interfaces/EventLogger.scss create mode 100644 tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Fabricator.scss create mode 100644 tgui/packages/tgui/styles/interfaces/HellishRunes.scss create mode 100644 tgui/packages/tgui/styles/interfaces/HotKeysHelp.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Hypertorus.scss create mode 100644 tgui/packages/tgui/styles/interfaces/IntegratedCircuit.scss create mode 100644 tgui/packages/tgui/styles/interfaces/LibraryAdmin.scss create mode 100644 tgui/packages/tgui/styles/interfaces/LibraryComputer.scss delete mode 100644 tgui/packages/tgui/styles/interfaces/LoreConsole.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Mecha.scss create mode 100644 tgui/packages/tgui/styles/interfaces/NtosMessenger.scss create mode 100644 tgui/packages/tgui/styles/interfaces/NtosNanopaint.scss create mode 100644 tgui/packages/tgui/styles/interfaces/NtosNotepad.scss create mode 100644 tgui/packages/tgui/styles/interfaces/NuclearBomb.scss create mode 100644 tgui/packages/tgui/styles/interfaces/OperatingComputer.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Orbit.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Paper.scss create mode 100644 tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss delete mode 100644 tgui/packages/tgui/styles/interfaces/Radio.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Roulette.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Safe.scss create mode 100644 tgui/packages/tgui/styles/interfaces/SlotMachine.scss create mode 100644 tgui/packages/tgui/styles/interfaces/SpriteAuditor.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Techweb.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Trophycase.scss create mode 100644 tgui/packages/tgui/styles/interfaces/Uplink.scss create mode 100644 tgui/packages/tgui/styles/main_original.scss create mode 100644 tgui/public/bg-deforest.svg create mode 100644 tgui/public/bg-nanotrasen.svg create mode 100644 tgui/public/helpers.min.js create mode 100644 tgui/public/ntos-error.min.css delete mode 100644 tgui/public/tgui-polyfill.min.js create mode 100644 tgui/public/transparency_checkerboard.svg create mode 100644 tgui/rspack.config-dev.ts create mode 100644 tgui/rspack.config.ts delete mode 100644 tgui/yarn.lock create mode 100644 tools/bootstrap/javascript.bat create mode 100644 tools/bootstrap/javascript.sh create mode 100644 tools/bootstrap/javascript_.ps1 delete mode 100755 tools/bootstrap/node delete mode 100644 tools/bootstrap/node.bat delete mode 100644 tools/bootstrap/node_.ps1 delete mode 100755 tools/build/build create mode 100644 tools/build/build.sh rename tools/build/{build.js => build.ts} (63%) create mode 100644 tools/build/bun.lock create mode 100644 tools/build/lib/bun.ts delete mode 100644 tools/build/lib/byond.js create mode 100644 tools/build/lib/byond.ts create mode 100644 tools/build/lib/download.ts create mode 100644 tools/build/lib/helpers.ts create mode 100644 tools/build/lib/tgs.ts rename tools/build/lib/{winreg.js => winreg.ts} (56%) delete mode 100644 tools/build/lib/yarn.js diff --git a/.github/actions/setup_bun/action.yml b/.github/actions/setup_bun/action.yml new file mode 100644 index 00000000000..727596ed3ab --- /dev/null +++ b/.github/actions/setup_bun/action.yml @@ -0,0 +1,17 @@ +# This action is a wrapper around `oven-sh/setup-bun` to use the version specified in +# `dependencies.sh`. +name: Setup Bun +description: Install Bun using the version specified in `dependencies.sh` + +runs: + using: composite + steps: + - name: Configure Bun version + shell: bash + run: | + source dependencies.sh + echo "BUN_VERSION_REQUIRED=$BUN_VERSION" >> $GITHUB_ENV + - name: Install Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: ${{ env.BUN_VERSION_REQUIRED }} diff --git a/.github/actions/setup_node/action.yml b/.github/actions/setup_node/action.yml new file mode 100644 index 00000000000..d017766117f --- /dev/null +++ b/.github/actions/setup_node/action.yml @@ -0,0 +1,26 @@ +# This action is a wrapper around `actions/setup-node`, to use the version specified in +# `dependencies.sh`. +name: Setup Node +description: Install Node using the version specified in `dependencies.sh`; additionally, restores the Yarn cache if one exists + +inputs: + restore-yarn-cache: + description: "If `true`, restores the Yarn cache alongside installing node." + required: false + type: boolean + default: false + +runs: + using: composite + steps: + - name: Configure Node version + shell: bash + run: | + source dependencies.sh + echo "NODE_VERSION_REQUIRED=$NODE_VERSION_LTS" >> $GITHUB_ENV + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION_REQUIRED }} + cache: ${{ fromJSON(inputs.restore-yarn-cache) && 'yarn' || '' }} + cache-dependency-path: ${{ fromJSON(inputs.restore-yarn-cache) && 'tgui/yarn.lock' || '' }} diff --git a/.github/workflows/byond.yml b/.github/workflows/byond.yml index 3c0012a9ce5..ff62e8bb0bc 100644 --- a/.github/workflows/byond.yml +++ b/.github/workflows/byond.yml @@ -281,18 +281,14 @@ jobs: - name: Set ENV variables run: bash dependencies.sh - #Setup NodeJS using YARN as cache - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODE_VERSION_LTS }} - cache: "yarn" - cache-dependency-path: tgui/yarn.lock + #Setup bun + - name: Setup Bun + uses: ./.github/actions/setup_bun #Lint TGUI - name: Check Tgui run: | - tools/build/build --ci lint tgui-test + tools/build/build.sh --ci lint tgui-test ########################################### ############### MISC LINTING ############## diff --git a/.github/workflows/update_tgui.yml b/.github/workflows/update_tgui.yml new file mode 100644 index 00000000000..a023a52b467 --- /dev/null +++ b/.github/workflows/update_tgui.yml @@ -0,0 +1,31 @@ +name: "Build TGUI" +on: + workflow_dispatch: + +jobs: + update-tgui: + concurrency: tgui + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-24.04 + steps: + - name: Install Bun + uses: ./.github/actions/setup_bun + + - name: Update TGUI + run: | + tools/bootstrap/javascript tools/build/build.sh tgui + + - name: Commit TGUI + run: | + git pull origin master + git config --local user.email "action@github.com" + git config --local user.name "AuroraBuildBot" + git add --force tgui/public/* + git commit -m "Automatic TGUI compile [ci skip]" -a || true + + - name: Push + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.BOT_TOKEN_AURORA }} diff --git a/.gitignore b/.gitignore index e8f27065444..e24b8fa4900 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,6 @@ define_sanity_output.txt # Tracy dumps *.utracy + +# JavaScript tools +**/node_modules diff --git a/.vscode/extensions.json b/.vscode/extensions.json index d0ecf1ccc9a..9fa094b0aa0 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -7,6 +7,9 @@ "vscode.typescript-language-features", "redhat.vscode-yaml", "esbenp.prettier-vscode", - "rome.rome" - ] + "rome.rome", + "dbaeumer.vscode-eslint", + "editorconfig.editorconfig", + "esbenp.prettier-vscode", + "biomejs.biome" } diff --git a/.vscode/settings.json b/.vscode/settings.json index 4a44976f9ca..1e74c4aca2f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,25 +1,27 @@ { - "eslint.nodePath": "./tgui/.yarn/sdks", - "eslint.workingDirectories": ["./tgui"], - "prettier.prettierPath": "./tgui/.yarn/sdks/prettier/index.cjs", - "typescript.tsdk": "./tgui/.yarn/sdks/typescript/lib", "typescript.enablePromptUseWorkspaceTsdk": true, "search.exclude": { "**/.yarn": true, "**/.pnp.*": true }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" + "source.organizeImports.biome": "explicit", + "source.fixAll.biome": "explicit" }, "editor.insertSpaces": false, "files.eol": "\n", "files.insertFinalNewline": true, "files.trimTrailingWhitespace": true, "gitlens.advanced.blame.customArguments": ["-w"], - "[javascript][typescript][typescriptreact][javascriptreact][html][scss][css][json][jsonc][markdown][yaml]": { - "editor.rulers": [80], + "[javascript][typescript][javascriptreact][typescriptreact][css][json][jsonc]": { + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, + "editor.rulers": [80] + }, + "[yaml][markdown][html][scss]": { "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true + "editor.formatOnSave": true, + "editor.rulers": [80] }, "workbench.editorAssociations": { "*.dmi": "dmiEditor.dmiEditor" diff --git a/.vscode/tasks.json b/.vscode/tasks.json index defa41d9ba9..1f7c9117e5e 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -16,8 +16,7 @@ }, "problemMatcher": [ "$dreammaker", - "$tsc", - "$eslint-stylish" + "$tsc" ], "group": { "kind": "build", @@ -61,8 +60,7 @@ "command": ".\\bin\\tgui-build.cmd" }, "problemMatcher": [ - "$tsc", - "$eslint-stylish" + "$tsc" ], "group": "build", "label": "tgui: build" @@ -74,38 +72,11 @@ "command": ".\\bin\\tgui-dev.cmd" }, "problemMatcher": [ - "$tsc", - "$eslint-stylish" + "$tsc" ], "group": "build", "label": "tgui: dev server" }, - { - "type": "shell", - "command": "bin/tgui-bench", - "windows": { - "command": ".\\bin\\tgui-bench.cmd" - }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], - "group": "build", - "label": "tgui: bench" - }, - { - "type": "shell", - "command": "bin/tgui-sonar", - "windows": { - "command": ".\\bin\\tgui-sonar.cmd" - }, - "problemMatcher": [ - "$tsc", - "$eslint-stylish" - ], - "group": "build", - "label": "tgui: sonar" - }, { "type": "shell", "command": "bin/tgfont", @@ -113,8 +84,7 @@ "command": ".\\bin\\tgfont.cmd" }, "problemMatcher": [ - "$tsc", - "$eslint-stylish" + "$tsc" ], "group": "build", "label": "tgui: rebuild tgfont" diff --git a/aurorastation.dme b/aurorastation.dme index 35b72eeee3b..96147b23f3c 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -155,6 +155,7 @@ #include "code\__DEFINES\targeting.dm" #include "code\__DEFINES\technomancer.dm" #include "code\__DEFINES\text.dm" +#include "code\__DEFINES\tgs.config.dm" #include "code\__DEFINES\tgs.dm" #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" @@ -184,6 +185,7 @@ #include "code\__DEFINES\dcs\signals\signals_record.dm" #include "code\__DEFINES\dcs\signals\signals_spatial_grid.dm" #include "code\__DEFINES\dcs\signals\signals_subsystem.dm" +#include "code\__DEFINES\dcs\signals\signals_tgui.dm" #include "code\__DEFINES\dcs\signals\signals_tools.dm" #include "code\__DEFINES\dcs\signals\signals_turf.dm" #include "code\__DEFINES\dcs\signals\signals_weather.dm" @@ -404,6 +406,7 @@ #include "code\controllers\subsystems\stickyban.dm" #include "code\controllers\subsystems\sun.dm" #include "code\controllers\subsystems\sunlight.dm" +#include "code\controllers\subsystems\tgui.dm" #include "code\controllers\subsystems\throwing.dm" #include "code\controllers\subsystems\ticker.dm" #include "code\controllers\subsystems\time_track.dm" @@ -448,7 +451,6 @@ #include "code\controllers\subsystems\processing\electronics.dm" #include "code\controllers\subsystems\processing\fast_process.dm" #include "code\controllers\subsystems\processing\modifiers.dm" -#include "code\controllers\subsystems\processing\nanoui.dm" #include "code\controllers\subsystems\processing\ntsl2.dm" #include "code\controllers\subsystems\processing\obj_tab_items.dm" #include "code\controllers\subsystems\processing\odyssey.dm" @@ -457,7 +459,6 @@ #include "code\controllers\subsystems\processing\projectiles.dm" #include "code\controllers\subsystems\processing\psi.dm" #include "code\controllers\subsystems\processing\shuttle.dm" -#include "code\controllers\subsystems\processing\tgui.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm" #include "code\datums\beam.dm" @@ -465,6 +466,7 @@ #include "code\datums\callback.dm" #include "code\datums\cargo.dm" #include "code\datums\category.dm" +#include "code\datums\chat_payload.dm" #include "code\datums\computerfiles.dm" #include "code\datums\datum.dm" #include "code\datums\datumvars.dm" @@ -3167,13 +3169,6 @@ #include "code\modules\multiz\zmimic\mimic_common.dm" #include "code\modules\multiz\zmimic\mimic_movable.dm" #include "code\modules\multiz\zmimic\mimic_turf.dm" -#include "code\modules\nano\nanoexternal.dm" -#include "code\modules\nano\nanomapgen.dm" -#include "code\modules\nano\nanoui.dm" -#include "code\modules\nano\modules\follow_menu.dm" -#include "code\modules\nano\modules\human_appearance.dm" -#include "code\modules\nano\modules\nano_module.dm" -#include "code\modules\nano\modules\narrate_panel.dm" #include "code\modules\ntsl2\guide.dm" #include "code\modules\ntsl2\ntsl2_program.dm" #include "code\modules\ntsl2\ntsl2_types.dm" @@ -3936,8 +3931,11 @@ #include "code\modules\tgui\modules\armor_values.dm" #include "code\modules\tgui\modules\faction_select.dm" #include "code\modules\tgui\modules\flavor_text.dm" +#include "code\modules\tgui\modules\follow_menu.dm" #include "code\modules\tgui\modules\hivenet_manifest.dm" +#include "code\modules\tgui\modules\human_appearance.dm" #include "code\modules\tgui\modules\ipc_diagnostic.dm" +#include "code\modules\tgui\modules\narrate_panel.dm" #include "code\modules\tgui\modules\neural_configuration.dm" #include "code\modules\tgui\states\admin.dm" #include "code\modules\tgui\states\always.dm" @@ -3960,6 +3958,8 @@ #include "code\modules\tgui\states\self.dm" #include "code\modules\tgui\states\zlevel.dm" #include "code\modules\tgui_input\alert.dm" +#include "code\modules\tgui_input\checkboxes.dm" +#include "code\modules\tgui_input\keycombo.dm" #include "code\modules\tgui_input\list.dm" #include "code\modules\tgui_input\number.dm" #include "code\modules\tgui_input\text.dm" diff --git a/biome.json b/biome.json new file mode 100644 index 00000000000..8f792f2b57b --- /dev/null +++ b/biome.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.1.2/schema.json", + "assist": { + "actions": { + "source": { + "organizeImports": "on" + } + }, + "enabled": true + }, + "css": { + "formatter": { + "quoteStyle": "double" + } + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**", + "!**/node_modules", + "!tgui/public", + "tgui/public/tgui.html", + "!tgui/packages/tgui-setup/helpers.js" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab", + "lineEnding": "lf" + }, + "javascript": { + "formatter": { + "indentStyle": "space", + "quoteStyle": "single" + } + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "a11y": "off", + "correctness": { + "noUnusedImports": "warn", + "noUnusedVariables": "off", + "useExhaustiveDependencies": "off", + "noUnusedFunctionParameters": "off", + "useHookAtTopLevel": "off" + }, + "security": { + "noDangerouslySetInnerHtml": "warn" + }, + "style": { + "noNonNullAssertion": "off", + "useSelfClosingElements": "error" + }, + "suspicious": { + "noArrayIndexKey": "off", + "noExplicitAny": "off", + "noImplicitAnyLet": "off" + } + } + }, + "vcs": { + "clientKind": "git", + "enabled": false, + "useIgnoreFile": false + } +} diff --git a/bun.lock b/bun.lock new file mode 100644 index 00000000000..779e0ce9801 --- /dev/null +++ b/bun.lock @@ -0,0 +1,32 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "devDependencies": { + "@biomejs/biome": "^2.1.2", + "prettier": "^3.6.2", + }, + }, + }, + "packages": { + "@biomejs/biome": ["@biomejs/biome@2.4.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.15", "@biomejs/cli-darwin-x64": "2.4.15", "@biomejs/cli-linux-arm64": "2.4.15", "@biomejs/cli-linux-arm64-musl": "2.4.15", "@biomejs/cli-linux-x64": "2.4.15", "@biomejs/cli-linux-x64-musl": "2.4.15", "@biomejs/cli-win32-arm64": "2.4.15", "@biomejs/cli-win32-x64": "2.4.15" }, "bin": { "biome": "bin/biome" } }, "sha512-j5VH3a/h/HXTKBM50MDMxRCzkeLv9S2XJcW2WgnZT1+xyisi+0bISrXR82gCX+8S9lvK0skEvHJRN+3Ktr2hlw=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-rF3PPqLq1yoST79zaQbDjVJwsuIeci/O+9bgNmC5QpgOqz6aqYuzA4abyAGx+mgyiDXn4A049xAN8gijbuR1Qg=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.15", "", { "os": "darwin", "cpu": "x64" }, "sha512-/5KHXYMfSJs1fNXiX30xFtI8JcCFV6zaVVLxOa0M2sfqBKHkpQhRTv94yxQWxeTY2lzo2OuTlNvPC+hDQt2wcQ=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-owaAMZD/T4LrD0ELNCk0Km3qrRHuM0X6EAyVE1FSqGY0rbLoiDLrO4Us2tllm6cAeB2Ioa9C2C08NZPdr8+0Ug=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.15", "", { "os": "linux", "cpu": "arm64" }, "sha512-ZPcxznxm0pogHBLZhYntyR3sR+MrZjqJIKEr7ZqVen0Rl+P/4upVmfYXjftizi9RoqZntg33fv/1fbdhbYXpEQ=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-0jj7THz12GbUOLmMibktK6DZjqz2zV64KFxyBtcFTKPiiOIY0a7vns1elpO1dERvxpsZ5ik0oFfz0oGwFde1+g=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.15", "", { "os": "linux", "cpu": "x64" }, "sha512-CNq/9W38SYSH023lfcQ4KKU8K0YX8T//FZUhcgtMMRABDojx5XsMV7jlweAvGSl389wJQB29Qo6Zb/a+jdvt+w=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.15", "", { "os": "win32", "cpu": "arm64" }, "sha512-ouhkYdlhp/1GghEJPdWwD/Vi3gQ1nFxuSpMolWsbq3Lsq3QUR4jl6UdhhscdCugKU5vOEuMiJhvKj66O0OCq+w=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.15", "", { "os": "win32", "cpu": "x64" }, "sha512-zBrGq5mx5wwpnow4+2BxUvleDM+GNd4sLbPaMapsSLQLD0NGRCquqPBTgN+7XkUteHvj7M+BstuI8tmnV7+HgQ=="], + + "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], + } +} diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index f5d03812dcd..2d526bf5c34 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -9,6 +9,8 @@ #define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON "atom_init_success_on" ///from base of atom/examine(): (/mob, list/examine_text) #define COMSIG_ATOM_EXAMINE "atom_examine" +///from base of atom/examine_tags(): (/mob, list/examine_tags) +#define COMSIG_ATOM_EXAMINE_TAGS "atom_examine_tags" ///from base of atom/Entered(): (atom/movable/arrived, atom/old_loc, list/atom/old_locs) #define COMSIG_ATOM_ENTERED "atom_entered" /// Sent from the atom that just Entered src. From base of atom/Entered(): (/atom/destination, atom/old_loc, list/atom/old_locs) diff --git a/code/__DEFINES/dcs/signals/signals_tgui.dm b/code/__DEFINES/dcs/signals/signals_tgui.dm new file mode 100644 index 00000000000..67b979be780 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_tgui.dm @@ -0,0 +1,2 @@ +/// Window is fully visible and we can make fragile calls +#define COMSIG_TGUI_WINDOW_VISIBLE "tgui_window_visible" diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index 3ccaa9294d5..61c79492ecd 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -24,6 +24,7 @@ #define SPAN_COLOR(color, str) SPAN_STYLE("color: [color]", "[str]") #define SPAN_CAUTION(str) ("" + str + "") #define SPAN_STORYTELLER(str) ("" + str + "") +#define SPAN_BOLDANNOUNCE(str) ("" + str + "") #define SPAN_MACHINE_WARNING(str) ("" + str + "") #define SPAN_MACHINE_DANGER(str) ("" + str + "") @@ -42,6 +43,9 @@ #define SPAN_BOLDNOTICE(str) ("" + str + "") #define SPAN_BOLDWARNING(X) "[X]" +// Spans that use embedded tgui components: +#define SPAN_TOOLTIP(tip, main_text) ("" + main_text + "") + /* ##################### Font sizes diff --git a/code/__DEFINES/subsystem-priority.dm b/code/__DEFINES/subsystem-priority.dm index 572c39c4edb..2ec6f3aadcf 100644 --- a/code/__DEFINES/subsystem-priority.dm +++ b/code/__DEFINES/subsystem-priority.dm @@ -36,7 +36,6 @@ #define SS_PRIORITY_STATPANELS 25 // Statpanels. #define SS_PRIORITY_LIGHTING 25 // Queued lighting engine updates. #define SS_PRIORITY_MACHINERY 25 // Machinery + powernet ticks. -#define SS_PRIORITY_NANOUI 25 // UI updates. #define SS_PRIORITY_ELECTRONICS 20 // Integrated Electronics processing. #define SS_PRIORITY_CALAMITY 20 // Singularity, Tesla, Nar'sie, blob, etc. #define SS_PRIORITY_EVENT 20 diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 864b8941fd4..9a3bb4d4ce8 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -277,6 +277,7 @@ #define FIRE_PRIORITY_SPACEDRIFT 30 #define FIRE_PRIORITY_DEFAULT 50 #define FIRE_PRIORITY_MOBS 100 +#define FIRE_PRIORITY_TGUI 110 #define FIRE_PRIORITY_STATPANEL 390 #define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_RUNECHAT 410 diff --git a/code/__DEFINES/text.dm b/code/__DEFINES/text.dm index 63bafbaa4c4..d0a991f5ca1 100644 --- a/code/__DEFINES/text.dm +++ b/code/__DEFINES/text.dm @@ -50,7 +50,7 @@ #define CHAT_MESSAGE_WIDTH 112 // Setting this much higher than 1024 could allow spammers to DOS the server easily. -#define MAX_MESSAGE_LEN 1024 +#define MAX_MESSAGE_LEN 4096 #define MAX_PAPER_MESSAGE_LEN 3072 #define MAX_BOOK_MESSAGE_LEN 9216 #define MAX_LNAME_LEN 64 diff --git a/code/__DEFINES/tgs.config.dm b/code/__DEFINES/tgs.config.dm new file mode 100644 index 00000000000..4f6ba1af61c --- /dev/null +++ b/code/__DEFINES/tgs.config.dm @@ -0,0 +1,11 @@ +#define TGS_EXTERNAL_CONFIGURATION +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) GLOBAL_VAR_INIT(##Name, ##Value); GLOBAL_PROTECT(##Name) +#define TGS_READ_GLOBAL(Name) GLOB.##Name +#define TGS_WRITE_GLOBAL(Name, Value) GLOB.##Name = ##Value +#define TGS_WORLD_ANNOUNCE(message) to_chat(world, SPAN_BOLDANNOUNCE("[html_encode(##message)]")) +#define TGS_INFO_LOG(message) log_world("TGS Info: [##message]") +#define TGS_WARNING_LOG(message) log_world("TGS Warn: [##message]") +#define TGS_ERROR_LOG(message) stack_trace("TGS Error: [##message]") +#define TGS_NOTIFY_ADMINS(event) message_admins(##event) +#define TGS_CLIENT_COUNT GLOB.clients.len +#define TGS_PROTECT_DATUM(Path) GENERAL_PROTECT_DATUM(##Path) diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index ef53d466e84..24887137230 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,55 +1,68 @@ // tgstation-server DMAPI +// The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119. -#define TGS_DMAPI_VERSION "6.6.2" +#define TGS_DMAPI_VERSION "7.3.3" // All functions and datums outside this document are subject to change with any version and should not be relied on. // CONFIGURATION -/// Create this define if you want to do TGS configuration outside of this file. +/// Consumers SHOULD create this define if you want to do TGS configuration outside of this file. #ifndef TGS_EXTERNAL_CONFIGURATION -// Comment this out once you've filled in the below. -//#error TGS API unconfigured +// Consumers MUST comment this out once you've filled in the below and are not using [TGS_EXTERNAL_CONFIGURATION]. +// #error TGS API unconfigured -// Uncomment this if you wish to allow the game to interact with TGS 3.. +// Consumers MUST uncomment this if you wish to allow the game to interact with TGS version 3. // This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()(). //#define TGS_V3_API // Required interfaces (fill in with your codebase equivalent): /// Create a global variable named `Name` and set it to `Value`. -#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) var/global/##Name = ##Value +#define TGS_DEFINE_AND_SET_GLOBAL(Name, Value) /// Read the value in the global variable `Name`. -#define TGS_READ_GLOBAL(Name) global.##Name +#define TGS_READ_GLOBAL(Name) /// Set the value in the global variable `Name` to `Value`. -#define TGS_WRITE_GLOBAL(Name, Value) global.##Name = ##Value +#define TGS_WRITE_GLOBAL(Name, Value) /// Disallow ANYONE from reflecting a given `path`, security measure to prevent in-game use of DD -> TGS capabilities. #define TGS_PROTECT_DATUM(Path) /// Display an announcement `message` from the server to all players. -#define TGS_WORLD_ANNOUNCE(message) world << "TGS Notification: [html_encode(##message)]" +#define TGS_WORLD_ANNOUNCE(message) /// Notify current in-game administrators of a string `event`. -#define TGS_NOTIFY_ADMINS(event) message_admins(##event) +#define TGS_NOTIFY_ADMINS(event) /// Write an info `message` to a server log. -#define TGS_INFO_LOG(message) log_tgs("[##message]") +#define TGS_INFO_LOG(message) /// Write an warning `message` to a server log. -#define TGS_WARNING_LOG(message) log_tgs("[##message]", SEVERITY_WARNING) +#define TGS_WARNING_LOG(message) /// Write an error `message` to a server log. -#define TGS_ERROR_LOG(message) log_tgs("[##message]", SEVERITY_ERROR) +#define TGS_ERROR_LOG(message) /// Get the number of connected /clients. -#define TGS_CLIENT_COUNT clients.len +#define TGS_CLIENT_COUNT #endif +#ifndef TGS_FILE2TEXT_NATIVE +#ifdef file2text +#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You SHOULD fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses +#endif +#define TGS_FILE2TEXT_NATIVE file2text +#endif + +// SpacemanDMM compatibility +#ifndef CAN_BE_REDEFINED +#define CAN_BE_REDEFINED(X) +#endif + // EVENT CODES /// Before a reboot mode change, extras parameters are the current and new reboot mode enums. @@ -73,12 +86,12 @@ #define TGS_EVENT_REPO_MERGE_PULL_REQUEST 3 /// Before the repository makes a sychronize operation. Parameters: Absolute repostiory path. #define TGS_EVENT_REPO_PRE_SYNCHRONIZE 4 -/// Before a BYOND install operation begins. Parameters: [/datum/tgs_version] of the installing BYOND. -#define TGS_EVENT_BYOND_INSTALL_START 5 -/// When a BYOND install operation fails. Parameters: Error message -#define TGS_EVENT_BYOND_INSTALL_FAIL 6 -/// When the active BYOND version changes. Parameters: (Nullable) [/datum/tgs_version] of the current BYOND, [/datum/tgs_version] of the new BYOND. -#define TGS_EVENT_BYOND_ACTIVE_VERSION_CHANGE 7 +/// Before a engine install operation begins. Parameters: Version string of the installing engine. +#define TGS_EVENT_ENGINE_INSTALL_START 5 +/// When a engine install operation fails. Parameters: Error message +#define TGS_EVENT_ENGINE_INSTALL_FAIL 6 +/// When the active engine version changes. Parameters: (Nullable) Version string of the current engine, version string of the new engine. +#define TGS_EVENT_ENGINE_ACTIVE_VERSION_CHANGE 7 /// When the compiler starts running. Parameters: Game directory path, origin commit SHA. #define TGS_EVENT_COMPILE_START 8 /// When a compile is cancelled. No parameters. @@ -108,7 +121,7 @@ // #define TGS_EVENT_DREAM_DAEMON_LAUNCH 22 /// After a single submodule update is performed. Parameters: Updated submodule name. #define TGS_EVENT_REPO_SUBMODULE_UPDATE 23 -/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, byond version. +/// After CodeModifications are applied, before DreamMaker is run. Parameters: Game directory path, origin commit sha, version string of the used engine. #define TGS_EVENT_PRE_DREAM_MAKER 24 /// Whenever a deployment folder is deleted from disk. Parameters: Game directory path. #define TGS_EVENT_DEPLOYMENT_CLEANUP 25 @@ -122,6 +135,7 @@ /// The watchdog will restart on reboot. #define TGS_REBOOT_MODE_RESTART 2 +// Note that security levels are currently meaningless in OpenDream /// DreamDaemon Trusted security level. #define TGS_SECURITY_TRUSTED 0 /// DreamDaemon Safe security level. @@ -136,20 +150,26 @@ /// DreamDaemon invisible visibility level. #define TGS_VISIBILITY_INVISIBLE 2 +/// The Build Your Own Net Dream engine. +#define TGS_ENGINE_TYPE_BYOND 0 +/// The OpenDream engine. +#define TGS_ENGINE_TYPE_OPENDREAM 1 + //REQUIRED HOOKS /** - * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! + * Consumers MUST call this somewhere in [/world/proc/New] that is always run. This function may sleep! * * * event_handler - Optional user defined [/datum/tgs_event_handler]. * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. + * * http_handler - Optional user defined [/datum/tgs_http_handler]. */ -/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler) CAN_BE_REDEFINED(TRUE) return /** - * Call this when your initializations are complete and your game is ready to play before any player interactions happen. + * Consumers MUST call this when world initializations are complete and the game is ready to play before any player interactions happen. * * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 @@ -159,12 +179,10 @@ CAN_BE_REDEFINED(TRUE) return -/// Put this at the start of [/world/proc/Topic]. +/// Consumers MUST run this macro at the start of [/world/proc/Topic]. #define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return -/** - * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()). - */ +/// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()). /world/proc/TgsReboot() CAN_BE_REDEFINED(TRUE) return @@ -261,7 +279,7 @@ /// The [/datum/tgs_chat_channel] the user was from. var/datum/tgs_chat_channel/channel -/// User definable handler for TGS events. +/// User definable handler for TGS events This abstract version SHOULD be overridden to be used. /datum/tgs_event_handler /// If the handler receieves [TGS_EVENT_HEALTH_CHECK] events. var/receive_health_checks = FALSE @@ -275,7 +293,41 @@ set waitfor = FALSE return -/// User definable chat command. +/// User definable handler for HTTP calls. This abstract version MUST be overridden to be used. +/datum/tgs_http_handler + +/** + * User definable callback for executing HTTP GET requests. + * MUST perform BYOND sleeps while the request is in flight. + * MUST return a [/datum/tgs_http_result]. + * SHOULD log its own errors + * + * url - The full URL to execute the GET request for including query parameters. + */ +/datum/tgs_http_handler/proc/PerformGet(url) + CRASH("[type]/PerformGet not implemented!") + +/// Result of a [/datum/tgs_http_handler] call. MUST NOT be overridden. +/datum/tgs_http_result + /// HTTP response as text + var/response_text + /// Boolean request success flag. Set for any 2XX response code. + var/success + +/** + * Create a [/datum/tgs_http_result]. + * + * * response_text - HTTP response as text. Must be provided in New(). + * * success - Boolean request success flag. Set for any 2XX response code. Must be provided in New(). + */ +/datum/tgs_http_result/New(response_text, success) + if(response_text && !istext(response_text)) + CRASH("response_text was not text!") + + src.response_text = response_text + src.success = success + +/// User definable chat command. This abstract version MUST be overridden to be used. /datum/tgs_chat_command /// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...`. var/name = "" @@ -288,29 +340,36 @@ /** * Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with. + * MUST be implemented * - * sender - The [/datum/tgs_chat_user] who issued the command. - * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. + * * sender - The [/datum/tgs_chat_user] who issued the command. + * * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. */ /datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) CRASH("[type] has no implementation for Run()") -/// User definable chat message. +/// User definable chat message. MUST NOT be overridden. /datum/tgs_message_content - /// The tring content of the message. Must be provided in New(). + /// The string content of the message. Must be provided in New(). var/text /// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers. var/datum/tgs_chat_embed/structure/embed +/** + * Create a [/datum/tgs_message_content]. + * + * * text - The string content of the message. + */ /datum/tgs_message_content/New(text) + ..() if(!istext(text)) TGS_ERROR_LOG("[/datum/tgs_message_content] created with no text!") text = null src.text = text -/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details. +/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/message#embed-object for details. /datum/tgs_chat_embed/structure var/title var/description @@ -322,13 +381,13 @@ /// Colour must be #AARRGGBB or #RRGGBB hex string. var/colour - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-image-structure for details. var/datum/tgs_chat_embed/media/image - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-thumbnail-structure for details. var/datum/tgs_chat_embed/media/thumbnail - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-video-structure for details. var/datum/tgs_chat_embed/media/video var/datum/tgs_chat_embed/footer/footer @@ -337,7 +396,7 @@ var/list/datum/tgs_chat_embed/field/fields -/// Common datum for similar discord embed medias. +/// Common datum for similar Discord embed medias. /datum/tgs_chat_embed/media /// Must be set in New(). var/url @@ -345,48 +404,58 @@ var/height var/proxy_url +/// Create a [/datum/tgs_chat_embed]. /datum/tgs_chat_embed/media/New(url) + ..() if(!istext(url)) CRASH("[/datum/tgs_chat_embed/media] created with no url!") src.url = url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-footer-structure for details. /datum/tgs_chat_embed/footer /// Must be set in New(). var/text var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/footer/New(text) + ..() if(!istext(text)) CRASH("[/datum/tgs_chat_embed/footer] created with no text!") src.text = text -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-provider-structure for details. /datum/tgs_chat_embed/provider var/name var/url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-author-structure for details. Must have name set in New(). /datum/tgs_chat_embed/provider/author var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/provider/author/New(name) + ..() if(!istext(name)) CRASH("[/datum/tgs_chat_embed/provider/author] created with no name!") src.name = name -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-field-structure for details. /datum/tgs_chat_embed/field + /// Must be set in New(). var/name + /// Must be set in New(). var/value var/is_inline +/// Create a [/datum/tgs_chat_embed/field]. /datum/tgs_chat_embed/field/New(name, value) + ..() if(!istext(name)) CRASH("[/datum/tgs_chat_embed/field] created with no name!") @@ -429,6 +498,7 @@ /** * Send a message to connected chats. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. @@ -439,6 +509,7 @@ /** * Send a private message to a specific user. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * user: The [/datum/tgs_chat_user] to PM. @@ -449,6 +520,7 @@ /** * Send a message to connected chats that are flagged as game-related in TGS. This function may sleep! + * If TGS is offline when called, the message may be placed in a queue to be sent and this function will return immediately. Your message will be sent when TGS reconnects to the game. * * message - The [/datum/tgs_message_content] to send. * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. @@ -462,6 +534,11 @@ CAN_BE_REDEFINED(TRUE) return +/// Returns the running engine type +/world/proc/TgsEngine() + CAN_BE_REDEFINED(TRUE) + return + /// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsApiVersion() CAN_BE_REDEFINED(TRUE) @@ -497,10 +574,21 @@ CAN_BE_REDEFINED(TRUE) return +/** + * Trigger an event in TGS. Requires TGS version >= 6.3.0. Returns [TRUE] if the event was triggered successfully, [FALSE] otherwise. This function may sleep! + * + * event_name - The name of the event to trigger + * parameters - Optional list of string parameters to pass as arguments to the event script. The first parameter passed to a script will always be the running game's directory followed by these parameters. + * wait_for_completion - If set, this function will not return until the event has run to completion. + */ +/world/proc/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + CAN_BE_REDEFINED(TRUE) + return + /* The MIT License -Copyright (c) 2017-2023 Jordan Brown +Copyright (c) 2017-2024 Jordan Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm index db68d7089a6..b0cd0a979d4 100644 --- a/code/__DEFINES/tgui.dm +++ b/code/__DEFINES/tgui.dm @@ -24,6 +24,16 @@ /// Window is free and ready to receive data #define TGUI_WINDOW_READY 2 +/// Though not the maximum renderable ByondUis within tgui, this is the maximum that the server will manage per-UI +#define TGUI_MANAGED_BYONDUI_LIMIT 10 + +// These are defines instead of being inline, as they're being sent over +// from tgui-core, so can't be easily played with +#define TGUI_MANAGED_BYONDUI_TYPE_RENDER "renderByondUi" +#define TGUI_MANAGED_BYONDUI_TYPE_UNMOUNT "unmountByondUi" + +#define TGUI_MANAGED_BYONDUI_PAYLOAD_ID "renderByondUi" + /// Get a window id based on the provided pool index #define TGUI_WINDOW_ID(index) "tgui-window-[index]" /// Get a pool index of the provided window id diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 8b6897358a6..d0baafa1094 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -912,3 +912,31 @@ /proc/endswith(input_text, ending) var/input_length = LAZYLEN(ending) return !!findtext(input_text, ending, -input_length) + +///Returns a string based on the weight class define used as argument +/proc/weight_class_to_text(w_class) + switch(w_class) + if(WEIGHT_CLASS_TINY) + . = "tiny" + if(WEIGHT_CLASS_SMALL) + . = "small" + if(WEIGHT_CLASS_NORMAL) + . = "normal-sized" + if(WEIGHT_CLASS_BULKY) + . = "bulky" + if(WEIGHT_CLASS_HUGE) + . = "huge" + if(WEIGHT_CLASS_GIGANTIC) + . = "gigantic" + else + . = "" + +/proc/weight_class_to_tooltip(w_class) + switch(w_class) + if(WEIGHT_CLASS_TINY to WEIGHT_CLASS_SMALL) + return "This item can fit into pockets, boxes and backpacks." + if(WEIGHT_CLASS_NORMAL) + return "This item can fit into backpacks." + if(WEIGHT_CLASS_BULKY to WEIGHT_CLASS_GIGANTIC) + return "This item is too large to fit into any standard storage." + return "" diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm index d76ce698d6f..2d227a07ed9 100644 --- a/code/controllers/subsystems/chat.dm +++ b/code/controllers/subsystems/chat.dm @@ -10,31 +10,82 @@ SUBSYSTEM_DEF(chat) flags = SS_TICKER | SS_NO_INIT wait = 1 priority = FIRE_PRIORITY_CHAT - init_order = INIT_ORDER_CHAT + init_order = INITSTAGE_MAX - var/list/payload_by_client = list() + /// Assosciates a ckey with a list of messages to send to them. + var/list/list/datum/chat_payload/client_to_payloads = list() + + /// Associates a ckey with an assosciative list of their last CHAT_RELIABILITY_HISTORY_SIZE messages. + var/list/list/datum/chat_payload/client_to_reliability_history = list() + + /// Assosciates a ckey with their next sequence number. + var/list/client_to_sequence_number = list() + +/datum/controller/subsystem/chat/proc/generate_payload(client/target, message_data) + var/sequence = client_to_sequence_number[target.ckey] + client_to_sequence_number[target.ckey] += 1 + + var/datum/chat_payload/payload = new + payload.sequence = sequence + payload.content = message_data + + if(!(target.ckey in client_to_reliability_history)) + client_to_reliability_history[target.ckey] = list() + var/list/client_history = client_to_reliability_history[target.ckey] + client_history["[sequence]"] = payload + + if(length(client_history) > 5) + var/oldest = text2num(client_history[1]) + for(var/index in 2 to length(client_history)) + var/test = text2num(client_history[index]) + if(test < oldest) + oldest = test + client_history -= "[oldest]" + return payload + +/datum/controller/subsystem/chat/proc/send_payload_to_client(client/target, datum/chat_payload/payload) + target.tgui_panel.window.send_message("chat/message", payload.into_message()) + SEND_TEXT(target, payload.get_content_as_html()) /datum/controller/subsystem/chat/fire() - for(var/key in payload_by_client) - var/client/client = key - var/payload = payload_by_client[key] - payload_by_client -= key - if(client) - // Send to tgchat - client.tgui_panel?.window.send_message("chat/message", payload) - // Send to old chat - for(var/message in payload) - to_target(client, message_to_html(message)) + for(var/ckey in client_to_payloads) + var/client/target = GLOB.directory[ckey] + if(isnull(target)) // verify client still exists + LAZYREMOVE(client_to_payloads, ckey) + continue + + for(var/datum/chat_payload/payload as anything in client_to_payloads[ckey]) + send_payload_to_client(target, payload) + LAZYREMOVE(client_to_payloads, ckey) + if(MC_TICK_CHECK) return -/datum/controller/subsystem/chat/proc/queue(target, message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - LAZYADD(payload_by_client[client], list(message)) +/datum/controller/subsystem/chat/proc/queue(queue_target, list/message_data) + var/list/targets = islist(queue_target) ? queue_target : list(queue_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + LAZYADDASSOCLIST(client_to_payloads, client.ckey, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/send_immediate(send_target, list/message_data) + var/list/targets = islist(send_target) ? send_target : list(send_target) + for(var/target in targets) + var/client/client = CLIENT_FROM_VAR(target) + if(isnull(client)) + continue + send_payload_to_client(client, generate_payload(client, message_data)) + +/datum/controller/subsystem/chat/proc/handle_resend(client/client, sequence) + var/list/client_history = client_to_reliability_history[client.ckey] + sequence = "[sequence]" + if(isnull(client_history) || !(sequence in client_history)) return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - LAZYADD(payload_by_client[client], list(message)) + + var/datum/chat_payload/payload = client_history[sequence] + if(payload.resends > 3) + return // we tried but byond said no + + payload.resends += 1 + send_payload_to_client(client, client_history[sequence]) diff --git a/code/controllers/subsystems/night_lighting.dm b/code/controllers/subsystems/night_lighting.dm index 9780477bf75..625269650d4 100644 --- a/code/controllers/subsystems/night_lighting.dm +++ b/code/controllers/subsystems/night_lighting.dm @@ -50,12 +50,16 @@ SUBSYSTEM_DEF(nightlight) /datum/controller/subsystem/nightlight/proc/get_apc_list(var/whitelisted_only = 1) var/list/obj/structure/machinery/power/apc/lighting_apcs = list() - for (var/A in get_sorted_areas()) - var/area/B = A - if (B.no_light_control || (!(B.allow_nightmode) && whitelisted_only)) + for (var/obj/structure/machinery/power/apc/APC in SSmachinery.apc_units) + if (QDELETED(APC) || APC.aidisabled) continue - if (B.apc && !B.apc.aidisabled) - lighting_apcs += B.apc + + var/area/apc_area = APC.area || get_area(APC) + if (!apc_area) + continue + if (apc_area.no_light_control || (!(apc_area.allow_nightmode) && whitelisted_only)) + continue + lighting_apcs += APC CHECK_TICK diff --git a/code/controllers/subsystems/processing/nanoui.dm b/code/controllers/subsystems/processing/nanoui.dm deleted file mode 100644 index ee84adf78be..00000000000 --- a/code/controllers/subsystems/processing/nanoui.dm +++ /dev/null @@ -1,241 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(nanoui) - // Subsystem stuff. - name = "NanoUI" - flags = SS_NO_INIT - priority = SS_PRIORITY_NANOUI - stat_tag = "A" - - // NanoUI stuff. - var/list/open_nanouis = list() - -/** - * Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data - * - * * user - /mob The mob who opened/owns the ui - * * src_object - /obj|/mob The obj or mob which the ui belongs to - * * ui_key - A string key used for the ui - * * data - List, the data to be passed to the ui, if it exists - * * force_open - Boolean, the ui is being forced to (re)open, so close ui if it exists (instead of updating) - * - * Returns the `/nanoui` found ui, for null if none exists - */ -/datum/controller/subsystem/processing/nanoui/proc/try_update_ui(mob/user, src_object, ui_key, datum/nanoui/ui, data, force_open = FALSE) - if (!ui) // no ui has been passed, so we'll search for one - ui = get_open_ui(user, src_object, ui_key) - - if (ui) - // The UI is already open - if (!force_open) - ui.push_data(data) - return ui - else - ui.reinitialise(new_initial_data=data) - return ui - - return null - -/** - * Get an open /nanoui ui for the current user, src_object and ui_key - * - * * user - The `/mob` who opened/owns the ui - * * src_object - The `/obj` or `/mob` which the ui belongs to - * * ui_key - A string key used for the ui - */ -/datum/controller/subsystem/processing/nanoui/proc/get_open_ui(mob/user, src_object, ui_key) - var/src_object_key = REF(src_object) - if (!LAZYLEN(open_nanouis[src_object_key]) || !LAZYLEN(open_nanouis[src_object_key][ui_key])) - return null - - for (var/datum/nanoui/ui in open_nanouis[src_object_key][ui_key]) - if (ui.user == user) - return ui - - //testing("nanomanager/get_open_ui mob [user.name] [src_object:name] [ui_key] - ui not found") - return null - -/** - * Update all `/nanoui` uis attached to src_object - * - * * src_object - The `/obj` or `/mob` which the uis are attached to - * - * Returns the number of UIs updated - */ -/datum/controller/subsystem/processing/nanoui/proc/update_uis(src_object) - var/src_object_key = REF(src_object) - if (!LAZYLEN(open_nanouis[src_object_key])) - return 0 - - . = 0 - var/list/obj_uis = open_nanouis[src_object_key] - for (var/ui_key in obj_uis) - for (var/thing in obj_uis[ui_key]) - var/datum/nanoui/ui = thing - if(ui && ui.src_object && ui.user && ui.src_object.ui_host()) - ui.process(1) - .++ - -/** - * Close all `/nanoui` uis attached to src_object - * - * * src_object - The `/obj` or `/mob` which the uis are attached to - * - * Returns the number of UIs closed - */ -/datum/controller/subsystem/processing/nanoui/proc/close_uis(src_object) - var/src_object_key = REF(src_object) - if (!open_nanouis[src_object_key] || !islist(open_nanouis[src_object_key])) - return 0 - - . = 0 - var/list/obj_uis = open_nanouis[src_object_key] - for (var/ui_key in obj_uis) - for (var/thing in obj_uis[ui_key]) - var/datum/nanoui/ui = thing - if(ui && ui.src_object && ui.user && ui.src_object.ui_host()) - ui.close() - .++ - -/** - * Update /nanoui uis belonging to user - * - * * user - The `/mob` who owns the uis - * * src_object - An `/obj` or `/mob` that, if is provided, only update uis which are attached to it (optional) - * * ui_key - A string, if ui_key is provided, only update uis with a matching ui_key (optional) - * - * Returns the number of UIs updated - */ -/datum/controller/subsystem/processing/nanoui/proc/update_user_uis(mob/user, src_object, ui_key) - if (!LAZYLEN(user.open_nanouis)) - return 0 // has no open uis - - . = 0 - for (var/thing in user.open_nanouis) - var/datum/nanoui/ui = thing - if (NULL_OR_EQUAL(src_object, ui.src_object) && NULL_OR_EQUAL(ui_key, ui.ui_key)) - ui.process(1) - .++ - -/datum/controller/subsystem/processing/nanoui/proc/close_user_uis(mob/user, src_object, ui_key) - if (!LAZYLEN(user.open_nanouis)) - return 0 - - for (var/thing in user.open_nanouis) - var/datum/nanoui/ui = thing - if (NULL_OR_EQUAL(src_object, ui.src_object) && NULL_OR_EQUAL(ui_key, ui.ui_key)) - ui.close() - .++ - - //testing("nanomanager/close_user_uis mob [user.name] closed [open_nanouis.len] of [.] uis") - -/** - * Add a /nanoui ui to the list of open uis - * This is called by the /nanoui open() proc - * - * * ui - The `/nanoui` ui to add - */ -/datum/controller/subsystem/processing/nanoui/proc/ui_opened(datum/nanoui/ui) - var/src_object_key = REF(ui.src_object) - LAZYINITLIST(open_nanouis[src_object_key]) - - LAZYADD(ui.user.open_nanouis, ui) - LAZYADD(open_nanouis[src_object_key][ui.ui_key], ui) - START_PROCESSING(SSnanoui, ui) - //testing("nanomanager/ui_opened mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_nanouis [ui.user.open_nanouis.len] | uis [uis.len] | processing_uis [processing_uis.len]") - -/** - * Remove a /nanoui ui from the list of open uis - * This is called by the /nanoui close() proc - * - * * ui - A `/nanoui` to remove - * - * Returns FALSE if no ui was removed, TRUE if removed successfully - */ -/datum/controller/subsystem/processing/nanoui/proc/ui_closed(datum/nanoui/ui) - var/src_object_key = REF(ui.src_object) - var/ui_key = ui.ui_key - var/list/obj_uis = open_nanouis[src_object_key] - - if (!LAZYLEN(obj_uis) || !obj_uis[ui_key]) - return 0 // Wasn't open. - - STOP_PROCESSING(SSnanoui, ui) - if(ui.user) // Sanity check in case a user has been deleted (say a blown up borg watching the alarm interface) - LAZYREMOVE(ui.user.open_nanouis, ui) - - obj_uis[ui_key] -= ui - - if (!LAZYLEN(obj_uis[ui_key])) - obj_uis -= ui_key - - if (!LAZYLEN(obj_uis)) - open_nanouis -= src_object_key - - //testing("nanomanager/ui_closed mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_nanouis [ui.user.open_nanouis.len] | uis [uis.len] | processing_uis [processing_uis.len]") - - return 1 - -/** - * This is called on user logout - * Closes/clears all uis attached to the user's `/mob` - * - * * user - The user's `/mob` - */ -/datum/controller/subsystem/processing/nanoui/proc/user_logout(mob/user) - return close_user_uis(user) - -/** - * This is called when a player transfers from one mob to another - * Transfers all open UIs to the new mob - * - * * oldMob - The user's old `/mob` - * * newMob - The user's new `/mob` - */ -/datum/controller/subsystem/processing/nanoui/proc/user_transferred(mob/oldMob, mob/newMob) - //testing("nanomanager/user_transferred from mob [oldMob.name] to mob [newMob.name]") - if (!oldMob || !LAZYLEN(oldMob.open_nanouis) || !LAZYLEN(open_nanouis)) - //testing("nanomanager/user_transferred mob [oldMob.name] has no open uis") - return 0 // has no open uis - - for (var/thing in oldMob.open_nanouis) - var/datum/nanoui/ui = thing - ui.user = newMob - LAZYADD(newMob.open_nanouis, ui) - - oldMob.open_nanouis = null - - return 1 // success - -/datum/asset/nanoui - var/list/common = list() - - var/list/common_dirs = list( - "nano/css/", - "nano/js/", - "nano/images/", - "nano/images/status_icons/", - "nano/templates/" - ) - var/list/uncommon_dirs = list() - -/datum/asset/nanoui/register() - // Crawl the directories to find files. - for (var/path in common_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, length(filename)) != "/") // Ignore directories. - if(fexists(path + filename)) - common[filename] = fcopy_rsc(path + filename) - SSassets.transport.register_asset(filename, common[filename]) - for (var/path in uncommon_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, length(filename)) != "/") // Ignore directories. - if(fexists(path + filename)) - SSassets.transport.register_asset(filename, fcopy_rsc(path + filename)) - -/datum/asset/nanoui/send(client, uncommon) - if(!islist(uncommon)) - uncommon = list(uncommon) - - SSassets.transport.send_assets(client, uncommon) - SSassets.transport.send_assets(client, common) diff --git a/code/controllers/subsystems/processing/tgui.dm b/code/controllers/subsystems/tgui.dm similarity index 71% rename from code/controllers/subsystems/processing/tgui.dm rename to code/controllers/subsystems/tgui.dm index 77186dbf75b..563730f6b77 100644 --- a/code/controllers/subsystems/processing/tgui.dm +++ b/code/controllers/subsystems/tgui.dm @@ -10,11 +10,11 @@ * */ -PROCESSING_SUBSYSTEM_DEF(tgui) +SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 flags = SS_NO_INIT - priority = SS_PRIORITY_NANOUI + priority = FIRE_PRIORITY_TGUI runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT /// A list of UIs scheduled to process @@ -24,54 +24,39 @@ PROCESSING_SUBSYSTEM_DEF(tgui) /// The HTML base used for all UIs. var/basehtml -/datum/controller/subsystem/processing/tgui/PreInit() - basehtml = file2text('tgui/public/tgui.html') - // Inject inline polyfills - var/polyfill = file2text('tgui/public/tgui-polyfill.min.js') - polyfill = "" - basehtml = replacetextEx(basehtml, "", polyfill) - basehtml = replacetextEx(basehtml, "", "NanoTrasen © 2457-[text2num(time2text(world.realtime, "YYYY")) + 442]") +/datum/controller/subsystem/tgui/PreInit() + basehtml = file2text("tgui/public/tgui.html") - basehtml = replacetext(basehtml, "tgui:stylesheet", MAP_STYLESHEET) + // Inject inline helper functions + var/helpers = file2text("tgui/public/helpers.min.js") + helpers = "" + basehtml = replacetextEx(basehtml, "", helpers) -/datum/controller/subsystem/processing/tgui/OnConfigLoad() - var/storage_iframe = GLOB.config.storage_cdn_iframe - if(storage_iframe && storage_iframe != /datum/configuration::storage_cdn_iframe) - basehtml = replacetextEx(basehtml, "tgui:storagecdn", storage_iframe) - return + // Inject inline ntos-error styles + var/ntos_error = file2text("tgui/public/ntos-error.min.css") + ntos_error = "" + basehtml = replacetextEx(basehtml, "", ntos_error) - if(GLOB.config.asset_transport == "webroot") - var/datum/asset_transport/webroot/webroot = SSassets.transport + basehtml = replacetextEx(basehtml, "", "Nanotrasen (c) 2395-[num2text(GLOB.game_year)]") - var/datum/asset_cache_item/item = webroot.register_asset("iframe.html", file("tgui/public/iframe.html")) - basehtml = replacetext(basehtml, "tgui:storagecdn", webroot.get_asset_url("iframe.html", item)) - return - - if(!storage_iframe) - return - - basehtml = replacetextEx(basehtml, "tgui:storagecdn", storage_iframe) - -/datum/controller/subsystem/processing/tgui/Shutdown() +/datum/controller/subsystem/tgui/Shutdown() close_all_uis() -/datum/controller/subsystem/processing/tgui/stat_entry(msg) +/datum/controller/subsystem/tgui/stat_entry(msg) msg = "P:[length(all_uis)]" return ..() -/datum/controller/subsystem/processing/tgui/fire(resumed = FALSE) - CAN_BE_REDEFINED(TRUE) +/datum/controller/subsystem/tgui/fire(resumed = FALSE) if(!resumed) src.current_run = all_uis.Copy() // Cache for sanic speed (lists are references anyways) var/list/current_run = src.current_run - var/seconds_per_tick = wait * 0.1 while(current_run.len) var/datum/tgui/ui = current_run[current_run.len] current_run.len-- // TODO: Move user/src_object check to process() if(ui?.user && ui.src_object) - ui.process(seconds_per_tick) + ui.process(wait * 0.1) else ui.close(0) if(MC_TICK_CHECK) @@ -84,9 +69,9 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * Returns null if pool was exhausted. * * required user mob - * return datum/tgui + * return datum/tgui_window */ -/datum/controller/subsystem/processing/tgui/proc/request_pooled_window(mob/user) +/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user) if(!user.client) return null var/list/windows = user.client.tgui_windows @@ -122,7 +107,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * required user mob */ -/datum/controller/subsystem/processing/tgui/proc/force_close_all_windows(mob/user) +/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user) log_tgui(user, context = "SStgui/force_close_all_windows") if(user.client) user.client.tgui_windows = list() @@ -138,14 +123,12 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * required user mob * required window_id string */ -/datum/controller/subsystem/processing/tgui/proc/force_close_window(mob/user, window_id) +/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id) log_tgui(user, context = "SStgui/force_close_window") // Close all tgui datums based on window_id. for(var/datum/tgui/ui in user.tgui_open_uis) if(ui.window && ui.window.id == window_id) ui.close(can_be_suspended = FALSE) - // Unset machine just to be sure. - user.unset_machine() // Close window directly just to be sure. user << browse(null, "window=[window_id]") @@ -161,7 +144,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return datum/tgui The found UI. */ -/datum/controller/subsystem/processing/tgui/proc/try_update_ui( +/datum/controller/subsystem/tgui/proc/try_update_ui( mob/user, datum/src_object, datum/tgui/ui) @@ -191,7 +174,8 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return datum/tgui The found UI. */ -/datum/controller/subsystem/processing/tgui/proc/get_open_ui(mob/user, datum/src_object) +/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object) + // No UIs opened for this src_object if(!LAZYLEN(src_object?.open_uis)) return null for(var/datum/tgui/ui in src_object.open_uis) @@ -209,15 +193,15 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs updated. */ -/datum/controller/subsystem/processing/tgui/proc/update_uis(datum/src_object) +/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) + // No UIs opened for this src_object if(!LAZYLEN(src_object?.open_uis)) return 0 var/count = 0 - var/seconds_per_tick = wait * 0.1 for(var/datum/tgui/ui in src_object.open_uis) // Check if UI is valid. if(ui?.src_object && ui.user && ui.src_object.ui_host(ui.user)) - INVOKE_ASYNC(ui, TYPE_PROC_REF(/datum/tgui, process), seconds_per_tick, TRUE) + INVOKE_ASYNC(ui, TYPE_PROC_REF(/datum/tgui, process), wait * 0.1, TRUE) count++ return count @@ -230,7 +214,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs closed. */ -/datum/controller/subsystem/processing/tgui/proc/close_uis(datum/src_object) +/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) // No UIs opened for this src_object if(!LAZYLEN(src_object?.open_uis)) return 0 @@ -249,7 +233,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs closed. */ -/datum/controller/subsystem/processing/tgui/proc/close_all_uis() +/datum/controller/subsystem/tgui/proc/close_all_uis() var/count = 0 for(var/datum/tgui/ui in all_uis) // Check if UI is valid. @@ -268,14 +252,13 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs updated. */ -/datum/controller/subsystem/processing/tgui/proc/update_user_uis(mob/user, datum/src_object) +/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object) var/count = 0 if(length(user?.tgui_open_uis) == 0) return count - var/seconds_per_tick = wait * 0.1 for(var/datum/tgui/ui in user.tgui_open_uis) if(isnull(src_object) || ui.src_object == src_object) - ui.process(seconds_per_tick, force = 1) + ui.process(wait * 0.1, force = 1) count++ return count @@ -289,7 +272,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs closed. */ -/datum/controller/subsystem/processing/tgui/proc/close_user_uis(mob/user, datum/src_object) +/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object) var/count = 0 if(length(user?.tgui_open_uis) == 0) return count @@ -306,7 +289,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * required ui datum/tgui The UI to be added. */ -/datum/controller/subsystem/processing/tgui/proc/on_open(datum/tgui/ui) +/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) ui.user?.tgui_open_uis |= ui LAZYOR(ui.src_object.open_uis, ui) all_uis |= ui @@ -320,7 +303,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return bool If the UI was removed or not. */ -/datum/controller/subsystem/processing/tgui/proc/on_close(datum/tgui/ui) +/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) // Remove it from the list of processing UIs. all_uis -= ui current_run -= ui @@ -340,7 +323,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return int The number of UIs closed. */ -/datum/controller/subsystem/processing/tgui/proc/on_logout(mob/user) +/datum/controller/subsystem/tgui/proc/on_logout(mob/user) close_user_uis(user) /** @@ -353,7 +336,7 @@ PROCESSING_SUBSYSTEM_DEF(tgui) * * return bool If the UIs were transferred. */ -/datum/controller/subsystem/processing/tgui/proc/on_transfer(mob/source, mob/target) +/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target) // The old mob had no open UIs. if(length(source?.tgui_open_uis) == 0) return FALSE diff --git a/code/datums/chat_payload.dm b/code/datums/chat_payload.dm new file mode 100644 index 00000000000..fd35bbc4eec --- /dev/null +++ b/code/datums/chat_payload.dm @@ -0,0 +1,16 @@ +/// Stores information about a chat payload +/datum/chat_payload + /// Sequence number of this payload + var/sequence = 0 + /// Message we are sending + var/list/content + /// Resend count + var/resends = 0 + +/// Converts the chat payload into a JSON string +/datum/chat_payload/proc/into_message() + return "{\"sequence\":[sequence],\"content\":[json_encode(content)]}" + +/// Returns an HTML-encoded message from our contents. +/datum/chat_payload/proc/get_content_as_html() + return message_to_html(content) diff --git a/code/datums/components/local_network.dm b/code/datums/components/local_network.dm index fdce8aa8a49..3064a4176a0 100644 --- a/code/datums/components/local_network.dm +++ b/code/datums/components/local_network.dm @@ -47,11 +47,6 @@ lan = null return lan -/datum/component/local_network_member/nano_host() - if(parent) - return parent.nano_host() - . = ..() - /datum/component/local_network_member/proc/get_new_tag(mob/user) var/new_ident = input(user, "Enter a new ident tag.", "[parent]", id_tag) as null|text if(new_ident && parent && user.Adjacent(parent) && CanInteract(user, GLOB.physical_state)) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index db9b0457e9d..1f1423f6e6e 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -94,7 +94,6 @@ current.remove_vampire_powers() current.mind = null - SSnanoui.user_transferred(current, new_character) SStgui.on_transfer(current, new_character) if(current.client && GLOB.ticket_panels[current.client]) var/datum/ticket_panel/tp = GLOB.ticket_panels[current.client] diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index 27946fa12ae..ac75f7c0057 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -6,7 +6,8 @@ wires = list( WIRE_POWER, WIRE_IDSCAN, WIRE_AI, - WIRE_PANIC, WIRE_ALARM + WIRE_PANIC, WIRE_ALARM, + WIRE_RCON ) add_duds(3) ..() @@ -24,6 +25,7 @@ . += A.locked ? "The air alarm is locked." : "The air alarm is unlocked." . += (A.shorted || (A.stat & (NOPOWER|BROKEN))) ? "The Air Alarm is offline." : "The Air Alarm is working properly!" . += A.aidisabled ? "The 'AI control allowed' light is off." : "The 'AI control allowed' light is on." + . += A.rcon_setting ? "The remote control link is enabled." : "The remote control link is disabled." /datum/wires/alarm/on_cut(wire, mend, source) var/obj/structure/machinery/alarm/A = holder @@ -51,6 +53,12 @@ A.post_alert(2) A.update_icon() + if(WIRE_RCON) + if(!mend) + A.rcon_setting = FALSE + else + A.rcon_setting = TRUE + /datum/wires/alarm/on_pulse(wire) var/obj/structure/machinery/alarm/A = holder switch(wire) @@ -67,7 +75,6 @@ A.shorted = 0 A.update_icon() - if (WIRE_AI) if (A.aidisabled == 0) A.aidisabled = 1 @@ -83,7 +90,7 @@ A.mode = 1 // AALARM_MODE_SCRUB A.apply_mode() - if(WIRE_ALARM) + if(WIRE_ALARM, WIRE_RCON) if (A.alarm_area.atmosalert(0, A)) A.post_alert(0) A.update_icon() diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index 02c2284958d..c234334c2f0 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -31,7 +31,7 @@ if(WIRE_TRANSMIT) R.set_broadcasting(!R.get_broadcasting() && !is_cut(WIRE_SIGNAL)) - SSnanoui.update_uis(holder) + SStgui.update_uis(holder) /datum/wires/radio/on_cut(wire, mend, source) var/obj/item/radio/R = holder @@ -45,4 +45,4 @@ if(WIRE_TRANSMIT) R.set_broadcasting(mend && !is_cut(WIRE_SIGNAL)) - SSnanoui.update_uis(holder) + SStgui.update_uis(holder) diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index 3f4a3d6a249..ab8d049536d 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -87,6 +87,15 @@ if(src.desc) . += src.desc + var/list/tags_list = examine_tags(user) + if(length(tags_list)) + var/tag_string = list() + for (var/atom_tag in tags_list) + tag_string += (isnull(tags_list[atom_tag]) ? atom_tag : SPAN_TOOLTIP(tags_list[atom_tag], atom_tag)) + // some regex to ensure that we don't add another "and" if the final element's main text (not tooltip) has one + tag_string = english_list(tag_string, and_text = (findtext(tag_string[length(tag_string)], regex(@">.*?and .*?<"))) ? " " : " and ") + . += "It is a [tag_string] [examine_descriptor(user)]." + // Returns a SPAN_* based on health, if configured. var/list/condition_hints = src.condition_hints() if(length(condition_hints)) @@ -145,6 +154,35 @@ if(H.glasses) H.glasses.glasses_examine_atom(src, H) +/// What this atom should be called in examine tags +/atom/proc/examine_descriptor(mob/user) + return "object" + +/** + * A list of "tags" displayed after atom's description in examine. + * This should return an assoc list of tags -> tooltips for them. If item is null, then no tooltip is assigned. + * + * * TGUI tooltips (not the main text) in chat cannot use HTML stuff at all, so + * trying something like `ffff` will not work for tooltips. + * + * For example: + * ```byond + * . = list() + * .["small"] = "It is a small item." + * .["fireproof"] = "It is made of fire-retardant materials." + * .["and conductive"] = "It's made of conductive materials and whatnot. Blah blah blah." // having "and " in the end tag's main text/key works too! + * ``` + * will result in + * + * It is a *small*, *fireproof* *and conductive* item. + * + * where "item" is pulled from [/atom/proc/examine_descriptor] + */ +/atom/proc/examine_tags(mob/user) + . = list() + + SEND_SIGNAL(src, COMSIG_ATOM_EXAMINE_TAGS, user, .) + /** * Used to check if "examine_fluff" from the HTML link in examine() is true, i.e. if it was clicked. */ diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 55db684600b..a7eec14b0ab 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -344,23 +344,22 @@ I.forceMove(T) -/obj/item/get_examine_text(mob/user, distance, is_adjacent, infix, suffix, get_extended = FALSE) - var/size - switch(src.w_class) - if (WEIGHT_CLASS_HUGE to INFINITY) - size = "huge" - if (WEIGHT_CLASS_BULKY to WEIGHT_CLASS_HUGE) - size = "bulky" - if (WEIGHT_CLASS_NORMAL to WEIGHT_CLASS_BULKY) - size = "normal-sized" - if (WEIGHT_CLASS_SMALL to WEIGHT_CLASS_NORMAL) - size = "small" - if (0 to WEIGHT_CLASS_SMALL) - size = "tiny" - //Changed this switch to ranges instead of tiered values, to cope with granularity and also - //things outside its range ~Nanako +/obj/item/examine_descriptor(mob/user) + return "item" - . = ..(user, distance, is_adjacent, "It is a [size] item.", get_extended = get_extended) +/obj/item/examine_tags(mob/user) + var/list/parent_tags = ..() + parent_tags.Insert(1, weight_class_to_text(w_class)) // To make size display first, otherwise it looks goofy + . = parent_tags + .[weight_class_to_text(w_class)] = weight_class_to_tooltip(w_class) + + if (siemens_coefficient == 0) + .["insulated"] = "It is made from a robust electrical insulator and will block any electricity passing through it!" + else if (siemens_coefficient <= 0.5) + .["partially insulated"] = "It is made from a poor insulator that will dampen (but not fully block) electric shocks passing through it." + +/obj/item/get_examine_text(mob/user, distance, is_adjacent, infix, suffix, get_extended = FALSE) + . = ..(user, distance, is_adjacent, get_extended = get_extended) var/datum/component/armor/armor_component = GetComponent(/datum/component/armor) if(armor_component && !armor_component.hidden) . += FONT_SMALL(SPAN_NOTICE("\[?\] This item has armor values. \[Show Armor Values\]")) diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 7eb77201608..09f5eafce0d 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -42,7 +42,7 @@ else if(crystal_type == CRYSTAL_TYPE_BLUECRYSTAL) I.hidden_uplink.bluecrystals += amount I.hidden_uplink.update_tgui_data() - SSnanoui.update_uis(I.hidden_uplink) + SStgui.update_uis(I.hidden_uplink) use(amount) to_chat(user, SPAN_NOTICE("You slot \the [src] into \the [I] and charge its internal uplink.")) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 05ee754b08e..766a38cd711 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -6,16 +6,20 @@ pass_flags_self = PASSSTRUCTURE should_use_health = TRUE - var/material_alteration = MATERIAL_ALTERATION_ALL // Overrides for material shit. Set them manually if you don't want colors etc. See wood chairs/office chairs. + /// Overrides for material shit. Set them manually if you don't want colors etc. See wood chairs/office chairs. + var/material_alteration = MATERIAL_ALTERATION_ALL var/climbable var/parts var/list/climbers - var/list/footstep_sound //footstep sounds when stepped on + /// Footstep sounds when stepped on + var/list/footstep_sound var/material/material - var/build_amt = 2 // used by some structures to determine into how many pieces they should disassemble into or be made with + /// Used by some structures to determine into how many pieces they should disassemble into or be made with + var/build_amt = 2 - var/slowdown = 0 //amount that pulling mobs have their movement delayed by + /// Amount that pulling mobs have their movement delayed by + var/slowdown = 0 /obj/structure/Initialize(mapload) . = ..() @@ -40,6 +44,14 @@ material = null return ..() +/obj/structure/examine_descriptor(mob/user) + return "structure" + +/obj/structure/examine_tags(atom/source, mob/user, list/examine_list) + . = ..() + if(climbable) + .["climbable"] = "It can be climbed on, either by dragging your mob onto it or middle-clicking it." + /obj/structure/attackby(obj/item/attacking_item, mob/user, params) . = ..() if(user?.a_intent == I_HURT && maxhealth) diff --git a/code/game/objects/structures/_machinery.dm b/code/game/objects/structures/_machinery.dm index 54099d1d51b..574e007f162 100644 --- a/code/game/objects/structures/_machinery.dm +++ b/code/game/objects/structures/_machinery.dm @@ -258,6 +258,9 @@ Class Procs: return FALSE qdel(src) +/obj/structure/machinery/examine_descriptor(mob/user) + return "machine" + // /obj/structure/machinery/proc/process_all() // /* Uncomment this if/when you need component processing // if(processing_flags & MACHINERY_PROCESS_COMPONENTS) @@ -643,5 +646,5 @@ Class Procs: /obj/structure/machinery/ui_status(mob/user, datum/ui_state/state) . = ..() if(. < UI_INTERACTIVE) - if(user.machine) + if(user?.machine) user.unset_machine() diff --git a/code/game/objects/structures/machinery/alarm.dm b/code/game/objects/structures/machinery/alarm.dm index a58c2b3518d..a34f6978d47 100644 --- a/code/game/objects/structures/machinery/alarm.dm +++ b/code/game/objects/structures/machinery/alarm.dm @@ -118,9 +118,8 @@ pixel_x = 10; var/breach_detection = 1 //var/skipprocess = 0 //Experimenting var/alarm_frequency = 1437 - var/remote_control = 0 - var/rcon_setting = 2 - var/rcon_time = 0 + /// If true, RCON is enabled. If false, RCON has been disabled. + var/rcon_setting = TRUE var/locked = 1 var/aidisabled = 0 var/shorted = 0 @@ -475,18 +474,6 @@ pixel_x = 10; mode=AALARM_MODE_FILL apply_mode() - //atmos computer remote controll stuff - switch(rcon_setting) - if(RCON_NO) - remote_control = 0 - if(RCON_AUTO) - if(danger_level == 2) - remote_control = 1 - else - remote_control = 0 - if(RCON_YES) - remote_control = 1 - return /obj/structure/machinery/alarm/proc/handle_heating_cooling(datum/gas_mixture/environment, seconds_per_tick) @@ -698,6 +685,22 @@ pixel_x = 10; frequency.post_signal(src, alert_signal) +/obj/structure/machinery/alarm/proc/is_alarming() + return max(danger_level, alarm_area?.atmosalm) > 0 + +/obj/structure/machinery/alarm/proc/is_remote_user(mob/user) + if(!user) + return FALSE + for(var/datum/tgui/open_tgui in user.tgui_open_uis) + if(open_tgui.interface == "AtmosAlarmControl") + return TRUE + return FALSE + +/obj/structure/machinery/alarm/proc/is_unlocked_for(mob/user) + if(is_remote_user(user) && rcon_setting) + return TRUE + return !locked || issilicon(user) + /obj/structure/machinery/alarm/attack_ai(mob/user) if(!ai_can_interact(user)) return @@ -751,7 +754,8 @@ pixel_x = 10; data["target_temperature"] = round(target_temperature - T0C, 0.1) // Access - data["locked"] = locked && !issilicon(user) + data["locked"] = !is_unlocked_for(user) + data["remote_view"] = is_remote_user(user) data["shorted"] = shorted data["rcon"] = rcon_setting @@ -848,14 +852,6 @@ pixel_x = 10; // Actions available without unlocking switch(action) - if("rcon") - var/new_rcon = text2num(params["value"]) - switch(new_rcon) - if(RCON_NO) rcon_setting = RCON_NO - if(RCON_AUTO) rcon_setting = RCON_AUTO - if(RCON_YES) rcon_setting = RCON_YES - return TRUE - if("temperature") var/list/tlv = TLV["temperature"] var/max_temperature = min(tlv[3] - T0C, MAX_TEMPERATURE) @@ -871,7 +867,7 @@ pixel_x = 10; return TRUE // Actions that require the alarm to be unlocked - if(locked && !issilicon(usr)) + if(!is_unlocked_for(usr)) return switch(action) @@ -962,11 +958,10 @@ pixel_x = 10; apply_mode() return TRUE -/// Snowflake proc to make it so users of the Atmosphere Control app (having the UI open) have full access to an alarm. +/// Lets Atmosphere Control users remotely view alarms. /obj/structure/machinery/alarm/ui_status(mob/user) - for(var/datum/tgui/open_tgui in user.tgui_open_uis) - if(open_tgui.interface == "AtmosAlarmControl") - return UI_INTERACTIVE + if(is_remote_user(user) && rcon_setting) + return UI_INTERACTIVE return ..() /** diff --git a/code/game/objects/structures/machinery/atmo_control.dm b/code/game/objects/structures/machinery/atmo_control.dm index 69fcdca9d06..09becf19622 100644 --- a/code/game/objects/structures/machinery/atmo_control.dm +++ b/code/game/objects/structures/machinery/atmo_control.dm @@ -141,7 +141,7 @@ var/list/sensor_information = list() var/datum/radio_frequency/radio_connection - var/ui_type = "AtmosControl" + ui_type = "AtmosControl" circuit = /obj/item/circuitboard/air_management /obj/structure/machinery/computer/general_air_control/Destroy() diff --git a/code/game/objects/structures/machinery/computer/computer.dm b/code/game/objects/structures/machinery/computer/computer.dm index b84ecef4389..abd74c754e3 100644 --- a/code/game/objects/structures/machinery/computer/computer.dm +++ b/code/game/objects/structures/machinery/computer/computer.dm @@ -32,6 +32,9 @@ /// The access cable inserted into this computer, if any. var/obj/item/access_cable/inserted_cable + /// Contains the name of the TGUI interface file opened when using this computer. If null, + var/ui_type = "" + /obj/structure/machinery/computer/Initialize() . = ..() overlay_layer = layer @@ -45,11 +48,6 @@ inserted_cable = null return ..() -/obj/structure/machinery/computer/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = TRUE) - if(!operable() || !is_station_level(z) || user.stat) - user.unset_machine() - return - /obj/structure/machinery/computer/emp_act(severity) . = ..() diff --git a/code/game/objects/structures/machinery/dna_machines.dm b/code/game/objects/structures/machinery/dna_machines.dm index 8d5c7f08ae6..f86c9de109f 100644 --- a/code/game/objects/structures/machinery/dna_machines.dm +++ b/code/game/objects/structures/machinery/dna_machines.dm @@ -248,10 +248,7 @@ /obj/structure/machinery/computer/scan_consolenew/attackby(obj/item/attacking_item, mob/user) if (istype(attacking_item, /obj/item/disk/data)) //INSERT SOME diskS if (!src.disk) - user.drop_from_inventory(attacking_item, src) - src.disk = attacking_item - to_chat(user, "You insert [attacking_item].") - SSnanoui.update_uis(src) // update all UIs attached to src + to_chat(user, "You try to insert [attacking_item], but the drive seems jammed.") return TRUE else return ..() diff --git a/code/game/objects/structures/machinery/embedded_controller/docking_program.dm b/code/game/objects/structures/machinery/embedded_controller/docking_program.dm index fa992ccddb2..6eb60977af2 100644 --- a/code/game/objects/structures/machinery/embedded_controller/docking_program.dm +++ b/code/game/objects/structures/machinery/embedded_controller/docking_program.dm @@ -274,7 +274,6 @@ signal.data["dock_status"] = get_docking_status() post_signal(signal) -//this is mostly for NanoUI /datum/computer/file/embedded_program/docking/proc/get_docking_status() switch (dock_state) if (STATE_UNDOCKED) return "undocked" diff --git a/code/game/objects/structures/machinery/vending/_vending.dm b/code/game/objects/structures/machinery/vending/_vending.dm index 5c6517d5783..a2534f3f8f3 100644 --- a/code/game/objects/structures/machinery/vending/_vending.dm +++ b/code/game/objects/structures/machinery/vending/_vending.dm @@ -97,7 +97,7 @@ var/categories = CAT_NORMAL /// What we're requesting payment for right now var/datum/data/vending_product/currently_vending = null - /// Status screen messages like "insufficient funds", displayed in NanoUI + /// Status screen messages like "insufficient funds", displayed in UI var/status_message = "" /// Set to 1 if status_message is an error var/status_error = 0 @@ -770,7 +770,6 @@ sel_key = params["vendItem"] var/datum/data/vending_product/R = product_records[key] - // This should not happen unless the request from NanoUI was bad if(!(R.category & categories)) return diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index ff981c97dbe..b86db50919a 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -26,6 +26,9 @@ /// If the turf should generate details. Default: TRUE var/has_edge_icon = TRUE +/turf/simulated/floor/examine_descriptor(mob/user) + return "floor" + /turf/simulated/floor/disassembly_hints(mob/user, distance, is_adjacent) . += ..() if(flooring) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 104a39b4f84..6ada1a0b148 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -62,6 +62,9 @@ state = SPAN_NOTICE("\The [src] seems completely intact.") . = state +/turf/simulated/wall/examine_descriptor(mob/user) + return "wall" + /turf/simulated/wall/mechanics_hints(mob/user, distance, is_adjacent) . += ..() if(locate(/obj/effect/overlay/wallrot) in src) diff --git a/code/game/turfs/unsimulated/floor.dm b/code/game/turfs/unsimulated/floor.dm index 4f2a2740e20..ebce3c7ba98 100644 --- a/code/game/turfs/unsimulated/floor.dm +++ b/code/game/turfs/unsimulated/floor.dm @@ -3,6 +3,9 @@ icon = 'icons/turf/flooring/tiles.dmi' icon_state = "tiled_preview" +/turf/unsimulated/floor/examine_descriptor(mob/user) + return "floor" + /turf/unsimulated/floor/monotile icon_state = "monotile_preview" diff --git a/code/game/turfs/unsimulated/walls.dm b/code/game/turfs/unsimulated/walls.dm index 1467831b41c..844df462165 100644 --- a/code/game/turfs/unsimulated/walls.dm +++ b/code/game/turfs/unsimulated/walls.dm @@ -7,6 +7,9 @@ blocks_air = TRUE pass_flags_self = PASSCLOSEDTURF +/turf/unsimulated/wall/examine_descriptor(mob/user) + return "wall" + /turf/unsimulated/wall/fakeglass name = "window" icon = 'icons/turf/walls.dmi' diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 972aa5519d3..32f5789b9b2 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -265,14 +265,6 @@ else //Delayed to avoid wingets from Login calls. addtimer(CALLBACK(src, VERB_REF(fit_viewport), 1 SECONDS)) -/client/verb/refresh_tgui() - set name = "Refresh TGUI" - set category = "OOC.Debug" - - for(var/window_id in tgui_windows) - var/datum/tgui_window/window = tgui_windows[window_id] - window.reinitialize() - /client/verb/fix_stat_panel() set name = "Fix-Stat-Panel" set hidden = TRUE diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 528a490c641..916fe9716a4 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -180,7 +180,6 @@ GLOBAL_LIST_INIT(admin_verbs_server, list( /datum/admins/proc/toggle_round_spookyness, /datum/admins/proc/toggle_space_ninja, /client/proc/toggle_random_events, - /client/proc/nanomapgen_DumpImage, /client/proc/toggle_recursive_explosions, /client/proc/restart_controller, /client/proc/cmd_ss_panic, @@ -355,7 +354,6 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /datum/admins/proc/adjump, /datum/admins/proc/toggle_space_ninja, /client/proc/toggle_random_events, - /client/proc/nanomapgen_DumpImage, /client/proc/play_local_sound, /client/proc/play_sound, /client/proc/play_server_sound, @@ -475,7 +473,6 @@ GLOBAL_LIST_INIT(admin_verbs_dev, list( //will need to be altered - Ryan784 /client/proc/jumptoship, /client/proc/jumptosector, /client/proc/cmd_dev_say, - /client/proc/nanomapgen_DumpImage, /client/proc/admin_ghost, /client/proc/air_report, /client/proc/enable_debug_verbs, diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index fde6a515bfc..603011407f8 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -463,21 +463,6 @@ usr << browse(HTML_SKELETON(replacetext(SSatoms.InitLog(), "\n", "
    ")), "window=initlog") -/client/proc/reload_nanoui_resources() - set category = "Debug" - set name = "Reload NanoUI Resources" - set desc = "Force the client to redownload NanoUI Resources" - - // Close open NanoUIs. - SSnanoui.close_user_uis(usr) - - // Re-load the assets. - var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui) - assets.register() - - // Clear the user's cache so they get resent. - usr.client.sent_assets = list() - /** * Used to generate lag and load the MC to test how things work under live server stress */ diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm index 8bb41cc3706..3e89a876196 100644 --- a/code/modules/client/preference_setup/global/01_ui.dm +++ b/code/modules/client/preference_setup/global/01_ui.dm @@ -6,7 +6,6 @@ S["UI_style"] >> pref.UI_style S["UI_style_color"] >> pref.UI_style_color S["UI_style_alpha"] >> pref.UI_style_alpha - S["tgui_fancy"] >> pref.tgui_fancy S["tgui_lock"] >> pref.tgui_lock S["ooccolor"] >> pref.ooccolor S["clientfps"] >> pref.clientfps @@ -21,7 +20,6 @@ S["UI_style"] << pref.UI_style S["UI_style_color"] << pref.UI_style_color S["UI_style_alpha"] << pref.UI_style_alpha - S["tgui_fancy"] << pref.tgui_fancy S["tgui_lock"] << pref.tgui_lock S["ooccolor"] << pref.ooccolor S["clientfps"] << pref.clientfps @@ -39,7 +37,6 @@ "UI_style", "UI_style_color", "UI_style_alpha", - "tgui_fancy", "tgui_lock", "ooccolor", "clientfps", @@ -63,7 +60,6 @@ "UI_style", "UI_style_color", "UI_style_alpha", - "tgui_fancy", "tgui_lock", "ooccolor", "clientfps", @@ -83,7 +79,6 @@ "UI_style_alpha" = pref.UI_style_alpha, "UI_style_color" = pref.UI_style_color, "UI_style" = pref.UI_style, - "tgui_fancy" = pref.tgui_fancy, "tgui_lock" = pref.tgui_lock, "ooccolor" = pref.ooccolor, "clientfps" = pref.clientfps, @@ -100,7 +95,6 @@ pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color)) pref.UI_style_alpha = sanitize_integer(text2num(pref.UI_style_alpha), 0, 255, initial(pref.UI_style_alpha)) pref.clientfps = sanitize_integer(text2num(pref.clientfps), 0, 1000, initial(pref.clientfps)) - pref.tgui_fancy = sanitize_bool(pref.tgui_fancy, TRUE) pref.tgui_lock = sanitize_bool(pref.tgui_lock, FALSE) pref.tgui_inputs = sanitize_bool(pref.tgui_inputs, TRUE) pref.tgui_buttons_large = sanitize_bool(pref.tgui_buttons_large, FALSE) @@ -116,7 +110,6 @@ dat += "-Color: [pref.UI_style_color] [HTML_RECT(pref.UI_style_color)] - reset
    " dat += "-Alpha(transparency): [pref.UI_style_alpha] - reset
    " dat += "Tooltip Style: [pref.tooltip_style]
    " - dat += "TGUI Fancy: [pref.tgui_fancy ? "ON" : "OFF"]
    " dat += "TGUI Lock: [pref.tgui_lock ? "ON" : "OFF"]
    " dat += "TGUI Inputs: [pref.tgui_inputs ? "ON" : "OFF"]
    " dat += "TGUI Input Large Buttons: [pref.tgui_buttons_large ? "ON" : "OFF"]
    " @@ -152,10 +145,6 @@ pref.UI_style_alpha = UI_style_alpha_new return TOPIC_REFRESH - else if(href_list["select_tguif"]) - pref.tgui_fancy = !pref.tgui_fancy - return TOPIC_REFRESH - else if(href_list["select_tguil"]) pref.tgui_lock = !pref.tgui_lock return TOPIC_REFRESH diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4287ce1c510..ed3d511060a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -26,7 +26,6 @@ GLOBAL_LIST_EMPTY_TYPED(preferences_datums, /datum/preferences) var/sfx_toggles = ASFX_DEFAULT var/UI_style_color = "#ffffff" var/UI_style_alpha = 255 - var/tgui_fancy = TRUE var/tgui_lock = FALSE var/tgui_inputs = TRUE var/tgui_buttons_large = FALSE diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1bdba12895a..e55047a1a7b 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -77,6 +77,16 @@ QDEL_LIST(accessories) return ..() +/obj/item/clothing/examine_descriptor(mob/user) + return "clothing" + +/obj/item/clothing/examine_tags(mob/user) + . = ..() + if(item_flags & ITEM_FLAG_THICK_MATERIAL) + .["thick"] = "Stops or slows minor piercing effects, such as from injectors." + if(item_flags & ITEM_FLAG_INJECTION_PORT) + .["port-enabled"] = "Has a dedicated injection port for syringes and hypo-sprays to be used on the wearer." + //Updates the icons of the mob wearing the clothing item, if any. /obj/item/clothing/proc/update_clothing_icon() return diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index c0cd8b186a3..660eb4a610f 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -5,6 +5,7 @@ icon_state = "hardhat_yellow" item_state = "hardhat_yellow" light_overlay = "hardhat_light" + item_flags = ITEM_FLAG_THICK_MATERIAL contained_sprite = TRUE action_button_name = "Toggle Headlamp" light_range = 4 //luminosity when on diff --git a/code/modules/heavy_vehicle/mecha.dm b/code/modules/heavy_vehicle/mecha.dm index c6644c32ace..cab3572e6fa 100644 --- a/code/modules/heavy_vehicle/mecha.dm +++ b/code/modules/heavy_vehicle/mecha.dm @@ -325,9 +325,6 @@ if(istype(exosuit) && exosuit.head && exosuit.head.radio && exosuit.head.radio.is_functional()) return ..() -/obj/item/radio/exosuit/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/ui_state/state = GLOB.mech_state) - . = ..() - /mob/living/heavy_vehicle/proc/become_remote() for(var/mob/user in pilots) eject(user, FALSE) diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index d63394c3b8b..8a9d9ec4258 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -5,7 +5,6 @@ //TGUI remove_all_indicators() - SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs GLOB.player_list -= src disconnect_time = world.realtime log_access("Logout: [key_name(src)]") diff --git a/code/modules/modular_computers/_description.dm b/code/modules/modular_computers/_description.dm index 5d551a1549a..407c5f5cf9a 100644 --- a/code/modules/modular_computers/_description.dm +++ b/code/modules/modular_computers/_description.dm @@ -45,8 +45,7 @@ if one is destroyed the second will take over. If all relays are gone it stops w possible to enable/disable Software Downloading, P2P file transfers and Communication (IC version of IRC, PDA messages for more than two people) 5. Software -Software would almost exclusively use NanoUI modules. Few exceptions are text editor (uses similar screen as TCS IDE used for editing and classic HTML for previewing as Nano looks differently) -and similar programs which for some reason require HTML UI. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network. +Software would almost exclusively use TGUI modules. Most software will be highly dependent on NTNet to work as laptops are not physically connected to the station's network. What i plan to add: Note: XXXXDB programs will use ingame_manuals to display basic help for players, similar to how books, etc. do diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index 7d5bc187dd7..77c8a4bad2e 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -416,13 +416,10 @@ /obj/item/modular_computer/proc/update_uis() if(active_program) //Should we update program ui or computer ui? - SSnanoui.update_uis(active_program) - SStgui.update_uis(src) - if(active_program.NM) - SSnanoui.update_uis(active_program.NM) + if(active_program) + SStgui.update_uis(active_program) else SStgui.update_uis(src) - SSnanoui.update_uis(src) /obj/item/modular_computer/proc/check_update_ui_need() var/ui_update_needed = FALSE @@ -458,18 +455,6 @@ if(ui_update_needed) update_uis() -// Used by camera monitor program -/obj/item/modular_computer/check_eye(var/mob/user) - if(active_program) - return active_program.check_eye(user) - return ..() - -// Used by camera monitor program -/obj/item/modular_computer/grants_equipment_vision(var/mob/user) - if(active_program) - return active_program.grants_equipment_vision(user) - return ..() - /obj/item/modular_computer/get_cell() return battery_module ? battery_module.get_cell() : DEVICE_NO_CELL diff --git a/code/modules/modular_computers/computers/modular_computer/ui.dm b/code/modules/modular_computers/computers/modular_computer/ui.dm index 7652f8dc84e..51af5ce2a2d 100644 --- a/code/modules/modular_computers/computers/modular_computer/ui.dm +++ b/code/modules/modular_computers/computers/modular_computer/ui.dm @@ -37,9 +37,9 @@ /obj/item/modular_computer/proc/get_header_data(list/data) LAZYINITLIST(data) - data["PC_batteryicon"] = get_battery_icon() + data["PC_batteryicon"] = battery_module ? get_battery_icon() : null data["PC_showbatteryicon"] = !!battery_module - data["PC_batterypercent"] = battery_module ? "[round(battery_module.battery.percent())] %" : "N/C" + data["PC_batterypercent"] = battery_module ? "[round(battery_module.battery.percent())] %" : null data["PC_apclinkicon"] = (tesla_link?.enabled && apc_powered) ? "charging.gif" : "" data["PC_device_theme"] = active_program ? active_program.tgui_theme : "scc" data["PC_ntneticon"] = get_ntnet_status_icon() @@ -206,5 +206,15 @@ return UI_INTERACTIVE . = ..() if(. < UI_INTERACTIVE) - if(user.machine) + if(user?.machine) user.unset_machine() + +/obj/item/modular_computer/check_eye(mob/user) + if(active_program) + return active_program.check_eye(user) + return ..() + +/obj/item/modular_computer/grants_equipment_vision(mob/user) + if(active_program) + return active_program.grants_equipment_vision(user) + return ..() diff --git a/code/modules/modular_computers/computers/subtypes/dev_silicon.dm b/code/modules/modular_computers/computers/subtypes/dev_silicon.dm index 6721a1b8222..bfa09170fb8 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_silicon.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_silicon.dm @@ -19,6 +19,9 @@ /obj/item/modular_computer/silicon/ui_host() . = computer_host +/obj/item/modular_computer/silicon/ui_state(mob/user) + return GLOB.self_state + /obj/item/modular_computer/silicon/Initialize(mapload) if(istype(loc, /mob/living/silicon)) computer_host = loc diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index 08787f46ac7..dfb0d78d0f2 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -84,11 +84,7 @@ ABSTRACT_TYPE(/datum/computer_file/program) var/tgui_theme = "scc" /// If this TGUI should autoupdate or not. - var/ui_auto_update = TRUE - - // TO BE DEPRECATED: - var/datum/nano_module/NM // If the program uses NanoModule, put it here and it will be automagically opened. Otherwise implement ui_interact. - var/nanomodule_path // Path to nanomodule, make sure to set this if implementing new program. + var/ui_auto_update = TRUE // Path to nanomodule, make sure to set this if implementing new program. /datum/computer_file/program/New(obj/item/modular_computer/comp) ..() @@ -136,7 +132,6 @@ ABSTRACT_TYPE(/datum/computer_file/program) var/datum/computer_file/program/temp = ..(rename, computer) temp.required_access_run = required_access_run temp.required_access_download = required_access_download - temp.nanomodule_path = nanomodule_path temp.filedesc = filedesc temp.program_icon_state = program_icon_state temp.requires_ntnet = requires_ntnet @@ -200,6 +195,14 @@ ABSTRACT_TYPE(/datum/computer_file/program) return computer.get_ntnet_status(specific_action) return FALSE +/// Allows active programs to preserve non-standard user views, such as camera monitors. +/datum/computer_file/program/proc/check_eye(mob/user) + return -1 + +/// Allows active programs to grant equipment vision while controlling the user's view. +/datum/computer_file/program/proc/grants_equipment_vision(mob/user) + return FALSE + // Called by Process() on device that runs us, once every tick. /datum/computer_file/program/proc/process_tick() return TRUE @@ -307,31 +310,12 @@ ABSTRACT_TYPE(/datum/computer_file/program) else // Should never happen - So fail silently return FALSE -// This attempts to retrieve header data for NanoUIs. If implementing completely new device of different type than existing ones +// This attempts to retrieve header data for UIs. If implementing completely new device of different type than existing ones // always include the device here in this proc. This proc basically relays the request to whatever is running the program. /datum/computer_file/program/proc/get_header_data() if(computer) return computer.get_header_data() - -/datum/computer_file/program/Topic(href, href_list) - if(..()) - return TRUE - if(computer) - return computer.Topic(href, href_list) - -// Relays the call to nano module, if we have one -/datum/computer_file/program/proc/check_eye(var/mob/user) - if(NM) - return NM.check_eye(user) - else - return -1 - -/// Relays the call to nano module, if we have one -/datum/computer_file/program/proc/grants_equipment_vision(var/mob/user) - if(NM) - return NM.grants_equipment_vision(user) - /datum/computer_file/program/proc/message_dead(var/message) for(var/mob/M in GLOB.player_list) if(M.stat == DEAD && (M.client && M.client.prefs.toggles & CHAT_GHOSTEARS)) diff --git a/code/modules/modular_computers/file_system/program_events.dm b/code/modules/modular_computers/file_system/program_events.dm index 9b03b8d6369..f49a38a1355 100644 --- a/code/modules/modular_computers/file_system/program_events.dm +++ b/code/modules/modular_computers/file_system/program_events.dm @@ -5,8 +5,6 @@ // When implementing new program based device, use this to run the program. /datum/computer_file/program/proc/run_program(var/mob/user) if(can_run(user, 1) || !requires_access_to_run) - if(nanomodule_path) - NM = new nanomodule_path(src, new /datum/topic_manager/program(src), src) if(requires_ntnet && network_destination) generate_network_log("Connection opened to [network_destination].") program_state = PROGRAM_STATE_ACTIVE @@ -18,9 +16,6 @@ program_state = PROGRAM_STATE_KILLED if(network_destination) generate_network_log("Connection to [network_destination] closed.") - if(NM) - qdel(NM) - NM = null return TRUE // Is called when program service is being activated diff --git a/code/modules/modular_computers/file_system/programs/_program.dm b/code/modules/modular_computers/file_system/programs/_program.dm index 72030a2d2d1..c0293bdc125 100644 --- a/code/modules/modular_computers/file_system/programs/_program.dm +++ b/code/modules/modular_computers/file_system/programs/_program.dm @@ -1,39 +1,5 @@ -/obj/item/modular_computer/initial_data() +/obj/item/modular_computer/proc/initial_data() return list("_PC" = get_header_data()) -/datum/computer_file/program/initial_data() +/datum/computer_file/program/proc/initial_data() return list("_PC" = get_header_data()) - -/obj/item/modular_computer/update_layout() - return TRUE - -/datum/computer_file/program/update_layout() - return TRUE - -/datum/nano_module/program - available_to_ai = FALSE - var/datum/computer_file/program/program // Program-Based computer program that runs this nano module. Defaults to null. - -/datum/nano_module/program/New(var/host, var/topic_manager, var/program) - ..() - src.program = program - -/datum/nano_module/program/Destroy() - program = null - return ..() - -/datum/topic_manager/program - var/datum/program - -/datum/topic_manager/program/New(var/datum/program) - ..() - src.program = program - -/datum/topic_manager/program/Destroy() - program = null - return ..() - -// Calls forwarded to PROGRAM itself should begin with "PRG_" -// Calls forwarded to COMPUTER running the program should begin with "PC_" -/datum/topic_manager/program/Topic(href, href_list) - return program && program.Topic(href, href_list) diff --git a/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm b/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm index 6d619a3de26..e87234b0b31 100644 --- a/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm +++ b/code/modules/modular_computers/file_system/programs/civilian/cargo_order.dm @@ -9,7 +9,6 @@ available_on_ntnet = TRUE usage_flags = PROGRAM_ALL tgui_id = "CargoOrder" - ui_auto_update = FALSE var/page = "main" //main - Main Menu, order - Order Page, item_details - Item Details Page, tracking - Tracking Page var/selected_category = null // Category that is currently selected diff --git a/code/modules/modular_computers/file_system/programs/command/card.dm b/code/modules/modular_computers/file_system/programs/command/card.dm index 4c6aa651443..e60bb5daa69 100644 --- a/code/modules/modular_computers/file_system/programs/command/card.dm +++ b/code/modules/modular_computers/file_system/programs/command/card.dm @@ -11,7 +11,6 @@ size = 8 color = LIGHT_COLOR_BLUE tgui_id = "IDCardModification" - ui_auto_update = FALSE var/is_centcom = FALSE var/show_assignments = FALSE diff --git a/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm b/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm index 6eebe6b56e8..fe77a3024bf 100644 --- a/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm +++ b/code/modules/modular_computers/file_system/programs/command/command_and_communications.dm @@ -12,7 +12,6 @@ network_destination = "station long-range communication array" color = LIGHT_COLOR_BLUE tgui_id = "CommandCommunications" - ui_auto_update = FALSE var/datum/comm_message_listener/message_core var/intercept = FALSE var/can_call_shuttle = FALSE //If calling the shuttle should be available from this console @@ -272,7 +271,12 @@ GLOBAL_VAR_INIT(last_message_id, 0) /datum/comm_message_listener/proc/Add(var/list/message) messages[++messages.len] = message -/datum/comm_message_listener/proc/Remove(var/list/message) +/datum/comm_message_listener/proc/Remove(var/message) + if(isnum(message)) + for(var/list/stored_message in messages) + if(stored_message["id"] == message) + message = stored_message + break messages -= list(message) /* Command action procs diff --git a/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm b/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm index 74702b4e2bf..ac416d91793 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/atmoscontrol.dm @@ -48,7 +48,7 @@ // Opens the interface for the given air alarm. if("alarm") var/obj/structure/machinery/alarm/alarm = locate(params["alarm"]) in (monitored_alarms.len ? monitored_alarms : SSmachinery.processing) - if(alarm) + if(alarm?.rcon_setting) alarm.ui_interact(usr) return TRUE // Manually clear and repopulate the alarm list. @@ -65,6 +65,8 @@ var/alarms = list() for(var/obj/structure/machinery/alarm/alarm in monitored_alarms) + if(!alarm.rcon_setting) + continue alarms += list(list( "deck" = alarm.alarm_area.horizon_deck, "dept" = alarm.alarm_area.department, @@ -77,4 +79,3 @@ data["alarms"] = alarms return data - diff --git a/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm b/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm index 21fc2d4aa53..7f6dc3333a8 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/lightingcontrol.dm @@ -23,7 +23,9 @@ ..() lstate = SSnightlight.is_active() ? "dark" : "full" -/datum/computer_file/program/lighting_control/proc/update_lighting() +/datum/computer_file/program/lighting_control/proc/update_lighting(var/new_context = context, var/new_lstate = lstate) + context = new_context + lstate = new_lstate // whether to only select areas explicitly marked for nightlighting var/wl_only = context == "all" ? 0 : 1 @@ -48,7 +50,8 @@ lstate = params["mode"] . = TRUE if ("set") - update_lighting() + update_lighting(params["context"] || context, params["mode"] || lstate) + . = TRUE /datum/computer_file/program/lighting_control/ui_data(mob/user) var/list/data = initial_data() diff --git a/code/modules/modular_computers/file_system/programs/engineering/rcon.dm b/code/modules/modular_computers/file_system/programs/engineering/rcon.dm index 54a3aa6213a..764093378b8 100644 --- a/code/modules/modular_computers/file_system/programs/engineering/rcon.dm +++ b/code/modules/modular_computers/file_system/programs/engineering/rcon.dm @@ -14,7 +14,6 @@ color = LIGHT_COLOR_YELLOW tgui_id = "RCON" tgui_theme = "hephaestus" - ui_auto_update = FALSE /datum/computer_file/program/rcon_console/New() ..() diff --git a/code/modules/modular_computers/file_system/programs/security/camera.dm b/code/modules/modular_computers/file_system/programs/security/camera.dm index 4744ee06a01..ee2a08d1700 100644 --- a/code/modules/modular_computers/file_system/programs/security/camera.dm +++ b/code/modules/modular_computers/file_system/programs/security/camera.dm @@ -162,9 +162,10 @@ return FALSE set_current(C) - user.set_machine(ui_host()) + var/obj/host = ui_host() + if(host) + user.set_machine(host) user.reset_view(current_camera) - check_eye(user) if(ishuman(user)) var/mob/living/carbon/human/H = user @@ -172,6 +173,22 @@ return TRUE +/datum/computer_file/program/camera_monitor/check_eye(mob/user) + if(user.stat || user.blinded) + return -1 + if(!current_camera) + return 0 + + var/viewflag = current_camera.check_eye(user) + if(viewflag < 0) + reset_current() + return viewflag + +/datum/computer_file/program/camera_monitor/grants_equipment_vision(mob/user) + if(user.stat || user.blinded || !current_camera) + return FALSE + return current_camera.grants_equipment_vision(user) + /datum/computer_file/program/camera_monitor/proc/set_current(var/obj/structure/machinery/camera/C) if(current_camera == C) return @@ -192,44 +209,14 @@ L.tracking_cancelled() current_camera = null -/datum/computer_file/program/camera_monitor/check_eye(var/mob/user as mob) - var/obj/item/modular_computer/MC = user.machine - if(istype(MC) && ui_host() == MC) - if(!MC.working || user.blinded || user.stat) - user.unset_machine() - return -1 - if(!current_camera) - return 0 - var/viewflag = current_camera.check_eye(user) - if ( viewflag < 0 ) //camera doesn't work - reset_current() - return viewflag - -/datum/computer_file/program/camera_monitor/grants_equipment_vision(mob/user) - var/obj/item/modular_computer/MC = user.machine - if(istype(MC) && ui_host() == MC) - if(!MC.working || user.blinded || user.stat) - return FALSE - if(!current_camera) - return FALSE - var/viewflag = current_camera.check_eye(user) - if (viewflag < 0) //camera doesn't work - return FALSE - return TRUE - // ERT Variant of the program /datum/computer_file/program/camera_monitor/ert filename = "ntcammon" filedesc = "Advanced Camera Monitoring" extended_desc = "This program allows remote access to station's camera system. Some camera networks may have additional access requirements. This version has an integrated database with additional encrypted keys." size = 14 - nanomodule_path = /datum/nano_module/camera_monitor/ert available_on_ntnet = FALSE -/datum/nano_module/camera_monitor/ert - name = "Advanced Camera Monitoring Program" - available_to_ai = FALSE - // The ERT variant has access to ERT and crescent cams, but still checks for accesses. ERT members should be able to use it. /datum/computer_file/program/camera_monitor/ert/modify_networks_list(var/list/networks) ..() @@ -242,13 +229,9 @@ filedesc = "Journalism Camera Monitoring" extended_desc = "This program allows remote access to station's camera system. Some camera networks may have additional access requirements. This version has has a connection to news networks." size = 2 - nanomodule_path = /datum/nano_module/camera_monitor/news required_access_download = null usage_flags = PROGRAM_ALL -/datum/nano_module/camera_monitor/news - name = "Journalism Camera Monitoring Program" - /datum/computer_file/program/camera_monitor/news/modify_networks_list(var/list/networks) networks = list() networks.Add(list(list("tag" = NETWORK_NEWS, "has_access" = 1))) diff --git a/code/modules/modular_computers/file_system/programs/security/penalmechs.dm b/code/modules/modular_computers/file_system/programs/security/penalmechs.dm index c7d137bcd98..2def9c74337 100644 --- a/code/modules/modular_computers/file_system/programs/security/penalmechs.dm +++ b/code/modules/modular_computers/file_system/programs/security/penalmechs.dm @@ -128,7 +128,6 @@ set_current(C) user.machine = ui_host() user.reset_view(current_camera) - check_eye(user) return TRUE /datum/computer_file/program/penal_mechs/proc/set_current(var/obj/structure/machinery/camera/C) @@ -150,11 +149,3 @@ if(istype(L)) L.tracking_cancelled() current_camera = null - -/datum/computer_file/program/penal_mechs/check_eye(var/mob/user) - if(!current_camera) - return FALSE - var/viewflag = current_camera.check_eye(user) - if(viewflag < 0) //camera doesn't work - reset_current() - return viewflag diff --git a/code/modules/modular_computers/file_system/programs/system/file_browser.dm b/code/modules/modular_computers/file_system/programs/system/file_browser.dm index 336156123ec..0d993f0e4a4 100644 --- a/code/modules/modular_computers/file_system/programs/system/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/system/file_browser.dm @@ -12,6 +12,7 @@ undeletable = TRUE tgui_id = "FileManager" var/open_file + var/open_file_is_usb = FALSE var/error /datum/computer_file/program/filemanager/ui_data(mob/user) @@ -27,7 +28,11 @@ if(!computer || !computer.hard_drive) data["error"] = "I/O ERROR: Unable to access hard drive." else - HDD = computer.hard_drive + HDD = open_file_is_usb ? computer.portable_drive : computer.hard_drive + data["file_is_usb"] = open_file_is_usb + if(!HDD) + data["error"] = "I/O ERROR: Unable to open file." + return data file = HDD.find_file_by_name(open_file) script = file if(!istype(file)) @@ -45,6 +50,7 @@ else data["scriptdata"] = null data["filedata"] = null + data["file_is_usb"] = FALSE data["filename"] = null HDD = computer.hard_drive RHDD = computer.portable_drive @@ -85,10 +91,23 @@ return if(F.can_access_file(usr)) open_file = params["PRG_openfile"] + open_file_is_usb = FALSE + + if("PRG_usbopenfile") + . = TRUE + var/obj/item/computer_hardware/hard_drive/RHDD = computer.portable_drive + if(!RHDD) + return + var/datum/computer_file/F = RHDD.find_file_by_name(params["PRG_usbopenfile"]) + if(!F) + return + if(F.can_access_file(usr)) + open_file = params["PRG_usbopenfile"] + open_file_is_usb = TRUE if("PRG_newtextfile") . = TRUE - var/newname = sanitize(input(usr, "Enter file name or leave blank to cancel:", "File rename")) + var/newname = sanitize_filename(tgui_input_text(usr, "Enter file name or leave blank to cancel:", "File rename")) if(!newname) return TRUE var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive @@ -97,7 +116,9 @@ var/datum/computer_file/data/F = new/datum/computer_file/data() F.filename = newname F.filetype = "TXT" - HDD.store_file(F) + if(!HDD.store_file(F)) + qdel(F) + error = "I/O ERROR: Unable to create file. The hard drive may be full, read-only, or contain a conflicting file." if("PRG_deletefile") . = TRUE @@ -122,6 +143,7 @@ if("PRG_closefile") . = TRUE open_file = null + open_file_is_usb = FALSE error = null if("PRG_clone") @@ -132,8 +154,13 @@ var/datum/computer_file/F = HDD.find_file_by_name(params["PRG_clone"]) if(!F || !istype(F)) return TRUE + if(istype(F, /datum/computer_file/program)) + error = "I/O ERROR: Executable programs cannot be cloned from File Manager." + return TRUE var/datum/computer_file/C = F.clone(1) - HDD.store_file(C) + if(!HDD.store_file(C)) + qdel(C) + error = "I/O ERROR: Unable to clone file. The hard drive may be full, read-only, or contain a conflicting file." if("PRG_rename") . = TRUE @@ -143,7 +170,7 @@ var/datum/computer_file/file = HDD.find_file_by_name(params["PRG_rename"]) if(!file || !istype(file)) return TRUE - var/newname = sanitize(input(usr, "Enter new file name:", "File rename", file.filename)) + var/newname = sanitize_filename(tgui_input_text(usr, "Enter new file name or leave blank to cancel:", "File rename", file.filename)) if(file && newname) file.filename = newname @@ -163,7 +190,7 @@ var/oldtext = html_decode(F.stored_data) oldtext = replacetext(oldtext, "\[editorbr\]", "\n") - var/newtext = sanitize(replacetext(input(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext) as message|null, "\n", "\[editorbr\]"), MAX_TEXTFILE_LENGTH) + var/newtext = sanitize_filename(replacetext(tgui_input_text(usr, "Editing file [open_file]. You may use most tags used in paper formatting:", "Text Editor", oldtext), "\n", "\[editorbr\]"), MAX_TEXTFILE_LENGTH) if(!newtext) return @@ -185,10 +212,10 @@ return TRUE var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive if(!HDD) - return TRUE + return FALSE if(!computer.nano_printer) error = "Missing Hardware: Your computer does not have required hardware to complete this operation." - return TRUE + return FALSE var/datum/computer_file/data/F = HDD.find_file_by_name(open_file) var/datum/computer_file/script/S = F if(!F) @@ -196,21 +223,21 @@ if(istype(F)) if(!computer.nano_printer.print_text(F.stored_data)) error = "Hardware error: Printer was unable to print the file. It may be out of paper." - return TRUE + return FALSE else if(istype(S)) if(!computer.nano_printer.print_text(S.code)) error = "Hardware error: Printer was unable to print the file. It may be out of paper." - return TRUE + return FALSE if("PRG_copytousb") . = TRUE var/obj/item/computer_hardware/hard_drive/HDD = computer.hard_drive var/obj/item/computer_hardware/hard_drive/portable/RHDD = computer.portable_drive if(!HDD || !RHDD) - return TRUE + return FALSE var/datum/computer_file/F = HDD.find_file_by_name(params["PRG_copytousb"]) if(!F || !istype(F)) - return TRUE + return FALSE var/is_usr_tech_support = FALSE if(ishuman(usr)) var/mob/living/carbon/human/H = usr @@ -270,7 +297,7 @@ return if(F.password) return - F.password = sanitize(input(usr, "Enter an encryption key:", "Encrypt File")) + F.password = sanitize_filename(tgui_input_text(usr, "Enter an encryption key:", "Encrypt File")) if("PRG_decrypt") . = TRUE diff --git a/code/modules/nano/modules/nano_module.dm b/code/modules/nano/modules/nano_module.dm deleted file mode 100644 index 9cf703ec89c..00000000000 --- a/code/modules/nano/modules/nano_module.dm +++ /dev/null @@ -1,63 +0,0 @@ -/datum/nano_module - var/name - var/datum/host - var/available_to_ai = TRUE - var/datum/topic_manager/topic_manager - -/datum/nano_module/New(var/datum/host, var/topic_manager) - ..() - src.host = host - src.topic_manager = topic_manager - -/datum/nano_module/Destroy() - host = null - topic_manager = null - return ..() - -/datum/nano_module/ui_host() - return host ? host.ui_host() : src - -/datum/nano_module/proc/can_still_topic(var/datum/ui_state/state = GLOB.default_state) - return CanUseTopic(usr, state) == STATUS_INTERACTIVE - -/datum/nano_module/proc/check_eye(var/mob/user) - return -1 - -/datum/nano_module/proc/grants_equipment_vision(var/mob/user) - return FALSE - -/datum/nano_module/proc/check_access(var/mob/user, var/access) - if(!access) - return 1 - - if(!istype(user)) - return 0 - - var/obj/item/card/id/I = user.GetIdCard() - if(!I) - return 0 - - if(access in I.access) - return 1 - - return 0 - -/datum/nano_module/Topic(href, href_list) - if(topic_manager && topic_manager.Topic(href, href_list)) - return TRUE - . = ..() - -/datum/nano_module/nano_host() - return host ? host : src - -/datum/nano_module/proc/get_host_z() - return GET_Z(nano_host()) - -/datum/proc/initial_data() - return list() - -/datum/proc/update_layout() - return FALSE - -/datum/proc/nano_host() - return src diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm deleted file mode 100644 index c87b6a44b3c..00000000000 --- a/code/modules/nano/nanoexternal.dm +++ /dev/null @@ -1,37 +0,0 @@ -// This file contains all Nano procs/definitions for external classes/objects - -/** - * Called when a Nano UI window is closed - * This is how Nano handles closed windows - * It must be a verb so that it can be called using winset - */ -/client/verb/nanoclose(var/uiref as text) - set hidden = 1 // hide this verb from the user's panel - set name = "nanoclose" - - var/datum/nanoui/ui = locate(uiref) - - if (istype(ui)) - ui.close() - - if(ui.ref) - var/href = "close=1" - src.Topic(href, params2list(href), ui.ref) // this will direct to the atom's Topic() proc via client.Topic() - else if (ui.on_close_logic) - // no atomref specified (or not found) - // so just reset the user mob's machine var - if(src && src.mob) - src.mob.unset_machine() - -/** - * The ui_interact proc is used to open and update Nano UIs - * If ui_interact is not used then the UI will not update correctly - * ui_interact is currently defined for /atom/movable - * - * @param user /mob The mob who is interacting with this ui - * @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main") - * @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui - * @param force_open boolean Force the UI to (re)open, even if it's already open - */ -/datum/proc/nanoui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/nanoui/master_ui = null, var/datum/ui_state/state = GLOB.default_state) - return diff --git a/code/modules/nano/nanomapgen.dm b/code/modules/nano/nanomapgen.dm deleted file mode 100644 index 90088c1d624..00000000000 --- a/code/modules/nano/nanomapgen.dm +++ /dev/null @@ -1,90 +0,0 @@ -// This file is a modified version of https://raw2.github.com/Baystation12/OldCode-BS12/master/code/TakePicture.dm - -#define NANOMAP_ICON_SIZE 4 -#define NANOMAP_MAX_ICON_DIMENSION 1024 - -#define NANOMAP_TILES_PER_IMAGE (NANOMAP_MAX_ICON_DIMENSION / NANOMAP_ICON_SIZE) - -#define NANOMAP_TERMINALERR 5 -#define NANOMAP_INPROGRESS 2 -#define NANOMAP_BADOUTPUT 2 -#define NANOMAP_SUCCESS 1 -#define NANOMAP_WATCHDOGSUCCESS 4 -#define NANOMAP_WATCHDOGTERMINATE 3 - - -//Call these procs to dump your world to a series of image files (!!) -//NOTE: Does not explicitly support non 32x32 icons or stuff with large pixel_* values, so don't blame me if it doesn't work perfectly - -/client/proc/nanomapgen_DumpImage() - set name = "Generate NanoUI Map" - set category = "Server" - - if(holder) - nanomapgen_DumpTile(1, 1, text2num(input(usr,"Enter the Z level to generate"))) - -/client/proc/nanomapgen_DumpTile(var/startX = 1, var/startY = 1, var/currentZ = 1, var/endX = -1, var/endY = -1) - - if (endX < 0 || endX > world.maxx) - endX = world.maxx - - if (endY < 0 || endY > world.maxy) - endY = world.maxy - - if (currentZ < 0 || currentZ > world.maxz) - to_chat(usr, "NanoMapGen: ERROR: currentZ ([currentZ]) must be between 1 and [world.maxz]") - - sleep(3) - return NANOMAP_TERMINALERR - - if (startX > endX) - to_chat(usr, "NanoMapGen: ERROR: startX ([startX]) cannot be greater than endX ([endX])") - - sleep(3) - return NANOMAP_TERMINALERR - - if (startY > endX) - to_chat(usr, "NanoMapGen: ERROR: startY ([startY]) cannot be greater than endY ([endY])") - sleep(3) - return NANOMAP_TERMINALERR - - var/icon/Tile = icon(file("nano/mapbase1024.png")) - if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) - log_world("ERROR: NanoMapGen: ERROR: BASE IMAGE DIMENSIONS ARE NOT [NANOMAP_MAX_ICON_DIMENSION]x[NANOMAP_MAX_ICON_DIMENSION]") - sleep(3) - return NANOMAP_TERMINALERR - - LOG_DEBUG("NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])") - to_chat(usr, "NanoMapGen: GENERATE MAP ([startX],[startY],[currentZ]) to ([endX],[endY],[currentZ])") - - var/count = 0; - for(var/WorldX = startX, WorldX <= endX, WorldX++) - for(var/WorldY = startY, WorldY <= endY, WorldY++) - - var/atom/Turf = locate(WorldX, WorldY, currentZ) - - var/icon/TurfIcon = new(Turf.icon, Turf.icon_state, dir = Turf.dir) - TurfIcon.Scale(NANOMAP_ICON_SIZE, NANOMAP_ICON_SIZE) - - Tile.Blend(TurfIcon, ICON_OVERLAY, ((WorldX - 1) * NANOMAP_ICON_SIZE), ((WorldY - 1) * NANOMAP_ICON_SIZE)) - - count++ - - if (count % 8000 == 0) - LOG_DEBUG("NanoMapGen: [count] tiles done") - sleep(1) - - var/mapFilename = "new_Aurora[currentZ]" - - LOG_DEBUG("NanoMapGen: sending [mapFilename] to client") - - usr << browse(Tile, "window=picture;file=[mapFilename];display=0") - - LOG_DEBUG("NanoMapGen: Done.") - - to_chat(usr, "NanoMapGen: Done. File [mapFilename] uploaded to your cache.") - - if (Tile.Width() != NANOMAP_MAX_ICON_DIMENSION || Tile.Height() != NANOMAP_MAX_ICON_DIMENSION) - return NANOMAP_BADOUTPUT - - return NANOMAP_SUCCESS diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm deleted file mode 100644 index c441af104f2..00000000000 --- a/code/modules/nano/nanoui.dm +++ /dev/null @@ -1,537 +0,0 @@ -/********************************************************** -NANO UI FRAMEWORK - -nanoui class (or whatever Byond calls classes) - -nanoui is used to open and update nano browser uis -**********************************************************/ - -/datum/nanoui - // the user who opened this ui - var/mob/user - // the object this ui "belongs" to - var/datum/src_object - // the title of this ui - var/title - // the key of this ui, this is to allow multiple (different) uis for each src_object - var/ui_key - // window_id is used as the window name/identifier for browse and onclose - var/window_id - // the browser window width - var/width = 0 - // the browser window height - var/height = 0 - // whether to use extra logic when window closes - var/on_close_logic = 1 - // an extra ref to use when the window is closed, usually null - var/atom/ref = null - // options for modifying window behaviour - var/window_options = "focus=0;can_close=1;can_minimize=1;can_maximize=0;can_resize=1;titlebar=1;" // window option is set using window_id - // the list of stylesheets to apply to this ui - var/list/stylesheets = list() - // the list of javascript scripts to use for this ui - var/list/scripts = list() - // a list of templates which can be used with this ui - var/templates[0] - // the layout key for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing) - var/layout_key = "default" - // this sets whether to re-render the ui layout with each update (default 0, turning on will break the map ui if it's in use) - var/auto_update_layout = 0 - // this sets whether to re-render the ui content with each update (default 1) - var/auto_update_content = 1 - // the default state to use for this ui (this is used on the frontend, leave it as "default" unless you know what you're doing) - var/state_key = "default" - // show the map ui, this is used by the default layout - var/show_map = 0 - // the map z level to display - var/map_z_level = 3 - // initial data, containing the full data structure, must be sent to the ui (the data structure cannot be extended later on) - var/list/initial_data[0] - // set to 1 to update the ui automatically every master_controller tick - var/is_auto_updating = 0 - // the current status/visibility of the ui - var/status = STATUS_INTERACTIVE - - // Relationship between a master interface and its children. Used in update_status - var/datum/nanoui/master_ui - var/list/datum/nanoui/children = list() - var/datum/ui_state/state = null - -/** - * Create a new nanoui instance. - * - * @param nuser /mob The mob who has opened/owns this ui - * @param nsrc_object /obj|/mob The obj or mob which this ui belongs to - * @param nui_key string A string key to use for this ui. Allows for multiple unique uis on one src_oject - * @param ntemplate string The filename of the template file from /nano/templates (e.g. "my_template.tmpl") - * @param ntitle string The title of this ui - * @param nwidth int the width of the ui window - * @param nheight int the height of the ui window - * @param nref /atom A custom ref to use if "on_close_logic" is set to 1 - * - * @return /nanoui new nanoui object - */ -/datum/nanoui/New(nuser, nsrc_object, nui_key, ntemplate_filename, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null, var/datum/nanoui/master_ui = null, var/datum/ui_state/state = GLOB.default_state) - user = nuser - src_object = nsrc_object - ui_key = nui_key - window_id = "[ui_key][REF(src_object)]" - - src.master_ui = master_ui - if(master_ui) - master_ui.children += src - src.state = state - - // add the passed template filename as the "main" template, this is required - add_template("main", ntemplate_filename) - - if (ntitle) - title = sanitize(ntitle) - if (nwidth) - width = nwidth - if (nheight) - height = nheight - if (nref) - ref = nref - - add_common_assets() - - var/datum/asset/assets = get_asset_datum(/datum/asset/nanoui) - assets.send(user, assets) - - - -/** - * Use this proc to add assets which are common to (and required by) all nano uis - * - * @return nothing - */ -/datum/nanoui/proc/add_common_assets() - add_script("https://cdnjs.cloudflare.com/ajax/libs/jquery/1.10.2/jquery.min.js") - add_script("https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.0/jquery-ui.min.js") - add_script("libraries.min.js") // A JS file comprising of jQuery, doT.js and jQuery Timer libraries (compressed together) - add_script("nano_utility.js") // The NanoUtility JS, this is used to store utility functions. - add_script("nano_template.js") // The NanoTemplate JS, this is used to render templates. - add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state - add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from - add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState - add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all UIs - add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all UIs - add_stylesheet("shared.css") // this CSS sheet is common to all UIs - add_stylesheet("icons.css") // this CSS sheet is common to all UIs - -/** - * Set the current status (also known as visibility) of this ui. - * - * @param state int The status to set, see the defines at the top of this file - * @param push_update int (bool) Push an update to the ui to update it's status (an update is always sent if the status has changed to red (0)) - * - * @return nothing - */ -/datum/nanoui/proc/set_status(state, push_update) - if (state != status) // Only update if it is different - if (status == STATUS_DISABLED) - status = state - if (push_update) - update() - else - status = state - if (push_update || status == 0) - push_data(null, 1) // Update the UI, force the update in case the status is 0, data is null so that previous data is used - -/** - * Update the status (visibility) of this ui based on the user's status - * - * @param push_update int (bool) Push an update to the ui to update it's status. This is set to 0/false if an update is going to be pushed anyway (to avoid unnessary updates) - * - * @return nothing - */ -/datum/nanoui/proc/update_status(var/push_update = 0) - var/obj/host = src_object.ui_host() - var/new_status = host.CanUseTopic(user, state) - if(master_ui) - new_status = min(new_status, master_ui.status) - - set_status(new_status, push_update) - if(new_status == STATUS_CLOSE) - close() - -/** - * Set the ui to auto update (every master_controller tick) - * - * @param state int (bool) Set auto update to 1 or 0 (true/false) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update(nstate = 1) - is_auto_updating = nstate - -/** - * Set the initial data for the ui. This is vital as the data structure set here cannot be changed when pushing new updates. - * - * @param data /list The list of data for this ui - * - * @return nothing - */ -/datum/nanoui/proc/set_initial_data(list/data) - initial_data = data - -/** - * Get config data to sent to the ui. - * - * @return /list config data - */ -/datum/nanoui/proc/get_config_data() - var/name = "[src_object]" - name = sanitize(name) - var/list/config_data = list( - "title" = title, - "srcObject" = list("name" = name), - "stateKey" = state_key, - "status" = status, - "autoUpdateLayout" = auto_update_layout, - "autoUpdateContent" = auto_update_content, - "showMap" = show_map, - "mapName" = "Aurora", - "mapZLevel" = map_z_level, - "mapZLevels" = SSatlas.current_map.map_levels, - "user" = list("name" = user.name) - ) - return config_data - -/** - * Get data to sent to the ui. - * - * @param data /list The list of general data for this ui (can be null to use previous data sent) - * - * @return /list data to send to the ui - */ -/datum/nanoui/proc/get_send_data(var/list/data) - var/list/config_data = get_config_data() - - var/list/send_data = list("config" = config_data) - - if (!isnull(data)) - send_data["data"] = data - - return send_data - -/** - * Set the browser window options for this ui - * - * @param nwindow_options string The new window options - * - * @return nothing - */ -/datum/nanoui/proc/set_window_options(nwindow_options) - window_options = nwindow_options - -/** - * Add a CSS stylesheet to this UI - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param file string The name of the CSS file from /nano/css (e.g. "my_style.css") - * - * @return nothing - */ -/datum/nanoui/proc/add_stylesheet(file) - stylesheets.Add(file) - -/** - * Add a JavsScript script to this UI - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param file string The name of the JavaScript file from /nano/js (e.g. "my_script.js") - * - * @return nothing - */ -/datum/nanoui/proc/add_script(file) - scripts.Add(file) - -/** - * Add a template for this UI - * Templates are combined with the data sent to the UI to create the rendered view - * These must be added before the UI has been opened, adding after that will have no effect - * - * @param key string The key which is used to reference this template in the frontend - * @param filename string The name of the template file from /nano/templates (e.g. "my_template.tmpl") - * - * @return nothing - */ -/datum/nanoui/proc/add_template(key, filename) - templates[key] = filename - -/** - * Set the layout key for use in the frontend Javascript - * The layout key is the basic layout key for the page - * Two files are loaded on the client based on the layout key varable: - * -> a template in /nano/templates with the filename "layout_.tmpl - * -> a CSS stylesheet in /nano/css with the filename "layout_.css - * - * @param nlayout string The layout key to use - * - * @return nothing - */ -/datum/nanoui/proc/set_layout_key(nlayout_key) - layout_key = lowertext(nlayout_key) - -/** - * Set the ui to update the layout (re-render it) on each update, turning this on will break the map ui (if it's being used) - * - * @param state int (bool) Set update to 1 or 0 (true/false) (default 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update_layout(nstate) - auto_update_layout = nstate - -/** - * Set the ui to update the main content (re-render it) on each update - * - * @param state int (bool) Set update to 1 or 0 (true/false) (default 1) - * - * @return nothing - */ -/datum/nanoui/proc/set_auto_update_content(nstate) - auto_update_content = nstate - -/** - * Set the state key for use in the frontend Javascript - * - * @param nstate_key string The key of the state to use - * - * @return nothing - */ -/datum/nanoui/proc/set_state_key(nstate_key) - state_key = nstate_key - -/** - * Toggle showing the map ui - * - * @param nstate_key boolean 1 to show map, 0 to hide (default is 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_show_map(nstate) - show_map = nstate - -/** - * Toggle showing the map ui - * - * @param nstate_key boolean 1 to show map, 0 to hide (default is 0) - * - * @return nothing - */ -/datum/nanoui/proc/set_map_z_level(nz) - map_z_level = nz - -/** - * Set whether or not to use the "old" on close logic (mainly unset_machine()) - * - * @param state int (bool) Set on_close_logic to 1 or 0 (true/false) - * - * @return nothing - */ -/datum/nanoui/proc/use_on_close_logic(state) - on_close_logic = state - -/** - * Return the HTML for this UI - * - * @return string HTML for the UI - */ -/datum/nanoui/proc/get_html() - - // before the UI opens, add the layout files based on the layout key - add_stylesheet("layout_[layout_key].css") - add_template("layout", "layout_[layout_key].tmpl") - - var/head_content = "" - - for (var/filename in scripts) - head_content += " " - - for (var/filename in stylesheets) - head_content += " " - - var/template_data_json = "{}" // An empty JSON object - if (templates.len > 0) - template_data_json = strip_improper(json_encode(templates)) - - var/list/send_data = get_send_data(initial_data) - var/initial_data_json = replacetext(replacetext(json_encode(send_data), """, "&#34;"), "'", "'") - initial_data_json = strip_improper(initial_data_json); - - var/url_parameters_json = json_encode(list("src" = "[REF(src)]")) - - return {" - - - - - - [head_content] - - -

    -
    - - - - "} - -/** - * Open this UI - * - * @return nothing - */ -/datum/nanoui/proc/open() - if(!user.client) - return - - // An attempted fix to UIs sometimes locking up spamming runtime errors due to src_object being null for whatever reason. - // This hard-deletes the UI, preventing the device that uses the UI from being locked up permanently. - if(!src_object) - del(src) - - var/window_size = "" - if (width && height) - window_size = "size=[width]x[height];" - update_status(0) - if(status == STATUS_CLOSE) - return - - user << browse(get_html(), "window=[window_id];[window_size][window_options]") - winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map - on_close_winset() - //onclose(user, window_id) - SSnanoui.ui_opened(src) - -/** - * Reinitialise this UI, potentially with a different template and/or initial data - * - * @return nothing - */ -/datum/nanoui/proc/reinitialise(template, new_initial_data) - if(template) - add_template("main", template) - if(new_initial_data) - set_initial_data(new_initial_data) - open() - -/** - * Close this UI - * - * @return nothing - */ -/datum/nanoui/proc/close() - is_auto_updating = 0 - SSnanoui.ui_closed(src) - user << browse(null, "window=[window_id]") - for(var/datum/nanoui/child in children) - child.close() - children.Cut() - state = null - master_ui = null - - if(istype(user)) - user.unset_machine() - -/** - * Set the UI window to call the nanoclose verb when the window is closed - * This allows Nano to handle closed windows - * - * @return nothing - */ -/datum/nanoui/proc/on_close_winset() - if(!user.client) - return - var/params = "[REF(src)]" - - winset(user, window_id, "on-close=\"nanoclose [params]\"") - -/** - * Push data to an already open UI window - * - * @return nothing - */ -/datum/nanoui/proc/push_data(data, force_push = 0) - update_status(0) - if (status == STATUS_DISABLED && !force_push) - return // Cannot update UI, no visibility - - var/list/send_data = get_send_data(data) - - //to_chat(user, list2json(data) // used for debugging) - send_output(user, list2params(list(json_encode(send_data))),"[window_id].browser:receiveUpdateData") - -/** - * This Topic() proc is called whenever a user clicks on a link within a Nano UI - * If the UI status is currently STATUS_INTERACTIVE then call the src_object Topic() - * If the src_object Topic() returns 1 (true) then update all UIs attached to src_object - * - * @return nothing - */ -/datum/nanoui/Topic(href, href_list) - update_status(0) // update the status - if (status != STATUS_INTERACTIVE || user != usr) // If UI is not interactive or usr calling Topic is not the UI user - return - - // This is used to toggle the nano map ui - var/map_update = 0 - if(href_list["showMap"]) - set_show_map(text2num(href_list["showMap"])) - map_update = 1 - - if(href_list["mapZLevel"]) - var/map_z = (text2num(href_list["mapZLevel"])) - if(map_z in SSatlas.current_map.map_levels) - set_map_z_level(map_z) - map_update = 1 - else - return - - if ((src_object && src_object.Topic(href, href_list, state)) || map_update) - SSnanoui.update_uis(src_object) // update all UIs attached to src_object - -/** - * Process this UI, updating the entire UI or just the status (aka visibility) - * This process proc is called by the master_controller - * - * @param update string For this UI to update - * - * @return nothing - */ -/datum/nanoui/process(update = 0) - if (QDELETED(src_object) || QDELETED(user)) - close() - return - - if (status && (update || is_auto_updating)) - update() // Update the UI (update_status() is called whenever a UI is updated) - else - update_status(1) // Not updating UI, so lets check here if status has changed - -/** - * Update the UI - * - * @return nothing - */ -/datum/nanoui/proc/update(var/force_open = 0) - src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) diff --git a/code/modules/organs/subtypes/vaurca.dm b/code/modules/organs/subtypes/vaurca.dm index ff4c59b0eae..f4b418495f3 100644 --- a/code/modules/organs/subtypes/vaurca.dm +++ b/code/modules/organs/subtypes/vaurca.dm @@ -399,17 +399,34 @@ ui_interact(user) -/obj/item/organ/internal/vaurca/preserve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +/obj/item/organ/internal/vaurca/preserve/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Tank", ui_x=400, ui_y=180) + ui.open() + +/obj/item/organ/internal/vaurca/preserve/ui_host(mob/user) + . = ..() + if(istype(loc,/obj/item/transfer_valve)) + return loc + +/obj/item/organ/internal/vaurca/preserve/ui_data(mob/user) var/mob/living/carbon/location = null + if(istype(loc, /obj/item/rig)) + if(istype(loc.loc, /mob/living/carbon)) + location = loc.loc + else if(istype(loc, /mob/living/carbon)) + location = loc + var/using_internal if(istype(location)) if(location.internal==src) using_internal = 1 - // this is the data which will be sent to the ui - var/data[0] - data["tankPressure"] = round(SAFE_XGM_PRESSURE(air_contents)) + var/list/data = list() + + data["tankPressure"] = round(XGM_PRESSURE(air_contents)) data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) @@ -437,36 +454,13 @@ if(H.head && (H.head.item_flags & ITEM_FLAG_AIRTIGHT)) data["maskConnected"] = 1 - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) + return data -/obj/item/organ/internal/vaurca/preserve/Topic(href, href_list) - ..() - if (usr.stat|| usr.restrained()) - return 0 - if (src.loc != usr) - return 0 - - if (href_list["dist_p"]) - if (href_list["dist_p"] == "reset") - src.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - else if (href_list["dist_p"] == "max") - src.distribute_pressure = TANK_MAX_RELEASE_PRESSURE - else - var/cp = text2num(href_list["dist_p"]) - src.distribute_pressure += cp - src.distribute_pressure = min(max(round(src.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) - if (href_list["stat"]) +/obj/item/organ/internal/vaurca/preserve/ui_act(action,params) + . = ..() + if(.) + return + if(action=="toggleReleaseValve") if(istype(loc,/mob/living/carbon)) var/mob/living/carbon/location = loc if(location.internal == src) @@ -476,7 +470,6 @@ if (location.internals) location.internals.icon_state = "internal0" else - var/can_open_valve if(location.wear_mask && (location.wear_mask.item_flags & ITEM_FLAG_AIRTIGHT)) can_open_valve = 1 @@ -491,11 +484,12 @@ if (location.internals) location.internals.icon_state = "internal1" else - to_chat(usr, SPAN_NOTICE("You need something to connect to \the [src].")) - - src.add_fingerprint(usr) - return 1 - + to_chat(usr, SPAN_WARNING("You need something to connect to \the [src].")) + . = TRUE + update_icon() + if(action=="setReleasePressure") + distribute_pressure = min(max(round(text2num(params["release_pressure"])), 0), TANK_MAX_RELEASE_PRESSURE) + . = TRUE /obj/item/organ/internal/vaurca/preserve/remove_air(amount) return air_contents.remove(amount) diff --git a/code/modules/overmap/ships/computers/engine_control.dm b/code/modules/overmap/ships/computers/engine_control.dm index 209ffb05373..5a7a41f5999 100644 --- a/code/modules/overmap/ships/computers/engine_control.dm +++ b/code/modules/overmap/ships/computers/engine_control.dm @@ -30,7 +30,7 @@ /obj/structure/machinery/computer/ship/engines/ui_interact(mob/user, datum/tgui/ui) if(!connected) - display_reconnect_dialog(user, "ship control systems") + balloon_alert(user, "no connection!") return ui = SStgui.try_update_ui(user, src, ui) diff --git a/code/modules/overmap/ships/computers/helm.dm b/code/modules/overmap/ships/computers/helm.dm index cd9fc3fbff8..3d75449f8ff 100644 --- a/code/modules/overmap/ships/computers/helm.dm +++ b/code/modules/overmap/ships/computers/helm.dm @@ -117,6 +117,10 @@ return 1 /obj/structure/machinery/computer/ship/helm/ui_interact(mob/user, datum/tgui/ui) + if(!connected) + balloon_alert(user, "no connection!") + return + ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "Helm", capitalize_first_letters(name)) @@ -126,55 +130,52 @@ /obj/structure/machinery/computer/ship/helm/ui_data(mob/user) var/list/data = list() - if(!connected) - display_reconnect_dialog(user, "helm") - else - var/turf/T = get_turf(connected) - var/obj/effect/overmap/visitable/sector/current_sector = locate() in T + var/turf/T = get_turf(connected) + var/obj/effect/overmap/visitable/sector/current_sector = locate() in T - data["sector"] = current_sector ? current_sector.name : "Deep Space" - data["sector_info"] = current_sector ? current_sector.desc : "Not Available" - data["landed"] = connected.get_landed_info() - data["ship_coord_x"] = connected.x - data["ship_coord_y"] = connected.y - data["dest"] = dy && dx - data["autopilot_x"] = dx - data["autopilot_y"] = dy - data["speedlimit"] = speedlimit ? speedlimit*1000 : "Halted" - data["accel"] = get_acceleration() - data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0 - data["direction"] = dir2angle(connected.dir) - data["autopilot"] = autopilot - data["manual_control"] = viewing_overmap(user) - data["canburn"] = connected.can_burn() - data["canturn"] = connected.can_turn() - data["cancombatroll"] = connected.can_combat_roll() - data["cancombatturn"] = connected.can_combat_turn() - data["accellimit"] = accellimit*1000 + data["sector"] = current_sector ? current_sector.name : "Deep Space" + data["sector_info"] = current_sector ? current_sector.desc : "Not Available" + data["landed"] = connected.get_landed_info() + data["ship_coord_x"] = connected.x + data["ship_coord_y"] = connected.y + data["dest"] = dy && dx + data["autopilot_x"] = dx + data["autopilot_y"] = dy + data["speedlimit"] = speedlimit ? speedlimit*1000 : "Halted" + data["accel"] = get_acceleration() + data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0 + data["direction"] = dir2angle(connected.dir) + data["autopilot"] = autopilot + data["manual_control"] = viewing_overmap(user) + data["canburn"] = connected.can_burn() + data["canturn"] = connected.can_turn() + data["cancombatroll"] = connected.can_combat_roll() + data["cancombatturn"] = connected.can_combat_turn() + data["accellimit"] = accellimit*1000 - var/speed = round(connected.get_speed()*1000, 0.01) - data["speed"] = speed - if(connected.get_speed() < SHIP_SPEED_SLOW) - data["speed_slow"] = TRUE - if(connected.get_speed() > SHIP_SPEED_FAST) - data["speed_fast"] = TRUE - var/list/speed_xy = connected.get_speed_xy() - data["ship_speed_x"] = speed_xy[1] - data["ship_speed_y"] = speed_xy[2] + var/speed = round(connected.get_speed()*1000, 0.01) + data["speed"] = speed + if(connected.get_speed() < SHIP_SPEED_SLOW) + data["speed_slow"] = TRUE + if(connected.get_speed() > SHIP_SPEED_FAST) + data["speed_fast"] = TRUE + var/list/speed_xy = connected.get_speed_xy() + data["ship_speed_x"] = speed_xy[1] + data["ship_speed_y"] = speed_xy[2] - data["ETAnext"] = get_eta() + data["ETAnext"] = get_eta() - var/list/locations[0] - for (var/key in known_sectors) - var/datum/computer_file/data/waypoint/R = known_sectors[key] - var/list/rdata[0] - rdata["name"] = R.fields["name"] - rdata["x"] = R.fields["x"] - rdata["y"] = R.fields["y"] - rdata["reference"] = "[REF(R)]" - locations.Add(list(rdata)) + var/list/locations[0] + for (var/key in known_sectors) + var/datum/computer_file/data/waypoint/R = known_sectors[key] + var/list/rdata[0] + rdata["name"] = R.fields["name"] + rdata["x"] = R.fields["x"] + rdata["y"] = R.fields["y"] + rdata["reference"] = "[REF(R)]" + locations.Add(list(rdata)) - data["locations"] = locations + data["locations"] = locations return data @@ -367,6 +368,10 @@ ui_interact(user) /obj/structure/machinery/computer/ship/navigation/ui_interact(mob/user, datum/tgui/ui) + if(!connected) + balloon_alert(user, "no connection!") + return + ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "Nav", capitalize_first_letters(name), ui_x=470, ui_y=320) @@ -376,25 +381,22 @@ /obj/structure/machinery/computer/ship/navigation/ui_data(mob/user) var/list/data = list() - if(!connected) - display_reconnect_dialog(user, "navigation") - else - var/turf/T = get_turf(connected) - var/obj/effect/overmap/visitable/sector/current_sector = locate() in T + var/turf/T = get_turf(connected) + var/obj/effect/overmap/visitable/sector/current_sector = locate() in T - data["sector"] = current_sector ? current_sector.name : "Deep Space" - data["sector_info"] = current_sector ? current_sector.desc : "Not Available" - data["ship_coord_x"] = connected.x - data["ship_coord_y"] = connected.y - data["speed"] = round(connected.get_speed()*1000, 0.01) - data["accel"] = round(connected.get_acceleration()*1000, 0.01) - var/list/speed_xy = connected.get_speed_xy() - data["ship_speed_x"] = speed_xy[1] - data["ship_speed_y"] = speed_xy[2] - data["direction"] = dir2angle(connected.dir) - data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0 - data["ETAnext"] = get_eta() - data["viewing"] = viewing_overmap(user) + data["sector"] = current_sector ? current_sector.name : "Deep Space" + data["sector_info"] = current_sector ? current_sector.desc : "Not Available" + data["ship_coord_x"] = connected.x + data["ship_coord_y"] = connected.y + data["speed"] = round(connected.get_speed()*1000, 0.01) + data["accel"] = round(connected.get_acceleration()*1000, 0.01) + var/list/speed_xy = connected.get_speed_xy() + data["ship_speed_x"] = speed_xy[1] + data["ship_speed_y"] = speed_xy[2] + data["direction"] = dir2angle(connected.dir) + data["heading"] = connected.get_heading() ? dir2angle(connected.get_heading()) : 0 + data["ETAnext"] = get_eta() + data["viewing"] = viewing_overmap(user) return data diff --git a/code/modules/overmap/ships/computers/ship.dm b/code/modules/overmap/ships/computers/ship.dm index 1962a5b64c3..687797f4e1e 100644 --- a/code/modules/overmap/ships/computers/ship.dm +++ b/code/modules/overmap/ships/computers/ship.dm @@ -22,11 +22,6 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov . += "Consoles like these are typically access-locked." . += "You can remove this lock with wirecutters, but it would take awhile! Alternatively, you can also use a cryptographic sequencer (emag) for instant removal." -/obj/structure/machinery/computer/ship/proc/display_reconnect_dialog(var/mob/user, var/flavor) - var/datum/browser/popup = new (user, "[src]", "[src]") - popup.set_content("
    Error
    Unable to connect to [flavor].
    Reconnect
    ") - popup.open() - /obj/structure/machinery/computer/ship/attackby(obj/item/attacking_item, mob/user) if(attacking_item.tool_behaviour == TOOL_CABLECOIL) // Repair from hotwire var/obj/item/stack/cable_coil/C = attacking_item diff --git a/code/modules/power/sensors/powernet_sensor.dm b/code/modules/power/sensors/powernet_sensor.dm index 9184fea260e..8b2f5ee41c3 100644 --- a/code/modules/power/sensors/powernet_sensor.dm +++ b/code/modules/power/sensors/powernet_sensor.dm @@ -5,7 +5,6 @@ // Powernet sensors are devices which relay information about connected powernet. This information may be relayed // via two procs. Proc return_reading_text will return fully HTML styled string which contains all information. This // may be used in PDAs or similar applications. Second proc, return_reading_data will return list containing needed data. -// This is used in NanoUI, for example. /obj/structure/machinery/power/sensor name = "Powernet Sensor" diff --git a/code/modules/research/xenoarchaeology/misc.dm b/code/modules/research/xenoarchaeology/misc.dm index fbc5cde3290..39aaeeb4556 100644 --- a/code/modules/research/xenoarchaeology/misc.dm +++ b/code/modules/research/xenoarchaeology/misc.dm @@ -70,4 +70,3 @@ /obj/structure/machinery/alarm/monitor/isolation req_one_access = list(ACCESS_RESEARCH, ACCESS_ATMOSPHERICS, ACCESS_ENGINE_EQUIP) locked = 0 - remote_control = 1 diff --git a/code/modules/tgchat/README.md b/code/modules/tgchat/README.md new file mode 100644 index 00000000000..d2a99e5ffd2 --- /dev/null +++ b/code/modules/tgchat/README.md @@ -0,0 +1,31 @@ +## /TG/ Chat + +/TG/ Chat, which will be referred to as TgChat from this point onwards, is a system in which we can send messages to clients in a controlled and semi-reliable manner. The standard way of sending messages to BYOND clients simply dumps whatever you output to them directly into their chat window, however BYOND allows us to load our own code on the client to change this behaviour in a way that allows us to do some pretty neat things. + +### Message Format + +TgChat handles sending messages from the server to the client through the use of JSON payloads, of which the format will change depending on the type of message and the intended client endpoint. An example of the payload for chat messages is as follows: + +```json +{ + "sequence": 0, + "content": { + "type": ". . .", // ?optional + "text": ". . .", // ?optional !atleast-one + "html": ". . .", // ?optional !atleast-one + "avoidHighlighting": 0 // ?optional + } +} +``` + +### Reliability + +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of received sequence numbers. Should the client receive an unexpected sequence number TgChat asks the server to resend any missing packets. + +### Ping System + +TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server receives said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. + +### Chat Tabs, Local Storage, and Highlighting + +To make organizing and managing chat easier and more functional for both players and admins, TgChat has the ability to filter out messages based on their primary tag, such as individual departmental radios, to a dedicated chat tab for easier reading and comprehension. These tabs can also be configured to highlist messages based on a simple keyword search. You can set a multitude of different keywords to search for and they will be highlighting for instant alerting of the client. Said tabs, highlighting rules, and your chat history will persist thanks to use of local storage on the client. Using local storage TgChat can ensure that your preferences are saved and maintained between client restarts and switching between other /TG/ servers. Local Storage is also used to keep your chat history aswell, should you need to scroll through your chat logs. diff --git a/code/modules/tgchat/to_chat.dm b/code/modules/tgchat/to_chat.dm index 09c9b536c06..965d9545ff1 100644 --- a/code/modules/tgchat/to_chat.dm +++ b/code/modules/tgchat/to_chat.dm @@ -35,23 +35,8 @@ if(text) message["text"] = text if(html) message["html"] = html if(avoid_highlighting) message["avoidHighlighting"] = avoid_highlighting - var/message_blob = TGUI_CREATE_MESSAGE("chat/message", message) - var/message_html = message_to_html(message) - if(islist(target)) - for(var/_target in target) - var/client/client = CLIENT_FROM_VAR(_target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - to_target(client, message_html) - return - var/client/client = CLIENT_FROM_VAR(target) - if(client) - // Send to tgchat - client.tgui_panel?.window.send_raw_message(message_blob) - // Send to old chat - to_target(client, message_html) + // send it immediately + SSchat.send_immediate(target, message) /** * Sends the message to the recipient (target). @@ -74,7 +59,7 @@ trailing_newline = TRUE, confidential = FALSE ) - if(isnull(Master) || !SSchat?.initialized) + if(isnull(Master) || !SSchat?.initialized || !MC_RUNNING(SSchat.init_stage)) to_chat_immediate(target, html, type, text, avoid_highlighting) return diff --git a/code/modules/tgs/LICENSE b/code/modules/tgs/LICENSE index 2bedf9a63aa..324c48e993e 100644 --- a/code/modules/tgs/LICENSE +++ b/code/modules/tgs/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2017-2023 Jordan Brown +Copyright (c) 2017-2024 Jordan Brown Permission is hereby granted, free of charge, to any person obtaining a copy of this software and diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md index 6319028d810..473442fd119 100644 --- a/code/modules/tgs/README.md +++ b/code/modules/tgs/README.md @@ -1,13 +1,13 @@ # DMAPI Internals -This folder should be placed on it's own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. +This folder should be placed on its own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified. - [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest. - The [core](./core) folder includes all code not directly part of any API version. - The other versioned folders contain code for the different DMAPI versions. - - [v3210](./v3210) contains the final TGS3 API. - - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions). - - [v5](./v5) is the current DMAPI version used by TGS >=4.1. + - [v3210](./v3210) contains the final TGS3 API. + - [v4](./v4) is the legacy DMAPI 4 (Used in TGS 4.0.X versions). + - [v5](./v5) is the current DMAPI version used by TGS >=4.1. - [LICENSE](./LICENSE) is the MIT license for the DMAPI. APIs communicate with TGS in two ways. All versions implement TGS -> DM communication using /world/Topic. DM -> TGS communication, called the bridge method, is different for each version. diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md index b82d8f49e29..7886a857149 100644 --- a/code/modules/tgs/core/README.md +++ b/code/modules/tgs/core/README.md @@ -2,8 +2,8 @@ This folder contains all DMAPI code not directly involved in an API. -- [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [\_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [byond_world_export.dm](./byond_world_export.dm) contains the default `/datum/tgs_http_handler` implementation which uses `world.Export()`. - [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. - [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. - [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition -- diff --git a/code/modules/tgs/core/byond_world_export.dm b/code/modules/tgs/core/byond_world_export.dm new file mode 100644 index 00000000000..6ef8d841b8f --- /dev/null +++ b/code/modules/tgs/core/byond_world_export.dm @@ -0,0 +1,22 @@ +/datum/tgs_http_handler/byond_world_export + +/datum/tgs_http_handler/byond_world_export/PerformGet(url) + // This is an infinite sleep until we get a response + var/export_response = world.Export(url) + TGS_DEBUG_LOG("byond_world_export: Export complete") + + if(!export_response) + TGS_ERROR_LOG("byond_world_export: Failed request: [url]") + return new /datum/tgs_http_result(null, FALSE) + + var/content = export_response["CONTENT"] + if(!content) + TGS_ERROR_LOG("byond_world_export: Failed request, missing content!") + return new /datum/tgs_http_result(null, FALSE) + + var/response_json = TGS_FILE2TEXT_NATIVE(content) + if(!response_json) + TGS_ERROR_LOG("byond_world_export: Failed request, failed to load content!") + return new /datum/tgs_http_result(null, FALSE) + + return new /datum/tgs_http_result(response_json, TRUE) diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index d6219fcd308..98f26090cad 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -1,7 +1,7 @@ -/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler = null) var/current_api = TGS_READ_GLOBAL(tgs) if(current_api) - TGS_ERROR_LOG("API datum already set ([REF(current_api)] ([current_api]))! Was TgsNew() called more than once?") + TGS_ERROR_LOG("API datum already set ([current_api])! Was TgsNew() called more than once?") return if(!(minimum_required_security_level in list(TGS_SECURITY_ULTRASAFE, TGS_SECURITY_SAFE, TGS_SECURITY_TRUSTED))) @@ -42,11 +42,11 @@ var/datum/tgs_version/max_api_version = TgsMaximumApiVersion(); if(version.suite != null && version.minor != null && version.patch != null && version.deprecated_patch != null && version.deprefixed_parameter > max_api_version.deprefixed_parameter) - TGS_ERROR_LOG("Detected unknown API version! Defaulting to latest. Update the DMAPI to fix this problem.") + TGS_ERROR_LOG("Detected unknown Interop API version! Defaulting to latest. Update the DMAPI to fix this problem.") api_datum = /datum/tgs_api/latest if(!api_datum) - TGS_ERROR_LOG("Found unsupported API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") + TGS_ERROR_LOG("Found unsupported Interop API version: [raw_parameter]. If this is a valid version please report this, backporting is done on demand.") return TGS_INFO_LOG("Activating API for version [version.deprefixed_parameter]") @@ -55,7 +55,10 @@ TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]") event_handler = null - var/datum/tgs_api/new_api = new api_datum(event_handler, version) + if(!http_handler) + http_handler = new /datum/tgs_http_handler/byond_world_export + + var/datum/tgs_api/new_api = new api_datum(event_handler, version, http_handler) TGS_WRITE_GLOBAL(tgs, new_api) @@ -107,6 +110,13 @@ if(api) return api.ApiVersion() +/world/TgsEngine() +#ifdef OPENDREAM + return TGS_ENGINE_TYPE_OPENDREAM +#else + return TGS_ENGINE_TYPE_BYOND +#endif + /world/TgsInstanceName() var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) @@ -159,3 +169,11 @@ var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) if(api) return api.Visibility() + +/world/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + var/datum/tgs_api/api = TGS_READ_GLOBAL(tgs) + if(api) + if(!istype(parameters, /list)) + parameters = list() + + return api.TriggerEvent(event_name, parameters, wait_for_completion) diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index 07ce3b68458..3ca53e9bf7c 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -6,8 +6,8 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) var/list/warned_deprecated_command_runs -/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) - . = ..() +/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) + ..() src.event_handler = event_handler src.version = version @@ -17,7 +17,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) world.sleep_offline = FALSE // https://www.byond.com/forum/post/2894866 del(world) world.sleep_offline = FALSE // just in case, this is BYOND after all... - sleep(1) + sleep(world.tick_lag) TGS_DEBUG_LOG("BYOND DIDN'T TERMINATE THE WORLD!!! TICK IS: [world.time], sleep_offline: [world.sleep_offline]") /datum/tgs_api/latest @@ -69,3 +69,6 @@ TGS_PROTECT_DATUM(/datum/tgs_api) /datum/tgs_api/proc/Visibility() return TGS_UNIMPLEMENTED + +/datum/tgs_api/proc/TriggerEvent(event_name, list/parameters, wait_for_completion) + return FALSE diff --git a/code/modules/tgs/core/tgs_version.dm b/code/modules/tgs/core/tgs_version.dm index a5dae1241a3..bc561e67487 100644 --- a/code/modules/tgs/core/tgs_version.dm +++ b/code/modules/tgs/core/tgs_version.dm @@ -1,4 +1,5 @@ /datum/tgs_version/New(raw_parameter) + ..() src.raw_parameter = raw_parameter deprefixed_parameter = replacetext(raw_parameter, "/tg/station 13 Server v", "") var/list/version_bits = splittext(deprefixed_parameter, ".") diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm index 23b714f9d06..f5118ed55a3 100644 --- a/code/modules/tgs/includes.dm +++ b/code/modules/tgs/includes.dm @@ -1,4 +1,5 @@ #include "core\_definitions.dm" +#include "core\byond_world_export.dm" #include "core\core.dm" #include "core\datum.dm" #include "core\tgs_version.dm" diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index 945e2e41176..7c87922750b 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -181,7 +181,7 @@ var/json = json_encode(data) while(requesting_new_port && !override_requesting_new_port) - sleep(1) + sleep(world.tick_lag) //we need some port open at this point to facilitate return communication if(!world.port) @@ -209,7 +209,7 @@ requesting_new_port = FALSE while(export_lock) - sleep(1) + sleep(world.tick_lag) export_lock = TRUE last_interop_response = null @@ -217,7 +217,7 @@ text2file(json, server_commands_json_path) for(var/I = 0; I < EXPORT_TIMEOUT_DS && !last_interop_response; ++I) - sleep(1) + sleep(world.tick_lag) if(!last_interop_response) TGS_ERROR_LOG("Failed to get export result for: [json]") diff --git a/code/modules/tgs/v5/README.md b/code/modules/tgs/v5/README.md index a8a0c748e7b..fb374c2f872 100644 --- a/code/modules/tgs/v5/README.md +++ b/code/modules/tgs/v5/README.md @@ -2,8 +2,8 @@ This DMAPI implements bridge requests using HTTP GET requests to TGS. It has no security restrictions. -- [__interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS. -- [_defines.dm](./_defines.dm) contains constant definitions. +- [\_\_interop_version.dm](./__interop_version.dm) contains the version of the API used between the DMAPI and TGS. +- [\_defines.dm](./_defines.dm) contains constant definitions. - [api.dm](./api.dm) contains the bulk of the API code. - [bridge.dm](./bridge.dm) contains functions related to making bridge requests. - [chunking.dm](./chunking.dm) contains common function for splitting large raw data sets into chunks BYOND can natively process. diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 1b52b31d6a7..9589cbf31bb 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.6.2" +"5.10.1" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index bdcd4e4dd58..a47bfd78000 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -8,16 +8,17 @@ #define DMAPI5_TOPIC_REQUEST_LIMIT 65528 #define DMAPI5_TOPIC_RESPONSE_LIMIT 65529 -#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0 #define DMAPI5_BRIDGE_COMMAND_STARTUP 1 #define DMAPI5_BRIDGE_COMMAND_PRIME 2 #define DMAPI5_BRIDGE_COMMAND_REBOOT 3 #define DMAPI5_BRIDGE_COMMAND_KILL 4 #define DMAPI5_BRIDGE_COMMAND_CHAT_SEND 5 #define DMAPI5_BRIDGE_COMMAND_CHUNK 6 +#define DMAPI5_BRIDGE_COMMAND_EVENT 7 #define DMAPI5_PARAMETER_ACCESS_IDENTIFIER "accessIdentifier" #define DMAPI5_PARAMETER_CUSTOM_COMMANDS "customCommands" +#define DMAPI5_PARAMETER_TOPIC_PORT "topicPort" #define DMAPI5_CHUNK "chunk" #define DMAPI5_CHUNK_PAYLOAD "payload" @@ -34,6 +35,7 @@ #define DMAPI5_BRIDGE_PARAMETER_VERSION "version" #define DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE "chatMessage" #define DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL "minimumSecurityLevel" +#define DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION "eventInvocation" #define DMAPI5_BRIDGE_RESPONSE_NEW_PORT "newPort" #define DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION "runtimeInformation" @@ -80,6 +82,8 @@ #define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8 #define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 #define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 +#define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 +#define DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT 12 #define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -89,7 +93,9 @@ #define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName" #define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" +#define DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT "clientCount" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" #define DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES "chatResponses" @@ -114,3 +120,9 @@ #define DMAPI5_CUSTOM_CHAT_COMMAND_NAME "name" #define DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT "helpText" #define DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY "adminOnly" + +#define DMAPI5_EVENT_ID "eventId" + +#define DMAPI5_EVENT_INVOCATION_NAME "eventName" +#define DMAPI5_EVENT_INVOCATION_PARAMETERS "parameters" +#define DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION "notifyCompletion" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 7226f29bba6..4ca9036b790 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -8,8 +8,12 @@ var/reboot_mode = TGS_REBOOT_MODE_NORMAL + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call var/list/intercepted_message_queue + /// List of chat messages list()s that attempted to be sent during a topic call. To be bundled in the result of the call + var/list/offline_message_queue + var/list/custom_commands var/list/test_merges @@ -17,15 +21,23 @@ var/list/chat_channels var/initialized = FALSE + var/initial_bridge_request_received = FALSE + var/datum/tgs_version/interop_version var/chunked_requests = 0 var/list/chunked_topics = list() + var/list/pending_events = list() + var/detached = FALSE -/datum/tgs_api/v5/New() + var/datum/tgs_http_handler/http_handler + +/datum/tgs_api/v5/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) . = ..() - TGS_DEBUG_LOG("V5 API created") + interop_version = version + src.http_handler = http_handler + TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") /datum/tgs_api/v5/ApiVersion() return new /datum/tgs_version( @@ -38,8 +50,14 @@ access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER] var/datum/tgs_version/api_version = ApiVersion() - version = null - var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands())) + version = null // we want this to be the TGS version, not the interop version + + // sleep once to prevent an issue where world.Export on the first tick can hang indefinitely + TGS_DEBUG_LOG("Starting Export bug prevention sleep tick. time:[world.time] sleep_offline:[world.sleep_offline]") + sleep(world.tick_lag) + TGS_DEBUG_LOG("Export bug prevention sleep complete") + + var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort())) if(!istype(bridge_response)) TGS_ERROR_LOG("Failed initial bridge request!") return FALSE @@ -53,7 +71,8 @@ TGS_INFO_LOG("DMAPI validation, exiting...") TerminateWorld() - version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) + initial_bridge_request_received = TRUE + version = new /datum/tgs_version(runtime_information[DMAPI5_RUNTIME_INFORMATION_SERVER_VERSION]) // reassigning this because it can change if TGS updates security_level = runtime_information[DMAPI5_RUNTIME_INFORMATION_SECURITY_LEVEL] visibility = runtime_information[DMAPI5_RUNTIME_INFORMATION_VISIBILITY] instance_name = runtime_information[DMAPI5_RUNTIME_INFORMATION_INSTANCE_NAME] @@ -78,7 +97,7 @@ if(revInfo) tm.commit = revisionData[DMAPI5_REVISION_INFORMATION_COMMIT_SHA] tm.origin_commit = revisionData[DMAPI5_REVISION_INFORMATION_ORIGIN_COMMIT_SHA] - tm.timestamp = entry[DMAPI5_REVISION_INFORMATION_TIMESTAMP] + tm.timestamp = revisionData[DMAPI5_REVISION_INFORMATION_TIMESTAMP] else TGS_WARNING_LOG("Failed to decode [DMAPI5_TEST_MERGE_REVISION] from test merge #[tm.number]!") @@ -102,15 +121,22 @@ initialized = TRUE return TRUE +/datum/tgs_api/v5/proc/GetTopicPort() +#if defined(OPENDREAM) && defined(OPENDREAM_TOPIC_PORT_EXISTS) + return "[world.opendream_topic_port]" +#else + return null +#endif + /datum/tgs_api/v5/proc/RequireInitialBridgeResponse() TGS_DEBUG_LOG("RequireInitialBridgeResponse()") var/logged = FALSE - while(!version) + while(!initial_bridge_request_received) if(!logged) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep") logged = TRUE - sleep(1) + sleep(world.tick_lag) TGS_DEBUG_LOG("RequireInitialBridgeResponse: Passed") @@ -183,17 +209,7 @@ var/datum/tgs_chat_channel/channel = I ids += channel.id - message2 = UpgradeDeprecatedChatMessage(message2) - - if (!length(channels)) - return - - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids - if(intercepted_message_queue) - intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatMessageRaw(message2, ids) /datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only) var/list/channels = list() @@ -202,32 +218,82 @@ if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id + SendChatMessageRaw(message2, channels) + +/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) + SendChatMessageRaw(message2, list(user.channel.id)) + +/datum/tgs_api/v5/proc/SendChatMessageRaw(datum/tgs_message_content/message2, list/channel_ids) message2 = UpgradeDeprecatedChatMessage(message2) - if (!length(channels)) + if (!length(channel_ids)) return var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels + data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channel_ids if(intercepted_message_queue) intercepted_message_queue += list(data) - else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + return -/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user) - message2 = UpgradeDeprecatedChatMessage(message2) - var/list/data = message2._interop_serialize() - data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id) - if(intercepted_message_queue) - intercepted_message_queue += list(data) + if(offline_message_queue) + offline_message_queue += list(data) + return + + if(detached) + offline_message_queue = list(data) + + WaitForReattach(FALSE) + + data = offline_message_queue + offline_message_queue = null + + for(var/queued_message in data) + SendChatDataRaw(queued_message) else - Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) + SendChatDataRaw(data) + +/datum/tgs_api/v5/proc/SendChatDataRaw(list/data) + Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data)) /datum/tgs_api/v5/ChatChannelInfo() RequireInitialBridgeResponse() WaitForReattach(TRUE) return chat_channels.Copy() +/datum/tgs_api/v5/TriggerEvent(event_name, list/parameters, wait_for_completion) + RequireInitialBridgeResponse() + WaitForReattach(TRUE) + + if(interop_version.minor < 9) + TGS_WARNING_LOG("Interop version too low for custom events!") + return FALSE + + var/str_parameters = list() + for(var/i in parameters) + str_parameters += "[i]" + + var/list/response = Bridge(DMAPI5_BRIDGE_COMMAND_EVENT, list(DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION = list(DMAPI5_EVENT_INVOCATION_NAME = event_name, DMAPI5_EVENT_INVOCATION_PARAMETERS = str_parameters, DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION = wait_for_completion))) + if(!response) + return FALSE + + var/event_id = response[DMAPI5_EVENT_ID] + if(!event_id) + return FALSE + + TGS_DEBUG_LOG("Created event ID: [event_id]") + if(!wait_for_completion) + return TRUE + + TGS_DEBUG_LOG("Waiting for completion of event ID: [event_id]") + + while(!pending_events[event_id]) + sleep(world.tick_lag) + + TGS_DEBUG_LOG("Completed wait on event ID: [event_id]") + pending_events -= event_id + + return TRUE + /datum/tgs_api/v5/proc/DecodeChannels(chat_update_json) TGS_DEBUG_LOG("DecodeChannels()") var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS] diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index 37f58bcdf63..62201fcc9e5 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -48,7 +48,9 @@ var/json = CreateBridgeData(command, data, TRUE) var/encoded_json = url_encode(json) - var/url = "http://127.0.0.1:[server_port]/Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" + var/api_prefix = interop_version.minor >= 8 ? "api/" : "" + + var/url = "http://127.0.0.1:[server_port]/[api_prefix]Bridge?[DMAPI5_BRIDGE_DATA]=[encoded_json]" return url /datum/tgs_api/v5/proc/CreateBridgeData(command, list/data, needs_auth) @@ -63,7 +65,7 @@ if(detached) // Wait up to one minute for(var/i in 1 to 600) - sleep(1) + sleep(world.tick_lag) if(!detached && (!require_channels || length(chat_channels))) break @@ -75,20 +77,25 @@ /datum/tgs_api/v5/proc/PerformBridgeRequest(bridge_request) WaitForReattach(FALSE) - // This is an infinite sleep until we get a response - var/export_response = world.Export(bridge_request) - if(!export_response) - TGS_ERROR_LOG("Failed bridge request: [bridge_request]") + TGS_DEBUG_LOG("Bridge request start") + var/datum/tgs_http_result/result = http_handler.PerformGet(bridge_request) + TGS_DEBUG_LOG("Bridge request complete") + + if(isnull(result)) + TGS_ERROR_LOG("Failed bridge request, handler returned null!") return - var/response_json = file2text(export_response["CONTENT"]) - if(!response_json) - TGS_ERROR_LOG("Failed bridge request, missing content!") + if(!istype(result) || result.type != /datum/tgs_http_result) + TGS_ERROR_LOG("Failed bridge request, handler returned non-[/datum/tgs_http_result]!") return - var/list/bridge_response = json_decode(response_json) + if(!result.success) + TGS_DEBUG_LOG("Failed bridge request, HTTP request failed!") + return + + var/list/bridge_response = json_decode(result.response_text) if(!bridge_response) - TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") + TGS_ERROR_LOG("Failed bridge request, bad json: [result.response_text]") return var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE] diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index d7d47121381..59e5e63e5cd 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -94,7 +94,7 @@ if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") if(event_handler != null) event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) @@ -141,7 +141,7 @@ if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") server_port = new_port return TopicResponse() @@ -149,7 +149,9 @@ if(DMAPI5_TOPIC_COMMAND_HEALTHCHECK) if(event_handler && event_handler.receive_health_checks) event_handler.HandleEvent(TGS_EVENT_HEALTH_CHECK) - return TopicResponse() + var/list/health_check_response = TopicResponse() + health_check_response[DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT] = TGS_CLIENT_COUNT + return health_check_response; if(DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH) detached = FALSE @@ -157,7 +159,7 @@ var/error_message = null if (new_port != null) if (!isnum(new_port) || !(new_port > 0)) - error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]" + error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]" else server_port = new_port @@ -165,7 +167,7 @@ if (!istext(new_version_string)) if(error_message != null) error_message += ", " - error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]]" + error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]" else var/datum/tgs_version/new_version = new(new_version_string) if (event_handler) @@ -175,6 +177,11 @@ var/list/reattach_response = TopicResponse(error_message) reattach_response[DMAPI5_PARAMETER_CUSTOM_COMMANDS] = ListCustomCommands() + reattach_response[DMAPI5_PARAMETER_TOPIC_PORT] = GetTopicPort() + + for(var/eventId in pending_events) + pending_events[eventId] = TRUE + return reattach_response if(DMAPI5_TOPIC_COMMAND_SEND_CHUNK) @@ -267,4 +274,25 @@ return chunk_to_send + if(DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST) + var/message = topic_parameters[DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE] + if (!istext(message)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]") + + TGS_WORLD_ANNOUNCE(message) + return TopicResponse() + + if(DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT) + var/event_id = topic_parameters[DMAPI5_EVENT_ID] + if (!istext(event_id)) + return TopicResponse("Invalid or missing [DMAPI5_EVENT_ID]") + + TGS_DEBUG_LOG("Completing event ID [event_id]...") + pending_events[event_id] = TRUE + return TopicResponse() + return TopicResponse("Unknown command: [command]") + +/datum/tgs_api/v5/proc/WorldBroadcast(message) + set waitfor = FALSE + TGS_WORLD_ANNOUNCE(message) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index f163adaaafe..ca49e46cdff 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -8,16 +8,17 @@ #undef DMAPI5_TOPIC_REQUEST_LIMIT #undef DMAPI5_TOPIC_RESPONSE_LIMIT -#undef DMAPI5_BRIDGE_COMMAND_PORT_UPDATE #undef DMAPI5_BRIDGE_COMMAND_STARTUP #undef DMAPI5_BRIDGE_COMMAND_PRIME #undef DMAPI5_BRIDGE_COMMAND_REBOOT #undef DMAPI5_BRIDGE_COMMAND_KILL #undef DMAPI5_BRIDGE_COMMAND_CHAT_SEND #undef DMAPI5_BRIDGE_COMMAND_CHUNK +#undef DMAPI5_BRIDGE_COMMAND_EVENT #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS +#undef DMAPI5_PARAMETER_TOPIC_PORT #undef DMAPI5_CHUNK #undef DMAPI5_CHUNK_PAYLOAD @@ -34,6 +35,7 @@ #undef DMAPI5_BRIDGE_PARAMETER_VERSION #undef DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE #undef DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL +#undef DMAPI5_BRIDGE_PARAMETER_EVENT_INVOCATION #undef DMAPI5_BRIDGE_RESPONSE_NEW_PORT #undef DMAPI5_BRIDGE_RESPONSE_RUNTIME_INFORMATION @@ -78,6 +80,10 @@ #undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE #undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK #undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH +#undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST +#undef DMAPI5_TOPIC_COMMAND_COMPLETE_EVENT #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE #undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND @@ -87,7 +93,9 @@ #undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME #undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE +#undef DMAPI5_TOPIC_RESPONSE_CLIENT_COUNT #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES @@ -112,3 +120,9 @@ #undef DMAPI5_CUSTOM_CHAT_COMMAND_NAME #undef DMAPI5_CUSTOM_CHAT_COMMAND_HELP_TEXT #undef DMAPI5_CUSTOM_CHAT_COMMAND_ADMIN_ONLY + +#undef DMAPI5_EVENT_ID + +#undef DMAPI5_EVENT_INVOCATION_NAME +#undef DMAPI5_EVENT_INVOCATION_PARAMETERS +#undef DMAPI5_EVENT_INVOCATION_NOTIFY_COMPLETION diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 61468e8e10d..aa4e9927758 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -42,7 +42,7 @@ * * required user mob The mob interacting with the UI. * - * return list Statuic Data to be sent to the UI. + * return list Static Data to be sent to the UI. */ /datum/proc/ui_static_data(mob/user) return list() diff --git a/code/modules/nano/modules/follow_menu.dm b/code/modules/tgui/modules/follow_menu.dm similarity index 100% rename from code/modules/nano/modules/follow_menu.dm rename to code/modules/tgui/modules/follow_menu.dm diff --git a/code/modules/nano/modules/human_appearance.dm b/code/modules/tgui/modules/human_appearance.dm similarity index 100% rename from code/modules/nano/modules/human_appearance.dm rename to code/modules/tgui/modules/human_appearance.dm diff --git a/code/modules/nano/modules/narrate_panel.dm b/code/modules/tgui/modules/narrate_panel.dm similarity index 100% rename from code/modules/nano/modules/narrate_panel.dm rename to code/modules/tgui/modules/narrate_panel.dm diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index d3ce59cf352..ddc2bae9b75 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -70,7 +70,7 @@ // Disable UIs if unconscious. else if(stat) return UI_DISABLED - // Update UIs if incapicitated but concious. + // Update UIs if incapicitated but conscious. else if(incapacitated()) return UI_UPDATE return UI_INTERACTIVE @@ -129,6 +129,3 @@ /datum/ui_state/proc/href_list(mob/user) return list() - -/datum/proc/nano_container() - return src diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index 0f93514cfe6..3e02f893958 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -13,7 +13,7 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) /datum/ui_state/default/can_use_topic(src_object, mob/user) - return user.default_can_use_topic(src_object) // Call the individual mob-overridden procs. + return user?.default_can_use_topic(src_object) // Call the individual mob-overridden procs. /mob/proc/default_can_use_topic(src_object) return UI_CLOSE // Don't allow interaction by default. @@ -41,8 +41,11 @@ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) if(. < UI_INTERACTIVE) return + if(src_object == src) + return UI_INTERACTIVE + // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. - if(!control_disabled) + if(!control_disabled && can_see(src_object)) return UI_INTERACTIVE return UI_CLOSE diff --git a/code/modules/tgui/status_composers.dm b/code/modules/tgui/status_composers.dm index 7924ed9f2f2..8f60e03aa6a 100644 --- a/code/modules/tgui/status_composers.dm +++ b/code/modules/tgui/status_composers.dm @@ -83,6 +83,9 @@ return UI_DISABLED // Otherwise they can keep the UI open. /mob/living/silicon/ai/get_ui_access(atom/source) + if(source == src) + return UI_INTERACTIVE + // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. if(!control_disabled && can_see(source)) return UI_INTERACTIVE @@ -113,3 +116,11 @@ return UI_CLOSE return UI_INTERACTIVE + +/// Return UI_INTERACTIVE if the user is inside the target atom, whether they can see it or not. +/// Return UI_CLOSE otherwise. +/proc/ui_status_user_inside(mob/user, atom/target) + if(target.contains(user)) + return UI_INTERACTIVE + + return UI_CLOSE diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 62b40969958..b5391b4473d 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -37,11 +37,9 @@ var/datum/ui_state/state = null /// Rate limit client refreshes to prevent DoS. COOLDOWN_DECLARE(refresh_cooldown) - /// Are byond mouse events beyond the window passed in to the ui - var/mouse_hooked = FALSE - /// Any partial packets that we have received from TGUI, waiting to be sent - var/partial_packets + /// The id of any ByondUi elements that we have opened + var/list/open_byondui_elements /** * public @@ -58,9 +56,6 @@ * return datum/tgui The requested UI. */ /datum/tgui/New(mob/user, datum/src_object, interface, title, ui_x, ui_y) - log_tgui(user, - "new [interface] fancy [user?.client?.prefs.tgui_fancy]", - src_object = src_object) src.user = user src.src_object = src_object src.window_key = "[REF(src_object)]-main" @@ -85,7 +80,7 @@ * return bool - TRUE if a new pooled window is opened, FALSE in all other situations including if a new pooled window didn't open because one already exists. */ /datum/tgui/proc/open() - if(!user?.client) + if(user && !user.client) return FALSE if(window) return FALSE @@ -100,7 +95,6 @@ if(!window.is_ready()) window.initialize( strict_mode = TRUE, - fancy = user.client.prefs.tgui_fancy, assets = list( get_asset_datum(/datum/asset/simple/tgui), )) @@ -110,8 +104,6 @@ window.send_message("update", get_payload( with_data = TRUE, with_static_data = TRUE)) - if(mouse_hooked) - window.set_mouse_macro() SStgui.on_open(src) return TRUE @@ -146,11 +138,27 @@ window.release_lock() window.close(can_be_suspended) src_object.ui_close(user) - SEND_SIGNAL(src, COMSIG_TGUI_CLOSE, user) SStgui.on_close(src) + + if(user.client) + terminate_byondui_elements() + state = null qdel(src) +/** + * public + * + * Closes all ByondUI elements, left dangling by a forceful TGUI exit, + * such as via Alt+F4, or terminating the process + * + */ +/datum/tgui/proc/terminate_byondui_elements() + set waitfor = FALSE + + for(var/byondui_element in open_byondui_elements) + winset(user.client, byondui_element, list("parent" = "")) + /** * public * @@ -161,18 +169,6 @@ /datum/tgui/proc/set_autoupdate(autoupdate) src.autoupdate = autoupdate -/** - * public - * - * Enable/disable passing through byond mouse events to the window - * - * required value bool Enable/disable hooking. - */ -/datum/tgui/proc/set_mouse_hook(value) - src.mouse_hooked = value - //Handle unhooking/hooking on already open windows ? - - /** * public * @@ -248,12 +244,13 @@ json_data["config"] = list( "title" = title, "status" = status, - "interface" = interface, + "interface" = list( + "name" = interface, + ), "refreshing" = refreshing, "window" = list( "key" = window_key, "size" = window_size, - "fancy" = user.client.prefs.tgui_fancy, "locked" = user.client.prefs.tgui_lock, "scale" = user.client.prefs.ui_scale, ), @@ -329,31 +326,6 @@ // Pass act type messages to ui_act if(type && copytext(type, 1, 5) == "act/") var/act_type = copytext(type, 5) - - var/id = href_list["packetId"] - if(!isnull(id)) - id = text2num(id) - - var/total = text2num(href_list["totalPackets"]) - - if(total > MAX_MESSAGE_CHUNKS) - return - - if(id == 1) - partial_packets = new /list(total) - - partial_packets[id] = href_list["packet"] - - if(id != total) - return - - var/assembled_payload = "" - for(var/packet in partial_packets) - assembled_payload += packet - - payload = json_decode(assembled_payload) - partial_packets = null - log_tgui(user, "Action: [act_type] [href_list["payload"]]", window = window, src_object = src_object) @@ -381,6 +353,18 @@ LAZYINITLIST(src_object.tgui_shared_states) src_object.tgui_shared_states[href_list["key"]] = href_list["value"] SStgui.update_uis(src_object) + if(TGUI_MANAGED_BYONDUI_TYPE_RENDER) + var/byond_ui_id = payload[TGUI_MANAGED_BYONDUI_PAYLOAD_ID] + if(!byond_ui_id || LAZYLEN(open_byondui_elements) > TGUI_MANAGED_BYONDUI_LIMIT) + return + + LAZYOR(open_byondui_elements, byond_ui_id) + if(TGUI_MANAGED_BYONDUI_TYPE_UNMOUNT) + var/byond_ui_id = payload[TGUI_MANAGED_BYONDUI_PAYLOAD_ID] + if(!byond_ui_id) + return + + LAZYREMOVE(open_byondui_elements, byond_ui_id) /// Wrapper for behavior to potentially wait until the next tick if the server is overloaded /datum/tgui/proc/on_act_message(act_type, payload, state) diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm index 996013a1aa5..1b29cacdb79 100644 --- a/code/modules/tgui/tgui_window.dm +++ b/code/modules/tgui/tgui_window.dm @@ -11,6 +11,7 @@ var/is_browser = FALSE var/status = TGUI_WINDOW_CLOSED var/locked = FALSE + var/visible = FALSE var/datum/tgui/locked_by var/datum/subscriber_object var/subscriber_delegate @@ -19,12 +20,12 @@ var/sent_assets = list() // Vars passed to initialize proc (and saved for later) var/initial_strict_mode - var/initial_fancy var/initial_assets var/initial_inline_html var/initial_inline_js var/initial_inline_css - var/mouse_event_macro_set = FALSE + + var/list/oversized_payloads = list() /** * public @@ -50,7 +51,6 @@ * will be put into the queue until the window finishes loading. * * optional strict_mode bool - Enables strict error handling and BSOD. - * optional fancy bool - If TRUE and if this is NOT a panel, will hide the window titlebar. * optional assets list - List of assets to load during initialization. * optional inline_html string - Custom HTML to inject. * optional inline_js string - Custom JS to inject. @@ -58,7 +58,6 @@ */ /datum/tgui_window/proc/initialize( strict_mode = FALSE, - fancy = FALSE, assets = list(), inline_html = "", inline_js = "", @@ -68,7 +67,6 @@ window = src) if(!client) return - src.initial_fancy = fancy src.initial_assets = assets src.initial_inline_html = inline_html src.initial_inline_js = inline_js @@ -76,16 +74,12 @@ status = TGUI_WINDOW_LOADING fatally_errored = FALSE // Build window options - var/options = "file=[id].html;can_minimize=0;auto_format=0;" - // Remove titlebar and resize handles for a fancy window - if(fancy) - options += "titlebar=0;can_resize=0;" - else - options += "titlebar=1;can_resize=1;" + var/options = "file=[id].html;can_minimize=0;auto_format=0;titlebar=0;can_resize=0;" // Generate page html var/html = SStgui.basehtml html = replacetextEx(html, "\[tgui:windowId]", id) html = replacetextEx(html, "\[tgui:strictMode]", strict_mode) + html = replacetextEx(html, "\[tgui:storagecdn]", GLOB.config.storage_cdn_iframe) // Inject assets var/inline_assets_str = "" for(var/datum/asset/asset in assets) @@ -128,7 +122,6 @@ /datum/tgui_window/proc/reinitialize() initialize( strict_mode = initial_strict_mode, - fancy = initial_fancy, assets = initial_assets, inline_html = initial_inline_html, inline_js = initial_inline_js, @@ -220,12 +213,11 @@ /datum/tgui_window/proc/close(can_be_suspended = TRUE) if(!client) return - if(mouse_event_macro_set) - remove_mouse_macro() if(can_be_suspended && can_be_suspended()) log_tgui(client, context = "[id]/close (suspending)", window = src) + visible = FALSE status = TGUI_WINDOW_READY send_message("suspend") return @@ -233,6 +225,7 @@ context = "[id]/close", window = src) release_lock() + visible = FALSE status = TGUI_WINDOW_CLOSED message_queue = null // Do not close the window to give user some time @@ -298,9 +291,6 @@ return sent_assets |= list(asset) . = asset.send(client) - if(istype(asset, /datum/asset/spritesheet)) - var/datum/asset/spritesheet/spritesheet = asset - send_message("asset/stylesheet", spritesheet.css_filename()) send_raw_message(asset.get_serialized_url_mappings()) /** @@ -364,6 +354,11 @@ switch(type) if("ping") send_message("ping/reply", payload) + if("ping/set") + client?.avgping = payload["ping"] + if("visible") + visible = TRUE + SEND_SIGNAL(src, COMSIG_TGUI_WINDOW_VISIBLE, client) if("suspend") close(can_be_suspended = TRUE) if("close") @@ -372,40 +367,48 @@ client << link(href_list["url"]) if("cacheReloaded") reinitialize() + if("chat/resend") + SSchat.handle_resend(client, payload) + if("oversizedPayloadRequest") + var/payload_id = payload["id"] + var/chunk_count = payload["chunkCount"] + var/permit_payload = chunk_count <= 32 + if(permit_payload) + create_oversized_payload(payload_id, payload["type"], chunk_count) + send_message("oversizePayloadResponse", list("allow" = permit_payload, "id" = payload_id)) + if("payloadChunk") + var/payload_id = payload["id"] + append_payload_chunk(payload_id, payload["chunk"]) + send_message("acknowledgePayloadChunk", list("id" = payload_id)) -/datum/tgui_window/proc/set_mouse_macro() - if(mouse_event_macro_set) +/datum/tgui_window/vv_edit_var(var_name, var_value) + return var_name != NAMEOF(src, id) && ..() + +/datum/tgui_window/proc/create_oversized_payload(payload_id, message_type, chunk_count) + if(oversized_payloads[payload_id]) + stack_trace("Attempted to create oversized tgui payload with duplicate ID.") return - - var/list/byondToTguiEventMap = list( - "MouseDown" = "byond/mousedown", - "MouseUp" = "byond/mouseup" + oversized_payloads[payload_id] = list( + "type" = message_type, + "count" = chunk_count, + "chunks" = list(), + "timeout" = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) ) - for(var/mouseMacro in byondToTguiEventMap) - var/command_template = ".output CONTROL PAYLOAD" - var/event_message = TGUI_CREATE_MESSAGE(byondToTguiEventMap[mouseMacro], null) - var target_control = is_browser \ - ? "[id]:update" \ - : "[id].browser:update" - var/with_id = replacetext(command_template, "CONTROL", target_control) - var/full_command = replacetext(with_id, "PAYLOAD", event_message) +/datum/tgui_window/proc/append_payload_chunk(payload_id, chunk) + var/list/payload = oversized_payloads[payload_id] + if(!payload) + return + var/list/chunks = payload["chunks"] + chunks += chunk + if(length(chunks) >= payload["count"]) + deltimer(payload["timeout"]) + var/message_type = payload["type"] + var/final_payload = chunks.Join() + remove_oversized_payload(payload_id) + on_message(message_type, json_decode(final_payload), list("type" = message_type, "payload" = final_payload, "tgui" = TRUE, "window_id" = id)) + else + payload["timeout"] = addtimer(CALLBACK(src, PROC_REF(remove_oversized_payload), payload_id), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) - var/list/params = list() - params["parent"] = "default" //Technically this is external to tgui but whatever - params["name"] = mouseMacro - params["command"] = full_command - - winset(client, "[mouseMacro]Window[id]Macro", params) - mouse_event_macro_set = TRUE - -/datum/tgui_window/proc/remove_mouse_macro() - if(!mouse_event_macro_set) - stack_trace("Unsetting mouse macro on tgui window that has none") - var/list/byondToTguiEventMap = list( - "MouseDown" = "byond/mousedown", - "MouseUp" = "byond/mouseup" - ) - for(var/mouseMacro in byondToTguiEventMap) - winset(client, null, "[mouseMacro]Window[id]Macro.parent=null") - mouse_event_macro_set = FALSE +/datum/tgui_window/proc/remove_oversized_payload(payload_id) + oversized_payloads -= payload_id diff --git a/code/modules/tgui_input/alert.dm b/code/modules/tgui_input/alert.dm index 469cd7831b1..6efee72a7cd 100644 --- a/code/modules/tgui_input/alert.dm +++ b/code/modules/tgui_input/alert.dm @@ -10,7 +10,7 @@ * * timeout - The timeout of the alert, after which the modal will close and qdel itself. Set to zero for no timeout. * * autofocus - The bool that controls if this alert should grab window focus. */ -/proc/tgui_alert(mob/user, message = "", title, list/buttons = list("Ok"), timeout = 0, autofocus = TRUE) +/proc/tgui_alert(mob/user, message = "", title, list/buttons = list("Ok"), timeout = 0, autofocus = TRUE, ui_state = GLOB.always_state) if (!user) user = usr if (!istype(user)) @@ -18,7 +18,11 @@ var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + // A gentle nudge - you should not be using TGUI alert for anything other than a simple message. if(length(buttons) > 3) log_tgui(user, "Error: TGUI Alert initiated with too many buttons. Use a list.", "TguiAlert") @@ -29,7 +33,7 @@ return alert(user, message, title, buttons[1], buttons[2]) if(length(buttons) == 3) return alert(user, message, title, buttons[1], buttons[2], buttons[3]) - var/datum/tgui_alert/alert = new(user, message, title, buttons, timeout, autofocus) + var/datum/tgui_alert/alert = new(user, message, title, buttons, timeout, autofocus, ui_state) alert.ui_interact(user) alert.wait() if (alert) @@ -59,19 +63,23 @@ var/autofocus /// Boolean field describing if the tgui_alert was closed by the user. var/closed + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state -/datum/tgui_alert/New(mob/user, message, title, list/buttons, timeout, autofocus) +/datum/tgui_alert/New(mob/user, message, title, list/buttons, timeout, autofocus, ui_state) src.autofocus = autofocus src.buttons = buttons.Copy() src.message = message src.title = title + src.state = ui_state if (timeout) src.timeout = timeout start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_alert/Destroy(force, ...) +/datum/tgui_alert/Destroy(force) SStgui.close_uis(src) + state = null buttons?.Cut() return ..() @@ -94,7 +102,7 @@ closed = TRUE /datum/tgui_alert/ui_state(mob/user) - return GLOB.always_state + return state /datum/tgui_alert/ui_static_data(mob/user) var/list/data = list() @@ -112,7 +120,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_alert/ui_act(action, list/params) +/datum/tgui_alert/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/checkboxes.dm b/code/modules/tgui_input/checkboxes.dm new file mode 100644 index 00000000000..51ce2a631aa --- /dev/null +++ b/code/modules/tgui_input/checkboxes.dm @@ -0,0 +1,139 @@ +/** + * ### tgui_input_checkbox + * Opens a window with a list of checkboxes and returns a list of selected choices. + * + * user - The mob to display the window to + * message - The message inside the window + * title - The title of the window + * list/items - The list of items to display + * min_checked - The minimum number of checkboxes that must be checked (defaults to 1) + * max_checked - The maximum number of checkboxes that can be checked (optional) + * timeout - The timeout for the input (optional) + */ +/proc/tgui_input_checkboxes(mob/user, message, title = "Select", list/items, min_checked = 1, max_checked = 50, timeout = 0, ui_state = GLOB.always_state) + if (!user) + user = usr + if(!length(items)) + return null + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return null + + if(isnull(user.client)) + return null + + if(!user.client.prefs.tgui_inputs) + return input(user, message, title) as null|anything in items + var/datum/tgui_checkbox_input/input = new(user, message, title, items, min_checked, max_checked, timeout, ui_state) + input.ui_interact(user) + input.wait() + if (input) + . = input.choices + qdel(input) + +/// Window for tgui_input_checkboxes +/datum/tgui_checkbox_input + /// Title of the window + var/title + /// Message to display + var/message + /// List of items to display + var/list/items + /// List of selected items + var/list/choices + /// Time when the input was created + var/start_time + /// Timeout for the input + var/timeout + /// Whether the input was closed + var/closed + /// Minimum number of checkboxes that must be checked + var/min_checked + /// Maximum number of checkboxes that can be checked + var/max_checked + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + +/datum/tgui_checkbox_input/New(mob/user, message, title, list/items, min_checked, max_checked, timeout, ui_state) + src.title = title + src.message = message + src.items = items.Copy() + src.min_checked = min_checked + src.max_checked = max_checked + src.state = ui_state + + if (timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_checkbox_input/Destroy(force) + SStgui.close_uis(src) + state = null + items?.Cut() + return ..() + +/datum/tgui_checkbox_input/proc/wait() + while (!closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_checkbox_input/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "CheckboxInput") + ui.open() + +/datum/tgui_checkbox_input/ui_close(mob/user) + . = ..() + closed = TRUE + +/datum/tgui_checkbox_input/ui_state(mob/user) + return state + +/datum/tgui_checkbox_input/ui_data(mob/user) + var/list/data = list() + + if(timeout) + data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + + return data + +/datum/tgui_checkbox_input/ui_static_data(mob/user) + var/list/data = list() + + data["items"] = items + data["min_checked"] = min_checked + data["max_checked"] = max_checked + data["large_buttons"] = user.client.prefs.tgui_buttons_large + data["message"] = message + data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped + data["title"] = title + + return data + +/datum/tgui_checkbox_input/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if (.) + return + + switch(action) + if("submit") + var/list/selections = params["entry"] + if(length(selections) >= min_checked && length(selections) <= max_checked) + set_choices(selections) + closed = TRUE + SStgui.close_uis(src) + return TRUE + + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + + return FALSE + +/datum/tgui_checkbox_input/proc/set_choices(list/selections) + src.choices = selections.Copy() diff --git a/code/modules/tgui_input/keycombo.dm b/code/modules/tgui_input/keycombo.dm new file mode 100644 index 00000000000..45bd3c18034 --- /dev/null +++ b/code/modules/tgui_input/keycombo.dm @@ -0,0 +1,126 @@ +/** + * Creates a TGUI window with a key input. Returns the user's response as a full key with modifiers, eg ShiftK. + * + * This proc should be used to create windows for key entry that the caller will wait for a response from. + * If tgui fancy chat is turned off: Will return a normal input. + * + * Arguments: + * * user - The user to show the number input to. + * * message - The content of the number input, shown in the body of the TGUI window. + * * title - The title of the number input modal, shown on the top of the TGUI window. + * * default - The default (or current) key, shown as a placeholder. + */ +/proc/tgui_input_keycombo(mob/user = usr, message, title = "Key Input", default = 0, timeout = 0, ui_state = GLOB.always_state) + if (!istype(user)) + if (istype(user, /client)) + var/client/client = user + user = client.mob + else + return null + + if (isnull(user.client)) + return null + + // Client does NOT have tgui_input on: Returns regular input + if(!user.client.prefs.tgui_inputs) + var/input_key = input(user, message, title + "(Modifiers are TGUI only, sorry!)", default) as null|text + return input_key[1] + var/datum/tgui_input_keycombo/key_input = new(user, message, title, default, timeout, ui_state) + key_input.ui_interact(user) + key_input.wait() + if (key_input) + . = key_input.entry + qdel(key_input) + +/** + * # tgui_input_keycombo + * + * Datum used for instantiating and using a TGUI-controlled key input that prompts the user with + * a message and listens for key presses. + */ +/datum/tgui_input_keycombo + /// Boolean field describing if the tgui_input_number was closed by the user. + var/closed + /// The default (or current) value, shown as a default. Users can press reset with this. + var/default + /// The entry that the user has return_typed in. + var/entry + /// The prompt's body, if any, of the TGUI window. + var/message + /// The time at which the number input was created, for displaying timeout progress. + var/start_time + /// The lifespan of the number input, after which the window will close and delete itself. + var/timeout + /// The title of the TGUI window + var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + +/datum/tgui_input_keycombo/New(mob/user, message, title, default, timeout, ui_state) + src.default = default + src.message = message + src.title = title + src.state = ui_state + if (timeout) + src.timeout = timeout + start_time = world.time + QDEL_IN(src, timeout) + +/datum/tgui_input_keycombo/Destroy(force) + SStgui.close_uis(src) + state = null + return ..() + +/** + * Waits for a user's response to the tgui_input_keycombo's prompt before returning. Returns early if + * the window was closed by the user. + */ +/datum/tgui_input_keycombo/proc/wait() + while (!entry && !closed && !QDELETED(src)) + stoplag(1) + +/datum/tgui_input_keycombo/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "KeyComboModal") + ui.open() + +/datum/tgui_input_keycombo/ui_close(mob/user) + . = ..() + closed = TRUE + +/datum/tgui_input_keycombo/ui_state(mob/user) + return state + +/datum/tgui_input_keycombo/ui_static_data(mob/user) + var/list/data = list() + data["init_value"] = default // Default is a reserved keyword + data["large_buttons"] = user.client.prefs.tgui_buttons_large + data["message"] = message + data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped + data["title"] = title + return data + +/datum/tgui_input_keycombo/ui_data(mob/user) + var/list/data = list() + if(timeout) + data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) + return data + +/datum/tgui_input_keycombo/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if (.) + return + switch(action) + if("submit") + set_entry(params["entry"]) + closed = TRUE + SStgui.close_uis(src) + return TRUE + if("cancel") + closed = TRUE + SStgui.close_uis(src) + return TRUE + +/datum/tgui_input_keycombo/proc/set_entry(entry) + src.entry = entry diff --git a/code/modules/tgui_input/list.dm b/code/modules/tgui_input/list.dm index 1192bb55b85..5448a4a4729 100644 --- a/code/modules/tgui_input/list.dm +++ b/code/modules/tgui_input/list.dm @@ -10,21 +10,28 @@ * * default - If an option is already preselected on the UI. Current values, etc. * * timeout - The timeout of the input box, after which the menu will close and qdel itself. Set to zero for no timeout. */ -/proc/tgui_input_list(mob/user, message, title = "Select", list/items, default, timeout = 0) +/proc/tgui_input_list(mob/user, message, title = "Select", list/items, default, timeout = 0, ui_state = GLOB.always_state) if (!user) user = usr if(!length(items)) - return + return null if (!istype(user)) if (istype(user, /client)) var/client/client = user user = client.mob else - return + return null + + if(isnull(user.client)) + return null + /// Client does NOT have tgui_input on: Returns regular input if(!user.client.prefs.tgui_inputs) return input(user, message, title, default) as null|anything in items - var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout) + var/datum/tgui_list_input/input = new(user, message, title, items, default, timeout, ui_state) + if(input.invalid) + qdel(input) + return input.ui_interact(user) input.wait() if (input) @@ -56,13 +63,18 @@ var/timeout /// Boolean field describing if the tgui_list_input was closed by the user. var/closed + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state + /// Whether the tgui list input is invalid or not (i.e. due to all list entries being null) + var/invalid = FALSE -/datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout) +/datum/tgui_list_input/New(mob/user, message, title, list/items, default, timeout, ui_state) src.title = title src.message = message src.items = list() src.items_map = list() src.default = default + src.state = ui_state var/list/repeat_items = list() // Gets rid of illegal characters var/static/regex/whitelistedWords = regex(@{"([^\u0020-\u8000]+)"}) @@ -74,13 +86,17 @@ string_key = avoid_assoc_duplicate_keys(string_key, repeat_items) src.items += string_key src.items_map[string_key] = i + + if(length(src.items) == 0) + invalid = TRUE if (timeout) src.timeout = timeout start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_list_input/Destroy(force, ...) +/datum/tgui_list_input/Destroy(force) SStgui.close_uis(src) + state = null items?.Cut() items_map?.Cut() return ..() @@ -96,7 +112,7 @@ /datum/tgui_list_input/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "ListInputModal") + ui = new(user, src, "ListInputWindow") ui.open() /datum/tgui_list_input/ui_close(mob/user) @@ -104,15 +120,15 @@ closed = TRUE /datum/tgui_list_input/ui_state(mob/user) - return GLOB.always_state + return state /datum/tgui_list_input/ui_static_data(mob/user) var/list/data = list() data["init_value"] = default || items[1] data["items"] = items data["large_buttons"] = user.client.prefs.tgui_buttons_large - data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped data["message"] = message + data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped data["title"] = title return data @@ -122,7 +138,7 @@ data["timeout"] = clamp((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS), 0, 1) return data -/datum/tgui_list_input/ui_act(action, list/params) +/datum/tgui_list_input/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/number.dm b/code/modules/tgui_input/number.dm index 8eb489be1f0..5c708f618e3 100644 --- a/code/modules/tgui_input/number.dm +++ b/code/modules/tgui_input/number.dm @@ -15,7 +15,7 @@ * * timeout - The timeout of the number input, after which the modal will close and qdel itself. Set to zero for no timeout. * * round_value - whether the inputted number is rounded down into an integer. */ -/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = 10000, min_value = 0, timeout = 0, round_value = TRUE) +/proc/tgui_input_number(mob/user, message, title = "Number Input", default = 0, max_value = 10000, min_value = 0, timeout = 0, round_value = TRUE, ui_state = GLOB.always_state) if (!user) user = usr if (!istype(user)) @@ -30,7 +30,7 @@ if(!user.client.prefs.tgui_inputs) var/input_number = input(user, message, title, default) as null|num return clamp(round_value ? round(input_number) : input_number, min_value, max_value) - var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value) + var/datum/tgui_input_number/number_input = new(user, message, title, default, max_value, min_value, timeout, round_value, ui_state) number_input.ui_interact(user) number_input.wait() if (number_input) @@ -64,14 +64,17 @@ var/timeout /// The title of the TGUI window var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state -/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value) +/datum/tgui_input_number/New(mob/user, message, title, default, max_value, min_value, timeout, round_value, ui_state) src.default = default src.max_value = max_value src.message = message src.min_value = min_value src.title = title src.round_value = round_value + src.state = ui_state if (timeout) src.timeout = timeout start_time = world.time @@ -87,8 +90,9 @@ if(default > max_value) CRASH("Default value is greater than max value.") -/datum/tgui_input_number/Destroy(force, ...) +/datum/tgui_input_number/Destroy(force) SStgui.close_uis(src) + state = null return ..() /** @@ -110,7 +114,7 @@ closed = TRUE /datum/tgui_input_number/ui_state(mob/user) - return GLOB.always_state + return state /datum/tgui_input_number/ui_static_data(mob/user) if (!user.client) @@ -119,10 +123,10 @@ var/list/data = list() data["init_value"] = default // Default is a reserved keyword data["large_buttons"] = user.client.prefs.tgui_buttons_large - data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped data["max_value"] = max_value data["message"] = message data["min_value"] = min_value + data["swapped_buttons"] = user.client.prefs.tgui_inputs_swapped data["title"] = title data["round_value"] = round_value return data @@ -133,7 +137,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_input_number/ui_act(action, list/params) +/datum/tgui_input_number/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_input/say_modal/modal.dm b/code/modules/tgui_input/say_modal/modal.dm index 4b96ab1791d..4caf3f82420 100644 --- a/code/modules/tgui_input/say_modal/modal.dm +++ b/code/modules/tgui_input/say_modal/modal.dm @@ -48,7 +48,6 @@ sleep(3 SECONDS) window.initialize( strict_mode = TRUE, - fancy = TRUE, inline_css = file("tgui/public/tgui-say.bundle.css"), inline_js = file("tgui/public/tgui-say.bundle.js"), ); diff --git a/code/modules/tgui_input/text.dm b/code/modules/tgui_input/text.dm index c934a4276a6..6b3563a27a0 100644 --- a/code/modules/tgui_input/text.dm +++ b/code/modules/tgui_input/text.dm @@ -10,12 +10,12 @@ * * message - The content of the text input, shown in the body of the TGUI window. * * title - The title of the text input modal, shown on the top of the TGUI window. * * default - The default (or current) value, shown as a placeholder. - * * max_length - Specifies a max length for input. MAX_MESSAGE_LEN is default (1024) + * * max_length - Specifies a max length for input. MAX_MESSAGE_LEN is default (4096) * * multiline - Bool that determines if the input box is much larger. Good for large messages, laws, etc. * * encode - Toggling this determines if input is filtered via html_encode. Setting this to FALSE gives raw input. * * timeout - The timeout of the textbox, after which the modal will close and qdel itself. Set to zero for no timeout. */ -/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0) +/proc/tgui_input_text(mob/user, message = "", title = "Text Input", default, max_length = MAX_MESSAGE_LEN, multiline = FALSE, encode = TRUE, timeout = 0, ui_state = GLOB.always_state) if (!user) user = usr if (!istype(user)) @@ -39,7 +39,7 @@ return input(user, message, title, default) as message|null else return input(user, message, title, default) as text|null - var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout) + var/datum/tgui_input_text/text_input = new(user, message, title, default, max_length, multiline, encode, timeout, ui_state) text_input.ui_interact(user) text_input.wait() if (text_input) @@ -73,21 +73,25 @@ var/timeout /// The title of the TGUI window var/title + /// The TGUI UI state that will be returned in ui_state(). Default: always_state + var/datum/ui_state/state -/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout) +/datum/tgui_input_text/New(mob/user, message, title, default, max_length, multiline, encode, timeout, ui_state) src.default = default src.encode = encode src.max_length = max_length src.message = message src.multiline = multiline src.title = title + src.state = ui_state if (timeout) src.timeout = timeout start_time = world.time QDEL_IN(src, timeout) -/datum/tgui_input_text/Destroy(force, ...) +/datum/tgui_input_text/Destroy(force) SStgui.close_uis(src) + state = null return ..() /** @@ -131,7 +135,7 @@ data["timeout"] = CLAMP01((timeout - (world.time - start_time) - 1 SECONDS) / (timeout - 1 SECONDS)) return data -/datum/tgui_input_text/ui_act(action, list/params) +/datum/tgui_input_text/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if (.) return diff --git a/code/modules/tgui_panel/external.dm b/code/modules/tgui_panel/external.dm index 5ab90b3d61b..8874bf3a49e 100644 --- a/code/modules/tgui_panel/external.dm +++ b/code/modules/tgui_panel/external.dm @@ -32,3 +32,11 @@ tgui_panel.initialize(force = TRUE) // Force show the panel to see if there are any errors winset(src, "output_selector.legacy_output_selector", "left=output_browser") + +/client/verb/refresh_tgui() + set name = "Refresh TGUI" + set category = "OOC.Debug" + + for(var/window_id in tgui_windows) + var/datum/tgui_window/window = tgui_windows[window_id] + window.reinitialize() diff --git a/config/example/config.txt b/config/example/config.txt index 0824bb673a6..a486343be07 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -604,3 +604,7 @@ CACHE_ASSETS 0 # # # + +## Tgui payloads larger than the 2kb limit for BYOND topic requests are split into roughly 1kb chunks and sent in sequence. +## This config option limits the maximum chunk count for which the server will accept a payload, default is 32 +TGUI_MAX_CHUNK_COUNT 32 diff --git a/dependencies.sh b/dependencies.sh index dc296092ca2..a015b9e405d 100755 --- a/dependencies.sh +++ b/dependencies.sh @@ -17,9 +17,12 @@ echo "SPACEMAN_DMM_VERSION=$SPACEMAN_DMM_VERSION" >> "$GITHUB_ENV" #node version export NODE_VERSION=20 echo "NODE_VERSION=$NODE_VERSION" >> "$GITHUB_ENV" -export NODE_VERSION_LTS=20.12.0 +export NODE_VERSION_LTS=22.11.0 echo "NODE_VERSION_LTS=$NODE_VERSION_LTS" >> "$GITHUB_ENV" +# Bun version +export BUN_VERSION=1.2.16 +echo "BUN_VERSION=$BUN_VERSION" >> "$GITHUB_ENV" # Python version for mapmerge and other tools # Ensure in https://www.python.org/ftp/python/ there is a file called python--embed-amd64.zip, diff --git a/html/changelogs/Bat-TGUIReactMigration.yml b/html/changelogs/Bat-TGUIReactMigration.yml new file mode 100644 index 00000000000..4078a497fb4 --- /dev/null +++ b/html/changelogs/Bat-TGUIReactMigration.yml @@ -0,0 +1,66 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# - (fixes bugs) +# wip +# - (work in progress) +# qol +# - (quality of life) +# soundadd +# - (adds a sound) +# sounddel +# - (removes a sound) +# rscadd +# - (adds a feature) +# rscdel +# - (removes a feature) +# imageadd +# - (adds an image or sprite) +# imagedel +# - (removes an image or sprite) +# spellcheck +# - (fixes spelling or grammar) +# experiment +# - (experimental change) +# balance +# - (balance changes) +# code_imp +# - (misc internal code change) +# refactor +# - (refactors code) +# config +# - (makes a change to the config files) +# admin +# - (makes changes to administrator tools) +# server +# - (miscellaneous changes to server) +################################# + +# Your name. +author: Batrachophrenoboocosmomachia + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - refactor: "Updates TGUI backend (both modules and tgui code) from Inferno to React." + - refactor: "Migrates all TGUI components and interfaces to the new React architecture." + - rscadd: "Adds item examine tags and descriptors w/ hoverable tooltips in chat window." + - rscdel: "Removal of all lingering NanoUI code and assets." + - server: "Build tool Javascript to Typescript migrations." + - code_imp: "Migration to bun 1.2.16." + - code_imp: "Migration from eslint 7.32.0 -> biome 2.1.2." + - code_imp: "Many many other dependency changes; see all 'package.json' diffs." + - bugfix: "Fixes runtime attempting to clone executable files in NTOS File Manager." diff --git a/html/statbrowser.css b/html/statbrowser.css index 3dd7f78b786..0e1a67db22a 100644 --- a/html/statbrowser.css +++ b/html/statbrowser.css @@ -1,241 +1,273 @@ .light:root { - --scrollbar-base: #f2f2f2; - --scrollbar-thumb: #a7a7a7; + --color-base: #ffffff; + --scrollbar-base: #f2f2f2; + --scrollbar-thumb: #a7a7a7; } -html, body { - scrollbar-color: var(--scrollbar-base) var(--scrollbar-thumb); +html, +body { + scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-base); } body { - font-family: Verdana, Geneva, Tahoma, sans-serif; - font-size: 12px !important; - margin: 0 !important; - padding: 0 !important; - overflow-x: hidden; - overflow-y: scroll; -} - -body.dark { - background-color: #131313; - color: #b2c4dd; - scrollbar-base-color: #1c1c1c; - scrollbar-face-color: #3b3b3b; - scrollbar-3dlight-color: #252525; - scrollbar-highlight-color: #252525; - scrollbar-track-color: #1c1c1c; - scrollbar-arrow-color: #929292; - scrollbar-shadow-color: #3b3b3b; -} - -.dark:root { - --scrollbar-base: #181818; - --scrollbar-thumb: #363636; -} - -#menu { - background-color: #F0F0F0; - position: fixed; - width: 100%; - z-index: 100; -} - -.dark #menu { - background-color: #202020; -} - -#statcontent { - padding: 7px 7px 7px 7px; + font-family: Verdana, Geneva, Tahoma, sans-serif; + font-size: 12px; + margin: 0 !important; + padding: 0 !important; + overflow: hidden; } a { - color: black; - text-decoration: none + color: #003399; + text-decoration: none; } -.dark a { - color: #b2c4dd; +a:hover { + color: #007fff; } -a:hover, -.dark a:hover { - text-decoration: underline; -} - -ul { - list-style-type: none; - margin: 0; - padding: 0; - background-color: #333; -} - -li { - float: left; -} - -li a { - display: block; - color: white; - text-align: center; - padding: 14px 16px; - text-decoration: none; -} - -li a:hover:not(.active) { - background-color: #111; -} - -.button-container { - display: inline-flex; - flex-wrap: wrap-reverse; - flex-direction: row; - align-items: flex-start; - overflow-x: hidden; - white-space: pre-wrap; - padding: 0 4px; -} - -.button { - background-color: #dfdfdf; - border: 1px solid #cecece; - border-bottom-width: 2px; - color: rgba(0, 0, 0, 0.7); - padding: 6px 4px 4px; - text-align: center; - text-decoration: none; - font-size: 12px; - margin: 0; - cursor: pointer; - transition-duration: 100ms; - order: 3; - min-width: 40px; -} - -.dark button { - background-color: #222222; - border-color: #343434; - color: rgba(255, 255, 255, 0.5); -} - -.button:hover { - background-color: #ececec; - transition-duration: 0; -} - -.dark button:hover { - background-color: #2e2e2e; -} - -.button:active, -.button.active { - background-color: #ffffff; - color: black; - border-top-color: #cecece; - border-left-color: #cecece; - border-right-color: #cecece; - border-bottom-color: #ffffff; -} - -.dark .button:active, -.dark .button.active { - background-color: #444444; - color: white; - border-top-color: #343434; - border-left-color: #343434; - border-right-color: #343434; - border-bottom-color: #ffffff; -} - -.grid-container { - margin: -2px; - margin-right: -15px; -} - -.grid-item { - position: relative; - display: inline-block; - width: 100%; - box-sizing: border-box; - overflow: visible; - padding: 3px 2px; - text-decoration: none; -} - -@media only screen and (min-width: 300px) { - .grid-item { - width: 50%; - } -} - -@media only screen and (min-width: 430px) { - .grid-item { - width: 33%; - } -} - -@media only screen and (min-width: 560px) { - .grid-item { - width: 25%; - } -} - -@media only screen and (min-width: 770px) { - .grid-item { - width: 20%; - } -} - -.grid-item:hover { - z-index: 1; -} - -.grid-item:hover .grid-item-text { - width: auto; - text-decoration: underline; -} - -.grid-item-text { - display: inline-block; - width: 100%; - background-color: #ffffff; - margin: 0 -6px; - padding: 0 6px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - pointer-events: none; -} - -.dark .grid-item-text { - background-color: #131313; -} - -.link { - display: inline; - background: none; - border: none; - padding: 7px 14px; - color: black; - text-decoration: none; - cursor: pointer; - font-size: 13px; - margin: 2px 2px; -} - -.dark .link { - color: #abc6ec; -} - -.link:hover { - text-decoration: underline; +h3 { + margin: 0 -0.5em 0.5em; + padding: 1em 0.66em 0.5em; + border-bottom: 0.1667em solid; } img { - -ms-interpolation-mode: nearest-neighbor; - image-rendering: pixelated; + -ms-interpolation-mode: nearest-neighbor; + image-rendering: pixelated; } -.interview_panel_controls, -.interview_panel_stats { - margin-bottom: 10px; +.stat-container { + display: flex; + flex-direction: column; + height: 100vh; +} + +#menu { + display: flex; + overflow-x: auto; + overflow-y: hidden; + padding: 0.25em 0.25em 0; + background-color: #ffffff; +} + +.menu-wrap { + flex-wrap: wrap-reverse; +} + +#menu.tabs-classic { + padding: 0.15em; +} + +#menu.tabs-classic .button { + min-width: 2em; + margin: 0.1em; + padding: 0.25em 0.4em; + border: 0; + border-radius: 0.25em; +} + +#menu.tabs-classic .button.active { + background-color: #0668b8; + color: white; +} + +.button { + display: inline-table; + cursor: pointer; + user-select: none; + -ms-user-select: none; /* Remove after Byond 516 */ + text-align: center; + font-size: 1em; + min-width: 2.9em; + padding: 0.5em 0.5em 0.4em; + background-color: transparent; + color: rgba(0, 0, 0, 0.5); + border: 0; + border-bottom: 0.1667em solid transparent; + border-radius: 0.25em 0.25em 0 0; +} + +.button:hover { + background-color: #ececec; +} + +.button.active { + cursor: default; + background-color: #dfdfdf; + color: black; + border-bottom-color: #000000; +} + +.statcontent { + flex: 1; + padding: 0.75em 0.5em; + overflow-y: auto; + overflow-x: hidden; +} + +.mcstatcontent { + flex: 1; + padding: 0.75em 0.5em; + overflow-y: auto; + overflow-x: auto; + white-space: pre; +} + +.mcstatcontent td { + vertical-align: top; +} + +.mcstatcontent .monospace { + font-family: "Consolas", "Lucida Console", "Courier New", monospace; +} + +#under-menu { + height: 0.5em; + background-color: #eeeeee; +} + +#under-content { + height: calc(0.5em - 4px); + background-color: #eeeeee; +} + +.grid-container { + margin: -0.25em; +} + +.grid-item { + display: inline-flex; + position: relative; + user-select: none; + -ms-user-select: none; /* Remove after Byond 516 */ + width: 100%; + max-height: 1.85em; + text-decoration: none; + background-color: transparent; + color: black; +} + +.grid-item:hover, +.grid-item:active { + color: #003399; + z-index: 1; +} + +.grid-item-text { + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + width: 100%; + padding: 0.33em 0.5em; + border-radius: 0.25em; +} + +.grid-item:hover .grid-item-text { + height: 100%; + overflow: visible; + white-space: normal; + background-color: #ececec; +} + +.grid-item:active .grid-item-text { + background-color: #dfdfdf; +} + +@media only screen and (min-width: 300px) { + .grid-item { + width: 50%; + } +} + +@media only screen and (min-width: 430px) { + .grid-item { + width: 33%; + } +} + +@media only screen and (min-width: 560px) { + .grid-item { + width: 25%; + } +} + +@media only screen and (min-width: 770px) { + .grid-item { + width: 20%; + } +} + +.status-info { + margin: 0 0.33em 0.25em; +} + +.interview_panel_stats, +.interview_panel_controls { + margin-bottom: 1em; +} + +/** + * MARK: Dark theme colors + */ +.dark:root { + --color-base: #151515; + --scrollbar-base: #151515; + --scrollbar-thumb: #363636; +} + +body.dark { + background-color: #151515; + color: #b2c4dd; +} + +.dark a { + color: #6699ff; +} + +.dark a:hover, +.dark .grid-item:hover, +.dark .grid-item:active { + color: #80bfff; +} + +.dark #menu { + background-color: #151515; +} + +.dark #menu.tabs-classic .button.active { + background-color: #20b142; +} + +.dark .button { + color: rgba(255, 255, 255, 0.5); +} + +.dark .button:hover { + background-color: #252525; +} + +.dark .button.active { + background-color: #313131; + color: #d4dfec; + border-bottom-color: #d4dfec; +} + +.dark #under-menu, +.dark #under-content { + background-color: #202020; +} + +.dark .grid-item { + color: #b2c4dd; +} + +.dark .grid-item:hover .grid-item-text { + background-color: #252525; +} + +.dark .grid-item:active .grid-item-text { + background-color: #313131; } diff --git a/html/statbrowser.html b/html/statbrowser.html index 1aea8811d58..bbbd8fa53ab 100644 --- a/html/statbrowser.html +++ b/html/statbrowser.html @@ -1,3 +1,6 @@ - -
    -
    +
    + +
    +
    +
    +
    diff --git a/html/statbrowser.js b/html/statbrowser.js index c3c167ad4dc..2292f199096 100644 --- a/html/statbrowser.js +++ b/html/statbrowser.js @@ -1,977 +1,944 @@ // Polyfills and compatibility ------------------------------------------------ var decoder = decodeURIComponent || unescape; if (!Array.prototype.includes) { - Array.prototype.includes = function (thing) { - for (var i = 0; i < this.length; i++) { - if (this[i] == thing) return true; - } - return false; - } + Array.prototype.includes = function (thing) { + for (var i = 0; i < this.length; i++) { + if (this[i] == thing) return true; + } + return false; + }; } if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); - }; + String.prototype.trim = function () { + return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + }; } // Status panel implementation ------------------------------------------------ -var status_tab_parts = ["Loading..."]; +//status_tab_parts expects a list to be returned, to which we'll send a list within a list +//with just "loading" to not appear broken. +var status_tab_parts = [['Loading...']]; var current_tab = null; -var mc_tab_parts = [["Loading...", ""]]; -var spells = []; -var spell_tabs = []; +//mc_tab_parts expects a list to be returned, to which we'll send a list within a list +//with just "loading" to not appear broken. +var mc_tab_parts = [['Loading...']]; +var href_token = null; var verb_tabs = []; -var verbs = [["", ""]]; // list with a list inside +var verbs = [['', '']]; // list with a list inside var tickets = []; -var interviewManager = { status: "", interviews: [] }; +var interviewManager = { status: '', interviews: [] }; var sdql2 = []; var permanent_tabs = []; // tabs that won't be cleared by wipes var turfcontents = []; -var turfname = ""; +var turfname = ''; var imageRetryDelay = 500; var imageRetryLimit = 50; var menu = document.getElementById('menu'); -var under_menu = document.getElementById('under_menu'); var statcontentdiv = document.getElementById('statcontent'); var storedimages = []; var split_admin_tabs = false; +//The 'default' tab that everyone should have, that we swap to if the tab you're on is deleted or anything similar. +var defaultTab = 'Status'; // Any BYOND commands that could result in the client's focus changing go through this // to ensure that when we relinquish our focus, we don't do it after the result of // a command has already taken focus for itself. function run_after_focus(callback) { - setTimeout(callback, 0); + setTimeout(callback, 0); } function createStatusTab(name) { - if (name.indexOf(".") != -1) { - var splitName = name.split("."); - if (split_admin_tabs && splitName[0] === "Admin") - name = splitName[1]; - else - name = splitName[0]; - } - if (document.getElementById(name) || name.trim() == "") { - return; - } - if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) { - return; - } - var B = document.createElement("BUTTON"); - B.onclick = function () { - tab_change(name); - this.blur(); - }; - B.id = name; - B.textContent = name; - B.className = "button"; - //ORDERING ALPHABETICALLY - B.style.order = name.charCodeAt(0); - if (name == "Status" || name == "MC") { - B.style.order = name == "Status" ? 1 : 2; - } - //END ORDERING - menu.appendChild(B); - SendTabToByond(name); - under_menu.style.height = menu.clientHeight + 'px'; + if (name.indexOf('.') != -1) { + var splitName = name.split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') name = splitName[1]; + else name = splitName[0]; + } + if (document.getElementById(name) || name.trim() == '') { + return; + } + if (!verb_tabs.includes(name) && !permanent_tabs.includes(name)) { + return; + } + var button = document.createElement('DIV'); + button.onclick = function () { + tab_change(name); + this.blur(); + statcontentdiv.focus(); + }; + button.id = name; + button.textContent = name; + button.className = 'button'; + //ORDERING ALPHABETICALLY + button.style.order = { Status: 1, MC: 2 }[name] || name.charCodeAt(0); + //END ORDERING + menu.appendChild(button); + SendTabToByond(name); } function removeStatusTab(name) { - if (!document.getElementById(name) || permanent_tabs.includes(name)) { - return; - } - for (var i = verb_tabs.length - 1; i >= 0; --i) { - if (verb_tabs[i] == name) { - verb_tabs.splice(i, 1); - } - } - menu.removeChild(document.getElementById(name)); - TakeTabFromByond(name); - under_menu.style.height = menu.clientHeight + 'px'; + if (!document.getElementById(name) || permanent_tabs.includes(name)) { + return; + } + for (var i = verb_tabs.length - 1; i >= 0; --i) { + if (verb_tabs[i] == name) { + verb_tabs.splice(i, 1); + } + } + menu.removeChild(document.getElementById(name)); + TakeTabFromByond(name); } function sortVerbs() { - verbs.sort(function (a, b) { - var selector = a[0] == b[0] ? 1 : 0; - if (a[selector].toUpperCase() < b[selector].toUpperCase()) { - return 1; - } - else if (a[selector].toUpperCase() > b[selector].toUpperCase()) { - return -1; - } - return 0; - }) -} - -window.onresize = function () { - under_menu.style.height = menu.clientHeight + 'px'; + verbs.sort((a, b) => { + var selector = a[0] == b[0] ? 1 : 0; + if (a[selector].toUpperCase() < b[selector].toUpperCase()) { + return 1; + } else if (a[selector].toUpperCase() > b[selector].toUpperCase()) { + return -1; + } + return 0; + }); } function addPermanentTab(name) { - if (!permanent_tabs.includes(name)) { - permanent_tabs.push(name); - } - createStatusTab(name); + if (!permanent_tabs.includes(name)) { + permanent_tabs.push(name); + } + createStatusTab(name); } function removePermanentTab(name) { - for (var i = permanent_tabs.length - 1; i >= 0; --i) { - if (permanent_tabs[i] == name) { - permanent_tabs.splice(i, 1); - } - } - removeStatusTab(name); + for (var i = permanent_tabs.length - 1; i >= 0; --i) { + if (permanent_tabs[i] == name) { + permanent_tabs.splice(i, 1); + } + } + removeStatusTab(name); } function checkStatusTab() { - for (var i = 0; i < menu.children.length; i++) { - if (!verb_tabs.includes(menu.children[i].id) && !permanent_tabs.includes(menu.children[i].id)) { - menu.removeChild(menu.children[i]); - } - } + for (var i = 0; i < menu.children.length; i++) { + if ( + !verb_tabs.includes(menu.children[i].id) && + !permanent_tabs.includes(menu.children[i].id) + ) { + menu.removeChild(menu.children[i]); + } + } } function remove_verb(v) { - var verb_to_remove = v; // to_remove = [verb:category, verb:name] - for (var i = verbs.length - 1; i >= 0; i--) { - var part_to_remove = verbs[i]; - if (part_to_remove[1] == verb_to_remove[1]) { - verbs.splice(i, 1) - } - } + var verb_to_remove = v; // to_remove = [verb:category, verb:name] + for (var i = verbs.length - 1; i >= 0; i--) { + var part_to_remove = verbs[i]; + if (part_to_remove[1] == verb_to_remove[1]) { + verbs.splice(i, 1); + } + } } function check_verbs() { - for (var v = verb_tabs.length - 1; v >= 0; v--) { - //Aurora snowflake check because somehow we manage to break even ports - if(!verb_tabs[v]){ - v--; - continue; - } - verbs_cat_check(verb_tabs[v]); - } + for (var v = verb_tabs.length - 1; v >= 0; v--) { + verbs_cat_check(verb_tabs[v]); + } } function verbs_cat_check(cat) { - var tabCat = cat; - if (cat.indexOf(".") != -1) { - var splitName = cat.split("."); - if (split_admin_tabs && splitName[0] === "Admin") - tabCat = splitName[1]; - else - tabCat = splitName[0]; - } - var verbs_in_cat = 0; - var verbcat = ""; - if (!verb_tabs.includes(tabCat) && !spell_tabs.includes(tabCat)) { - removeStatusTab(tabCat); - return; - } - for (var v = 0; v < verbs.length; v++) { - var part = verbs[v]; - verbcat = part[0]; - if (verbcat.indexOf(".") != -1) { - var splitName = verbcat.split("."); - if (split_admin_tabs && splitName[0] === "Admin") - verbcat = splitName[1]; - else - verbcat = splitName[0]; - } - if (verbcat != tabCat || verbcat.trim() == "") { - continue; - } - else { - verbs_in_cat = 1; - break; // we only need one - } - } - //More aurora snowflake code to handle spell tabs - var spells_in_cat = 0; - var spellcat = ""; - for(var v = (spells.length - 1); v >= 0; v--) { - var spell = spells[v]; - spellcat = spell[0]; - if(spellcat != tabCat || spellcat.trim() == ""){ - continue; - } - else{ - spells_in_cat = 1; - break; - } + var tabCat = cat; + if (cat.indexOf('.') != -1) { + var splitName = cat.split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') tabCat = splitName[1]; + else tabCat = splitName[0]; + } + var verbs_in_cat = 0; + var verbcat = ''; + if (!verb_tabs.includes(tabCat)) { + removeStatusTab(tabCat); + return; + } + for (var v = 0; v < verbs.length; v++) { + var part = verbs[v]; + verbcat = part[0]; + if (verbcat.indexOf('.') != -1) { + var splitName = verbcat.split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') verbcat = splitName[1]; + else verbcat = splitName[0]; } - - if (verbs_in_cat != 1 && spells_in_cat != 1) { - removeStatusTab(tabCat); - if (current_tab == tabCat) - tab_change("Status"); - } + if (verbcat != tabCat || verbcat.trim() == '') { + } else { + verbs_in_cat = 1; + break; // we only need one + } + } + if (verbs_in_cat != 1) { + removeStatusTab(tabCat); + if (current_tab == tabCat) tab_change(defaultTab); + } } function findVerbindex(name, verblist) { - for (var i = 0; i < verblist.length; i++) { - var part = verblist[i]; - if (part[1] == name) - return i; - } + for (var i = 0; i < verblist.length; i++) { + var part = verblist[i]; + if (part[1] == name) return i; + } } function wipe_verbs() { - verbs = [["", ""]]; - verb_tabs = []; - checkStatusTab(); // remove all empty verb tabs + verbs = [['', '']]; + verb_tabs = []; + checkStatusTab(); // remove all empty verb tabs } function update_verbs() { - wipe_verbs(); - Byond.sendMessage("Update-Verbs"); + wipe_verbs(); + Byond.sendMessage('Update-Verbs'); } function SendTabsToByond() { - var tabstosend = []; - tabstosend = tabstosend.concat(permanent_tabs, verb_tabs); - for (var i = 0; i < tabstosend.length; i++) { - SendTabToByond(tabstosend[i]); - } + var tabstosend = []; + tabstosend = tabstosend.concat(permanent_tabs, verb_tabs); + for (var i = 0; i < tabstosend.length; i++) { + SendTabToByond(tabstosend[i]); + } } function SendTabToByond(tab) { - Byond.sendMessage("Send-Tabs", {tab: tab}); + Byond.sendMessage('Send-Tabs', { tab: tab }); } //Byond can't have this tab anymore since we're removing it function TakeTabFromByond(tab) { - Byond.sendMessage("Remove-Tabs", {tab: tab}); -} - -function spell_cat_check(cat) { - var spells_in_cat = 0; - var spellcat = ""; - for (var s = 0; s < spells.length; s++) { - var spell = spells[s]; - spellcat = spell[0]; - if (spellcat == cat) { - spells_in_cat++; - } - } - if (spells_in_cat < 1) { - removeStatusTab(cat); - } + Byond.sendMessage('Remove-Tabs', { tab: tab }); } function tab_change(tab) { - if (tab == current_tab) return; - if (document.getElementById(current_tab)) - document.getElementById(current_tab).className = "button"; // disable active on last button - current_tab = tab; - set_byond_tab(tab); - if (document.getElementById(tab)) - document.getElementById(tab).className = "button active"; // make current button active - var spell_tabs_thingy = (spell_tabs.includes(tab)); - var verb_tabs_thingy = (verb_tabs.includes(tab)); - if (tab == "Status") { - draw_status(); - } else if (tab == "MC") { - draw_mc(); - } else if (spell_tabs_thingy) { - draw_spells(tab); - } else if (verb_tabs_thingy) { - draw_verbs(tab); - } else if (tab == "Debug Stat Panel") { - draw_debug(); - } else if (tab == "SDQL2") { - draw_sdql2(); - } else if (tab == turfname) { - draw_listedturf(); - } else { - statcontentdiv.textContext = "Loading..."; - } - Byond.winset(Byond.windowId, { - 'is-visible': true, - }); + if (tab == current_tab) return; + if (document.getElementById(current_tab)) + document.getElementById(current_tab).className = 'button'; // disable active on last button + current_tab = tab; + set_byond_tab(tab); + if (document.getElementById(tab)) + document.getElementById(tab).className = 'button active'; // make current button active + var verb_tabs_thingy = verb_tabs.includes(tab); + statcontentdiv.className = 'statcontent'; + if (tab == 'Status') { + draw_status(); + } else if (tab == 'MC') { + draw_mc(); + } else if (verb_tabs_thingy) { + draw_verbs(tab); + } else if (tab == 'Debug Stat Panel') { + draw_debug(); + } else if (tab == 'Tickets') { + draw_tickets(); + draw_interviews(); + } else if (tab == 'SDQL2') { + draw_sdql2(); + } else if (tab == turfname) { + draw_listedturf(); + } else { + statcontentdiv.textContext = 'Loading...'; + } + Byond.winset(Byond.windowId, { + 'is-visible': true, + }); } function set_byond_tab(tab) { - Byond.sendMessage("Set-Tab", {tab: tab}); + Byond.sendMessage('Set-Tab', { tab: tab }); } function draw_debug() { - statcontentdiv.textContent = ""; - var wipeverbstabs = document.createElement("div"); - var link = document.createElement("a"); - link.onclick = function () { wipe_verbs() }; - link.textContent = "Wipe All Verbs"; - wipeverbstabs.appendChild(link); - document.getElementById("statcontent").appendChild(wipeverbstabs); - var wipeUpdateVerbsTabs = document.createElement("div"); - var updateLink = document.createElement("a"); - updateLink.onclick = function () { update_verbs() }; - updateLink.textContent = "Wipe and Update All Verbs"; - wipeUpdateVerbsTabs.appendChild(updateLink); - document.getElementById("statcontent").appendChild(wipeUpdateVerbsTabs); - var text = document.createElement("div"); - text.textContent = "Verb Tabs:"; - document.getElementById("statcontent").appendChild(text); - var table1 = document.createElement("table"); - for (var i = 0; i < verb_tabs.length; i++) { - var part = verb_tabs[i]; - // Hide subgroups except admin subgroups if they are split - if (verb_tabs[i].lastIndexOf(".") != -1) { - var splitName = verb_tabs[i].split("."); - if (split_admin_tabs && splitName[0] === "Admin") - part = splitName[1]; - else - continue; - } - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part; - var a = document.createElement("a"); - a.onclick = function (part) { - return function () { removeStatusTab(part) }; - }(part); - a.textContent = " Delete Tab " + part; - td1.appendChild(a); - tr.appendChild(td1); - table1.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table1); - var header2 = document.createElement("div"); - header2.textContent = "Verbs:"; - document.getElementById("statcontent").appendChild(header2); - var table2 = document.createElement("table"); - for (var v = 0; v < verbs.length; v++) { - var part2 = verbs[v]; - var trr = document.createElement("tr"); - var tdd1 = document.createElement("td"); - tdd1.textContent = part2[0]; - var tdd2 = document.createElement("td"); - tdd2.textContent = part2[1]; - trr.appendChild(tdd1); - trr.appendChild(tdd2); - table2.appendChild(trr); - } - document.getElementById("statcontent").appendChild(table2); - var text3 = document.createElement("div"); - text3.textContent = "Permanent Tabs:"; - document.getElementById("statcontent").appendChild(text3); - var table3 = document.createElement("table"); - for (var i = 0; i < permanent_tabs.length; i++) { - var part3 = permanent_tabs[i]; - var trrr = document.createElement("tr"); - var tddd1 = document.createElement("td"); - tddd1.textContent = part3; - trrr.appendChild(tddd1); - table3.appendChild(trrr); - } - document.getElementById("statcontent").appendChild(table3); - + statcontentdiv.textContent = ''; + var wipeverbstabs = document.createElement('div'); + var link = document.createElement('a'); + link.onclick = () => { + wipe_verbs(); + }; + link.textContent = 'Wipe All Verbs'; + wipeverbstabs.appendChild(link); + document.getElementById('statcontent').appendChild(wipeverbstabs); + var wipeUpdateVerbsTabs = document.createElement('div'); + var updateLink = document.createElement('a'); + updateLink.onclick = () => { + update_verbs(); + }; + updateLink.textContent = 'Wipe and Update All Verbs'; + wipeUpdateVerbsTabs.appendChild(updateLink); + document.getElementById('statcontent').appendChild(wipeUpdateVerbsTabs); + var text = document.createElement('div'); + text.textContent = 'Verb Tabs:'; + document.getElementById('statcontent').appendChild(text); + var table1 = document.createElement('table'); + for (var i = 0; i < verb_tabs.length; i++) { + var part = verb_tabs[i]; + // Hide subgroups except admin subgroups if they are split + if (verb_tabs[i].lastIndexOf('.') != -1) { + var splitName = verb_tabs[i].split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') part = splitName[1]; + else continue; + } + var tr = document.createElement('tr'); + var td1 = document.createElement('td'); + td1.textContent = part; + var a = document.createElement('a'); + a.onclick = ((part) => () => { + removeStatusTab(part); + })(part); + a.textContent = ' Delete Tab ' + part; + td1.appendChild(a); + tr.appendChild(td1); + table1.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table1); + var header2 = document.createElement('div'); + header2.textContent = 'Verbs:'; + document.getElementById('statcontent').appendChild(header2); + var table2 = document.createElement('table'); + for (var v = 0; v < verbs.length; v++) { + var part2 = verbs[v]; + var trr = document.createElement('tr'); + var tdd1 = document.createElement('td'); + tdd1.textContent = part2[0]; + var tdd2 = document.createElement('td'); + tdd2.textContent = part2[1]; + trr.appendChild(tdd1); + trr.appendChild(tdd2); + table2.appendChild(trr); + } + document.getElementById('statcontent').appendChild(table2); + var text3 = document.createElement('div'); + text3.textContent = 'Permanent Tabs:'; + document.getElementById('statcontent').appendChild(text3); + var table3 = document.createElement('table'); + for (var i = 0; i < permanent_tabs.length; i++) { + var part3 = permanent_tabs[i]; + var trrr = document.createElement('tr'); + var tddd1 = document.createElement('td'); + tddd1.textContent = part3; + trrr.appendChild(tddd1); + table3.appendChild(trrr); + } + document.getElementById('statcontent').appendChild(table3); } + function draw_status() { - if (!document.getElementById("Status")) { - createStatusTab("Status"); - current_tab = "Status"; - } - statcontentdiv.textContent = ''; - for (var i = 0; i < status_tab_parts.length; i++) { - if (status_tab_parts[i].trim() == "") { - document.getElementById("statcontent").appendChild(document.createElement("br")); - } else { - var div = document.createElement("div"); - div.textContent = status_tab_parts[i]; - document.getElementById("statcontent").appendChild(div); - } - } - if (verb_tabs.length == 0 || !verbs) { - Byond.command("Fix-Stat-Panel"); - } + if (!document.getElementById('Status')) { + createStatusTab('Status'); + current_tab = 'Status'; + } + statcontentdiv.textContent = ''; + var table = document.createElement('table'); + for (var i = 0; i < status_tab_parts.length; i++) { + var part = status_tab_parts[i]; + if (!Array.isArray(part)) { + var div = document.createElement('div'); + if (part.trim() == '') { + table.appendChild(document.createElement('br')); + } else { + div.textContent = part; + table.appendChild(div); + } + } else { + var div; + if (part[0].trim() == 'same_line') { + var a = document.createElement('a'); + a.href = 'byond://?' + part[2]; + a.textContent = part[1]; + div.appendChild(a); + } else { + div = document.createElement('div'); + if (part[0].trim() == '') { + table.appendChild(document.createElement('br')); + } else { + div.textContent = part[0]; + if (part[2]) { + var a = document.createElement('a'); + a.href = 'byond://?' + part[2]; + a.textContent = part[1]; + div.appendChild(a); + } + table.appendChild(div); + } + } + } + } + document.getElementById('statcontent').appendChild(table); + if (verb_tabs.length == 0 || !verbs) { + Byond.command('Fix-Stat-Panel'); + } } function draw_mc() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < mc_tab_parts.length; i++) { - var part = mc_tab_parts[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href="byond://?_src_=vars;Vars=" + part[2]; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ''; + statcontentdiv.className = 'mcstatcontent'; + var table = document.createElement('table'); + for (var i = 0; i < mc_tab_parts.length; i++) { + var part = mc_tab_parts[i]; + var tr = document.createElement('tr'); + var td0 = document.createElement('td'); + td0.className = 'monospace'; + td0.textContent = part[0]; + var td1 = document.createElement('td'); + td1.textContent = part[1]; + var td2 = document.createElement('td'); + if (part[3]) { + var a = document.createElement('a'); + a.href = + 'byond://?_src_=vars;admin_token=' + href_token + ';Vars=' + part[3]; + a.textContent = part[2]; + td2.appendChild(a); + } else { + td2.textContent = part[2]; + } + tr.appendChild(td0); + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table); } + +function remove_tickets() { + if (tickets) { + tickets = []; + removePermanentTab('Tickets'); + if (current_tab == 'Tickets') tab_change(defaultTab); + } + checkStatusTab(); +} + function remove_sdql2() { - if (sdql2) { - sdql2 = []; - removePermanentTab("SDQL2"); - if (current_tab == "SDQL2") - tab_change("Status"); - } - checkStatusTab(); + if (sdql2) { + sdql2 = []; + removePermanentTab('SDQL2'); + if (current_tab == 'SDQL2') tab_change(defaultTab); + } + checkStatusTab(); } + +function remove_interviews() { + if (tickets) { + tickets = []; + } + checkStatusTab(); +} + function iconError(e) { - if(current_tab != turfname) { - return; - } - setTimeout(function () { - var node = e.target; - var current_attempts = Number(node.getAttribute("data-attempts")) || 0 - if (current_attempts > imageRetryLimit) { - return; - } - var src = node.src; - node.src = null; - node.src = src + '#' + current_attempts; - node.setAttribute("data-attempts", current_attempts + 1) - draw_listedturf(); - }, imageRetryDelay); + if (current_tab != turfname) { + return; + } + setTimeout(() => { + var node = e.target; + var current_attempts = Number(node.getAttribute('data-attempts')) || 0; + if (current_attempts > imageRetryLimit) { + return; + } + var src = node.src; + node.src = null; + node.src = src + '#' + current_attempts; + node.setAttribute('data-attempts', current_attempts + 1); + draw_listedturf(); + }, imageRetryDelay); } function draw_listedturf() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < turfcontents.length; i++) { - var part = turfcontents[i]; - var clickfunc = (function (part) { - // The outer function is used to close over a fresh "part" variable, - // rather than every onmousedown getting the "part" of the last entry. - return function (e) { - e.preventDefault(); - clickcatcher = "byond://?src=" + part[1]; - switch (e.button) { - case 1: - clickcatcher += ";statpanel_item_click=middle"; - break; - case 2: - clickcatcher += ";statpanel_item_click=right"; - break; - default: - clickcatcher += ";statpanel_item_click=left"; - } - if (e.shiftKey) { - clickcatcher += ";statpanel_item_shiftclick=1"; - } - if (e.ctrlKey) { - clickcatcher += ";statpanel_item_ctrlclick=1"; - } - if (e.altKey) { - clickcatcher += ";statpanel_item_altclick=1"; - } - window.location.href = clickcatcher; - }; - })(part); - if (storedimages[part[1]] == null && part[2]) { - var img = document.createElement("img"); - img.src = part[2]; - img.id = part[1]; - storedimages[part[1]] = part[2]; - img.onerror = iconError; - img.onmousedown = clickfunc; - table.appendChild(img); - } else { - var img = document.createElement("img"); - img.onerror = iconError; - img.onmousedown = clickfunc; - img.src = storedimages[part[1]]; - img.id = part[1]; - table.appendChild(img); - } - var b = document.createElement("div"); - var clickcatcher = ""; - b.className = "link"; - b.onmousedown = clickfunc; - b.textContent = part[0]; - table.appendChild(b); - table.appendChild(document.createElement("br")); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ''; + var table = document.createElement('table'); + for (var i = 0; i < turfcontents.length; i++) { + var part = turfcontents[i]; + var clickfunc = ((part) => { + // The outer function is used to close over a fresh "part" variable, + // rather than every onmousedown getting the "part" of the last entry. + return (e) => { + e.preventDefault(); + clickcatcher = 'byond://?src=' + part[1]; + switch (e.button) { + case 1: + clickcatcher += ';statpanel_item_click=middle'; + break; + case 2: + clickcatcher += ';statpanel_item_click=right'; + break; + default: + clickcatcher += ';statpanel_item_click=left'; + } + if (e.shiftKey) { + clickcatcher += ';statpanel_item_shiftclick=1'; + } + if (e.ctrlKey) { + clickcatcher += ';statpanel_item_ctrlclick=1'; + } + if (e.altKey) { + clickcatcher += ';statpanel_item_altclick=1'; + } + window.location.href = clickcatcher; + }; + })(part); + if (storedimages[part[1]] == null && part[2]) { + var img = document.createElement('img'); + img.src = part[2]; + img.id = part[1]; + storedimages[part[1]] = part[2]; + img.onerror = iconError; + img.onmousedown = clickfunc; + table.appendChild(img); + } else { + var img = document.createElement('img'); + img.onerror = iconError; + img.onmousedown = clickfunc; + img.src = storedimages[part[1]]; + img.id = part[1]; + table.appendChild(img); + } + var b = document.createElement('div'); + var clickcatcher = ''; + b.className = 'link'; + b.onmousedown = clickfunc; + b.textContent = part[0]; + table.appendChild(b); + table.appendChild(document.createElement('br')); + } + document.getElementById('statcontent').appendChild(table); } function remove_listedturf() { - removePermanentTab(turfname); - checkStatusTab(); - if (current_tab == turfname) { - tab_change("Status"); - } + removePermanentTab(turfname); + checkStatusTab(); + if (current_tab == turfname) { + tab_change(defaultTab); + } } function remove_mc() { - removePermanentTab("MC"); - if (current_tab == "MC") { - tab_change("Status"); - } -}; + removePermanentTab('MC'); + if (current_tab == 'MC') { + tab_change(defaultTab); + } +} function draw_sdql2() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < sdql2.length; i++) { - var part = sdql2[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href="byond://?src=" + part[2] + ";statpanel_item_click=left"; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ''; + var table = document.createElement('table'); + for (var i = 0; i < sdql2.length; i++) { + var part = sdql2[i]; + var tr = document.createElement('tr'); + var td1 = document.createElement('td'); + td1.textContent = part[0]; + var td2 = document.createElement('td'); + if (part[2]) { + var a = document.createElement('a'); + a.href = 'byond://?src=' + part[2] + ';statpanel_item_click=left'; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table); } function draw_tickets() { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - if (!tickets) { - return; - } - for (var i = 0; i < tickets.length; i++) { - var part = tickets[i]; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[0]; - var td2 = document.createElement("td"); - if (part[2]) { - var a = document.createElement("a"); - a.href="byond://?_src_=holder;ahelp=" + part[2] + ";ahelp_action=ticket;statpanel_item_click=left;action=ticket"; - a.textContent = part[1]; - td2.appendChild(a); - } else if (part[3]) { - var a = document.createElement("a"); - a.href="byond://?src=" + part[3] + ";statpanel_item_click=left"; - a.textContent = part[1]; - td2.appendChild(a); - } else { - td2.textContent = part[1]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + statcontentdiv.textContent = ''; + var table = document.createElement('table'); + if (!tickets) { + return; + } + for (var i = 0; i < tickets.length; i++) { + var part = tickets[i]; + var tr = document.createElement('tr'); + var td1 = document.createElement('td'); + td1.textContent = part[0]; + var td2 = document.createElement('td'); + if (part[2]) { + var a = document.createElement('a'); + a.href = + 'byond://?_src_=holder;admin_token=' + + href_token + + ';ahelp=' + + part[2] + + ';ahelp_action=ticket;statpanel_item_click=left;action=ticket'; + a.textContent = part[1]; + td2.appendChild(a); + } else if (part[3]) { + var a = document.createElement('a'); + a.href = 'byond://?src=' + part[3] + ';statpanel_item_click=left'; + a.textContent = part[1]; + td2.appendChild(a); + } else { + td2.textContent = part[1]; + } + tr.appendChild(td1); + tr.appendChild(td2); + table.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table); } function draw_interviews() { - var body = document.createElement("div"); - var header = document.createElement("h3"); - header.textContent = "Interviews"; - body.appendChild(header); - var manDiv = document.createElement("div"); - manDiv.className = "interview_panel_controls" - var manLink = document.createElement("a"); - manLink.textContent = "Open Interview Manager Panel"; - manLink.href="byond://?_src_=holder;interview_man=1;statpanel_item_click=left"; - manDiv.appendChild(manLink); - body.appendChild(manDiv); + var body = document.createElement('div'); + var header = document.createElement('h3'); + header.textContent = 'Interviews'; + body.appendChild(header); + var manDiv = document.createElement('div'); + manDiv.className = 'interview_panel_controls'; + var manLink = document.createElement('a'); + manLink.textContent = 'Open Interview Manager Panel'; + manLink.href = + 'byond://?_src_=holder;admin_token=' + + href_token + + ';interview_man=1;statpanel_item_click=left'; + manDiv.appendChild(manLink); + body.appendChild(manDiv); - // List interview stats - var statsDiv = document.createElement("table"); - statsDiv.className = "interview_panel_stats"; - for (var key in interviewManager.status) { - var d = document.createElement("div"); - var tr = document.createElement("tr"); - var stat_name = document.createElement("td"); - var stat_text = document.createElement("td"); - stat_name.textContent = key; - stat_text.textContent = interviewManager.status[key]; - tr.appendChild(stat_name); - tr.appendChild(stat_text); - statsDiv.appendChild(tr); - } - body.appendChild(statsDiv); - document.getElementById("statcontent").appendChild(body); + // List interview stats + var statsDiv = document.createElement('table'); + statsDiv.className = 'interview_panel_stats'; + for (var key in interviewManager.status) { + var d = document.createElement('div'); + var tr = document.createElement('tr'); + var stat_name = document.createElement('td'); + var stat_text = document.createElement('td'); + stat_name.textContent = key; + stat_text.textContent = interviewManager.status[key]; + tr.appendChild(stat_name); + tr.appendChild(stat_text); + statsDiv.appendChild(tr); + } + body.appendChild(statsDiv); + document.getElementById('statcontent').appendChild(body); - // List interviews if any are open - var table = document.createElement("table"); - table.className = "interview_panel_table"; - if (!interviewManager) { - return; - } - for (var i = 0; i < interviewManager.interviews.length; i++) { - var part = interviewManager.interviews[i]; - var tr = document.createElement("tr"); - var td = document.createElement("td"); - var a = document.createElement("a"); - a.textContent = part["status"]; - a.href="byond://?_src_=holder;interview=" + part["ref"] + ";statpanel_item_click=left"; - td.appendChild(a); - tr.appendChild(td); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); -} - -function draw_spells(cat) { - statcontentdiv.textContent = ""; - var table = document.createElement("table"); - for (var i = 0; i < spells.length; i++) { - var part = spells[i]; - if (part[0] != cat) continue; - var tr = document.createElement("tr"); - var td1 = document.createElement("td"); - td1.textContent = part[1]; - var td2 = document.createElement("td"); - if (part[3]) { - var a = document.createElement("a"); - a.href="byond://?src=" + part[3] + ";statpanel_item_click=left"; - a.textContent = part[2]; - td2.appendChild(a); - } else { - td2.textContent = part[2]; - } - tr.appendChild(td1); - tr.appendChild(td2); - table.appendChild(tr); - } - document.getElementById("statcontent").appendChild(table); + // List interviews if any are open + var table = document.createElement('table'); + table.className = 'interview_panel_table'; + if (!interviewManager) { + return; + } + for (var i = 0; i < interviewManager.interviews.length; i++) { + var part = interviewManager.interviews[i]; + var tr = document.createElement('tr'); + var td = document.createElement('td'); + var a = document.createElement('a'); + a.textContent = part['status']; + a.href = + 'byond://?_src_=holder;admin_token=' + + href_token + + ';interview=' + + part['ref'] + + ';statpanel_item_click=left'; + td.appendChild(a); + tr.appendChild(td); + table.appendChild(tr); + } + document.getElementById('statcontent').appendChild(table); } function make_verb_onclick(command) { - return function () { - run_after_focus(function () { - Byond.command(command); - }); - }; + return () => { + run_after_focus(() => { + Byond.command(command); + }); + }; } function draw_verbs(cat) { - statcontentdiv.textContent = ""; - var table = document.createElement("div"); - var additions = {}; // additional sub-categories to be rendered - table.className = "grid-container"; - sortVerbs(); - if (split_admin_tabs && cat.lastIndexOf(".") != -1) { - var splitName = cat.split("."); - if (splitName[0] === "Admin") - cat = splitName[1]; - } - verbs.reverse(); // sort verbs backwards before we draw - for (var i = 0; i < verbs.length; ++i) { - var part = verbs[i]; - var name = part[0]; - if (split_admin_tabs && name.lastIndexOf(".") != -1) { - var splitName = name.split("."); - if (splitName[0] === "Admin") - name = splitName[1]; - } - var command = part[1]; + statcontentdiv.textContent = ''; + var table = document.createElement('div'); + var additions = {}; // additional sub-categories to be rendered + table.className = 'grid-container'; + sortVerbs(); + if (split_admin_tabs && cat.lastIndexOf('.') != -1) { + var splitName = cat.split('.'); + if (splitName[0] === 'Admin') cat = splitName[1]; + } + verbs.reverse(); // sort verbs backwards before we draw + for (var i = 0; i < verbs.length; ++i) { + var part = verbs[i]; + var name = part[0]; + if (split_admin_tabs && name.lastIndexOf('.') != -1) { + var splitName = name.split('.'); + if (splitName[0] === 'Admin') name = splitName[1]; + } + var command = part[1]; - if (command && name.lastIndexOf(cat, 0) != -1 && (name.length == cat.length || name.charAt(cat.length) == ".")) { - var subCat = name.lastIndexOf(".") != -1 ? name.split(".")[1] : null; - if (subCat && !additions[subCat]) { - var newTable = document.createElement("div"); - newTable.className = "grid-container"; - additions[subCat] = newTable; - } + if ( + command && + name.lastIndexOf(cat, 0) != -1 && + (name.length == cat.length || name.charAt(cat.length) == '.') + ) { + var subCat = name.lastIndexOf('.') != -1 ? name.split('.')[1] : null; + if (subCat && !additions[subCat]) { + var newTable = document.createElement('div'); + newTable.className = 'grid-container'; + additions[subCat] = newTable; + } - var a = document.createElement("a"); - a.href = "#"; - a.onclick = make_verb_onclick(command.replace(/\s/g, "-")); - a.className = "grid-item"; - var t = document.createElement("span"); - t.textContent = command; - t.className = "grid-item-text"; - a.appendChild(t); - (subCat ? additions[subCat] : table).appendChild(a); - } - } + var a = document.createElement('a'); + a.href = '#'; + a.onclick = make_verb_onclick(command.replace(/\s/g, '-')); + a.className = 'grid-item'; + var t = document.createElement('span'); + t.textContent = command; + t.className = 'grid-item-text'; + a.appendChild(t); + (subCat ? additions[subCat] : table).appendChild(a); + } + } - // Append base table to view - var content = document.getElementById("statcontent"); - content.appendChild(table); + // Append base table to view + var content = document.getElementById('statcontent'); + content.appendChild(table); - // Append additional sub-categories if relevant - for (var cat in additions) { - if (additions.hasOwnProperty(cat)) { - // do addition here - var header = document.createElement("h3"); - header.textContent = cat; - content.appendChild(header); - content.appendChild(additions[cat]); - } - } + // Append additional sub-categories if relevant + for (var cat in additions) { + if (Object.hasOwn(additions, cat)) { + // do addition here + var header = document.createElement('h3'); + header.textContent = cat; + content.appendChild(header); + content.appendChild(additions[cat]); + } + } } function set_theme(which) { - if (which == "light") { - document.body.className = ""; - document.documentElement.className = "light"; - set_style_sheet("browserOutput_white"); - } else if (which == "dark") { - document.body.className = "dark"; - document.documentElement.className = "dark"; - set_style_sheet("browserOutput"); - } + if (which == 'light') { + document.body.className = ''; + document.documentElement.className = 'light'; + } else if (which == 'dark') { + document.body.className = 'dark'; + document.documentElement.className = 'dark'; + } } -function set_style_sheet(sheet) { - if (document.getElementById("goonStyle")) { - var currentSheet = document.getElementById("goonStyle"); - currentSheet.parentElement.removeChild(currentSheet); - } - var head = document.getElementsByTagName('head')[0]; - var sheetElement = document.createElement("link"); - sheetElement.id = "goonStyle"; - sheetElement.rel = "stylesheet"; - sheetElement.type = "text/css"; - sheetElement.href = sheet + ".css"; - sheetElement.media = 'all'; - head.appendChild(sheetElement); +function set_font_size(size) { + document.body.style.setProperty('font-size', size); +} + +function set_tabs_style(style) { + if (style == 'default') { + menu.classList.add('menu-wrap'); + menu.classList.remove('tabs-classic'); + } else if (style == 'classic') { + menu.classList.add('menu-wrap'); + menu.classList.add('tabs-classic'); + } else if (style == 'scrollable') { + menu.classList.remove('menu-wrap'); + menu.classList.remove('tabs-classic'); + } } function restoreFocus() { - run_after_focus(function () { - Byond.winset('map', { - focus: true, - }); - }); + run_after_focus(() => { + Byond.winset('map', { + focus: true, + }); + }); } function getCookie(cname) { - var name = cname + '='; - var ca = document.cookie.split(';'); - for (var i = 0; i < ca.length; i++) { - var c = ca[i]; - while (c.charAt(0) == ' ') c = c.substring(1); - if (c.indexOf(name) === 0) { - return decoder(c.substring(name.length, c.length)); - } - } - return ''; + var name = cname + '='; + var ca = document.cookie.split(';'); + for (var i = 0; i < ca.length; i++) { + var c = ca[i]; + while (c.charAt(0) == ' ') c = c.substring(1); + if (c.indexOf(name) === 0) { + return decoder(c.substring(name.length, c.length)); + } + } + return ''; } function add_verb_list(payload) { - var to_add = payload; // list of a list with category and verb inside it - to_add.sort(); // sort what we're adding - for (var i = 0; i < to_add.length; i++) { - var part = to_add[i]; - if (!part[0]) - continue; - var category = part[0]; - if (category.indexOf(".") != -1) { - var splitName = category.split("."); - if (split_admin_tabs && splitName[0] === "Admin") - category = splitName[1]; - else - category = splitName[0]; - } - if (findVerbindex(part[1], verbs)) - continue; - if (verb_tabs.includes(category)) { - verbs.push(part); - if (current_tab == category) { - draw_verbs(category); // redraw if we added a verb to the tab we're currently in - } - } else if (category) { - verb_tabs.push(category); - verbs.push(part); - createStatusTab(category); - } - } -}; - -function init_spells() { - var cat = ""; - for (var i = 0; i < spell_tabs.length; i++) { - cat = spell_tabs[i]; - if (cat.length > 0) { - verb_tabs.push(cat); - createStatusTab(cat); - } - } + var to_add = payload; // list of a list with category and verb inside it + to_add.sort(); // sort what we're adding + for (var i = 0; i < to_add.length; i++) { + var part = to_add[i]; + if (!part[0]) continue; + var category = part[0]; + if (category.indexOf('.') != -1) { + var splitName = category.split('.'); + if (split_admin_tabs && splitName[0] === 'Admin') category = splitName[1]; + else category = splitName[0]; + } + if (findVerbindex(part[1], verbs)) continue; + if (verb_tabs.includes(category)) { + verbs.push(part); + if (current_tab == category) { + draw_verbs(category); // redraw if we added a verb to the tab we're currently in + } + } else if (category) { + verb_tabs.push(category); + verbs.push(part); + createStatusTab(category); + } + } } -document.addEventListener("mouseup", restoreFocus); -document.addEventListener("keyup", restoreFocus); +document.addEventListener('mouseup', restoreFocus); +document.addEventListener('keyup', restoreFocus); if (!current_tab) { - addPermanentTab("Status"); - tab_change("Status"); + addPermanentTab(defaultTab); + tab_change(defaultTab); } -window.onload = function () { - Byond.sendMessage("Update-Verbs"); +window.onload = () => { + Byond.sendMessage('Update-Verbs'); }; -Byond.subscribeTo('update_spells', function (payload) { - spell_tabs = payload.spell_tabs; - var do_update = false; - if (spell_tabs.includes(current_tab)) { - do_update = true; - } - init_spells(); - if (payload.actions) { - spells = payload.actions; - if (do_update) { - draw_spells(current_tab); - } - } else { - remove_spells(); - } -}); - -Byond.subscribeTo('remove_verb_list', function (v) { - var to_remove = v; - for (var i = 0; i < to_remove.length; i++) { - remove_verb(to_remove[i]); - } - check_verbs(); - sortVerbs(); - if (verb_tabs.includes(current_tab)) - draw_verbs(current_tab); +Byond.subscribeTo('remove_verb_list', (v) => { + var to_remove = v; + for (var i = 0; i < to_remove.length; i++) { + remove_verb(to_remove[i]); + } + check_verbs(); + sortVerbs(); + if (verb_tabs.includes(current_tab)) draw_verbs(current_tab); }); // passes a 2D list of (verbcategory, verbname) creates tabs and adds verbs to respective list // example (IC, Say) -Byond.subscribeTo('init_verbs', function (payload) { - wipe_verbs(); // remove all verb categories so we can replace them - checkStatusTab(); // remove all status tabs - verb_tabs = payload.panel_tabs; - verb_tabs.sort(); // sort it - var do_update = false; - var cat = ""; - for (var i = 0; i < verb_tabs.length; i++) { - cat = verb_tabs[i]; - createStatusTab(cat); // create a category if the verb doesn't exist yet - } - if (verb_tabs.includes(current_tab)) { - do_update = true; - } - if (payload.verblist) { - add_verb_list(payload.verblist); - sortVerbs(); // sort them - if (do_update) { - draw_verbs(current_tab); - } - } - SendTabsToByond(); +Byond.subscribeTo('init_verbs', (payload) => { + wipe_verbs(); // remove all verb categories so we can replace them + checkStatusTab(); // remove all status tabs + verb_tabs = payload.panel_tabs; + verb_tabs.sort(); // sort it + var do_update = false; + var cat = ''; + for (var i = 0; i < verb_tabs.length; i++) { + cat = verb_tabs[i]; + createStatusTab(cat); // create a category if the verb doesn't exist yet + } + if (verb_tabs.includes(current_tab)) { + do_update = true; + } + if (payload.verblist) { + add_verb_list(payload.verblist); + sortVerbs(); // sort them + if (do_update) { + draw_verbs(current_tab); + } + } + SendTabsToByond(); }); -Byond.subscribeTo('update_stat', function (payload) { - status_tab_parts = [payload.ping_str]; - var parsed = payload.global_data; +Byond.subscribeTo('update_stat', (payload) => { + status_tab_parts = []; - for (var i = 0; i < parsed.length; i++) if (parsed[i] != null) status_tab_parts.push(parsed[i]); + var parsed = payload.global_data; - parsed = payload.other_str; + for (var i = 0; i < parsed.length; i++) + if (parsed[i] != null) status_tab_parts.push(parsed[i]); - for (var i = 0; i < parsed.length; i++) if (parsed[i] != null) status_tab_parts.push(parsed[i]); + parsed = payload.other_str; - if (current_tab == "Status") { - draw_status(); - } else if (current_tab == "Debug Stat Panel") { - draw_debug(); - } + for (var i = 0; i < parsed.length; i++) + if (parsed[i] != null) status_tab_parts.push(parsed[i]); + + if (current_tab == 'Status') { + draw_status(); + } else if (current_tab == 'Debug Stat Panel') { + draw_debug(); + } }); -Byond.subscribeTo('update_mc', function (payload) { - mc_tab_parts = payload.mc_data; - mc_tab_parts.splice(0, 0, ["Location:", payload.coord_entry]); +Byond.subscribeTo('update_mc', (payload) => { + mc_tab_parts = payload.mc_data; + mc_tab_parts.splice(0, 0, ['', 'Location:', payload.coord_entry]); - if (!verb_tabs.includes("MC")) { - verb_tabs.push("MC"); - } + if (!verb_tabs.includes('MC')) { + verb_tabs.push('MC'); + } - createStatusTab("MC"); + createStatusTab('MC'); - if (current_tab == "MC") { - draw_mc(); - } + if (current_tab == 'MC') { + draw_mc(); + } }); -Byond.subscribeTo('remove_spells', function () { - for (var s = 0; s < spell_tabs.length; s++) { - removeStatusTab(spell_tabs[s]); - } +Byond.subscribeTo('create_debug', () => { + if (!document.getElementById('Debug Stat Panel')) { + addPermanentTab('Debug Stat Panel'); + } else { + removePermanentTab('Debug Stat Panel'); + } }); -Byond.subscribeTo('init_spells', function () { - var cat = ""; - for (var i = 0; i < spell_tabs.length; i++) { - cat = spell_tabs[i]; - if (cat.length > 0) { - verb_tabs.push(cat); - createStatusTab(cat); - } - } +Byond.subscribeTo('create_listedturf', (TN) => { + remove_listedturf(); // remove the last one if we had one + turfname = TN; + addPermanentTab(turfname); + tab_change(turfname); }); -Byond.subscribeTo('check_spells', function () { - for (var v = 0; v < spell_tabs.length; v++) { - spell_cat_check(spell_tabs[v]); - } +Byond.subscribeTo('remove_admin_tabs', () => { + href_token = null; + remove_mc(); + remove_tickets(); + remove_sdql2(); + remove_interviews(); }); -Byond.subscribeTo('create_debug', function () { - if (!document.getElementById("Debug Stat Panel")) { - addPermanentTab("Debug Stat Panel"); - } else { - removePermanentTab("Debug Stat Panel"); - } +Byond.subscribeTo('update_listedturf', (TC) => { + turfcontents = TC; + if (current_tab == turfname) { + draw_listedturf(); + } }); -Byond.subscribeTo('create_listedturf', function (TN) { - remove_listedturf(); // remove the last one if we had one - turfname = TN; - addPermanentTab(turfname); - tab_change(turfname); +Byond.subscribeTo('update_interviews', (I) => { + interviewManager = I; + if (current_tab == 'Tickets') { + draw_interviews(); + } }); -Byond.subscribeTo('remove_admin_tabs', function () { - remove_mc(); - remove_sdql2(); +Byond.subscribeTo('update_split_admin_tabs', (status) => { + status = status == true; + + if (split_admin_tabs !== status) { + if (split_admin_tabs === true) { + removeStatusTab('Events'); + removeStatusTab('Fun'); + removeStatusTab('Game'); + } + update_verbs(); + } + split_admin_tabs = status; }); -Byond.subscribeTo('update_listedturf', function (TC) { - turfcontents = TC; - if (current_tab == turfname) { - draw_listedturf(); - } +Byond.subscribeTo('add_admin_tabs', (ht) => { + href_token = ht; + addPermanentTab('MC'); + addPermanentTab('Tickets'); }); -Byond.subscribeTo('update_split_admin_tabs', function (status) { - status = (status == true); - - if (split_admin_tabs !== status) { - if (split_admin_tabs === true) { - removeStatusTab("Events"); - removeStatusTab("Fun"); - removeStatusTab("Game"); - } - update_verbs(); - } - split_admin_tabs = status; +Byond.subscribeTo('update_sdql2', (S) => { + sdql2 = S; + if (sdql2.length > 0 && !verb_tabs.includes('SDQL2')) { + verb_tabs.push('SDQL2'); + addPermanentTab('SDQL2'); + } + if (current_tab == 'SDQL2') { + draw_sdql2(); + } }); -Byond.subscribeTo('add_admin_tabs', function () { - addPermanentTab("MC"); +Byond.subscribeTo('update_tickets', (T) => { + tickets = T; + if (!verb_tabs.includes('Tickets')) { + verb_tabs.push('Tickets'); + addPermanentTab('Tickets'); + } + if (current_tab == 'Tickets') { + draw_tickets(); + } }); -Byond.subscribeTo('update_sdql2', function (S) { - sdql2 = S; - if (sdql2.length > 0 && !verb_tabs.includes("SDQL2")) { - verb_tabs.push("SDQL2"); - addPermanentTab("SDQL2"); - } - if (current_tab == "SDQL2") { - draw_sdql2(); - } -}); Byond.subscribeTo('remove_listedturf', remove_listedturf); Byond.subscribeTo('remove_sdql2', remove_sdql2); diff --git a/nano/TemplatesGuide.txt b/nano/TemplatesGuide.txt deleted file mode 100644 index cbfb9241771..00000000000 --- a/nano/TemplatesGuide.txt +++ /dev/null @@ -1,10 +0,0 @@ --------------------------------- -Nano UI Template Guide --------------------------------- - -Nano UI uses templates, which are comprised of HTML and a markup syntax. The markup allows you -to easily add conditionals (if statements), loops (for loops) and custom formatting (using helpers). - -Templates are stored in the /nano/templates folder and the file extension is .tmpl. - -This guide is being replaced with a wiki entry, found here: https://bay.ss13.me/en/Guides/coderbus/nanoui diff --git a/nano/To BYOND Cache.bat b/nano/To BYOND Cache.bat deleted file mode 100644 index 486b8d1beaa..00000000000 --- a/nano/To BYOND Cache.bat +++ /dev/null @@ -1,4 +0,0 @@ -copy css\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy images\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy js\* "%USERPROFILE%\Documents\BYOND\cache" /y -copy templates\* "%USERPROFILE%\Documents\BYOND\cache" /y diff --git a/nano/css/icons.css b/nano/css/icons.css deleted file mode 100644 index cb2fd42a250..00000000000 --- a/nano/css/icons.css +++ /dev/null @@ -1,315 +0,0 @@ -/* Icons -----------------------------------*/ - -.icon24 -{ - width: 24px; - height: 24px; -} - -.icon24.uiStatusGood -{ - background: url(uiIcons24.png) 0 0 no-repeat; -} - -.icon24.uiStatusAverage -{ - background: url(uiIcons24.png) 0 -24px no-repeat; -} - -.icon24.uiStatusBad -{ - background: url(uiIcons24.png) 0 -48px no-repeat; -} - -/* states and images */ -.uiIcon16 { - float: left; - width: 16px; - height: 16px; - margin: 2px 2px 0 2px; - background-image: url(uiIcons16.png); -} - -.uiLinkPendingIcon { - display: none; - float: left; - width: 16px; - height: 16px; - margin: 2px 2px 0 2px; - background-image: url(uiLinkPendingIcon.gif); -} - -.linkPending .uiIcon16 { - display: none; -} - -.linkPending .uiLinkPendingIcon { - display: block; -} - -/* positioning */ -.uiIcon16.icon-blank { background-position: 16px 16px; } -.uiIcon16.icon-carat-1-n { background-position: 0 0; } -.uiIcon16.icon-carat-1-ne { background-position: -16px 0; } -.uiIcon16.icon-carat-1-e { background-position: -32px 0; } -.uiIcon16.icon-carat-1-se { background-position: -48px 0; } -.uiIcon16.icon-carat-1-s { background-position: -64px 0; } -.uiIcon16.icon-carat-1-sw { background-position: -80px 0; } -.uiIcon16.icon-carat-1-w { background-position: -96px 0; } -.uiIcon16.icon-carat-1-nw { background-position: -112px 0; } -.uiIcon16.icon-carat-2-n-s { background-position: -128px 0; } -.uiIcon16.icon-carat-2-e-w { background-position: -144px 0; } -.uiIcon16.icon-triangle-1-n { background-position: 0 -16px; } -.uiIcon16.icon-triangle-1-ne { background-position: -16px -16px; } -.uiIcon16.icon-triangle-1-e { background-position: -32px -16px; } -.uiIcon16.icon-triangle-1-se { background-position: -48px -16px; } -.uiIcon16.icon-triangle-1-s { background-position: -64px -16px; } -.uiIcon16.icon-triangle-1-sw { background-position: -80px -16px; } -.uiIcon16.icon-triangle-1-w { background-position: -96px -16px; } -.uiIcon16.icon-triangle-1-nw { background-position: -112px -16px; } -.uiIcon16.icon-triangle-2-n-s { background-position: -128px -16px; } -.uiIcon16.icon-triangle-2-e-w { background-position: -144px -16px; } -.uiIcon16.icon-arrow-1-n { background-position: 0 -32px; } -.uiIcon16.icon-arrow-1-ne { background-position: -16px -32px; } -.uiIcon16.icon-arrow-1-e { background-position: -32px -32px; } -.uiIcon16.icon-arrow-1-se { background-position: -48px -32px; } -.uiIcon16.icon-arrow-1-s { background-position: -64px -32px; } -.uiIcon16.icon-arrow-1-sw { background-position: -80px -32px; } -.uiIcon16.icon-arrow-1-w { background-position: -96px -32px; } -.uiIcon16.icon-arrow-1-nw { background-position: -112px -32px; } -.uiIcon16.icon-arrow-2-n-s { background-position: -128px -32px; } -.uiIcon16.icon-arrow-2-ne-sw { background-position: -144px -32px; } -.uiIcon16.icon-arrow-2-e-w { background-position: -160px -32px; } -.uiIcon16.icon-arrow-2-se-nw { background-position: -176px -32px; } -.uiIcon16.icon-arrowstop-1-n { background-position: -192px -32px; } -.uiIcon16.icon-arrowstop-1-e { background-position: -208px -32px; } -.uiIcon16.icon-arrowstop-1-s { background-position: -224px -32px; } -.uiIcon16.icon-arrowstop-1-w { background-position: -240px -32px; } -.uiIcon16.icon-arrowthick-1-n { background-position: 0 -48px; } -.uiIcon16.icon-arrowthick-1-ne { background-position: -16px -48px; } -.uiIcon16.icon-arrowthick-1-e { background-position: -32px -48px; } -.uiIcon16.icon-arrowthick-1-se { background-position: -48px -48px; } -.uiIcon16.icon-arrowthick-1-s { background-position: -64px -48px; } -.uiIcon16.icon-arrowthick-1-sw { background-position: -80px -48px; } -.uiIcon16.icon-arrowthick-1-w { background-position: -96px -48px; } -.uiIcon16.icon-arrowthick-1-nw { background-position: -112px -48px; } -.uiIcon16.icon-arrowthick-2-n-s { background-position: -128px -48px; } -.uiIcon16.icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.uiIcon16.icon-arrowthick-2-e-w { background-position: -160px -48px; } -.uiIcon16.icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.uiIcon16.icon-arrowthickstop-1-n { background-position: -192px -48px; } -.uiIcon16.icon-arrowthickstop-1-e { background-position: -208px -48px; } -.uiIcon16.icon-arrowthickstop-1-s { background-position: -224px -48px; } -.uiIcon16.icon-arrowthickstop-1-w { background-position: -240px -48px; } -.uiIcon16.icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.uiIcon16.icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.uiIcon16.icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.uiIcon16.icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.uiIcon16.icon-arrowreturn-1-w { background-position: -64px -64px; } -.uiIcon16.icon-arrowreturn-1-n { background-position: -80px -64px; } -.uiIcon16.icon-arrowreturn-1-e { background-position: -96px -64px; } -.uiIcon16.icon-arrowreturn-1-s { background-position: -112px -64px; } -.uiIcon16.icon-arrowrefresh-1-w { background-position: -128px -64px; } -.uiIcon16.icon-arrowrefresh-1-n { background-position: -144px -64px; } -.uiIcon16.icon-arrowrefresh-1-e { background-position: -160px -64px; } -.uiIcon16.icon-arrowrefresh-1-s { background-position: -176px -64px; } -.uiIcon16.icon-arrow-4 { background-position: 0 -80px; } -.uiIcon16.icon-arrow-4-diag { background-position: -16px -80px; } -.uiIcon16.icon-extlink { background-position: -32px -80px; } -.uiIcon16.icon-newwin { background-position: -48px -80px; } -.uiIcon16.icon-refresh { background-position: -64px -80px; } -.uiIcon16.icon-shuffle { background-position: -80px -80px; } -.uiIcon16.icon-transfer-e-w { background-position: -96px -80px; } -.uiIcon16.icon-transferthick-e-w { background-position: -112px -80px; } -.uiIcon16.icon-radiation { background-position: -128px -80px; } -.uiIcon16.icon-folder-collapsed { background-position: 0 -96px; } -.uiIcon16.icon-folder-open { background-position: -16px -96px; } -.uiIcon16.icon-document { background-position: -32px -96px; } -.uiIcon16.icon-document-b { background-position: -48px -96px; } -.uiIcon16.icon-note { background-position: -64px -96px; } -.uiIcon16.icon-mail-closed { background-position: -80px -96px; } -.uiIcon16.icon-mail-open { background-position: -96px -96px; } -.uiIcon16.icon-suitcase { background-position: -112px -96px; } -.uiIcon16.icon-comment { background-position: -128px -96px; } -.uiIcon16.icon-person { background-position: -144px -96px; } -.uiIcon16.icon-print { background-position: -160px -96px; } -.uiIcon16.icon-trash { background-position: -176px -96px; } -.uiIcon16.icon-locked { background-position: -192px -96px; } -.uiIcon16.icon-unlocked { background-position: -208px -96px; } -.uiIcon16.icon-bookmark { background-position: -224px -96px; } -.uiIcon16.icon-tag { background-position: -240px -96px; } -.uiIcon16.icon-home { background-position: 0 -112px; } -.uiIcon16.icon-flag { background-position: -16px -112px; } -.uiIcon16.icon-calendar { background-position: -32px -112px; } -.uiIcon16.icon-cart { background-position: -48px -112px; } -.uiIcon16.icon-pencil { background-position: -64px -112px; } -.uiIcon16.icon-clock { background-position: -80px -112px; } -.uiIcon16.icon-disk { background-position: -96px -112px; } -.uiIcon16.icon-calculator { background-position: -112px -112px; } -.uiIcon16.icon-zoomin { background-position: -128px -112px; } -.uiIcon16.icon-zoomout { background-position: -144px -112px; } -.uiIcon16.icon-search { background-position: -160px -112px; } -.uiIcon16.icon-wrench { background-position: -176px -112px; } -.uiIcon16.icon-gear { background-position: -192px -112px; } -.uiIcon16.icon-heart { background-position: -208px -112px; } -.uiIcon16.icon-star { background-position: -224px -112px; } -.uiIcon16.icon-link { background-position: -240px -112px; } -.uiIcon16.icon-cancel { background-position: 0 -128px; } -.uiIcon16.icon-plus { background-position: -16px -128px; } -.uiIcon16.icon-plusthick { background-position: -32px -128px; } -.uiIcon16.icon-minus { background-position: -48px -128px; } -.uiIcon16.icon-minusthick { background-position: -64px -128px; } -.uiIcon16.icon-close { background-position: -80px -128px; } -.uiIcon16.icon-closethick { background-position: -96px -128px; } -.uiIcon16.icon-key { background-position: -112px -128px; } -.uiIcon16.icon-lightbulb { background-position: -128px -128px; } -.uiIcon16.icon-scissors { background-position: -144px -128px; } -.uiIcon16.icon-clipboard { background-position: -160px -128px; } -.uiIcon16.icon-copy { background-position: -176px -128px; } -.uiIcon16.icon-contact { background-position: -192px -128px; } -.uiIcon16.icon-image { background-position: -208px -128px; } -.uiIcon16.icon-video { background-position: -224px -128px; } -.uiIcon16.icon-script { background-position: -240px -128px; } -.uiIcon16.icon-alert { background-position: 0 -144px; } -.uiIcon16.icon-info { background-position: -16px -144px; } -.uiIcon16.icon-notice { background-position: -32px -144px; } -.uiIcon16.icon-help { background-position: -48px -144px; } -.uiIcon16.icon-check { background-position: -64px -144px; } -.uiIcon16.icon-bullet { background-position: -80px -144px; } -.uiIcon16.icon-radio-on { background-position: -96px -144px; } -.uiIcon16.icon-radio-off { background-position: -112px -144px; } -.uiIcon16.icon-pin-w { background-position: -128px -144px; } -.uiIcon16.icon-pin-s { background-position: -144px -144px; } -.uiIcon16.icon-night { background-position: -160px -144px; } -.uiIcon16.icon-play { background-position: 0 -160px; } -.uiIcon16.icon-pause { background-position: -16px -160px; } -.uiIcon16.icon-seek-next { background-position: -32px -160px; } -.uiIcon16.icon-seek-prev { background-position: -48px -160px; } -.uiIcon16.icon-seek-end { background-position: -64px -160px; } -.uiIcon16.icon-seek-start { background-position: -80px -160px; } -/* uiIcon-seek-first is deprecated, use uiIcon-seek-start instead */ -.uiIcon16.icon-seek-first { background-position: -80px -160px; } -.uiIcon16.icon-stop { background-position: -96px -160px; } -.uiIcon16.icon-eject { background-position: -112px -160px; } -.uiIcon16.icon-volume-off { background-position: -128px -160px; } -.uiIcon16.icon-volume-on { background-position: -144px -160px; } -.uiIcon16.icon-power { background-position: 0 -176px; } -.uiIcon16.icon-signal-diag { background-position: -16px -176px; } -.uiIcon16.icon-signal { background-position: -32px -176px; } -.uiIcon16.icon-battery-0 { background-position: -48px -176px; } -.uiIcon16.icon-battery-1 { background-position: -64px -176px; } -.uiIcon16.icon-battery-2 { background-position: -80px -176px; } -.uiIcon16.icon-battery-3 { background-position: -96px -176px; } -.uiIcon16.icon-circle-plus { background-position: 0 -192px; } -.uiIcon16.icon-circle-minus { background-position: -16px -192px; } -.uiIcon16.icon-circle-close { background-position: -32px -192px; } -.uiIcon16.icon-circle-triangle-e { background-position: -48px -192px; } -.uiIcon16.icon-circle-triangle-s { background-position: -64px -192px; } -.uiIcon16.icon-circle-triangle-w { background-position: -80px -192px; } -.uiIcon16.icon-circle-triangle-n { background-position: -96px -192px; } -.uiIcon16.icon-circle-arrow-e { background-position: -112px -192px; } -.uiIcon16.icon-circle-arrow-s { background-position: -128px -192px; } -.uiIcon16.icon-circle-arrow-w { background-position: -144px -192px; } -.uiIcon16.icon-circle-arrow-n { background-position: -160px -192px; } -.uiIcon16.icon-circle-zoomin { background-position: -176px -192px; } -.uiIcon16.icon-circle-zoomout { background-position: -192px -192px; } -.uiIcon16.icon-circle-check { background-position: -208px -192px; } -.uiIcon16.icon-circlesmall-plus { background-position: 0 -208px; } -.uiIcon16.icon-circlesmall-minus { background-position: -16px -208px; } -.uiIcon16.icon-circlesmall-close { background-position: -32px -208px; } -.uiIcon16.icon-squaresmall-plus { background-position: -48px -208px; } -.uiIcon16.icon-squaresmall-minus { background-position: -64px -208px; } -.uiIcon16.icon-squaresmall-close { background-position: -80px -208px; } -.uiIcon16.icon-grip-dotted-vertical { background-position: 0 -224px; } -.uiIcon16.icon-grip-dotted-horizontal { background-position: -16px -224px; } -.uiIcon16.icon-grip-solid-vertical { background-position: -32px -224px; } -.uiIcon16.icon-grip-solid-horizontal { background-position: -48px -224px; } -.uiIcon16.icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.uiIcon16.icon-grip-diagonal-se { background-position: -80px -224px; } -.uiIcon16.icon-batt_full { background-image: url(c_max.gif); background-position: 0px 0px } -.uiIcon16.icon-batt_disc { background-image: url(c_discharging.gif); background-position: 0px 0px } -.uiIcon16.icon-batt_chrg { background-image: url(c_charging.gif); background-position: 0px 0px } - -.mapIcon16 { - position: absolute; - width: 16px; - height: 16px; - background-image: url(uiIcons16Green.png); - background-position: -144px -96px; - background-repeat: no-repeat; - zoom: 0.125; - margin-left: -1px; - /*margin-bottom: -1px;*/ -} -.mapIcon16.dead { - background-image: url(uiIcons16Red.png); -} - -/* Command Positions */ -.mapIcon16.rank-captain { - background-position: -224px -112px; -} -.mapIcon16.rank-headofpersonnel { - background-position: -112px -96px; -} -.mapIcon16.rank-headofsecurity { - background-position: -112px -128px; -} -.mapIcon16.rank-chiefengineer { - background-position: -176px -112px; -} -.mapIcon16.rank-researchdirector { - background-position: -128px -128px; -} -.mapIcon16.rank-chiefmedicalofficer { - background-position: -32px -128px; -} - -/* Engineering Positions */ -.mapIcon16.rank-stationengineer { - background-position: -176px -112px; -} -.mapIcon16.rank-atmospherictechnician { - background-position: -176px -112px; -} - -/* Medical Positions */ -.mapIcon16.rank-medicaldoctor { - background-position: -32px -128px; -} -.mapIcon16.rank-geneticist { - background-position: -32px -128px; -} -.mapIcon16.rank-psychiatrist { - background-position: -32px -128px; -} -.mapIcon16.rank-chemist { - background-position: -32px -128px; -} - -/* Science Positions */ -.mapIcon16.rank-scientist { - background-position: -128px -128px; -} -.mapIcon16.rank-geneticist { - background-position: -128px -128px; -} -.mapIcon16.rank-roboticist { - background-position: -128px -128px; -} -.mapIcon16.rank-xenobiologist { - background-position: -128px -128px; -} - -/* Security Positions */ -.mapIcon16.rank-warden { - background-position: -112px -128px; -} -.mapIcon16.rank-detective { - background-position: -112px -128px; -} -.mapIcon16.rank-securityofficer { - background-position: -112px -128px; -} - diff --git a/nano/css/layout_basic.css b/nano/css/layout_basic.css deleted file mode 100644 index 30a75490f39..00000000000 --- a/nano/css/layout_basic.css +++ /dev/null @@ -1,21 +0,0 @@ -body { - background: #272727 url(uiBasicBackground.png) 50% 0 repeat-x; -} - -#uiContent { - clear: both; - padding: 8px; -} - -#uiLoadingNotice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 14px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - - diff --git a/nano/css/layout_default.css b/nano/css/layout_default.css deleted file mode 100644 index 109beb2c72e..00000000000 --- a/nano/css/layout_default.css +++ /dev/null @@ -1,128 +0,0 @@ -body { - background: #272727 url(uiBackground.png) 50% 0 repeat-x; -} - -#uiWrapper { - width: 100%; - height: 100%; - -ms-user-select: none; - user-select: none; -} - -#uiTitleWrapper { - position: relative; - height: 30px; -} - -#uiTitleText { - position: absolute; - top: 6px; - left: 44px; - width: 66%; - overflow: hidden; - color: #E9C183; - font-size: 16px; -} - -#uiTitle.icon { - padding: 6px 8px 6px 42px; - background-position: 2px 50%; - background-repeat: no-repeat; -} - -#uiTitleFluff { - position: absolute; - top: 4px; - right: 12px; - width: 42px; - height: 24px; - background: url(uiTitleFluff.png) 50% 50% no-repeat; -} - -#uiStatusIcon { - position: absolute; - top: 4px; - left: 12px; - width: 24px; - height: 24px; -} - -#uiMapWrapper { - clear: both; - padding: 8px; -} - -#uiMapHeader { - position: relative; - clear: both; -} - -#uiMapContainer { - position: relative; - width: 100%; - height: 600px; - overflow: hidden; - border: 1px solid #40628a; - background: url(nanomapBackground.png); -} - -#uiMap { - position: absolute; - top: 50%; - left: 50%; - margin: -512px 0 0 -512px; - width: 256px; - height: 256px; - overflow: hidden; - zoom: 4; -} - -#uiMapImage { - position: absolute; - bottom: 1px; - left: 1px; - width: 256px; - height: 256px; -} - -#uiMapContent { - position: absolute; - bottom: 0px; - left: 0px; - width: 256px; - height: 256px; -} - -#uiMapFooter { - position: relative; - clear: both; -} - -#uiContent { - clear: both; - padding: 8px; -} - -#uiMapTooltip { - position: absolute; - right: 10px; - top: 10px; - border: 1px solid #40628a; - background-color: #272727; - padding: 8px; - display: none; - z-index: 9999; -} - -#uiLoadingNotice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 14px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - - diff --git a/nano/css/shared.css b/nano/css/shared.css deleted file mode 100644 index fad7c0dcd78..00000000000 --- a/nano/css/shared.css +++ /dev/null @@ -1,599 +0,0 @@ -body { - padding: 0; - margin: 0; - font-size: 12px; - color: #ffffff; - line-height: 170%; - font-family: Verdana, Geneva, sans-serif; - background: #202020; -} - -#uiNoScript { - position: fixed; - top: 50%; - left: 50%; - margin: -60px 0 0 -150px; - width: 280px; - height: 120px; - background: #ffffff; - border: 2px solid #ff0000; - color: #000000; - font-size: 10px; - font-weight: bold; - z-index: 9999; - padding: 0px 10px; - text-align: center; -} - -hr { - background-color: #40628a; - height: 1px; -} - -.link, .linkOn, .linkOff, .selected, .disabled, .yellowButton, .redButton { - float: left; - min-width: 15px; - height: 16px; - text-align: center; - color: #ffffff; - text-decoration: none; - background: #40628a; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 4px; - padding: 0px 4px 4px 4px; - margin: 0 2px 2px 0; - cursor: default; - white-space: nowrap; -} - -.hasIcon { - padding: 0px 4px 4px 0px; -} - -a:hover, .zoomLink:hover, .linkActive:hover { - background: #507aac; -} - -.linkPending, .linkPending:hover { - color: #ffffff; - background: #507aac; -} - -a.white, a.white:link, a.white:visited, a.white:active { - color: #40628a; - text-decoration: none; - background: #ffffff; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 4px; - padding: 1px 4px 1px 4px; - margin: 0 2px 0 0; - cursor: default; -} - -a.white:hover { - color: #ffffff; - background: #40628a; -} - -.hidden { - display: none; -} - -.linkOn, a.linkOn:link, a.linkOn:visited, a.linkOn:active, a.linkOn:hover, .selected, a.selected:link, a.selected:visited, a.selected:active, a.selected:hover { - color: #ffffff; - background: #2f943c; -} - -.linkOff, a.linkOff:link, a.linkOff:visited, a.linkOff:active, a.linkOff:hover, .disabled, a.disabled:link, a.disabled:visited, a.disabled:active, a.disabled:hover { - color: #ffffff; - background: #999999; - border-color: #666666; -} - -a.icon, .linkOn.icon, .linkOff.icon, .selected.icon, .disabled.icon { - position: relative; - padding: 1px 4px 2px 20px; -} - -a.icon img, .linkOn.icon img, .linkOff.icon img, .selected.icon img, .disabled.icon img { - position: absolute; - top: 0; - left: 0; - width: 18px; - height: 18px; -} - -.linkDanger, a.linkDanger:link, a.linkDanger:visited, a.linkDanger:active { - color: #ffffff; - background-color: #ff0000; - border-color: #aa0000; -} - -.linkDanger:hover { - background-color: #ff6666; -} - -ul { - padding: 4px 0 0 10px; - margin: 0; - list-style-type: none; -} - -li { - padding: 0 0 2px 0; -} - -img, a img { - border-style: none; -} - -h1, h2, h3, h4, h5, h6 { - margin: 0; - padding: 12px 0 6px 0; - color: #FFFFFF; - clear: both; -} - -h1 { - font-size: 18px; -} - -h2 { - font-size: 16px; -} - -h3 { - font-size: 14px; -} - -h4 { - font-size: 12px; -} - -.white { - color: white; - font-weight: bold; -} - -.good { - color: #4f7529; - font-weight: bold; -} - -.average { - color: #cd6500; - font-weight: bold; -} - -.bad { - color: #ee0000; - font-weight: bold; -} - -.idle { - color: #272727; - font-weight: bold; -} - -.redButton { - background: #ea0000; -} - -.yellowButton { - background: #cacc00; -} - -.highlight { - color: #8BA5C4; -} - -.dark { - color: #272727; -} - -.caption { - font-size: 10px; - font-weight: bold; - padding: 5px; -} - -.footer { - font-size: 10px; -} - -.noticePlaceholder { - position: relative; - font-size: 12px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - -.notice { - position: relative; - background: url(uiNoticeBackground.jpg) 50% 50%; - color: #000000; - font-size: 12px; - font-style: italic; - font-weight: bold; - padding: 3px 4px 3px 4px; - margin: 4px 0 4px 0; -} - -.notice.icon { - padding: 2px 4px 0 20px; -} - -.notice img { - position: absolute; - top: 0; - left: 0; - width: 16px; - height: 16px; -} - -div.notice { - clear: both; -} - -.itemGroup { - border: 1px solid #e9c183; - background: #2c2c2c; - padding: 4px; - clear: both; -} - -.item { - width: 100%; - margin: 4px 0 0 0; - clear: both; -} - -.itemContentNarrow, .itemContent { - float: left; -} - -.itemContentNarrow { - width: 30%; -} - -.itemContent { - width: 69%; -} - -.itemLabelNarrow, .itemLabel, .itemLabelWide, .itemLabelWider, .itemLabelWidest { - float: left; - color: #e9c183; -} - -.itemLabelNarrow { - width: 20%; -} - -.itemLabel { - width: 30%; -} - -.itemLabelWide { - width: 45%; -} - -.itemLabelWider { - width: 69%; -} - -.itemLabelWidest { - width: 100%; -} - -.itemContentWide { - float: left; - width: 79%; -} - -.itemContentSmall { - float: left; - width: 33%; -} - -.itemContentMedium { - float: left; - width: 55%; -} - -.statusDisplay { - background: #000000; - color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; -} - -.statusDisplayRecords { - background: #000000; - color: #ffffff; - border: 1px solid #40628a; - padding: 4px; - margin: 3px 0; - overflow-x: hidden; - overflow-y: auto; -} - -.statusLabel { - width: 138px; - float: left; - overflow: hidden; - color: #98B0C3; -} - -.statusValue { - float: left; -} - -.block { - padding: 8px; - margin: 10px 4px 4px 4px; - border: 1px solid #40628a; - background-color: #202020; -} - -.block h3 { - padding: 0; -} - -.displayBar { - position: relative; - width: 236px; - height: 16px; - border: 1px solid #666666; - float: left; - margin: 0 5px 0 0; - overflow: hidden; - background: #000000; -} - -.displayBarText { - position: absolute; - top: -2px; - left: 5px; - width: 100%; - height: 100%; - color: #ffffff; - font-weight: normal; -} - -.displayBarFill { - width: 0%; - height: 100%; - background: #40628a; - overflow: hidden; - float: left; -} - -.displayBarFill.alignRight { - float: right; -} - -.displayBarFill.good { - color: #ffffff; - background: #4f7529; -} - -.displayBarFill.average { - color: #ffffff; - background: #cd6500; -} - -.displayBarFill.bad { - color: #ffffff; - background: #ee0000; -} - -.displayBarFill.highlight { - color: #ffffff; - background: #8BA5C4; -} - -.clearBoth { - clear: both; -} - -.clearLeft { - clear: left; -} - -.clearRight { - clear: right; -} - -.line { - width: 100%; - clear: both; -} - -.inactive, a.inactive:link, a.inactive:visited, a.inactive:active, a.inactive:hover { - color: #ffffff; - background: #999999; - border-color: #666666; -} - -.fixedLeft { - width: 110px; - float: left; -} - -.fixedLeftWide { - width: 165px; - float: left; -} - -.fixedLeftWider { - width: 220px; - float: left; -} - -.fixedLeftWidest { - width: 250px; - float: left; -} - -.fixedLeftWiderRed { - width: 220px; - float: left; - background: #ee0000; -} - -.floatRight { - float: right; -} - -/* Used in PDA */ - -.wholeScreen { - position: absolute; - color: #517087; - font-size: 16px; - font-weight: bold; - text-align: center; -} - -.pdalink { - float: left; - white-space: nowrap; -} - -/* DNA Modifier UI (dna_modifier.tmpl) */ - -.dnaBlock { - float: left; - width: 90px; - padding: 0 0 5px 0; -} - -.dnaBlockNumber { - font-family: Fixed, monospace; - float: left; - color: #ffffff; - background: #363636; - min-width: 20px; - height: 20px; - padding: 0; - text-align: center; -} - -.dnaSubBlock { - font-family: Fixed, monospace; - float: left; - padding: 0; - min-width: 16px; - height: 20px; - text-align: center; -} - -.mask { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - background: url(uiMaskBackground.png); -} - -.maskContent { - width: 100%; - height: 200px; - margin: 200px 0; - text-align: center; -} - -table.fixed { - table-layout:fixed; -} - -table.fixed td { - overflow: hidden; -} - -/* Table stuffs for power monitor */ -table.pmon { - border: 2px solid RoyalBlue; -} - -table.pmon td, table.pmon th { - border-bottom: 1px dotted black; - padding: 0px 5px 0px 5px; -} - -/* Table Stuffs for manifest*/ - -th.command { - background: #3333FF; - font-weight: bold; - color: #ffffff; -} - -th.sec { - background: #8e0000; - font-weight: bold; - color: #ffffff; -} - -th.med { - background: #006600; - font-weight: bold; - color: #ffffff; -} - -th.eng { - background: #b27300; - font-weight: bold; - color: #ffffff; -} - -th.sci { - background: #a65ba6; - font-weight: bold; - color: #ffffff; -} - -th.car { - background: #bb9040; - font-weight: bold; - color: #ffffff; -} - -th.civ { - background: #a32800; - font-weight: bold; - color: #ffffff; -} - -th.misc { - background: #666666; - font-weight: bold; - color: #ffffff; -} - -/* Damage colors for crew monitoring computer */ - -.burn { - color: orange; -} - -.brute { - color: red; -} - -.toxin { - color: #8ac44c; -} - -.oxyloss { - color: #00baee; -} - -/* 75px width used in power monitoring console buttons */ -.width75btn { - width: 75px; -} \ No newline at end of file diff --git a/nano/images/c_charging.gif b/nano/images/c_charging.gif deleted file mode 100644 index e080e27cfc627471271db7a163701c1017b7f457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmZ?wbhEHb6krfwc*Fn#KVbOB4+aARg98T+00k8PbNji51UowhxEkphFf)RLezI_K zF|ae}0NFsz0t^hysujEL{4+Skv1;#+hC{pGUkm3+dNDDzlwSi*r0^N(6DI*p$iI0l z`*ql2zvKgFQaohTuzFq(;Rc37o<9{bO5+S$?%$Z15jD}drcLYn*)O{v{oJ-qujhl2 zrc^H{HbUs&ra08MacNphW~ZdK-Nv*76KnOkD()_HwW>hDg=n@uwk3UI|IayT5^t-s)Dp)*91!Ko+#`x_|2I>|YO`+)FxeI>kc;dxAhp(+mf9KX3iYd00Fw nKC|oYgH;Nz4;otaKQ~(!G2i!q0`@eGl$n6q-(OS5o|&ux=*4DN diff --git a/nano/images/c_discharging.gif b/nano/images/c_discharging.gif deleted file mode 100644 index 793fa589c2fdc19fe8af4b1835dab5376083dbfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmZ?wbhEHb6krfwc*Fn#KVbOB4+aARg98T+00k8PbNji51UowhxEkphFf)RLezI_; zFt9V|0NFsz0t^hysujEL{4+Skv1;!RhJ(A`UsLBvdNDDzlFKH=XLHn-zr_Rp) z_3+8Pqywi@JXF-Mx>_B@1pNh1dzm6SQqmV?N`~ofKlE|WRsCi0!S8=_VskgL?T4!M z6A~-$9B55)ot17;=A5%={qaky{_eEA*)$`ez)43;7@G;mwjZ+ASIDT0(+EpR7fbe9 zlgqXE-JYvz%U%;@yR~LQM&%uWE>X*xbVH!+^VXYRUU~MB^v=aI9;D*3T?5JQhpK-j zB$meg=v7Ia7rJVl#?G!>tK&;M-~N8`e?JR0r|ThWuKf8Rz4RW?de0dk>(4ahho33& zdi2w6n?}zEBTcDZtl@`ZzvoYdjM6xXzPXiQOSCqvj9xIu=J3`Y-1Z{{e#3$8{|k!y2L z-FjTf7ItrK=3`AYT1Z+0cKx4ww3a!dV@YLLvf-Ym?aLnAIcmE4Swy|>fdm6aY+0R*v diff --git a/nano/images/c_max.gif b/nano/images/c_max.gif deleted file mode 100644 index 7f26e51d20ee594555c7c69c61b8fa615b726aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125 zcmZ?wbhEHb6krfw*u($?KOn?`0|!717*PDr?dKX2?CcoeYNTht%m@@${K>+}#lXU# z15yLh&cLkivFpx1gHsZ#_Re5Axcj{rJBNekEGLh3$){K5{RvabUT%^-O?h9fgM3=X LOo{&EEDY8F>`)>d diff --git a/nano/images/status_icons/alarm_green.gif b/nano/images/status_icons/alarm_green.gif deleted file mode 100644 index 7c2570c8ce30fd03c48a6332eba57bcd3dab25a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmZ?wbhEHb6k`x$SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%al4F+Zg z9gsXo3j>qpoc@)k-|{b>v&F38^N~f|I*jw!Tav@w9?f)meZx*h^0Z{e(_iPl?+amI Gum%9P&mj8% diff --git a/nano/images/status_icons/alarm_red.gif b/nano/images/status_icons/alarm_red.gif deleted file mode 100644 index 327d58e4db8acf03e219e09ace17c6f1f990f499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163 zcmZ?wbhEHb6k`x$SjfO&!NBl?f#JY`0}KodivPL&TtkAL9RpmA^bD98K|()SIE@&X z8FYYbpawAp1}4op{VPwu z9Uz+lq=kVgdrtq#({K3~&(XZmz4_ijR))4m9@89-*W5WZulLlknX~7~XS7<@-QM-< z)5p3a3k8=ph_;@YD-fCaZO)aKyj=lOOHa#wTkte*^$w}Z9NjwJhnsI~PrIE`a*N4r Z`pwD9_U->OX}Y^(L`Fr2MIZx%H2^2XMuq?Y diff --git a/nano/images/status_icons/batt_20.gif b/nano/images/status_icons/batt_20.gif deleted file mode 100644 index 1d5e38fc888430a7bb2a1062468c7d822d7c66e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 284 zcmZ?wbhEHb)L;-}IK;rf@PmQD0tgun95?`E!hzy{Za>$MU}whwS0gveMHo^t=VfrUT;SOEL275g-IH&n1op^o z=9lV!P(86h^6mx>t7j(O%Z^Kid|P5Z$GPHY-im1Li@&d`EsQmCFt|K%`J3m`_rh+z z&%XGl`Q`8b4UOWQ*sKjFXl>T}cWXYI3Y~UjK2~sKzM#q(-TuQppDLZbR{Cf!?s%H9 d{c_%U&2Mf?S8e&VTesZc!;Tui{VEI$)&M66a}odm diff --git a/nano/images/status_icons/batt_40.gif b/nano/images/status_icons/batt_40.gif deleted file mode 100644 index d5cedb996759170d5e2477619ca9f40d66a18c6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmZ?wbhEHb)L;-}*u=oV@PmQDg5kh{13!QaB%t`8+s`#5*x50_)kx2PnGq+Z` zi-Cnf2c!(7oq;*qW7nO32B$n%@6~;AcK82A5r&k^c^OP*m|J z3#SnSD}xS51xPysb9ltAJO2z$d9L2e`{L~G{|zi0DVg&!v|283?E4_Kv*7N@w^{Gs zt@&&!blQ>mSizC`f+}Zp`w#bgs&w{R>7%{4<7vkB%X#NDzqu`4wdL1t-ExBuJ8Jy) Vs}Qg&7i3qn2@A+BDa!4#1^~mJZcP9H diff --git a/nano/images/status_icons/batt_60.gif b/nano/images/status_icons/batt_60.gif deleted file mode 100644 index d39534c8cb03fd6b7580267d38ebbed0e7d16433..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 zcmZ?wbhEHb)L;-}SjfP@@PmQDg5kh{13;$Ye{Mh5kYH!W09PYD17=2$&`%alE(T@> z9Uz+lq=kVgWlsOf({K3~&(XZmz4_ijR))4m9@89-*W5WZulLlknX~7~XS7<%UFKf1 z`(~4FeCi2qq3|8I_&BGU)(1We&T?Ux91|_L^hVh9IhhrArZ%15RF+p;vVC*Z z9Uz+lq=kVgYfk^l({K3~&(XZmz4_ijR))4m9@89-*W5WZulLlknX~7~XS7<@-8SCU z@UqJKc7ar_(qx0*Qj WFFrMOA(iFsh8__a6&8UE4AubO+dx48 diff --git a/nano/images/status_icons/charging.gif b/nano/images/status_icons/charging.gif deleted file mode 100644 index cf19ca72876b33bb683ea14aa4d9dc4c6c621bc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 160 zcmZ?wbhEHb)L;-}SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alE(T@> z9gsXo3jy+yJb<5u_TVtSn;qvt0wAPESQ>533&YSr0)^5#} LkH0rFF<1itpY1(Q diff --git a/nano/images/status_icons/downloader_finished.gif b/nano/images/status_icons/downloader_finished.gif deleted file mode 100644 index f01b7c42af8ba61a23b3ba009a1f491922267479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmZ?wbhEHb6k`x$SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alE(T@> z9gsXo3j>qGoc@)k-|laiBP6A;iLESQZs9fdE`gn;8fkWGK5X@y)0gnV&)mlFMPK)y dJkk3GD#0FQM`JW^Mtrhj=MufRCyI-~8UX$-DMkPQ diff --git a/nano/images/status_icons/downloader_running.gif b/nano/images/status_icons/downloader_running.gif deleted file mode 100644 index 68fb977c86dda6273d7fbd853b86ca38375891b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmZ?wbhEHb6k`x$SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alE(T@> z9gsXo3j>qvoc@)k-|laiBP6A;iLET)R_h~=Y0o;By*jn+owOJ>9m=RW66O|OWA74h zEd}Y|KK{w)`nOoDHmPCNx3e^3MNlw1SYPk+U;jj~S*eXvYtx$-T+f^X?*g@+`~Hvr ziYQjA_3-Q8d}^(=waC@4|M+>h+K(hMVsnBCAtSzs1pCZ=|HsTbplx#B#||H@=_i@6 z8DvScK^{p97bLw{HAiD|-)GKVD{io9Ul>uM&z5A<0#03AzH(Mc%dwY>85pbqqOR3W diff --git a/nano/images/status_icons/ntnrc_idle.gif b/nano/images/status_icons/ntnrc_idle.gif deleted file mode 100644 index d47c01d580080e8e614de62448815b87705a122f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmZ?wbhEHb6k`x$n8?7uV8L+UzyTl)1d9K;{aizWogD*Qjr0td89_onSvZXtm>6_G z@*ph?O!`y$SDt>$zc^;Wt!~{*{n8&Ar)bngYlhsO6~oo#^kK@TOEwR;%O1S>ei3K; KkwqIB7_0$IQY1tG diff --git a/nano/images/status_icons/ntnrc_new.gif b/nano/images/status_icons/ntnrc_new.gif deleted file mode 100644 index af72a8b332fc4983088ccafc64593bb04294e551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 181 zcmZ?wbhEHb6k`x$SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alBL-#$ z9gsXo3j>q>oc@)k-|{bxS#+yg_fo&~$HpldbQvgwk|!|k#MZ@yo| T*?wfvM*LGc*ia%L6 zH5gbJbU=zg+8LNVJ$Bvsr?~GV)811_tG)|2eeYD>$-vSu>$TUecap}dW?60X(Kg8X zZxDORUFMU7Vw_-vkx?=4giDbnCG)NxE1kLa#RdURiL4|QtfqV6GX2zwDX-^!UcJa@ zoxSedcLuJ09CwyVC_c)U%u$(n)L+QW)XXYWfupNQ!M=ouhCBcc!@ou<`_u6H! zYT3F)=M2|czt#M2GoQEPwXTzM?8YT3*ZNL8y>xLR(@H08mDepETZ|_wGh#CuPq?gG zzUrmqWxwp@8ok%K=B#(;F>*TiXv2|gJ=q0IHothGGoN?$q*-@kle;^f-ZrrmVz34P Dlu)Cy diff --git a/nano/images/status_icons/power_warn.gif b/nano/images/status_icons/power_warn.gif deleted file mode 100644 index 0c85b3a85a1e46e7ea81d98562f1cf10509f13d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 485 zcmZ?wbhEHb6k`x$*u=oV@B;`Le*9oKaNq!t2M3D(x&2&2f}I@$T#fV$m>Gc*ia%L6 zH5gbJbU=zg+8LO`Ja*mrr?~GV)812Qz2ejFDse<>RK<8qJ9lFO!-0LPH=Qzme2d$! z!Q?haTh*Hi7Wshi)kljKh4uzSyY(Ku_T|@RnU%MFKK}mNvplu%q^f7RZf?*W7f-BK z#lWnJy>!#N==SvE98BtZOF8>8eyx>dWZ>dlD;+z%n6=5OX>I#W7nOsF8=8YvD!usw zmVeOXej-@Cu6mAVXw_>A8ZTFIkYL$G`gO`34U23&g|61AV zmstl>WoP^`48OSIedNi9Dp>9EhuO9FRMM*N!cE@;ABg&?x-c+QnMJ*}n)|0UM=Ww% z@Uw0S&h*t^CF~>HKYS8&?+W?ya*oo<4Xsl;*JjN2oEj>$Y@+k?tAR&67#OSp?%csB diff --git a/nano/images/status_icons/sig_high.gif b/nano/images/status_icons/sig_high.gif deleted file mode 100644 index efb20f6730654a761fa061b451efae0122d0aa71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZ?wbhEHb)L;-}SjfP@V8L+UzyXFIKo*1Ie{Mh5kYH!W09PYD17=2$&`%alBL-#$ z9gsXo3jO_X57g-b8zbsXLHQ^1moO6yJZE zsA1B~Kl!3Vf!jT|?^ePgVB*KO^Q)UQp-((S@6Vw^UIER58u{+UcY pWZL=se|Wpurscs#79FY`73myDPRw|+k>h7VQ0L5*oskR-)&PE-NT2`! diff --git a/nano/images/status_icons/sig_low.gif b/nano/images/status_icons/sig_low.gif deleted file mode 100644 index 08f98baea8e69b04e3b8a8f12f20ad4bb09b2ec8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmZ?wbhEHb)L;-}IK;qUVZm_VzyXFIKo-LfAPEDC|GE8KLxPk%Fip~B~z57xb zi)?z*Z*Xy0o|rpPO~Z+yA@$@>1_6#hWrL)ndfU%un{lK$aNjjtzs6(v{wv#ltnFR= VJZVQz-_mTu^o*>a79LIpYXEgwJ&phX diff --git a/nano/images/status_icons/sig_none.gif b/nano/images/status_icons/sig_none.gif deleted file mode 100644 index 79840d8a2bd4b30c263cbc680aa2727dfeb27555..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 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�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 aFYJv=&30+-^eun=x8>@*hF8uBlKcmje21X` diff --git a/nano/images/uiBasicBackground.png b/nano/images/uiBasicBackground.png deleted file mode 100644 index 572b1f1400a6d6a852ba09c950ca7a9990bf35a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3707 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 diff --git a/nano/images/uiIcons16.png b/nano/images/uiIcons16.png deleted file mode 100644 index a337345e7656abfd0c370c559a42dbf357efc91d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2288 zcmV{{Hmz^!NAo`}_O&`1t+({qXSc`T6;J;s>q( z0004WQchC_SyihzJr(+(qJ^^kq!bdmZL6zCg4)ry8+iFDaf+>^I#9eq_1z_r+IRLwkA&6>%BH)n#(GbCNgA^eeLg0nY0zQOf zUlXB1p-?Ck3WclA1fR#joXofeE138bk_nt!@z@n93&1{y@`6Lq8}92rgdU3r^L=`{ zap120r(G->)&uf_NsfRAgA>;SIyo{1)LEcVC=?2XLZR|)01j=RyE~B6(O|s~CoUw4^Ih#@iR2bTyrpqJ&oINu4AXk@( z931RN14eUsBzKZT^ALuluRSJIR|odBklZsnw&20OEdn{9Rbj^%kV!86v+r^!O0 zP$(1%1$fv7T;KU(Dr3a~2Vq|aVgt6y9@s|ttBVX*umCPi9f<8in>rA-%~TTKObwxZ z2m+|N9A;Am!VV;bmpP427$hPr;3yq-HV&wVxdSSd1L~pbt6cS649EpLD9V;VSpaoF z_A~CnAMH zp-?CkxcBBE<-gqb{Q;cNdPoLS{!f@WP7o4w>@cYO>%fZbZwR*z#|W_j)~_3Z1+h8j z-YpKZWXy6&5*l(KB?n_&RQ)Ug?BU3)5ai3()AC8WCl75bg%2VJIV;Ta^=8*l?^BFB zlQU39AS?#B?}3Z3NhUg#~d0_@TT9TIl$c3?l)QO>QM0 zx7)3eUXR~N5&$L<;C9B`#sVlgWJoCaUAqedG%XKE0JZ1-o7=zw01d_+Gzx$v+7SW$ zuj@yf2rz#75V-Y!`{nhvTL9%cn*u-8AK7fI1l3_bwl^F*=>+0?gw-3$XAf zf3l1{po!-N2vfHQR$!rdk2kgja5APC+95#utNq>nIS>K%zcsZtivZCf8Os8E28sZj zk9YnTKl#arRw#CGAI~v)lKYzi^fn~G_MqV8cw2z>cU#(jjjhdP9+sU&-`+-lSb_k% z?&E{$Ef5yqH&i`x%WZ{R=b!Z-4S-=qC*2i@bJ_j#09Vgk{_8Yo8!7ro6bgkxp`dIx zS)YpB0XXXHB)>*XxfCBF5So?LbR z;RjzOfEPr}y zU4hmA6UKnx&N~l65@!t%>>|1FA&%v0K9L!-EO}CfCRYRZe4&=L%@R`7QooL zH~n}7cn}1*JzRioEo6FZ3^46#oFfAr2 z{{93LL0;$=BMXH>p-@2dj$oPO$EP4=*YJ>cNLYX_&tR~UWiaqFzzehFKs^w>_snmR z0HZuG^nPJ5kN}Gk~02il%;x8InS-`3C08F+8u>jdck z$@VTcr?su}PCNJKxI@&xwFp{<9W?hRE1%lSfgOV8{s42{?e8IgKZ8So2Z2Habb7Z# zAafWwNkAY(h`A&1l7nDp;;LV#!GM|wJ!mS+it~9!p-?Ck3I$eh7Jq)Q5(2-r08AW? zKW=6L8tuCXkbmF60_9)Cpj8Ca7(kr`UKfQzp-?Ck_(nY?8eGeNtG;flK;dDEtp4IU1MDxAy%20000< KMNUMnLSTX!TsMIL diff --git a/nano/images/uiIcons16Green.png b/nano/images/uiIcons16Green.png deleted file mode 100644 index 1ca23cb81d5fe43a83472660b2a128be748760a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18091 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 KMNUMnLSTZ~v*-K( diff --git a/nano/images/uiIcons16Red.png b/nano/images/uiIcons16Red.png deleted file mode 100644 index 3af11de93a25a4195a395079b27259b7fa6484f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17681 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 JPDHLkV1h&Y(Te~8 diff --git a/nano/images/uiLinkPendingIcon.gif b/nano/images/uiLinkPendingIcon.gif deleted file mode 100644 index c3070fd157a1a9fdf37ae77d3e060dc54fa1dfec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmZ?wbhEHb6krfw_{6{vP_^d&|NoUU_g}dE0?62P`reXVS7vTHr}$6GxhOTUBsE2$ zJhLQ2Au%hlA}2pFMK3ciEuTU0Ckq1?0|SHNe{Mh5kYH!W09PYD17=2`kPZ+7jTT^F zU^eF1b?2YKDbH--WDYA1$vNzPGtxL+HyR$=B{K8iHob%+hYBy~MoU=UUB+%H!NcyA z{oDg+B-m(1WOGbF=J@p}DoD5R?B4LK%camMFeJfHQX#>|HCk##jm*~4`)?B^*c%kC zOFU|GmfWPOq9p`1hzZ#sGmc$G%G#$KPfR#7B}|{KHCcx5i=^L2Pp8Bgs|#d4aGlw_ zSLWCXZKlY#;(r*M5Az$XOp%(up9N|ZGqO=Yza^<^pE7Ej_-0O6d~5eI&Q?Vp7DJcz zL>a+VZcQ65$}=Yg#eTMxH?Yu=>OZlh$kGSqHx^`bj5u}`scU;ZPZ9Yb@!6-5N3HB| zLQGP~l-8D=av70Mn&(eB2r$dNw2?oo1~w;X63iG@WMhENQ8+ZgQv7kr^F6ob8Au+N zd7!B0v~BLG@HLAJdDyr`iW7HlF#SH2vC&`yXXozuxtd-ubJ&p00XpZ-zYm;(H|K=L z&SHFbtFT~dLdV_2Id@H_wK}>TH4vGQFnb##FUuhZf!T%)hpwHQ2s4Hq!x&)9uTFKk zGDq{e90$i?g}&p3d@P0rD^G1$7a(y67+qnvmNF@nCP_5Six!-~z+eqZIA8z(XFS>N diff --git a/nano/images/uiMaskBackground.png b/nano/images/uiMaskBackground.png deleted file mode 100644 index babc9a855e8c3802e473b38abdcf17e56bdde5f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_{3?x-PN__%S%mF?ju0VQumF+Dc#aI&L7kqR7 p%S~cH4zH(+V@O3@vP4LN2vBMQ1LKv diff --git a/nano/images/uiNoticeBackground.jpg b/nano/images/uiNoticeBackground.jpg deleted file mode 100644 index dffe2f296b87776041b6baab21ea0254c729e453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40135 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 diff --git a/nano/js/libraries.min.js b/nano/js/libraries.min.js deleted file mode 100644 index f27e98c7331..00000000000 --- a/nano/js/libraries.min.js +++ /dev/null @@ -1 +0,0 @@ -jQuery.fn.extend({everyTime:function(e,t,r,n){return this.each(function(){jQuery.timer.add(this,e,t,r,n)})},oneTime:function(e,t,r){return this.each(function(){jQuery.timer.add(this,e,t,r,1)})},stopTime:function(e,t){return this.each(function(){jQuery.timer.remove(this,e,t)})}}),jQuery.extend({timer:{global:[],guid:1,dataKey:"jQuery.timer",regex:/^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1e3,das:1e4,hs:1e5,ks:1e6},timeParse:function(e){if(null==e||null==e)return null;var t=this.regex.exec(jQuery.trim(e.toString()));return t[2]?parseFloat(t[1])*(this.powers[t[2]]||1):e},add:function(e,t,r,n,i){var o,a,u=0;jQuery.isFunction(r)&&(i=i||n,n=r,r=t),"number"!=typeof(t=jQuery.timer.timeParse(t))||isNaN(t)||t<0||(("number"!=typeof i||isNaN(i)||i<0)&&(i=0),i=i||0,(o=jQuery.data(e,this.dataKey)||jQuery.data(e,this.dataKey,{}))[r]||(o[r]={}),n.timerID=n.timerID||this.guid++,(a=function(){(++u>i&&0!==i||!1===n.call(e,u))&&jQuery.timer.remove(e,r,n)}).timerID=n.timerID,o[r][n.timerID]||(o[r][n.timerID]=window.setInterval(a,t)),this.global.push(e))},remove:function(e,t,r){var n,i=jQuery.data(e,this.dataKey);if(i){if(t){if(i[t]){if(r)r.timerID&&(window.clearInterval(i[t][r.timerID]),delete i[t][r.timerID]);else for(r in i[t])window.clearInterval(i[t][r]),delete i[t][r];for(n in i[t])break;n||(n=null,delete i[t])}}else for(t in i)this.remove(e,t,r);for(n in i)break;n||jQuery.removeData(e,this.dataKey)}}}}),jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(e,t){jQuery.timer.remove(t)})}),function(){"use strict";var u={version:"1.0.1-nanoui",templateSettings:{evaluate:/\{\{([\s\S]+?)\}\}/g,interpolate:/\{\{:([\s\S]+?)\}\}/g,encode:/\{\{>([\s\S]+?)\}\}/g,use:/\{\{#([\s\S]+?)\}\}/g,define:/\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g,conditional:/\{\{\/?if\s*([\s\S]*?)\s*\}\}/g,conditionalElse:/\{\{else\s*([\s\S]*?)\s*\}\}/g,iterate:/\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,props:/\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g,empty:/\{\{empty\}\}/g,varname:"data, config, helper",strip:!0,append:!0,selfcontained:!1},template:void 0,compile:void 0};function s(){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"},e=/&(?!#?\w+;)|<|>|"|'|\//g;return function(){return this?this.replace(e,function(e){return t[e]||e}):this}}"undefined"!=typeof module&&module.exports?module.exports=u:"function"==typeof define&&define.amd?define(function(){return u}):function(){return this||(0,eval)("this")}().doT=u,String.prototype.encodeHTML=s();var c={append:{start:"'+(",end:")+'",endencode:"||'').toString().encodeHTML()+'"},split:{start:"';out+=(",end:");out+='",endencode:"||'').toString().encodeHTML();out+='"}},l=/$^/;function f(e){return e.replace(/\\('|\\)/g,"$1").replace(/[\r\t\n]/g," ")}u.template=function(e,t,r){var n,i=(t=t||u.templateSettings).append?c.append:c.split,o=0,a=t.use||t.define?function n(i,e,o){return("string"==typeof e?e:e.toString()).replace(i.define||l,function(e,n,t,r){return 0===n.indexOf("def.")&&(n=n.substring(4)),n in o||(":"===t?(i.defineParams&&r.replace(i.defineParams,function(e,t,r){o[n]={arg:t,text:r}}),n in o||(o[n]=r)):new Function("def","def['"+n+"']="+r)(o)),""}).replace(i.use||l,function(e,t){i.useParams&&(t=t.replace(i.useParams,function(e,t,r,n){if(o[r]&&o[r].arg&&n){var i=(r+":"+n).replace(/'|\\/g,"_");return o.__exp=o.__exp||{},o.__exp[i]=o[r].text.replace(new RegExp("(^|[^\\w$])"+o[r].arg+"([^\\w$])","g"),"$1"+n+"$2"),t+"def.__exp['"+i+"']"}}));var r=new Function("def","return "+t)(o);return r?n(i,r,o):r})}(t,e,r||{}):e,a=("var out='"+(t.strip?a.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g," ").replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g,""):a).replace(/'|\\/g,"\\$&").replace(t.interpolate||l,function(e,t){return i.start+f(t)+i.end}).replace(t.encode||l,function(e,t){return n=!0,i.start+f(t)+i.endencode}).replace(t.conditional||l,function(e,t){return t?"';if("+f(t)+"){out+='":"';}out+='"}).replace(t.conditionalElse||l,function(e,t){return t?"';}else if("+f(t)+"){out+='":"';}else{out+='"}).replace(t.iterate||l,function(e,t,r,n){if(!t)return"';} } out+='";o+=1,r=r||"value",n=n||"index",t=f(t);var i="arr"+o;return"';var "+i+"="+t+";if("+i+" && "+i+".length > 0){var "+r+","+n+"=-1,l"+o+"="+i+".length-1;while("+n+" 0){var "+r+";for( var "+n+" in "+i+"){ if (!"+i+".hasOwnProperty("+n+")) continue; "+r+"="+i+"["+n+"];out+='"}).replace(t.empty||l,function(e){return"';}}else{if(true){out+='"}).replace(t.evaluate||l,function(e,t){return"';"+f(t)+"out+='"})+"';return out;").replace(/\n/g,"\\n").replace(/\t/g,"\\t").replace(/\r/g,"\\r").replace(/(\s|;|\}|^|\{)out\+='';/g,"$1").replace(/\+''/g,"").replace(/(\s|;|\}|^|\{)out\+=''\+/g,"$1out+=");n&&t.selfcontained&&(a="String.prototype.encodeHTML=("+s.toString()+"());"+a);try{return new Function(t.varname,a)}catch(e){throw"undefined"!=typeof console&&console.log("Could not create a template function: "+a),e}},u.compile=function(e,t){return u.template(e,null,t)}}(); \ No newline at end of file diff --git a/nano/js/libraries/doT.js b/nano/js/libraries/doT.js deleted file mode 100644 index a0ec5520c02..00000000000 --- a/nano/js/libraries/doT.js +++ /dev/null @@ -1,157 +0,0 @@ -(function () { - "use strict"; - - var doT = { - version: '1.0.1-nanoui', - templateSettings: { - evaluate: /\{\{([\s\S]+?)\}\}/g, - interpolate: /\{\{:([\s\S]+?)\}\}/g, - encode: /\{\{>([\s\S]+?)\}\}/g, - use: /\{\{#([\s\S]+?)\}\}/g, - define: /\{\{##\s*([\w\.$]+)\s*(\:|=)([\s\S]+?)#\}\}/g, - conditional: /\{\{\/?if\s*([\s\S]*?)\s*\}\}/g, - conditionalElse: /\{\{else\s*([\s\S]*?)\s*\}\}/g, - iterate: /\{\{\/?for\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g, - props: /\{\{\/?props\s*(?:\}\}|([\s\S]+?)\s*(?:\:\s*([\w$]+))?\s*(?:\:\s*([\w$]+))?\s*\}\})/g, - empty: /\{\{empty\}\}/g, - varname: 'data, config, helper', - strip: true, - append: true, - selfcontained: false - }, - template: undefined, //fn, compile template - compile: undefined //fn, for express - }, global; - - if (typeof module !== 'undefined' && module.exports) { - module.exports = doT; - } else if (typeof define === 'function' && define.amd) { - define(function () { - return doT; - }); - } else { - global = (function () { - return this || (0, eval)('this'); - }()); - global.doT = doT; - } - - function encodeHTMLSource() { - var encodeHTMLRules = { "&": "&", "<": "<", ">": ">", '"': '"', "'": ''', "/": '/' }, - matchHTML = /&(?!#?\w+;)|<|>|"|'|\//g; - return function () { - return this ? this.replace(matchHTML, function (m) { - return encodeHTMLRules[m] || m; - }) : this; - }; - } - - String.prototype.encodeHTML = encodeHTMLSource(); - - var startend = { - append: { start: "'+(", end: ")+'", endencode: "||'').toString().encodeHTML()+'" }, - split: { start: "';out+=(", end: ");out+='", endencode: "||'').toString().encodeHTML();out+='"} - }, skip = /$^/; - - function resolveDefs(c, block, def) { - return ((typeof block === 'string') ? block : block.toString()) - .replace(c.define || skip, function (m, code, assign, value) { - if (code.indexOf('def.') === 0) { - code = code.substring(4); - } - if (!(code in def)) { - if (assign === ':') { - if (c.defineParams) value.replace(c.defineParams, function (m, param, v) { - def[code] = {arg: param, text: v}; - }); - if (!(code in def)) def[code] = value; - } else { - new Function("def", "def['" + code + "']=" + value)(def); - } - } - return ''; - }) - .replace(c.use || skip, function (m, code) { - if (c.useParams) code = code.replace(c.useParams, function (m, s, d, param) { - if (def[d] && def[d].arg && param) { - var rw = (d + ":" + param).replace(/'|\\/g, '_'); - def.__exp = def.__exp || {}; - def.__exp[rw] = def[d].text.replace(new RegExp("(^|[^\\w$])" + def[d].arg + "([^\\w$])", "g"), "$1" + param + "$2"); - return s + "def.__exp['" + rw + "']"; - } - }); - var v = new Function("def", "return " + code)(def); - return v ? resolveDefs(c, v, def) : v; - }); - } - - function unescape(code) { - return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, ' '); - } - - doT.template = function (tmpl, c, def) { - c = c || doT.templateSettings; - var cse = c.append ? startend.append : startend.split, needhtmlencode, sid = 0, - str = (c.use || c.define) ? resolveDefs(c, tmpl, def || {}) : tmpl; - - str = ("var out='" + (c.strip ? str.replace(/(^|\r|\n)\t* +| +\t*(\r|\n|$)/g, ' ') - .replace(/\r|\n|\t|\/\*[\s\S]*?\*\//g, '') : str) - .replace(/'|\\/g, '\\$&') - .replace(c.interpolate || skip, function (m, code) { - return cse.start + unescape(code) + cse.end; - }) - .replace(c.encode || skip, function (m, code) { - needhtmlencode = true; - return cse.start + unescape(code) + cse.endencode; - }) - .replace(c.conditional || skip, function (m, code) { - return (code ? "';if(" + unescape(code) + "){out+='" : "';}out+='"); - }) - .replace(c.conditionalElse || skip, function (m, code) { - return (code ? "';}else if(" + unescape(code) + "){out+='" : "';}else{out+='"); - }) - .replace(c.iterate || skip, function (m, iterate, vname, iname) { - if (!iterate) return "';} } out+='"; - sid += 1; - vname = vname || "value"; - iname = iname || "index"; - iterate = unescape(iterate); - var arrayName = "arr" + sid; - return "';var " + arrayName + "=" + iterate + ";if(" + arrayName + " && " + arrayName + ".length > 0){var " + vname + "," + iname + "=-1,l" + sid + "=" + arrayName + ".length-1;while(" + iname + " 0){var " + vname + ";for( var " + iname + " in " + objectName + "){ if (!" + objectName + ".hasOwnProperty(" + iname + ")) continue; " + vname + "=" + objectName + "[" + iname + "];out+='"; - }) - .replace(c.empty || skip, function (m) { - return "';}}else{if(true){out+='"; // The "if(true)" condition is required to account for the for tag closing with two brackets - }) - .replace(c.evaluate || skip, function (m, code) { - return "';" + unescape(code) + "out+='"; - }) - + "';return out;") - .replace(/\n/g, '\\n').replace(/\t/g, '\\t').replace(/\r/g, '\\r') - .replace(/(\s|;|\}|^|\{)out\+='';/g, '$1').replace(/\+''/g, '') - .replace(/(\s|;|\}|^|\{)out\+=''\+/g, '$1out+='); - - if (needhtmlencode && c.selfcontained) { - str = "String.prototype.encodeHTML=(" + encodeHTMLSource.toString() + "());" + str; - } - try { - return new Function(c.varname, str); - } catch (e) { - if (typeof console !== 'undefined') console.log("Could not create a template function: " + str); - throw e; - } - }; - - doT.compile = function (tmpl, def) { - return doT.template(tmpl, null, def); - }; -}()); \ No newline at end of file diff --git a/nano/js/libraries/jquery.timers.js b/nano/js/libraries/jquery.timers.js deleted file mode 100644 index 7001e503108..00000000000 --- a/nano/js/libraries/jquery.timers.js +++ /dev/null @@ -1,4 +0,0 @@ -jQuery.fn.extend({everyTime:function(c,a,d,b){return this.each(function(){jQuery.timer.add(this,c,a,d,b)})},oneTime:function(c,a,d){return this.each(function(){jQuery.timer.add(this,c,a,d,1)})},stopTime:function(c,a){return this.each(function(){jQuery.timer.remove(this,c,a)})}}); -jQuery.extend({timer:{global:[],guid:1,dataKey:"jQuery.timer",regex:/^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,powers:{ms:1,cs:10,ds:100,s:1E3,das:1E4,hs:1E5,ks:1E6},timeParse:function(c){if(c==undefined||c==null)return null;var a=this.regex.exec(jQuery.trim(c.toString()));return a[2]?parseFloat(a[1])*(this.powers[a[2]]||1):c},add:function(c,a,d,b,e){var g=0;if(jQuery.isFunction(d)){e||(e=b);b=d;d=a}a=jQuery.timer.timeParse(a);if(!(typeof a!="number"||isNaN(a)||a<0)){if(typeof e!="number"||isNaN(e)||e<0)e= -0;e=e||0;var f=jQuery.data(c,this.dataKey)||jQuery.data(c,this.dataKey,{});f[d]||(f[d]={});b.timerID=b.timerID||this.guid++;var h=function(){if(++g>e&&e!==0||b.call(c,g)===false)jQuery.timer.remove(c,d,b)};h.timerID=b.timerID;f[d][b.timerID]||(f[d][b.timerID]=window.setInterval(h,a));this.global.push(c)}},remove:function(c,a,d){var b=jQuery.data(c,this.dataKey),e;if(b){if(a){if(b[a]){if(d){if(d.timerID){window.clearInterval(b[a][d.timerID]);delete b[a][d.timerID]}}else for(d in b[a]){window.clearInterval(b[a][d]); -delete b[a][d]}for(e in b[a])break;if(!e){e=null;delete b[a]}}}else for(a in b)this.remove(c,a,d);for(e in b)break;e||jQuery.removeData(c,this.dataKey)}}}});jQuery(window).bind("unload",function(){jQuery.each(jQuery.timer.global,function(c,a){jQuery.timer.remove(a)})}); \ No newline at end of file diff --git a/nano/js/nano_base_callbacks.js b/nano/js/nano_base_callbacks.js deleted file mode 100644 index 889c6a80424..00000000000 --- a/nano/js/nano_base_callbacks.js +++ /dev/null @@ -1,126 +0,0 @@ -// NanoBaseCallbacks is where the base callbacks (common to all templates) are stored -NanoBaseCallbacks = function () -{ - // _canClick is used to disable clicks for a short period after each click (to avoid mis-clicks) - var _canClick = true; - - var _baseBeforeUpdateCallbacks = {} - - var _baseAfterUpdateCallbacks = { - // this callback is triggered after new data is processed - // it updates the status/visibility icon and adds click event handling to buttons/links - status: function (updateData) { - var uiStatusClass; - if (updateData['config']['status'] == 2) - { - uiStatusClass = 'icon24 uiStatusGood'; - $('.linkActive').removeClass('inactive'); - } - else if (updateData['config']['status'] == 1) - { - uiStatusClass = 'icon24 uiStatusAverage'; - $('.linkActive').addClass('inactive'); - } - else - { - uiStatusClass = 'icon24 uiStatusBad' - $('.linkActive').addClass('inactive'); - } - $('#uiStatusIcon').attr('class', uiStatusClass); - - $('.linkActive').stopTime('linkPending'); - $('.linkActive').removeClass('linkPending'); - - $('.linkActive') - .off('click') - .on('click', function (event) { - event.preventDefault(); - var href = $(this).data('href'); - if (href != null && _canClick) - { - _canClick = false; - $('body').oneTime(300, 'enableClick', function () { - _canClick = true; - }); - if (updateData['config']['status'] == 2) - { - $(this).oneTime(300, 'linkPending', function () { - $(this).addClass('linkPending'); - }); - } - window.location.href = href; - } - }); - - return updateData; - }, - nanomap: function (updateData) { - $('.mapIcon') - .off('mouseenter mouseleave') - .on('mouseenter', - function (event) { - var self = this; - $('#uiMapTooltip') - .html($(this).children('.tooltip').html()) - .show() - .stopTime() - .oneTime(5000, 'hideTooltip', function () { - $(this).fadeOut(500); - }); - } - ); - - $('.zoomLink') - .off('click') - .on('click', function (event) { - event.preventDefault(); - var zoomLevel = $(this).data('zoomLevel'); - var uiMapObject = $('#uiMap'); - var uiMapWidth = uiMapObject.width() * zoomLevel; - var uiMapHeight = uiMapObject.height() * zoomLevel; - - uiMapObject.css({ - zoom: zoomLevel, - left: '50%', - top: '50%', - marginLeft: '-' + Math.floor(uiMapWidth / 2) + 'px', - marginTop: '-' + Math.floor(uiMapHeight / 2) + 'px' - }); - }); - - $('#uiMapImage').attr('src', updateData['config']['mapName'] + '-' + updateData['config']['mapZLevel'] + '.png'); - - return updateData; - } - }; - - return { - addCallbacks: function () { - NanoStateManager.addBeforeUpdateCallbacks(_baseBeforeUpdateCallbacks); - NanoStateManager.addAfterUpdateCallbacks(_baseAfterUpdateCallbacks); - }, - removeCallbacks: function () { - for (var callbackKey in _baseBeforeUpdateCallbacks) - { - if (_baseBeforeUpdateCallbacks.hasOwnProperty(callbackKey)) - { - NanoStateManager.removeBeforeUpdateCallback(callbackKey); - } - } - for (var callbackKey in _baseAfterUpdateCallbacks) - { - if (_baseAfterUpdateCallbacks.hasOwnProperty(callbackKey)) - { - NanoStateManager.removeAfterUpdateCallback(callbackKey); - } - } - } - }; -} (); - - - - - - - diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js deleted file mode 100644 index 20e6160fed4..00000000000 --- a/nano/js/nano_base_helpers.js +++ /dev/null @@ -1,213 +0,0 @@ -// NanoBaseHelpers is where the base template helpers (common to all templates) are stored -NanoBaseHelpers = function () -{ - var _baseHelpers = { - // change ui styling to "syndicate mode" - syndicateMode: function() { - $('body').css("background-color","#8f1414"); - $('body').css("background-image","url('uiBackground-Syndicate.png')"); - $('body').css("background-position","50% 0"); - $('body').css("background-repeat","repeat-x"); - - $('#uiTitleFluff').css("background-image","url('uiTitleFluff-Syndicate.png')"); - $('#uiTitleFluff').css("background-position","50% 50%"); - $('#uiTitleFluff').css("background-repeat", "no-repeat"); - - return ''; - }, - // Generate a Byond link - link: function( text, icon, parameters, status, elementClass, elementId) { - - var iconHtml = ''; - var iconClass = 'noIcon'; - if (typeof icon != 'undefined' && icon) - { - iconHtml = '
    '; - iconClass = 'hasIcon'; - } - - if (typeof elementClass == 'undefined' || !elementClass) - { - elementClass = 'link'; - } - - var elementIdHtml = ''; - if (typeof elementId != 'undefined' && elementId) - { - elementIdHtml = 'id="' + elementId + '"'; - } - - if (typeof status != 'undefined' && status) - { - return ''; - } - - return '
    ' + iconHtml + text + '
    '; - }, - // Round a number to the nearest integer - round: function(number) { - return Math.round(number); - }, - // Returns the number fixed to 1 decimal - fixed: function(number) { - return Math.round(number * 10) / 10; - }, - // Round a number down to integer - floor: function(number) { - return Math.floor(number); - }, - // Round a number up to integer - ceil: function(number) { - return Math.ceil(number); - }, - // Format a string (~string("Hello {0}, how are {1}?", 'Martin', 'you') becomes "Hello Martin, how are you?") - string: function() { - if (arguments.length == 0) - { - return ''; - } - else if (arguments.length == 1) - { - return arguments[0]; - } - else if (arguments.length > 1) - { - stringArgs = []; - for (var i = 1; i < arguments.length; i++) - { - stringArgs.push(arguments[i]); - } - return arguments[0].format(stringArgs); - } - return ''; - }, - formatNumber: function(x) { - // From http://stackoverflow.com/questions/2901102/how-to-print-a-number-with-commas-as-thousands-separators-in-javascript - var parts = x.toString().split("."); - parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); - return parts.join("."); - }, - // Capitalize the first letter of a string. From http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript - capitalizeFirstLetter: function(string) { - return string.charAt(0).toUpperCase() + string.slice(1); - }, - // Display a bar. Used to show health, capacity, etc. - displayBar: function(value, rangeMin, rangeMax, styleClass, showText) { - - if (rangeMin < rangeMax) - { - if (value < rangeMin) - { - value = rangeMin; - } - else if (value > rangeMax) - { - value = rangeMax; - } - } - else - { - if (value > rangeMin) - { - value = rangeMin; - } - else if (value < rangeMax) - { - value = rangeMax; - } - } - - if (typeof styleClass == 'undefined' || !styleClass) - { - styleClass = ''; - } - - if (typeof showText == 'undefined' || !showText) - { - showText = ''; - } - - var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100); - - return '
    ' + showText + '
    '; - }, - // Display DNA Blocks (for the DNA Modifier UI) - displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) { - if (!dnaString) - { - return '
    Please place a valid subject into the DNA modifier.
    '; - } - - var characters = dnaString.split(''); - - var html = '
    '; - var block = 1; - var subblock = 1; - for (index in characters) - { - if (!characters.hasOwnProperty(index) || typeof characters[index] === 'object') - { - continue; - } - - var parameters; - if (paramKey.toUpperCase() == 'UI') - { - parameters = { 'selectUIBlock' : block, 'selectUISubblock' : subblock }; - } - else - { - parameters = { 'selectSEBlock' : block, 'selectSESubblock' : subblock }; - } - - var status = 'linkActive'; - if (block == selectedBlock && subblock == selectedSubblock) - { - status = 'selected'; - } - - html += '' - - index++; - if (index % blockSize == 0 && index < characters.length) - { - block++; - subblock = 1; - html += '
    '; - } - else - { - subblock++; - } - } - - html += '
    '; - - return html; - } - }; - - return { - addHelpers: function () - { - NanoTemplate.addHelpers(_baseHelpers); - }, - removeHelpers: function () - { - for (var helperKey in _baseHelpers) - { - if (_baseHelpers.hasOwnProperty(helperKey)) - { - NanoTemplate.removeHelper(helperKey); - } - } - } - }; -} (); - - - - - - - diff --git a/nano/js/nano_state.js b/nano/js/nano_state.js deleted file mode 100644 index 198fa451246..00000000000 --- a/nano/js/nano_state.js +++ /dev/null @@ -1,121 +0,0 @@ -// This is the base state class, it is not to be used directly - -function NanoStateClass() { - /*if (typeof this.key != 'string' || !this.key.length) - { - alert('ERROR: Tried to create a state with an invalid state key: ' + this.key); - return; - } - - this.key = this.key.toLowerCase(); - - NanoStateManager.addState(this);*/ -} - -NanoStateClass.prototype.key = null; -NanoStateClass.prototype.layoutRendered = false; -NanoStateClass.prototype.contentRendered = false; -NanoStateClass.prototype.mapInitialised = false; - -NanoStateClass.prototype.isCurrent = function () { - return NanoStateManager.getCurrentState() == this; -}; - -NanoStateClass.prototype.onAdd = function (previousState) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoBaseCallbacks.addCallbacks(); - NanoBaseHelpers.addHelpers(); -}; - -NanoStateClass.prototype.onRemove = function (nextState) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoBaseCallbacks.removeCallbacks(); - NanoBaseHelpers.removeHelpers(); -}; - -NanoStateClass.prototype.onBeforeUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - data = NanoStateManager.executeBeforeUpdateCallbacks(data); - - return data; // Return data to continue, return false to prevent onUpdate and onAfterUpdate -}; - -NanoStateClass.prototype.onUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - try - { - if (!this.layoutRendered || (data['config'].hasOwnProperty('autoUpdateLayout') && data['config']['autoUpdateLayout'])) - { - $("#uiLayout").html(NanoTemplate.parse('layout', data)); // render the 'mail' template to the #mainTemplate div - this.layoutRendered = true; - } - if (!this.contentRendered || (data['config'].hasOwnProperty('autoUpdateContent') && data['config']['autoUpdateContent'])) - { - $("#uiContent").html(NanoTemplate.parse('main', data)); // render the 'mail' template to the #mainTemplate div - this.contentRendered = true; - } - if (NanoTemplate.templateExists('mapContent')) - { - if (!this.mapInitialised) - { - // Add drag functionality to the map ui - $('#uiMap').draggable({ - handle : '#uiMapImage' - }); - - $('#uiMapTooltip') - .off('click') - .on('click', function (event) { - event.preventDefault(); - $(this).fadeOut(400); - }); - - this.mapInitialised = true; - } - - $("#uiMapContent").html(NanoTemplate.parse('mapContent', data)); // render the 'mapContent' template to the #uiMapContent div - - if (data['config'].hasOwnProperty('showMap') && data['config']['showMap']) - { - $('#uiContent').addClass('hidden'); - $('#uiMapWrapper').removeClass('hidden'); - } - else - { - $('#uiMapWrapper').addClass('hidden'); - $('#uiContent').removeClass('hidden'); - } - } - if (NanoTemplate.templateExists('mapHeader')) - { - $("#uiMapHeader").html(NanoTemplate.parse('mapHeader', data)); // render the 'mapHeader' template to the #uiMapHeader div - } - if (NanoTemplate.templateExists('mapFooter')) - { - $("#uiMapFooter").html(NanoTemplate.parse('mapFooter', data)); // render the 'mapFooter' template to the #uiMapFooter div - } - } - catch(error) - { - alert('ERROR: An error occurred while rendering the UI: ' + error.message); - return; - } -}; - -NanoStateClass.prototype.onAfterUpdate = function (data) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - NanoStateManager.executeAfterUpdateCallbacks(data); -}; - -NanoStateClass.prototype.alertText = function (text) { - // Do not add code here, add it to the 'default' state (nano_state_defaut.js) or create a new state and override this function - - alert(text); -}; - - diff --git a/nano/js/nano_state_default.js b/nano/js/nano_state_default.js deleted file mode 100644 index 65493b8c87e..00000000000 --- a/nano/js/nano_state_default.js +++ /dev/null @@ -1,14 +0,0 @@ - -NanoStateDefaultClass.inheritsFrom(NanoStateClass); -var NanoStateDefault = new NanoStateDefaultClass(); - -function NanoStateDefaultClass() { - - this.key = 'default'; - - //this.parent.constructor.call(this); - - this.key = this.key.toLowerCase(); - - NanoStateManager.addState(this); -} \ No newline at end of file diff --git a/nano/js/nano_state_manager.js b/nano/js/nano_state_manager.js deleted file mode 100644 index 84de1d1c89e..00000000000 --- a/nano/js/nano_state_manager.js +++ /dev/null @@ -1,220 +0,0 @@ -// NanoStateManager handles data from the server and uses it to render templates -NanoStateManager = function () -{ - // _isInitialised is set to true when all of this ui's templates have been processed/rendered - var _isInitialised = false; - - // the data for this ui - var _data = null; - - // this is an array of callbacks which are called when new data arrives, before it is processed - var _beforeUpdateCallbacks = {}; - // this is an array of callbacks which are called when new data arrives, before it is processed - var _afterUpdateCallbacks = {}; - - // this is an array of state objects, these can be used to provide custom javascript logic - var _states = {}; - - var _currentState = null; - - // the init function is called when the ui has loaded - // this function sets up the templates and base functionality - var init = function () - { - // We store initialData and templateData in the body tag, it's as good a place as any - _data = $('body').data('initialData'); - - if (_data == null || !_data.hasOwnProperty('config') || !_data.hasOwnProperty('data')) - { - alert('Error: Initial data did not load correctly.'); - } - - var stateKey = 'default'; - if (_data['config'].hasOwnProperty('stateKey') && _data['config']['stateKey']) - { - stateKey = _data['config']['stateKey'].toLowerCase(); - } - - NanoStateManager.setCurrentState(stateKey); - - $(document).on('templatesLoaded', function () { - doUpdate(_data); - - _isInitialised = true; - }); - }; - - // Receive update data from the server - var receiveUpdateData = function (jsonString) - { - var updateData; - try - { - // parse the JSON string from the server into a JSON object - updateData = jQuery.parseJSON(jsonString); - } - catch (error) - { - alert(error.Message); - return; - } - - if (!updateData.hasOwnProperty('data')) - { - if (_data && _data.hasOwnProperty('data')) - { - updateData['data'] = _data['data']; - } - else - { - updateData['data'] = {}; - } - } - - if (_isInitialised) // all templates have been registered, so render them - { - doUpdate(updateData); - } - else - { - _data = updateData; // all templates have not been registered. We set _data directly here which will be applied after the template is loaded with the initial data - } - }; - - // This function does the update by calling the methods on the current state - var doUpdate = function (data) - { - if (_currentState == null) - { - return; - } - - data = _currentState.onBeforeUpdate(data); - - if (data === false) - { - alert('data is false, return'); - return; // A beforeUpdateCallback returned a false value, this prevents the render from occuring - } - - _data = data; - - _currentState.onUpdate(_data); - - _currentState.onAfterUpdate(_data); - }; - - // Execute all callbacks in the callbacks array/object provided, updateData is passed to them for processing and potential modification - var executeCallbacks = function (callbacks, data) - { - for (var key in callbacks) - { - if (callbacks.hasOwnProperty(key) && jQuery.isFunction(callbacks[key])) - { - data = callbacks[key].call(this, data); - } - } - - return data; - }; - - return { - init: function () - { - init(); - }, - receiveUpdateData: function (jsonString) - { - receiveUpdateData(jsonString); - }, - addBeforeUpdateCallback: function (key, callbackFunction) - { - _beforeUpdateCallbacks[key] = callbackFunction; - }, - addBeforeUpdateCallbacks: function (callbacks) { - for (var callbackKey in callbacks) { - if (!callbacks.hasOwnProperty(callbackKey)) - { - continue; - } - NanoStateManager.addBeforeUpdateCallback(callbackKey, callbacks[callbackKey]); - } - }, - removeBeforeUpdateCallback: function (key) - { - if (_beforeUpdateCallbacks.hasOwnProperty(key)) - { - delete _beforeUpdateCallbacks[key]; - } - }, - executeBeforeUpdateCallbacks: function (data) { - return executeCallbacks(_beforeUpdateCallbacks, data); - }, - addAfterUpdateCallback: function (key, callbackFunction) - { - _afterUpdateCallbacks[key] = callbackFunction; - }, - addAfterUpdateCallbacks: function (callbacks) { - for (var callbackKey in callbacks) { - if (!callbacks.hasOwnProperty(callbackKey)) - { - continue; - } - NanoStateManager.addAfterUpdateCallback(callbackKey, callbacks[callbackKey]); - } - }, - removeAfterUpdateCallback: function (key) - { - if (_afterUpdateCallbacks.hasOwnProperty(key)) - { - delete _afterUpdateCallbacks[key]; - } - }, - executeAfterUpdateCallbacks: function (data) { - return executeCallbacks(_afterUpdateCallbacks, data); - }, - addState: function (state) - { - if (!(state instanceof NanoStateClass)) - { - alert('ERROR: Attempted to add a state which is not instanceof NanoStateClass'); - return; - } - if (!state.key) - { - alert('ERROR: Attempted to add a state with an invalid stateKey'); - return; - } - _states[state.key] = state; - }, - setCurrentState: function (stateKey) - { - if (typeof stateKey == 'undefined' || !stateKey) { - alert('ERROR: No state key was passed!'); - return false; - } - if (!_states.hasOwnProperty(stateKey)) - { - alert('ERROR: Attempted to set a current state which does not exist: ' + stateKey); - return false; - } - - var previousState = _currentState; - - _currentState = _states[stateKey]; - - if (previousState != null) { - previousState.onRemove(_currentState); - } - - _currentState.onAdd(previousState); - - return true; - }, - getCurrentState: function () - { - return _currentState; - } - }; -} (); - \ No newline at end of file diff --git a/nano/js/nano_template.js b/nano/js/nano_template.js deleted file mode 100644 index 877f2315bf1..00000000000 --- a/nano/js/nano_template.js +++ /dev/null @@ -1,135 +0,0 @@ - -var NanoTemplate = function () { - - var _templateData = {}; - - var _templates = {}; - var _compiledTemplates = {}; - - var _helpers = {}; - - var init = function () { - // We store templateData in the body tag, it's as good a place as any - _templateData = $('body').data('templateData'); - - if (_templateData == null) - { - alert('Error: Template data did not load correctly.'); - } - - loadNextTemplate(); - }; - - var loadNextTemplate = function () { - // we count the number of templates for this ui so that we know when they've all been rendered - var templateCount = Object.size(_templateData); - - if (!templateCount) - { - $(document).trigger('templatesLoaded'); - return; - } - - // load markup for each template and register it - for (var key in _templateData) - { - if (!_templateData.hasOwnProperty(key)) - { - continue; - } - - $.when($.ajax({ - url: _templateData[key], - cache: false, - dataType: 'text' - })) - .done(function(templateMarkup) { - - templateMarkup += '
    '; - - try - { - NanoTemplate.addTemplate(key, templateMarkup); - } - catch(error) - { - alert('ERROR: An error occurred while loading the UI: ' + error.message); - return; - } - - delete _templateData[key]; - - loadNextTemplate(); - }) - .fail(function () { - alert('ERROR: Loading template ' + key + '(' + _templateData[key] + ') failed!'); - }); - - return; - } - } - - var compileTemplates = function () { - - for (var key in _templates) { - try { - _compiledTemplates[key] = doT.template(_templates[key], null, _templates) - } - catch (error) { - alert(error.message); - } - } - }; - - return { - init: function () { - init(); - }, - addTemplate: function (key, templateString) { - _templates[key] = templateString; - }, - templateExists: function (key) { - return _templates.hasOwnProperty(key); - }, - parse: function (templateKey, data) { - if (!_compiledTemplates.hasOwnProperty(templateKey) || !_compiledTemplates[templateKey]) { - if (!_templates.hasOwnProperty(templateKey)) { - alert('ERROR: Template "' + templateKey + '" does not exist in _compiledTemplates!'); - return '

    Template error (does not exist)

    '; - } - compileTemplates(); - } - if (typeof _compiledTemplates[templateKey] != 'function') { - alert(_compiledTemplates[templateKey]); - alert('ERROR: Template "' + templateKey + '" failed to compile!'); - return '

    Template error (failed to compile)

    '; - } - return _compiledTemplates[templateKey].call(this, data['data'], data['config'], _helpers); - }, - addHelper: function (helperName, helperFunction) { - if (!jQuery.isFunction(helperFunction)) { - alert('NanoTemplate.addHelper failed to add ' + helperName + ' as it is not a function.'); - return; - } - - _helpers[helperName] = helperFunction; - }, - addHelpers: function (helpers) { - for (var helperName in helpers) { - if (!helpers.hasOwnProperty(helperName)) - { - continue; - } - NanoTemplate.addHelper(helperName, helpers[helperName]); - } - }, - removeHelper: function (helperName) { - if (helpers.hasOwnProperty(helperName)) - { - delete _helpers[helperName]; - } - } - } -}(); - - diff --git a/nano/js/nano_utility.js b/nano/js/nano_utility.js deleted file mode 100644 index 59a4b2a24a6..00000000000 --- a/nano/js/nano_utility.js +++ /dev/null @@ -1,161 +0,0 @@ -// NanoUtility is the place to store utility functions -var NanoUtility = function () -{ - var _urlParameters = {}; // This is populated with the base url parameters (used by all links), which is probaby just the "src" parameter - - return { - init: function () - { - var body = $('body'); // We store data in the body tag, it's as good a place as any - - _urlParameters = body.data('urlParameters'); - }, - // generate a Byond href, combines _urlParameters with parameters - generateHref: function (parameters) - { - var queryString = '?'; - - for (var key in _urlParameters) - { - if (_urlParameters.hasOwnProperty(key)) - { - if (queryString !== '?') - { - queryString += ';'; - } - queryString += key + '=' + _urlParameters[key]; - } - } - - for (var key in parameters) - { - if (parameters.hasOwnProperty(key)) - { - if (queryString !== '?') - { - queryString += ';'; - } - queryString += key + '=' + parameters[key]; - } - } - return queryString; - } - } -} (); - -if (typeof jQuery == 'undefined') { - alert('ERROR: Javascript library failed to load!'); -} -if (typeof doT == 'undefined') { - alert('ERROR: Template engine failed to load!'); -} - -// All scripts are initialised here, this allows control of init order -$(document).ready(function () { - NanoUtility.init(); - NanoStateManager.init(); - NanoTemplate.init(); -}); - -if (!Array.prototype.indexOf) -{ - Array.prototype.indexOf = function(elt /*, from*/) - { - var len = this.length; - - var from = Number(arguments[1]) || 0; - from = (from < 0) - ? Math.ceil(from) - : Math.floor(from); - if (from < 0) - from += len; - - for (; from < len; from++) - { - if (from in this && - this[from] === elt) - return from; - } - return -1; - }; -}; - -if (!String.prototype.format) -{ - String.prototype.format = function (args) { - var str = this; - return str.replace(String.prototype.format.regex, function(item) { - var intVal = parseInt(item.substring(1, item.length - 1)); - var replace; - if (intVal >= 0) { - replace = args[intVal]; - } else if (intVal === -1) { - replace = "{"; - } else if (intVal === -2) { - replace = "}"; - } else { - replace = ""; - } - return replace; - }); - }; - String.prototype.format.regex = new RegExp("{-?[0-9]+}", "g"); -}; - -Object.size = function(obj) { - var size = 0, key; - for (var key in obj) { - if (obj.hasOwnProperty(key)) size++; - } - return size; -}; - -if(!window.console) { - window.console = { - log : function(str) { - return false; - } - }; -}; - -String.prototype.toTitleCase = function () { - var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|of|on|or|the|to|vs?\.?|via)$/i; - - return this.replace(/([^\W_]+[^\s-]*) */g, function (match, p1, index, title) { - if (index > 0 && index + p1.length !== title.length && - p1.search(smallWords) > -1 && title.charAt(index - 2) !== ":" && - title.charAt(index - 1).search(/[^\s-]/) < 0) { - return match.toLowerCase(); - } - - if (p1.substr(1).search(/[A-Z]|\../) > -1) { - return match; - } - - return match.charAt(0).toUpperCase() + match.substr(1); - }); -}; - -$.ajaxSetup({ - cache: false -}); - -Function.prototype.inheritsFrom = function (parentClassOrObject) { - this.prototype = new parentClassOrObject; - this.prototype.constructor = this; - this.prototype.parent = parentClassOrObject.prototype; - return this; -}; - -if (!String.prototype.trim) { - String.prototype.trim = function () { - return this.replace(/^\s+|\s+$/g, ''); - }; -} - -// Replicate the ckey proc from BYOND -if (!String.prototype.ckey) { - String.prototype.ckey = function () { - return this.replace(/\W/g, '').toLowerCase(); - }; -} \ No newline at end of file diff --git a/nano/mapbase1024.png b/nano/mapbase1024.png deleted file mode 100644 index a927a71b6e7b31c1c8a4c02341bd9d56210caac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 525330 zcmXtfcT`i&7cGi{3Id8sD1wTDNDaNCqM}qqrT0*z_ZmV(5L5!_2hxj*6crMRp+hK= zfT2iB=pX?igb+eV0))Wh_uhKM=T$2jr|07s47 zVUNu2bI)-L2_cUZ{;LwszJB_@Qu%LQzLnybm67st*5P5vD8{q$`g7~T zbEmJUNUmH}*2@C#7{9s|5N;4;(EH-?wR1xJ>9-f{v4rBoePXy{=pd;%iS2CsEpy}m zu7wFt1+ElOC=_QWr_J!zMs_^K|IiJF#3}8kAaMY4iq^bd0bCK~YJz4Y3QU1PRaMk2 z86XjGcd{kJ@*NNd@C9c_4ovulnz1TnZiGq*Hxz`*+;5%?@YuVCCy=6wD~!6gefP61 z(n-5?DwRs7BioeCp5{x6*^er!JNxM_7yV6w`tkBl2|k5;=(P_4RJ6Pbct$-1ht!A{ zjt};9(v|t5N=5l=tkiXs>jB`^zrR*|*O9Bo>*X`u+{#j~rZh0&ief+J&lMA7$;SJY z%rpzs!ND;^r+Tl5*!2F&PL4X3_*-wl4nz(no7@qTTw>LyI;xW}`F*OZ~_T zGksuwhNQX?sDI&cI_veSa>@zj{DgQ$20tT@(5gD;1#7c>HyLU>sQZQ(C}iM=o-KG^ z*5{Z`XnI{$$e&)EK>xR~x{-^S)mhSwX6?Y50(231H8GSOu_akC!AmXybB)1m&=hd9 z)^7u$k9LNq$m1*)tGv7%07^mmzrfKqHWY}ha##{cwq3zcF*M84Sf+=ams!r3D*(+5 z`2%qgoz`y#rE}jF5NUw`Ztp|s;{1@jcGiDIMRsBOy1KoGW~1Bt(0%96R_i9IHF7Bh zyh|c}Ua;W3El5t8fA$ojbEu0oR&c{%1G-bQu7Lq|w$B`HmcZ&(LB8%_6AA8FL^Gu@ z$}E?tc(@msjV%pd`uq3uz`3+4a<+yuH{mTa_SJ64bT@kQlitLMdUDRWzCkma`Z*@00~*U-=Q%Y| z+%;szY`@w{gkR`Ts!}Ak@9)%OVzT`gb24oG@_`>B+;nqTv9BqjArhDPxto4=oodv= zwc-a#xxun%*!E>s&q_*axldi1SA$+eG2Lxw>Bd`E*rQMhSZJ$7JkLx)-{P)4h94U* zCtXeNMbqptL!B{U%&>@+PW?1u-!z6Bbi1&nSC|qBYatUPq9gA6BK(jQSxf?ybUR-<_*5oi{ z4NsOh%wDG7NZkByWOmlkq>y&tA^Tdurz25zo)`lz`&p#;In#h$e5iZ4X99atl-ffi zk`7siW0uv5qqO4R^z%>8RDBCEJ2f)c($aF&5heZnvdDgAh&~pwBE+ck%8UvQd&Z<99tJ%E; zY$OQN^;ksQTD@0ZtwGY)Bj9uHR$N8f^g86UVxqj_S}SXIq~!U~{wF6l67WkzqF3}cdDy|pFzBax3i8n+ zqU~UlkdD=DKs?>jLuCHv@tYZ1zOPzr=~E8v^t8MsW5&)fj*g1$jke1!ZL^M}kob3u z%|@SP-`Hm`YqN0QkAhKj5o!6n&&P!q#f?sb;qxZGRUu~PO$~LKcBI+aS@lyP#YiY_ ze`|!25!%+0fA?l-y%1$%VB<`rsc7S!l>^I{r5LPDRpDmq;9kh0apm zV_%sY$jcDy&!M%r`yVj8hlF2rKIzF?N|6G{Li3CuFa>s%hOANLKk*MPi7c4i%n^y9B;;AxGrA>MZr#hf5Sv^m_;$#e~!CSzneuB4jofhtcIIS&oCCeTy?o8>dnA2v9C$j)`BxwISxL!)!;aVWZ)Iw z$y9Pld$$8tTfTJYWWABO7L&=uhDYEp48DFVA^hW2v`%SJ#v?zF=#t+D%WrCosFySP z8&B<>ZFS!}ywjRlDxNd4Az)h@o1T$vJ*&t-!A}$bv1}k`eunyMM#rPgI)*G$on^az z0#o$7&@{PaT#?{c1h%^vj7-3Dv8`KWP~C&`yuOcgcE#ggH^C zRHlJe%13bOJ=mUD)?@@8GR^5Tg2>12-)j;zHZP@3i`CW+R0H9R>0}uWTTri zGXY1vuJD}7;T-6%kaQ#b*~2z&29GDZ&dkA1pk?duEoHAl=R8weblIJ;!e@snJ~n^A zM>-pbr=CUP{X>z$fpEkJyaC5dZp6Q=UA;M@e#is8q~Q!$u0J$OI53_Ljns}&Aui+< zmaV#^1Muy`>9hY?&(ApXZG*YxGzpYhcH!#sMBLZm^z<2Ln*!Lqnx>VV{_ee=kPo@@ z39-txTU1X-m%LXi9I-H!0NpQYC^-G}ROd3@=)fjIGuzOOH|y`jQW31&NWVYmFYGO4 zKi9JtU_kb{2pIL#ZwLh^+IsnY`FrYv3W>Y~lc}wSr@aC;zN6o}+-2}5Zd84h#|a8z zJ+WT!xw{$OE!i%doD>)_={q`z2)cyvA1PKmZ>>7V>rC2WYA1PA0#Gj|n1f^IxyF>X z^(k02fM(=7GDGz|cV%p#H2UghiByr}SLH6CbvQ!3|0RFD(j;^(@$m{ibu6I<^O zx)GsrdH4?0QU2Iy!2$#()w%qgKgxp{F6M=F7Es8gZilt^HwzBbq_t@vE!M*ec>L=6 zYL4(9X!C#oI*EkIA=@hxgob!`(l8F!Mvf0%6F%{fTwg_b+YzF*WK0IK;B|?1_rG z2Y<5|KkB`kt>KCt+!8+}!cW4FOgpWAF+cdlj%Rk8x?CVpN((Q&kgT`~JQ`da} zIrYhHX-!|`Q!kmAcGppaKjVTf@Pi#>22S?}PRF4S#9x4B@J|q3Io{o?&34D#{{!L9>joBnhH(0qoB&w==vr(pj>s1Z)3pT?csIH#FJ z!=`vo_pa22CzDdBEm3Dj`Q$bFDe|mSbIGf~yE2WQK+k3cH%AZiv!m-9geb<25rb*@ zqs3yDy{e;|u`Pz=yz5CO*tOh1m^Z8|YOGTLc+K-JfjVU)fFd2J|27)Rva;w-d=;T|1)|2FU6n z;_hFJ#1Qll%!;>+Gn`xjIihMtq&3x71sxt=Xf0Bid+LPHO7_mn zx_|GtJnIe3ak_J(C$b=D7-Q$AsEh$l>6CQ)HaYz9Sh^FI@3S zr>%87F4V$1^i&2bhLn{~VbvkrngFC~~kh^=Y-j%-G71Bm3v z>w?KKPOoZiO;eg2RuXpaw%^ysk`obsZV1AQd1XET z4gC_KX2CnZ^awg)5Vk;B<@<0F;!c7ScL6}FWjb(Wx^+R@PNA-nipTa8A}ozjaZa** z)*ISAtm2`gnJKgN3ylY-#uB|PBx=(CV_xVDp5E(Hm-s9+r#q*NYFL+ylIZ^nFaab- z={Y5YzWej0C7qD7FUiuuYI%x%Eo2((FTf!Vz70#y^HW;c9*zWgR*RSCl(}W#I)zc! zdcajn0ZANwU@u=WpMm)6J5xm>$ulF087VWn7pq?P9eFrJ(!5PkqF{c)=`DM9Zfls? z$~Mg@E-qeH`K>!|P=JdL82bA$wq^FDT@w0^S!^gY#(_vu50&{CJ}X{;lsQ%)HVu9{h}@Mn8%QHtAXX*8+)`efoqo5|IVsQyY zqKUp9&cpjVvvKtDwHMveLGn^WeVv*%CN<11>jqJd=9C;Y=fdpNvhPvS&B>(lmi`jR zd#83eJD zW|H^RXyrZqB#)CnC{o28#k_eBpNOMUA?qyMd)FmzcwhK*gR{-f&DIRHqR@c4k+Gjh z91`c@_|%x0Zb4g~**g5n{Px(_7FS?7^KsE$_fz|E=Icy+G%&iIBGlsPch;}ii?N9sn>VdutYE6}`t&Y@kJ+sKXoJ1F4crGAtHcbImKuGTemzZFXAmm`%9juMnP{k|bbkixIqq9?@;MpV(Bf(%Rm7uPx)ZSMO9M zGQjI45@4*eBK8S&e)`vdATmAJ!H`L8!1kCqbXRTcyzUsL| zj)1EE%g&1a20s4liH~pnhkw}CUjkF~qZF@&*Kq|7+3xOEUl~Eb@)UG`tamD*TED)G zyP<}TYI6des=9$WNA+a@${;#9_-~j~ z?@Y~*-ivZ9Ng}EP3+CUio^902$<_!RK8D{&OV9P~=T}e+Sm|ZUS!KVhS>+~)gciaQ zVh}jna09>pvTe-xmsbZt>p%40rm-!XJ}7lcA)2FemP?r%&KhuASiA-%x8~qzld(v4 zWC>x%E1fB`s5w!Cm4l6d|YSO9Cjbk1gW@Vb)g&T`^ z>b)!h)>{f{otxFMF;#|K7WJz0oGs`;CzA;czs93hb}uo-hLZg@GPyoEDJYPV#Nn{B z9;R#mOynJeKxwa;w}{rRbvW9jN2jo4N~?E{*V4;nyq=#Z!-V?gYNP4&nIhzbqWkON zX?jQ9q}O6-nBFQ+kl&8GV_7S({a+JlkE!CB2b}pg>y%Z>1V-=^>{m+9M_gjP2Ela` zP8$p?3J_~-jl7<^Zy&VJ{SkuQaFFcR*`?1PwqToZmVk5;Z9DG+Irvn8$IHgcdUy;n ziP_X0{`)7lyWV1+TdR(!L}htAsAc0qd~UXPb10DyblxDl3gX8PhpZecuFK=W^XD(0 zQCHMN$q9V}`@m-}7dvJML>w<=AzE4+-3I!+9ODjBoU^Z-5A?2u?l!L3!x&~B;AwO>Dch|PsXs9A1GpF6_)=PL<$oC2B)qDctkBxhz%<=fxQm01 zb;DS8r>I9*h4g7GUvo_OH^3&fQA2lk6{Db$7Ue`?%2 z{p*6Yf9&XT-5wKsaR58g_%{~69ewX^Fxb5suF#4_k3dh`Ke^BnnmdO|Xl+Ikb=yvbq3eg(vU zzXOw_PI-qA{zN^=kDA*HH*xL=or>yfnd|egmECs}*hYj`p&B3jQ4}WLSea8?Ugd%2 ziyQ~=Z`gG+-9$5oG~OOL*)6e?FoQN7{qIFdPK1M2-lpESj~sks$&tlzh1m}LJ2mMg z5)3xKYQSuC(+#0-NSDRmq7ntZg0vjyAC`lYS21!h#XkE=PV5e@S-olSlYWWff$q?V zI`YAvZkBe7nx2UIpT&FQaaUOntA@$hc}(3t&AL{fHS=DvZ?UXF-9Dek)oP+)1BplQ znx#JFzRe=Fu%;*zs2PWWJ^CD*2R|%N75rh`_kW$yuRon3g3yP3>t5JUQ&s%y@UM-- z_i`i9g%}*z-Kp6^@D8a2OX>ESzMX2wOhGui z?n~tV{8E)@s2;hC%~pJsGH&Pl?RccRf^j48#7FhXFL5&yHn+Q17|yR%pE~K~rff2& zGolt`H2nVzDj@^+xBOk>&qvx%jQfP?S_a*jP^2~fq*ZoE2KfEBqIZw;Pw}Q+!P;`{ zl(6rT+EZgQJt>LI*Mh0Q^~x#%yXo`;>^sSMz;cd?zIloZ#6JomcKAu+!8Mgsxyx%e zq}VnluUvhQEg(PMn;~HIhh{<*Sfa*%i`z%*{Zq_*y_mj!sern;kZpH_wo#G&Mjd;1qX;1%A_pvK!t*tTCu38|;mCFw7im|Cv*>Ff&wdmMz|9cW~v zwChn>etLIJVQ&8{m)W;>inT>=$lF0Na&6?pnQsXLh*4~b64Mq=~__39UJzzKFO@@#TQb9tQrgB63Ggs&n75OGX7+F zVcRNbtEk0sx3J^2T!u3LNdyI2vc}*#etVZDbw=2nYd5Yd3Mbt43!Ptyr@zblQS>v( z|4+t=*s)u?ok2r4AD<(3Hghi4S|G)yRh5Dr^U*FDh8+bF=Y;;%E;c6t>}T>E+Vnhe zHJLH&FFp*#V=b>!=XMV4mRl!y_!cRNN~avNOX&c?$}4s0z3rFiAz8jl7bj5<3OUl= ze(3mnXYvJn=|an+ifM?wvvFULr;6R3=-Gk5&zaS7vjbwPagNLix{9%>+OP5_iCl&I zH*{CBv$I;p>Z&uZ#i{8XZ77k2g?4^&c#|1lRA%&C$fq}HK4w_UFbiWD;Xce{zb&LqGOfsuc3NFuZ1)ZBzz*@ot0^#es9xfu<>tQdUq3l;z%8Wm z!B7xbL1#I}L{_{|Wx4l~q%?7^IJ!kSfZhSlq2_g&U*5TanvDDH>tjxJBzx`GY}K+G zsgV@uW6@5J0bmy2)XUt5fOby!lN$VH!_Q;W-*W7_+zD#E)4~imc%zFnpSq47)f!-)LVKt4JA8qfcKtJF?s>7-%Ye$H{RBD|iNUx#eja)Xmw)PelfQ$mLi4}dk& z5DoIt_)J)nZ22K_YLk}A!h8U4PScKd>}BQ3y6>0oZOMzumeI9suv-nnhLH$Y`s-(A z{IExD7EPf{XYziiK!zi@TaC-v$mlGb{WLTYDb*`XFWDN37ayU|dVz&Wtct5g(PKvS z{8xBNGjVkEDR&*8O`pKQb~)ui#BX|*m3T)@Gq3NlG9L(}4`=@Ce>1wsKHIPs!(YcL zG4hLx@r>&Wtask6%$PcL#M&K$!g#64FoTvud*nGe-?X`AQiwu%%n$E$Cu) zRckYTQ2C41SN5}}-H2{Y8;h{bDr;y0f7?yL<%I({7;3ZB^h0Qhv5=<*=*si^8=)i-|%_XRV-?7Zuw*G(IGk_Nm6zc%PkMc^fDCzk)@mNi)sJK}8P$LA)XV0ap z@ahCRysKKI?7PosDfNJKA2_C%tu z-BGEpO@O%cjPEUywBNffHy`hLz@za;9aQFtP>eWyr!B#@^`ivgj{x8;PG$8{1`VueS9XQ}0=d&k~8P3P)v zBB54xlY74Y4wPvU;Z)=E-lCf~Qa*Wd9eOtZQH4A_IAVWR)*j%ZS4q|=bEa|wW!UH8 zN_P7HfT(+*q`p*?&vm=9^0iKZxOpn3*-40+6!_ttSoxw+BwBT4X6YB7GLqbBRqt3kObr@Zu!NZOSo1eczJrLvOs(68Z$9*aKgQk0 z3)^JfC>AHhLSkcQrmTL?s?J(Osx;ms82Wy*D?fek=78y__2-N5#p9oD2%tq8#I|$i z8vCQ?rrPmN6${2P{9K7meyWcIq|{2)gS-B_W?!Icl6z>p4q0&A}VLrjYqq^y~R}Y zT~u_NciI!;yuXGI6GbVKyY(z+B$swh?6s*X;N8S&^uA1_4 z8zsJ6*NfNl-k;%Z>$meYz-a&ocVej)<)g=+X3?JEpHI20nW!=%Cn=~x&ANv3V|D2q&h6~hdcNn~kIP*f9LGjFL^@fL zEb>J@6aQ4u-w(B5&N_m8rxhnl#dk%+HHLPmhUSEDj+PTky64{ zG9LGVqa$?K%G%ZO$@EKZyRqO$?IOrCRXC$TEw{q66*NiT2$_>=r~U70RGnIi_ON|& zU-GG$)7~ZKx`=w!?uD~C>t@EBFa2=6if4Fw_H7;Ohc>+|nq$kbYRv`LXiA<11#Z+~ ztSt-4W8tZJ*Zo-W+;@Xdx-a7~%9Z&fXr+ze!cRGFx!BJK4ok)#K70ha(z$a2;)8Sj zW=wfozgf5tVmoZGjWtmqzn_1PJ09eZ3qS4`6BeY!5K%Q}d#mn(ZPq8-c~VRP`UEIt zuU58QaH?bbqLJFoQ!G+QvK*IODE}V!((J55@F$%RTHl?@z1=g@kK8!$$hXI=on6tB zj@Vo3Z@5ug$BC6%wPP0I$!5gNYLpLeIQv9d=fBWS=JDsEohcTA-6KNll+-we0?QYD z776HBfAOfuV;xU+9^VE&UU|Wy!8u#Wky*m750vyw&s`#=UOW7FsV(f0_rt zgmw&Ib0qp@(ANiF=g)73mvPo;SLm7BtmkTT$R*7Jln7Fx!AG?dgqK!E^ti+eEgRlg z`nI)cdT>W)%PwxrJqR?u-gC3DYd0L!v5ilajbMoSjvb|9&GhIQ$USe43;AlBDW7p@ z>869q9c^X%-r}nnc^xHFgiSH00lHEa`BzZLL|jku@}N%9AqK^1!SKoP{2Nm`K23ea(sIO) zd+aE2SuJAWnppN^C|H58CJXbb|K)nB(*ru39Cxi*NG#*Sx1R4cT`et5cd4D9bllb{ z@t1lAtUb>*13%f=T;_zgcPaheuzL_upKGZtz8^HOyNQZn5@>8j+ zwqCgSAJE3oH+7uonziO`)qLm{sUWBMHY6QBo~kD{v>SN%7p;_XOsv7%GCXjG_8d0c zRJ7eAz3M@m8!XEID2lp(e;@$p0kj)(9aHmh=&tR5`&SZXv%BxH z98@>EeCs9Ne&TE0<{>^Dmi!}L&;mJKMG~28%mqx;pc82xd*P~sEslO*ibqlKj7_Vn zPRmc(2L+MBg4>0^w8#hwO58YqGN+g18Aok9p8-hrX97Tqx95k5Duds0-88rgke3ME z{00wW^MJsb;b1F(7tFA!?CWVt0#J^v=6ebA)nILhYUFL7TGJJX3xF$;W`B+6$T}%z zC)ju#IlmVArMGB1zEYjh|G{hCaNuXw&` zo*=Oq_L0`fB7j#Fa%uxla5$nggzf$EwS<~>t;jNeB4N)}6xZZVu-$+zdphXn*SriO z&5x|;ipdjVavWLTGYjj-% zKS2EOZ*WGsPbD`qg((tUnY7g~J2)ODwmaC$wP|NAb9HFe&xjFT2r=34b3=fKO{xrt;G9 z=rgjqUz9$PGjtIBKE^-8$Ko*D7F5kBqNqQ|rTTk%2{u;{S2phk(uWay`v!;Qn}uki zlh5U^;>36Pf!fK-G2_4A0etT(`uye75Nc&p0dQMClxp~#9;L^yIe6&geiv}CD(-;_ z;(1;9K!+&J)4mk5`+fH0{VV4=7YS(&nsA}v2^aa-W*$Ee6va{bCzZtF8{O1d@u8hLrv-f=J~kEf>`S}9Ikf#Ys-l7s@;iN zPe~3$#n1;j();4Cj<|m&lm0fpjOPD6igCMf!i$`F4cr@V7<^66 zP@32B`rCVUD0Me_UPnszb6PMG|KUk+z}6#C0g?=#oe16Z1Ymcj4K@i@Mtl^4(kn*KE>G~{?5v{(pjdu47h^!jKrmIeCxuO?a=zD7z; zsVpt9G@d(h`q<+2lgRy#*K&T?A58N2o;WINM2FZ~KUeuZ_WUJ2BOCF{Spu1ft#xVd ziZP2AmF_!{&A;~P9`sG~Q`e2uxsKl4DMX^Q8MWy>G`B1T3>M+26rpu~Rq zX!A7_=|_K*Y%JiB2+w2lENxnf$K0HPY{X_W)=C*+OAubKmq1{su4E0rEUaxULpIPF zjtElY&1y(eSK^!Y(BN;J8#MM|40~+xrtE%Hns=UG%l@0bTo>SqFq3dBDvBYk`TmQF zDO!Zxai?G7+pl+Y#7GDqa*H)hA0&t^#;8ASdxuMH)NONho&N~UsVBa?nxziXNgdLT zyA;q3wb_?=p;Yv9DsDZSj!pKRgB>zgByb0uXuFN>DBB(%60@1NCc1EydnpDjJi4cJ z??-4#+`2sm^}YD^TDTaD$lBts&)7~`mR(7Y>)2?ax~#m~oo`{iZh|t)rQ5gG3U2SO z02!IMlWwr(-1(YAhMKwRLqE3iGG?mYxY{gYyHvwl)W}YOI%Gq zE8>7IlzkDzE9@cr7Vp>QuoOE&fr4Qj!gIuQ!`h!r}0s;i{28jh@_tdS_VG`8b@jHBLr;4PHtovcDl>Gq$pA%h1=K#Q{Q!QbH?7#uE{E6wiAEsE}SpOq8=qS_Tvb!AHy0k zBD(p-xd&cQHs7KcNSt{kRDn#*iZvTs=g>{ z?wFP|{Gg98S}Ssm=$$0EvmCwM(Q4U(ml^DAq_|taV&~%5@spnsC zfNmX?epJm5PJsxw_1i;JHBi*%4K<0@xX%r6YI-C_5M%3zfQ1|Bp1RV!zwc z5=yNiNNhAY!P}jY)VIu#H}tMZ*2%fG-^rrH3#}FY^YaadY)t)}s?XtH6AEQFmC+Mb4Y zR(>03KGW9cnl=Wx!uQ;%C+0YS_En!3y~zpV^gomU94;y~j-S|E3qLWFLXT=!JnT^O zsX7}jkB;rxUkPrj$kV+pzUTy%57Qi=q9U0*b&3x~vuNY=kAW8!ah@w02t5`Ua#2_M zwr=%Ad+=dTo~RAzo)h#6NoWX!ZQZ8IeCJED4>TT-L|7-Nac{0Kt+?*X^-KF*&Sj3! z7spADsr6kBInA<8?Xzi*uFULJ9MLP5&#@;%ca9YAUSCs(`ECaIea5|Cj%5Zlx9=y3 zcOxrzw;PL`B_t%KheoHYZhn?C)qki8&CiyJwd&VOdi*o?Ufj30B`Eq|13#4m`Ozky z-6!kmIIBb*vwT*%B9nh2GV_{izK3bQO>SH&M9d)4uWs{5%g0nyRP?L-nowdC#d5Ap z_h9Y>(z>pf6AA}fr@u`SAuw5-cnLJ53gIDUy546W`&l%dyOsYy2qSnHVFZ|F#5Cm` z1oU^bCqELq_3cO_8UQ|$3H^Sk5}+Bm(;y1oh^f2^^A|tN1&HE5uq<#X`&A+5(q%Ja zE7U2)DfsHBe*@x+e{Q3zd?(b){4cjn_|{PUrV?mfQ=^MS%e9=)uZqg)?YG6YhQOic z@&k-^RF~R->N9VHn1u=PZQeXDcYrmCT1R8S6FS>h(12$kYu9!Wo%0I`twylh9m1*^v+80nTBlt=u`gVMHQTt&H?<1>aXWT# z-mg%c7*uaQplv+5gdPf35TOwpF-@FXI)f@0aF`h5amiIrsup@gqggsF0lM*DZjUxc z5@mml`U#B~^Kg=vUaKjB<*GPs6&{Yp=3v8xlg2%8W~|vf&Ld8<{KDbcg51T;m&sC4XTr#lGHV<>d5(*k$2tzm;D4m=_sXNtWN^{`>d+XWa!i zTU{64k}M8kTeMZPKd60crzwf>%xT35d_mM7eYWvAo-+Rnh7zYwJ#mnF3yi!BY|o1B zuWM8Wu8^*6s|D!ZJj+EX>Bk=99$IV#D+#8aNTb~WUysWX(jOIF$m?OYYY5dKp(a%q z1x5Yjp*N6jHtdYJv)iQ9oMEe%N7v|F_h?)$n{}3Ut*6|O6jeDGZGMs$hlc0VvPepaqkgM zu!e8xGjs6YA+H^ADh7Hj{bI@y?|fCoH^uR#`w8)0_dPF94~cyn<^*VIE$wE`w|dTM zWAC@pgc~B+(+Gw1-o{Y$H_WV&Ytn&VupZ$oYytU zv>Nxd#O>%u2ew@}s=&(hHnpl*ST!!7_dYJaxWI6xwOsXyXo(v>M2H|V3186V|DPj8b*V@m=14;F_!wAVM*D5Ao?Pe6FOzg%Ndd;;Msa$?D66G>@ zy=F}H?lhHQNLlqYXhk0Bn~ELPd9=R1FB^O)%oqeYT{JYEc-&o!^{VpqTDMb}1IR7( zt7o^zlkO^50c(4KB!(zg11+MX`?OB!#M7mvPn37dcNvlLfuUf0&+<8J4{=bqJdODb zbTU@!?s)I_YuJiLJ$DVk>heve?)7E|- ztbywH>g$IpcmHlpv0W57^sEK~6ynE^F3&YWmL(25uqR}(zj2al#}cu>)Ly9a{tv+_ zH~(ZYW%S2ht)+h8+BM#xHFUy==Zk>^EWvHMngT1wG}ZY|jy^f1rMEIIKK;Dzv$zE; zhI8rrNBzHrO)u{1i{kasxB9>U(cKox46^^Hfaky>X-h+yDmd&nc9rjjH30IuPQ0(( zDjL>AswlJ$9J((D4;Wtf+nS!2`ouYyAU+GS#C$GRaiySb-X$6#mgG7aY6X!WrFW0Q z-;i0;n@Y&{ldpo+wQonti?-d7F#Ph_ZHi-Gl)z2IFPU1i;z<|O?mtLafN(%(qf>I0gV;-?L>2CJ)kzg!K|+;UQo3fNh&Kd_yfA{@-dheY4W{%a+tyzfHX zf^M)K#jWAN!e%N(S*&{zmjHLrztWdMiH@MsBQN6T-R?CL&wL}Y`=omUs6KeP0hAZ9 zbWfNFsgB_N!RE5yz0WzJ8&TM2-!EG~zx-Jk_tw|T{nF)BfxjY?)hO9wvASXSfqTCS zj3VKzv6q`r4TNZ{uQ#d>#HL0|62-#IH`K1ViP?@5V%0(zo&{w3SGHf9SkMSc@qmA- zJ48tKJ##L+b4wf)I$-0Ua+FLPrcJJ!1unLtbPg~YB9}je8%o1=;#ZDgFiV$E{_kZS zE+03U~fMfY{k zr*jZ{S_#6dX4`YaEyf_G76RSxwrG)v7$T@0$yQW3dM^ssBUrQN5zfm7#<4c?_AAkG zDjUMla_%{sMZMt5QK^z9?0c;ZxtRKWJj?Z52F|?Gcs-;B8es>h(J;Cz zHD?REIjz!H#rR_PW*MOTv)nV`Jgv^NCUe_(!WF7MED#;#=_f|Wx%kv%LZ|zr@?Z<* ze9URVA<(5jPlcK2XL47lB3=iJp7JVi$LPD=dmbWJtu?v;R?}QvHg(OH+LAc&#Yz$$ z=xBnbNs-nIl$$@Z{RjO%uI#VvZ1Xi-i^z93x(Hvx@(+Yl9H?0e7gz6OGsiMoEJh|T zD|C+6N|h1sBuu_0@sI9S=K(6YddSp6`Hkq-vay3#A{^+DL_sAk@Rt(i8brGupL&~Uz_!u#rYf0UbRyd#*+JWLaB4nTzzHA9tJ zi!39wdbtYygH3ikmt?#hUxm}PR@!c^g+UeRzt4ibTEW6Zd0P85lBsU`z|@^0K(1q? zI8fZJ$N>>N?KyzJ+Ic#(Y!AboEhK-1Nj9o~aFy@q5kYy030mQg+d7pQ1Vb{lh>$1E zpY(<@E%~Mtky1giG40oU1&KV)nC5FIL(I`?HnO$f8iZ3;||NGplv>N_&=$PmN z-IRz11owQ)9>JW^Tm5Xs?<)!yioG0uO3Er28cFB%L!Fw}JQ!Ua9^dW%q^8__^2nM7 zpP9D2Y2q2;+_7CZ-FiZmkQ^JxQFbEi{VB0>os65{MRHkL$FJ$qcL%DLU)B8b+3~Y{ ze}|Y5W8k3EXkPO_AQe$tCn6j@e$SWxP6;axd}(S`qr0X~Sx?aR`4YkE ze(=RL2G}Wb`z)$DjecgSNbv7O4n}>eP?9+hx1Q_&^i7EwCLFM&e-XjeKKPC>7S8Fw zHRzDQG-70~ise`s_(COQ7xb~URzoHDz2`if+0rGl0Ii3u{Dl0A(nb@S<6MLR)R5X- zaqt%yt-b(GH1O9=XGe|p!wu2}0{eZ%ru`b9+hSq9Mi&3h@Ot#OKX^F);bGn=9biSc zyn()`{HF|lGNb~2aAG>pN2;+vqdfq5)`?{Xe!sdNYJ@9udmb*j=e1e@3zrY-pYON! zlxO9gS*ivy0L*k=?LP3~RzhXyn98e$;WFc+oh@Y9wN6WQgx<6XIy7^3%dS(etY}*bb zFJxu-XnCYl2Rg=@%mW0ReV0#w8n1R!j=b(!+|l)bjJo#T@;eJ}miS}w02yVU(eg&ziv%JAxEH%z@B zsh_e)_sBis{d9+RWNi-lGAteN>MLr*>be!z`RnRE&j*jxwMK3o%F^D48(4XI4@E2=X_2tC>StuvNe@H3Q@D4}PpeMq8QlRZ8CpGDKgl>c z#Y{`scmau?WH{Ws?7~QkF#B`=*_L_Qql@x4dXgrrPFLduGA<}M_&PF*9~hc0)<5%| zHTNzx)l#Insq+YLs_R#=qr`27yncSj-6o7={aV}zzV5b|`JZ3OblgvPW4cSReeKV=;o$g-Uibqx69UMH=7q zy}(s~yfOne4fX3W2o^aHX>w9L zo-vNW3{H@xS!dQ>OTQsVYsr{r{1l!>!AUW3XRkgyDYyi8U*Fi+D3cjK&S$Fp|Fr;i zwAsR+yGQ4(?^sVTk(snz-UY`@bqnYAbiH(op+mBB7vq8+x}{}jUv7oH9H#syB57dp zZ;N7Au=<;-I{IiBWY-LR>;DjT-tlaOf8VECqh_m!-BwGrw%TIUYSmWM3}VMl?bT8{ zsA}y|6jcPZSEvzMt7hyKJBSEkd-A)V*Yo^wKlkhPp5 zou~p3NJVk{=I>L`)Av&gLyY~u1mX|%*NcGfKi5|%#VwXR*ESpy9j6mW{N@sI%oaVf z9%7n`|J7aV^L?ki*DdMCaxVwzy4GUe@4}_!Wt+u&fdsjqZzhrVC8ylcVkORU9Tkx2 zyarYykmeTL{uE&DH{<_z1_I7{(YP4e8t;(JUfW<_3*-e?NVk*H4Z2yGg`s>ZFmbm} z(xK*t2X?aBDYc3(!e(pho1PV|wzOccX0JJ4^clM2c&pj+^1Q4bJ-Rv^zBYikK`4yg z*TKC&5g2%k|4Y%Lapv#~V#*l;{(LMb_%Zw;E!F27J7PZO!EW0w&N%*AfTeBumxpdh z&9}t$8+v{uKtJ&JG|2>Lr)9ko+9L!|sLU5+iuvM}iJGq#< zDdJ}JLd!Wiw}?_H{yA)dK_$pToHuFzf(D-iGrHP~A7DXRjhVzWoe<-$aIzgPDOz=B zHIf;&Q=t>?Su~tSY|M+P7c_|l>^N!E`5Bv)eZAn zu&n$0G+~hIX@G&Pvn8t0u_pc3jz)fJON-pJfR6pX5;Ur_80nf}XKI;gg2zU(1|&7dvfd~mF#@CT6D&<}8j z&>oBNF#N>Gh7i;OKRC*a|8!GK{}0K4_`1HWYi>7RWMG$5PpH@Z?ekqV36uFE9dxZ| zT4Ix_r`Igd@6mn)5*xb=X>vcM#RIP9y92^|j(wv)L?JVCj)O>Xiki~NEQ=iVI_Fl&4 z;Gptz6W%%9*ZikjTU#}h9gcV24?iTyQzKD`CkbXIJrTIEZ+dg-|Gp8Xb%*2w%avgq z$w!6*G#dT?*_^natMrE?DGUnNtZF1LC~+lup=bYXm;b|eaU0%L3SB(c<-fu3;^qJF z{(t}0t~ipuM^`2HNT;^{r-T0Qdr0EHQ3b3x(S3SDuM!3Sf6np0Z%#b<2B8}a5T?9o zMFgc%g+$ot!P@`5BLBnI|NHQWm+CzOI?VRYdo#$>vsdY!Zw~r?i}}jUJEcEbjbLqo zxmNebiS8|WdcU>nu%BjXkEG#PzMyNgN^1bir!Mo%dnqx~&UW}qBQu{3=_Y;cM~X84 z+y6y$m+;gpS6_X1Q$PPe=!MLAb+zMa0P)W2l*G(N$z{iBkErNeKKlmj{5kGlfJNuM zU)4QLhP&hVbEZa@G#(SL7bp6RWqWh1#-nS>IE7S00`gzE;eZUh{`bW$k{r!j4Sb61 zGt&!$*55@Bu2r$N_n(FDzHyr@7YSwV@9MK_fqwT656!`?jrtc;%lqGPDEL{X{GPiyw4$Lcvr{iWg|cgBXQFU_`?^$11R zLTC48IdApN^acb#uX_+>7Rm=AiGMzD{UPRQ8v~@mxSV9>0=fxe^VDOu)m|c(oh5=h zts?}lyI{@5PKg4sDAy#B0E3wUZ@Mwo%&P)lwUxiMq`m)uWLffa!-8i%Qek4i*xFrU z7*+}61U(oVOW9Z2Op2!w5=)!ceSU6L0kf1W7XkMWABPF=fJx7Al2)3^S5s>jfHZl9 zZnjyNJo7=aE5|1f;$)_;OLWr0Yap=PLNc-Xy|X3xwX?bI(g7Y+MXVez)YER9(Va-P zB2PTUbwli=ESaIGf}L{76VaB1{kY0oh{c0OtL$OL>z*}*ia=qYVH#`JRDF)G9i${ z)tuCJczQhr>ZMBhM?=4j*K0O!vm#g3U6cNNP>{;zG4B^bC7v-(IusL?i;($St}PW> zrGB%&VU0Y8eqqdW8;*E_+=OiOA(8@^AdveWZh%7@;VK9>>g6Lx@-7v>c^0_eKMmIU z*$Ue5z(+`Ya3wO=t;-YUdR*7U3AT%>(cbOf z^E@>DL)+VpTJqa8+Bzv1BMW6jP7H;joXXG42WI`t>$*FYS&At8)BPZ`OL`a12YkH@ z2Y7tVzEa;EwxOVNvL>6A3AQ?}jxb@Ho_z%*nR)fQ+zruRJ5yKXzD%20NOceYRfw0?r+G&&#N?89UY{x)KZ?48r{e}_rnT>6WAxf>@vCqJ4foa` zmZ4t)j`@I5UtuLS<_+fqHQnNzDoe_xCJp@mh04z-;wOwZ z8YMM+S=&a}*kfAMKe0PNrZ>mZd)sH%*MfcOCfUgr})o09o`g=1b5WB@0x?|9UU-py+5%vd@~WE)@W`lC3O#v+kVUb>3!^4Q&YT!_wsC zzoB)Sb+jd938OG$X!Kg}^o9NGa4~yX$nnfF`&%L191XPE8Y*pfCpb3~5%*^tU#lnxbqyjOlP8D$VI z)U`nNs@0Ytjj*ab7%%zqnM-FE%09UPugw{0hb3^EHlm}EJ_5LCYe}4 zoGhHBrh7ich<>aRnpKHszSgb_Z>P*BzhBfk^jcW4WCQNJX>QSzJ@zhaKAxR2jibX^ z2cQva#~SPdeT%M}WLxPo+H>}HJy&Nj@|y>?Os>lxfeF0j9yP31OIc;!Vxx?~125!}Qmes)1t+c5Gv9)9dV|9Q6~o7^oY4*;g@ zZ*`rFr!NVVq0SNlS`Kee_2!4+OADicR~>Rv^S8Q7Y*vU7>L1XTQ-&5SAC(f#l({mL z(;m9LVxZR~sTtE`+$RE7O44R`=%O96VF`DX2&0F^_WPg@W!cWRNx7=TQ` zO~W;g1i4m!0_R#-&QDfFF;Qtf0PxkC(3oq6nsC%aaDJLN4&*5RIQ|)4)`i`o-ECEY zb?nc|wl!ydUiE>@vGfud=weS)>&zZGo#4or^3%6_A(!mxM4Kyf{UO}k)6|NHkqX@y z)iLhBfhsix36%wYD@&GqwwEeW3X7KjuetmfIO}OT_R&zy>j2n(ZHO(VoDKNqb#|6| zEj1zWd*f*vscFeT(xOwtobSpa?{!Vvgd5+Oz6jT)Q=+_8b`Kf4Vmj1jrMIFC`i&Oa z6l^RUKEY%&L&9j%NYQk)CoL?XGll4YJ7(4<#a)x-7!8}KZ>(?0XE&NJYC=; z8H)v*3pt`%Oy(Ketgp}F`)~8G{P34vTDXh*f%p@_F%tof5h%A|lta;R)#e^6g`9F- z_FER4;$oWBm6Js6et$5`&TWTYqKKB$HGbML?60d`Ec0;jLio=lQW&EDoz5dTKnfP( z@m;ln0Vlom3l7h{iQ>Vqgc`#}5*)2*;&9a1-H~Qa^qAj(ieslcoA0Fk!><}*u@vim ziOu)_Bhl6YMp(>mO0uh|xtT3RQLaSJiA;T-&b!(H*v$5{NL$S3L94XQ*~bE4&$;aA z!ZDmES7~eWD=Ue)*8cOS2xAoP)A6H<$Izy*Lv(Mj!ArTpOf}1lmWI9Sy4~*67o3ql zYe-S(#_Es{Yd2vONOQ2fIPK>Qmb4@dxAZ^s10J~(4qn4##EKvSlkMw!IX^i3U4TeB zASDcTBU7AeukugwehmG@Ji9vN97-<3cOU<|jK>iy+U>H*Eoot8uTC^pu9@A)<0;0$ z|DdRz%C?R}`M13NodAX!k$Mdap;)bg!Adj)z`Dwp*SaaU6NkChL z^;Vi;j2x2273m++fATqNmB1gsIcsYE=NFMtS5jgqxa_S!21dyXe)ih(?qz7>jFjmL zvJESuT@U1FI1UNSEXJP-pt1sz&y&#qEStZzd$;jRCZg}Vy>#~OZBkBY{b#z4QHZVVs(vV89T8eq9HeRv1mZdt!Wp%?oM zM$2sC%4xHB{(f`fBRJkoWVzweO!I6lG&PnuTD?PFQq6)VGqa#tS!*>578;G@CBoNs z-XrTPS-etQW)b$gjb8S)RI?G7@c~Yq)H#sV@0`0ReuO*Hc#t|6-eq0e81C~C7mJG` zyhGod-QVw`cbC)Nd8Hs4&{a+?-oCr2Y}FI;z0E3aM)sM>6MD>N;`FJhf@2h>Q2sM%eRdwM9eH#RN&~%wi&apgNx&V-e>G7v1;|SweUv(lvVtQgM3tcAXV?QbgOg zhIae|GBu32&HD?0UhLv- zi1|qXJ1BOJ$n85Rrd~|CI?GDi9ZGmm_B8iwYx&JOaZ$@g&Sqy}A&UY(6!G^`gZo{R z_?aiM1Pi%7?iWz#%=^!wHN7R@f3VPcgW@s@)>W&REmEFaDlu~6Y&iVe$pm>uQk<$* zdHYS=$uEb-3m*e|nov*Y_& z+VqzHE&##-%kE?F$7;hTSA_wvPDh?=&K2XrhZr}N#wn^VI)x{4PIuY3XYw7s{qg^# zoMioR)Vs7a$tDi|e8KWiQ62r!!XsYg@IH$m>7 zxf?!PFK(1u^30G+RM~NtleHve%G&fsT1qxoicCJxH{5a}`Jli7v}{Sab&7Fp-6 zO6qj@@$KOKh@tO$5*+n-l5$~FtUiWz<%hwT(LHr+zy-)n@vdd6Dz>=m)gPzjK=%8n zx@>FiUo;yO_iT?EpB6>AO|bctmNMz#@70}DrOxR5P)C1He19fT3rv_0EiP-^G-?&t z6tf^ynLg+_^6hlw=i(;!CVV_9oT*f~e`7hK+bE;c4{5%)}J z43gUJ{zC3RSkkbZK4w&oY5Zn){n=-GE8uK;#~TrR0<>3gmTAg)Ionh=LB1tHy8rA~ zKNBlCbyM?@Y}V)rq*>FA91m>ke9G5c$&Qx4p0o~FlrI)NWUV>iIt;!y6C+- zHfDZ$+>x>{@wxOu-AW3NfkTMI%)~fZb`e2}+TQWX%~M+FeT%LksyBujLtL8Aih7MF zS%`an2g6#P*CtYoysUz9&bAD)wXXU2D%e#fogqEEbPFqhZ~OlfMUu~|Hb;?6aun~4odFPxTL|`OSww@DhZjNn5h$zYE6`7G!9d#5VmN~ ztifV$X(t|d>&$l{vWMNdO%q~{f{!n&7MqSyIkqnHd*9-#nsl}viX3;O&3nT4(lt5{ z#N24cwtq;}!GB;4W&pYk40V183-J0#g<6CxE8a><5u8I&+}j~agTHW4XlNQAljgr9 z+4wmRP+H(T&y5-Sm=H0#@afb(q&v7@e#?}WF=cEHm9Wv=0%vNe9A*#Y{A!=AVdw-D=!#y^|88^R3R}5HX3eBo#g##V!t%&Yb%ASbO(xzdTVfU+(al%d07Yr z@W>~JF@xH0QR#FNdnu-{=S_?J+Jr2}RWsA#A&%$Ye&UrTD=XFxj1_vlkjGiF;zt!I zQyQ2=01}1jpXTn`Mq$z`P5eSl=YBTb&poVFAP=5YX8%W-zROQ^0?R&~(ve*M39S2h zbPLiRCUndRq1|d`4i#jP1}#skR6yF0_94|~&$qSS247#9Pb!q5e{ZjTPoIZcT9&o= z75XWx8yw3{vShw&kv4CAf>eSDd7W20`pK!0_VBZ}+`sTcKwP}!}4;}bV-IUGN0t8wU z92^Uow=BQ~Zasq+CMPWLKKTy}Vl6Ose@D_K0QOb1_Q#XD$vCZ=SslaYg)Y7U=Pz!_ z*jSwVhp?BC9HncuKA_KhUp%3x^7zglKnb)f_t@;VQhz#1!`JvZz`i7oNjVp4X<}zE zn7)xsEPNjY8j)+tVOu(;W?K1571iz1@Y93+S%pFmHG`*;`$wIg*g7S+y{dYYSh10B`r@S>+ z8pG>w%TyVWt$NQ3&xi}5XAv001-^>l?it@ge zy_&yTD0l@vCGE}b`5CJ+eO@&vsn~H8vN$4&-MdrFOgly|A8_`8tb%1-)}#xHKD~X7 z^jUUMrhj(>e*Af2LsTYjP1LU)d`26L{e2qe{CX}^T)^0LkQL)`!yO9x{KsNR1)(fU(Mo(HCk||zW-67Vi!jpG+Stb0tsn;9s% zgTH;!EAqc^s%$^M{sfr5&1P|he%#RNLqCjme0RTZ-$uR=+jx<1X&d}~Mfk&==eRj^ zc7 z(C3>)cv!f#{-h{hZ01oPSgU2Uj`8ll76z2tqZxu|wl7EFlcrG@gZQ&^y2)sh?0 z9M_-h|Bn{{f#qA;s^cQTi@3Cjtj_~&0|Qe<<^Rzy1uD~$j|KjbpdMF!K}*lB3q^cx z@AVONQ8pTI%6VVb_NF>|Bc;F_k=08#lmQRz+GHe#Y$-=3QokXioM+#Z7bGUGJ&8dQ zgJUDGWiB^wZxjh2v|0RL$MyqE6ivahdnA=OF%TBO?rVHM1!kc@9B{%+CJj(mOlTCB zjK0muJ@p&ebEM*^FoXv4ZgZm+JG;~>DobM3_e`Un$<$y_Oq1PnfK?d2eygbsU|Bp@ zwWLr2Z&EjrDoD2+@_bet)=q!$YqyINsXtsOmm8=1ctCWBy8iTiuNwT$>G}|7@zB!4 zptOW2RsU%ppVODC!n9rUrbe9Nd(DP;x=L~QxRYA2@xsIprz;;j1`T9R^>~!&J5#qJ z-E@{T@p@P}OBsMzGm<};gY6>UN(7QiX$bbOY^#XmK2se4l+9i*qxth%vMb>Vy}$a; zPl)vU2-`I^^IPTZXXOvvHQXf_qSz~6!73F0rEk?Iu!%E?s|f8jQ)X+Jm=tDM4v6z^ zxQar_lKP2b^afa(eV(nmf|%MsH$NSGKbNw#HoEG)DvkP~rtcWR{!R>bz6et$NURW8 z4rInAtmQ-%mzsw@R_k=h-eq?xyft&Tv&!%F;^3*x91o2YRt&f98pTFae6)RDI(@#t zrn?irW#YIA*{}O%!MEfh{54U(QoHbo4G);briXTA>(Aqv#uO4l{Oa7Kg{86XiQyr~ z=5yj)J0m|H_kj?>%8A+t+v6^ds=&=>97j?|0#*nbEEswb_g&g})VY9iIy%)f8ABn5oY8 za5q;+RZqS$DcC}D1V-vFi%G?}Ir{Q3_^XOsB+5Z!zia-}ML;SFBx`(V-ieOuFcxvt z8Y{1>4H?|JJyx3|fsC=jZkh_cFC2aP{_B-=uIX$BJAxJX{@KMsLb+t3BS5}nq@DE= zYd#n)u{I=eqY{SbObBsZd<*Lh2-=Cbu)qFmqKTIVRpNhD-ZE;V-WGYsIi!G<*!Xhy z*XNuH5Xv{fbF>1>?^ud`aLJ+zSyfG@#>zkW;`jT$vl~R$D0!qjNCY5Aan?)W+49*3 z_421eROTNyTnd*?PBrqwy!_8$v35b>gxtSx2dlP|)3jg9ciK|aaWVi0Gk*&c zPP;}oyDt$V1NWgcP4+pJe3ptgeKZ8WdzDwwk%aQ;CvinL?t&KHPtZO1(snm{`ARLs zCiqO$Va7M6Tyh)n)W(K~vTXF%y^DX@++18mzRE!b{1OjSQ7Ebu_VGu_Gh)Qmrl^7X z<4TsoTR)eSJdSyquAN$hXhO(4P~|Of?eM1`FO|7=P};_KSS;)xT$$-Fuo0wxvkgg+{brGYELO~v&*yhfnZEA+=WNf1QjJ9b2t=GqBiUz`aSi#gmxyF@eZ7VUb!|B zmmie7x8GES?0<_wW|@f<8KJo@;BYh)~MRHQivxW(M}|U zfg&v$1HW??){`t>AxVZ=$!W0UiPMO zA(|N*W~Y=;+_R?aRW7!AbE49~LVc`i%iY4}JVAq~k;_1=PP_MmWf-{+xf)_Y_f{b59tGQ|3KPaBO zYtTfCFXD`p!`y<$p`r;fPqmUN`j6V?(lmsmrsRIf0s+#gg$Dcr5|~rZl(?lE6WqWn zLlR?P)qi&$NO=If3`=awlf$(Xx1W#8h6i}iPtRBTpu%ITiMmx;F>L>?LdJ|}v}F+X z1LgCU0Je(>4#SltH_x{&P@vVC@sO%@7+g`MPOA!84JsdkwXlc-(?=;fGiV9FBLY=D zT>j9s49lN5`g@;M6P`CK8$qeopM3m8oJU5|o<~iU#QYpTTs1)tKZkRaxm8yzuJ()oe8~CEU}s zbxuHZ086llMvD{DXRu6Clu4-NWa29t+eF5y~w_{IOCX zCN11Z;QXr$fU<W*_mV>TthTFldGo2J=;5~%RxA%V#_UE0K`Xcg6<;~hIc4nH zW~JdCLc%eu-}{igpr0tCaY3}c8!v_E)jX5Bi{*Fik=(fQ&YhaySNcJ{98Kg3h`b~Lru3haadZib_ z&Y8aIj7N7fHQvmS7p5uY`7fgkH9M;`E7xAD!K%OL5$x+N92rdx{3jBr4$_o#A1*F7 zA`N^&yJMwWM$L*1aPj-I>hXC$A=KZWKd6cE0f-o}E;Oe$D+PUloFJHA@EZ>Gx27Mz z-lfC?=uN|>S->zS%h7`<959_LZ~ec>QpgfnH}XTsKN;(D9+AtwIV?ovp?#v&47*A@ zpJ|a=a)7{N0qW0jvz2LY7sMvAw`KX>;+2up zn}v4|pJm)Cqi#P0@kGm#oU|2$K+^6o7tgtn_zrudRO*?KB)w@l?(i3~X=52-`gmz= zu9*ycwjtl%N@+K>UI1O_U?j}k(yJ-hB31R4JgZEqvwt+K)f@#Y&(ViGuvAY-?Y4u| zj5t3xMqn%MYnGbn7TqA137x7eO4J}p3eadLZTdl7U8@*ETRk~yYc8p=T2i?1MW0L0 z=POxZ&kL-tA*0Gxv0j+;_y<;K-AG)m86%OP-&HEQxeGNB?cok}NfDmqFVe==V*9-n ze&gQ_nfBz%z`y?53wYIfO#e>e=jD&|@F~gMGq3iNninb@mnTK*y23$X+PswolP|YZ ztlRFza$n9pt&>Uc-2RkaZvAg`sG!PTYn@;q-hR>#+oXUYY$Lt39Ig#)@(f6p9Lt(M zvh`HYkp}l7L%RKsvjSDU|6Wc7WkPSb9BWGXsrET?0)QD<23=hy8Pl z_T3p$c+&PC{;D3K6;Z#lsF}Os${a#xWgRSd)2nwVh(_6VEocE;IrIx|vQOeJ5q)(} z3<$Gv^H?6SBu}f$!1YF^UKB|5qtuu^1KA)x zVSFSc9YQTFX~(R8_~g&NZ|WqP2wsoYNBI0clpz}TEJgBypxh?())!5S<@5RLmc3DP z8{fF%*%g1L#=vFJlit;$TU!QGT!RM_g6G0zYK8AKRmr+)-)f=Wee3@Wp_|;wIv4I2 zU$3#CMGDqMX(jq#^jrO|>j)p(Xb2&GG#Lx8dcInrb%`Ic?WzF1tGaH+WL9XTR%%)K z%m#Z#dCdlYW3@h=oDbuXpC+2hish@lY8;tHNJJ_PkxU7>lZDq$4#r;Li-j0j-%}~< zyQtAEObEUW10`*hWKwk1VMFAtjVy%}OCF*BTtG5V65yL2HjeCZvMw|*58#2F5Q|f~ zOd3elfwOncznKt7J&T2;-VxS=D$Pgl$M^A!o?621MicQ^6FEc``eHjhVj{f~U=0oe zK}&4(exdZw`GDllOZLRZq!s!xWteBK+k%aVz8}%7rn6E3?-ot6{Jq7m0KFQgj$N{y z>5eo{4t_T-7+J;uv}BNi#<7He(g}MTFU$0!&F#{v&|66S0SaVE@5Dc)^hbvByiUWE!7NNqZcpDghYfjO`_T#IfBrt_^*?SjsMXr!YA~FsU9GV8Nemd32)9qtJ`Deoy#{ zzIsbg5mSY&Hrp&s=fd@@y`F`rs3WJ9u^j422jg}%=dy2u0>d1u=3&?K7!!_7Tqpr( zzTbj&z>HoTj_LaO`E@$SBnaQ=MN*eevZ2lXlE2X!d&B)-{WIqJ`+EO(r606j*BLYo zgbW>EmbbRvyl%`M&Wbf+PyW*RT)Y1v{f~!J*=yNp2D~_`1kwJ*2i-YOru+$J)$QmY z?$8tEvxgkZ&$V|^7m~Doi(yHZUymQ1ScvD=MLz!WN~64>?e$qAu>)Mk)nAV}a8MMv zYVg07ItnC1USXfaZdw8P6Y#Q^t9ejR3-SqDHIc0pJYSoCGy<~`FDzdOsh6f<%mT%B zod)}CJakWr&Ib6}`e@v84FlhlY&-Rp#?l7veFq8fdWFs=k-Sn|(r}ytpxFw`@6;ex zb9YPBF9cw;7Zw4i?F7N07J2H9#dvMk4&64FV9!v~ES_$4xy479?_DlPS)i2hj?Q?X zDHbnZX|>mRlz!jire4jP^hGa@{blZT^R2?UlFidjf8?=sm{+zo`6qc^)JKtoQeI=ANcLG?50=ZS!EU_SGvwX+gbL~%7IV~Ivy;T*$I(^i>A{iEU8MLi3l`mtho>ZW z@{83=f&y^h$;jZzBQbQ)WpJGwJW+IMZ$tnT$$q@ZSk99T`l|8`JH=Hq>6vKP_N@3N zHp%tc9&6^7v$@f%PGa^ zLCjdUv(PVv+%Az;D(KAJYoE6(jfJ*Z(MEh_=WQuhKS?5}7K?YWblY3mQg-$+Cndx; z)40t~Si`A3l(wR-LR`*yjf@6AOtRqi+(aKlW0}=4r?9JkRP%0;+Kckz8-p80Nj4j3 zKi|2N0CYM%U({50;mQbNi`92BKuhSXXDXCQg>i4$G6k2n2U_W=zPG3Me1os)?Wd@3 ztljIc!md5<`kK1XeFrdkG>B)e6wY;t6*1gBbD_ArY0@ZV_X;}XMD}=wj5xEGkfN^` z!OREuyC_`t1)8;Q93S~tlKp#50!|3O`6G~NE#gqLsAUZ8-L@j!1YbbDHI1MDB!hQD zvIYI79a~ahX}*VCXQHOpW9`HEzqZ|vu!k_T;aOqzZj#PCD zEbyMb`}Wb>8MZmNv(%j$-vM@szoGgjH@PIa51Uc4O1pZlxuQXPOqMsdi|vZo+fqlw zD$YsO5@b#W<3Wh0j;WtFpL+^ZpD)bqCADiv1e=PEb=*#~X9_WSZR~x$=cZ_WdG{>d zkJo=ns;9pl(mZK&NMFnxJ#OP9!T4__q)d&hPS0$yhz{l?qz}H`ue#>)l{-eLjE>ku z!>&>ViOJ%jlsBVktO6<6eOI4$=#Y(Fhq?6)1P>C)|f zZV`NiRJJMVC4H*4K$Gb$JNc(nfvzxRr z9C2gT!PKR4j}%|60LZgKhwsuPD4`O4ll<+a;V$?ZQ17I@VviZrWBI7!a(SzUiDsUQGq^P3lSi#3brYd^qw z;qS6@r&cbs>}d%!N!Yo^Hbi(qeJlj7(`D3h-e-lq&2E)im};yJWD~gN7$5K=Qj${$ zNcMgc4fNK!o0VbT#4*RtIW|rzwUQ2*vi7(h+fw&#N;c4gL(K9v`|zTdRUoQqv(2k- zJG2THj1Aao+bBr-iyyrrQo(UMe}}A3PfumSN!K>}ZQ6O!xa)M&#YN5e8@MB@co^rl**9V%1&M_fZTvI~ijNDNo{;1U<`u5SQ3-%Z8$$Y}eorAGSMcV-A~Q5X0oVek67zHRt*(F>F<+?^V%AC`#GRg zXuoQPcPOcn@NV3~^(Kae<3Hqn3+DRb7&&_1B%t6}`K!mz;joLf_D=u$h}o&IaYVZS zv~O4D3PyE&IlRVhy=IvQGGQ97x@K^^-;F6uOT^2)2<@p4c}mZjMAww~Fn6cP3)`x? z^3rcuEpJd|?OfTB40c*F^qTKH)L*FijP2Be5P;9|4-C9o29Hi3tq$MDr(7_zkzG6=t{NvAZ6BdFOKp|*J5WV)DWc#i}$E{{WaU! z(iO3{k`XOG3w1ZLw(+vLUe`DT?Quql;-zW8)<>V`F8IYiDpQc`l8-SPVd&PwQmB4L zs_t6;!KG8x)jr2j6MnQcc-!Kz@T~PHHBZ!mbNfZk?{yF&+W`PQZjgBN4J56-u@Qt^@Z! zxA)A|)JR|@rLI1pjW&U}oh=rJdB~O@Yl%l71q-SeFtKJsv?cDi%A$HPmGYV+J(VLS zFF1kyKzk#`7miCm(ZJ?q!cQVmf%m^aI%s~5(Ihe zpoW!T=)e&4$5(%`-R_KyQ{so3=KnT7Kqlk6&ARB`FYxL?csWCmD7uCKb)YlSGsv{d zGI{~-CvsDeKLaikNezU-iB1fUC~801zu%&Pq_`g2wa^|&1A%8~Xm<8gQU}8Qh=+y+ zax(wiKLSwMY;!q#c2_vOks%0sD>QyhY5s5U#e>h6WP$w~4!2Z;OMWS8MHAEGz1y;1 zHNS70LBhIS>bP;QKKClIS2`T(RI|gg+L4b9I(c=d1N+k5{m5M*mn(TuHB7S;L9E0q-m*=0t4XJ@0`=z|v+(ZKaAqu3&jc(L-M8v+2!8~8p$#ZW zgi$u5dOOlo%9K0*W~r*;DV#JCrtyEU`UUUy$bN)_Ayi zoy1lnp8tC)9~Y!g{h;VMe@I~W%gC8OI*ukw@0g19w%*EJ$XXvzq9W5BR=KR9Gy%8v z8Ymgb&6e_o1P}_#@=MreRMc9e7p1ua`iVeGS8$Mgc4t-8lt!eu;mjY7StqUN{%&c= zTyC3hH51zcj3;T*#3uYJS4}7Ssp}&QRf*<%V9`<)b_m`5y<<(zr}YuYtd55mwQ2B@}oWE5Ds;g(1H-i!Z)c zv5qf)tX;oUkQ2VKY}9E{*hhFTTD~sM6L@f4rP!{P{k$hbpKYHH;8ZT%9emwzj^_z_ zxO+>QqP*0zvbW9<0nFPS?&kb;7_#NT(I6WQ9gYj|9Kc@O5fx;Q>j$p(?=?u zk@a&-Bu`gf_6sTn&lkI1Xj>r7$G5>zC%hC0G)S^hcm}!`XM`QT3ch=wLu}tD=+a(@ zjp8z8oud!ENJpr@@zCP;p(C-)rQ~69;bW8pc5mGkV)iP^PxLu5yNdavlH+eOBbybitPbo`&JFuZ>J#v^wm3b6c-KcpIs(mY={jB z4C)yi*AGu@1SKoYITABmc4b@MH?Y@*&YCeGn89};{z0ygM#OE#^22nN54}cHXN(+* zE>Hbhi>YiyxY3tzEa{Loj^T|08V%A%Zd_BXc_2&j%dqGzLO-sV*6Gf-ztA z0a9F4kB~49667=P^!(!NMs&g?AS*O{%qYF{%KZJEcL0fQJ;_DA{bEUhd%#rMs=)Vc zU5lNl7z#I#^Hgc!YC2E8G(8WUN8ZJIDFGHkc2Hy5{Zsatw)eS{Tqqof2at>NIO_lVUblPakQUc=ZbC7{+*+ zw9Bp3XvjbD=CjZ?iq7x$dch%%t|HCbuKG#T^+T|FD=%E`cnU*Mlr^3p(EiXzG+2u&DadgOXuwjySJ;r#Ng*-9DH##U9!;@x8BOlC7p$D z2dkI2Zd>-5clmU;k)X`HNUD%t?s43a*%UoSg$qmsiatjv$K+uEV~>pfMs`Zb?@3H@ z;FnX_DNkcDdI1IZDw9~xIa6>&dH-6R_R9;qmDo#+0|7!q+dcCMW z=`|gqrFWVc-JKI3#s{_~Hx=5{u<4+-&|J+Ul$`in>aF@p=BI;-1p^OI_l^1IesLCD*9)eG*R8~#G1 z+nv7L)kmE1E)QIz}287eXNTyrhCg((%GA!j*8xtYl| zMJBY#H4JkzW5b5uKHuN>`~Ulo*WQmkpYP}E`FuPd508l1kTi>lQYa6nT#blLRW}`? z9Qz^o=Wky=<_Wx?sS~)q0shj+w{iUd=eq> zY$c_&Jr6*XaHym%R~q4IE_*f1P3h{R;DuA`)FJ%~FBSyGFSbHtE{E}1oz_jJbau3V z*n9q9@+hOQ;*W+`cRq{~O*nN6UvyKc?+fcu6z67wXfRWI_+F%LP@jlr+`eh@HUERg zn3Ig=gQ2a{h_{OaCP&S)F{v)Pk+`U1_k)Kt{~h2d0s7W*m3t&VrL`jo>-_-}it>Lf zxJF)vyyZzch}iYqjj79vTR_Fr{Bvb?g1iR29eJ?RQonitXC}7}AwS!o^c9@Wh;Zy^@_<^8kS%vz1+Wrg|%I7G422X>M26m{7bOac=Vnl_vCd=J=uxzWZXJ{DOq9V zO;VIV>9q{pK+ax&iOQ)Q^5d=E-pTE*r-Ac4~OTZ(K_mnCgh|L29j>p{|Ds4&m3D-SK zXJ>%LDw+iKOWfZ%qd`}Ov+Jd6n)WW5H$UtuqmtMV(Dtobm{rwpRI1ZeKy-3es5W-n zk=?5KaBtP)!>a~f_XHAF?N}7Tkxa187ZYH~Hp$FNo<=uFi-TV0&C~N|-F>-LXA`eA zssp{P<;|EA+#U^Ulu%iB*_ZmB0FA_$#maSkxizi7Bf4)bi zQ;wPiiG1<7hswYmo939}z{{=)Pk2%x9J~wzt4(;q1@yxpVBoZr-g^pNny$MZOKy)p zzV|C@HDG6{BUbm4ULRA zi8;Wbz9p4ul7^>X2^$SrKXqcl(7BQb8$j6IN8OLb5#{f4l{_ZdmfLi$-$n@ip6WyA z|DgH~HtPNJ^f|tI^?hY{y86;Qu5Jmyw8`OrdMLnKCscrogE#T#YWNrXM1T2Q8+ z<DU7@|r2?gcCU!z!|)PaJNs>8Te z!79Gf?OH1A6-IyksibHh74A8)2|Tm9q#BS?-*)gIlIw4C^f{bLl(XNY;3C_QXRe^l zmaxW}>^NcweUV1F5+SrF=3oVuL%2iP2p^LGJ!@UawwL|F7*FAHoKJ3-))US;|1q51 zz(y{ZYtOgt!_mdQjmPdNLpi1x;8fhs@S6z$o*@Mvv)lhzZct@n)HnZ~;QNB$bJ8BO zq$X<~&YjT$8#$^qzBxQ;@Ub$sNrNl_)uA3mlXP0Bn zLdPDOIv_0WON%D9#>ZFlUJs=Rcxyh5hd#g8sbTx}-Q~ybV;(~difFJQRrYt0=hSu? z#??hcox}gTn%Gyj#)mpudb*-D8TCJnkO5ti($8DH#`B(&Ekp-4XklY8NeIV=zeYE& z&L^+Vmgg}3t5pFeragj9df)Pn1M|Qh;-yS~#^*m8*NvYy{RFwuFod?M4epOGIx$dV z-FPGV;e10C5EkE6eaxxkXgt%HQ77SKq^&W#w-@U88~Q}=(8uvKH=EZzSn)-y-WL42 zmGc=ey**AZK6<)H72TUfPGy?RG*%p~=5@K0uaFrG%$yTv+76Nl-4N9CP+khtq z@woGcH0nhFM*wFjAY5mRi3U9MFT^&JdJJ`U-dPSHTZ?1J_g{M-Rqq9iuBuG$9yx_a z39Y@Ra}Bn2hYJlMikZ#_sq3+Ki+O$?9t00rJxbYL^P516gs6of(Ed?xS9R^vy0dOW zKb`)@DSDJ4jdFH%b#2j;_7nBfEwnp#pk?p+>PY+`=^8CM^p;&6%b5Ls`slsrNJkCN z@e%KnX8oAT5ZbXg>99v(UCl2)=|^1=_4Zo2%i^b(%y~^};Sk6*My*$}s+EM*d!yuL zg2i@)pWV$qcV6g`YK-^ssir*qs_Mp{_0l*erQunlg;3nM{^_|N{PqZ(4Clno@X&di zaJ37wI17A#gP@t=XWcOJ46q014RNPAtV#79slr73xjQ}KrX;<9K&gW7UX(1BUeX?; z?{&F`H6l>h^EuoT&BWSZ{QzONx@pw>5Idh>a1vF1OJzgK5xvQDOP8bO+i$ zFRCG=G@zAdbK@|dUW!q z(*0fh`HAh+?9%ySx}n(S<96sbMXAt#d){+zx}sz|Uxi5|W5;;(pxTY1 zawZGUYt14?8U#&f^FTA?-hFHi?KIXpyfLEj zr3_4thTh@ay;6?>t8q>-$oUD)w+2~~`1hO=%&D!;F%`7Qy0nS`hQ3h3+Nb!$)~*%c z=WH|KMc%mZSC2VWzR86qYNhPoNqQ|{Z`Q*xB6i28vit05!C|*e**CJM@hN*5w6_cSG!pBxEIe=Y1Ya*m+7$mihB|1a$<*&I*}QFO$cS?V>|)?4qpIu)`uj2< zMT1UHVY%1OAAW*5kzH_l)PYHA**LsXlR(@_0Lrf6Pp~TJ>HT)OlXy!I423x`2hrn; zU;TQHbV<~LMY0^2RKTBT4gV^Nrj~SM5_y-D_r_;1u~v2nTyw#Fmw!h6OaV0M9X1mH z%Z?H|A&wru=MS}U${rqNCd5t9pPJlgW|u5FflY3iQX-c1=BCCTlXzvH&dkm!bW7a* zReY{RtR9+he9zN`mjH}`oRB;^82I$=j~@6QAMRDId`)!tT7h#!7QU$9Lex8#VnYJ8 zzZLaWkMNWo#5*)rq^#{evly^_p->#!JVL$qJBZG?%7ypSXsUT=Dp9^rJPQ6}Lbf4$1u^KO6eJrAS71b)qq; zyuwV(yTUO)5Y7m_EF=BX;us2WC|#{z-(%ce{)p+xkb-ity87bVYK|c$=xZR1l%n>w zNrcGeq=c36b|@Zd9ZA#sBV%{WStr=G{jTu1nEo(7G`xhdRmd^M4RVOnJLPrH(Jx6t zX5V@DOu!6>@)AJFnQLlon5uO<${Lty3RwL{HQK0EywC*nY*sAi+M=Z_{%y1oC>ZuX zgZT5eW81edqz>h)|H!S2YJa0~!rsFS~EEM|M?Q z#Y5%3Dy@>;xSLd0$1y)qmp5f+f82?nL^~&HPf(qpwkgC@G$35XDXOMvlZBzFa8k+u zACwv;!3fkwUy|CPZtv3i;Y(Mmb-iEyR{-*@_#G8%iMvG@gX(MdXxTeTtIY^2*Rumz z1u8Nd18##&Fq7jWDxT}cz5BmON8$!-`AmmsbwIp8LV=i;O8;L2sSSo+Eac<|PSapO zpd@8{znaysW9)vlDDffw_vrdNMK@qu(5nnHIPn~3X%1}c1KLB!()&e4AW)a9CrbNp zZD3%JCb>FsQ10r|G(cNht9%ggM;1IZnk{sg)_W0mdMjZT=R4H6)kyt&_?2q5#J`kS zVooDF0PdkAp?_JcvR(8D^T!`BQaV6eGzn}U9tRv#Ga>v&LGsm z$O*x>1RO%oCla2BTU4hL2rcgGb&QX&zt$U0y$FzsnhFDESR<=? zoi?njg}l>;%s?Jz`tZFD!XO1MgnAwxtIl)8AQQHP0rnT z7j+VgGbY;~2mn4CWt7ikZHa_(5#xj#_;2_m>s}QTb+Jp14F#14#?Lt@W0iAZT^Fu% zMJCu>oqF2OVlKwq)vEP7XwI$>OKpl2*1=kIl-odG$#ap=LppcDjm;ljtKMyE37nsN zf-7CU|NF6kfED5DW>Q*`foyKs7||Dl-T9{O&_$Ku#JmH!Tz zht_`ROvLbFCosZb`(lkiN)9TTrtYo9pNN^Uo9Nv5Xq61H(H@lo!j%7s7s$@Ywp;Hz zcuC;8L78;+8Yn~6MtA3QF1my!x;iyFWv-*u({*{%d?nj#bp6(rG-v&2pP=TQvG?eP zPDt51_Z#cyJ=otT>aI>n&jcEZNBm&vf93Hq+<2kx#=vJf`xqk>x(^=my!gv_k3Euv z!=-Dx?`|K3H(+-=ex(mL#cGPWiMv6C>)uPt*vt*R0WE~4 z`S$F4{eP&!qWj#AV39TT7>VQyeW3;GadqV^RbDMlT@2_dXKmaSo&Zuzyc!-HT#VR~ zqaXH<3ey1dV?Rfw``RM?9xhAT6iQ5g#1_bQs|7`BY->5s+$lhVxsUyfkJ|aLBA-g3 z{W*UTA=i5U^1*doTwRUUf$sa;M;mc<#))hkDhO#q<TDhbK7LFJ5YxyTz{D8V296I52(HK%6-e;VsL;kTocisBD0abxCmm|mwe z>(ZxhF$_$`tCfNP^j44PUeM8PKVCbjo?FsGc_`8UBJ7P-QL`bt)$0OutKrm@4jCT} zH+#Odf6ps`ux85y{@!K_@wtXk`lKf-!c{u0ZPiXTKfd;yz}DF{)<{Hz9&X_??;JdZ z;Z3?vudK|@M0~4RD_@FhhIA;Rpl9iF7)dLn_QFTrAx$UgUK^_@o_XPTwVRs*(wqMR zea@5*xXtUv=q?Fd$~IdZH~;=$@S$YeXUq8%@qzxQw)_YlTV1U>#Pto2%ER-FbT>?7 zCctRx$s0B9k|iz^kxEr78#HP_H7UBc^2*Td@ya@N1pcH`Sb{AzZl`SAI2h9@&sX^D+87~ew)y15)(hs=^vw|IUBOdiAvGj zqfaA#hFo~Tl7>LuRtOl~{N(Clq`Px8>#jkbb-3R|Tkf~=yvs@cG5IlPZ9nP8>Q3%Z z{mL71h?J6h^GdVcPS-qPK7@Gj1$7zLp{S8I8Hu5D&< zZrg$)ot{K={{`(*LICVB1z=v{6!6Wd$>|~FBivNG^uxG(?6j9c`4~K;29GKRMpKRj zCL8PA!_bsR0vGO(9;mGTR$?6XU`hNBcXQby%W*ZbGflL_K8`88AL2v<7Z1d@5wC#Z*N$L?(_zQlQT zYG+#p!I@9u%ZhoT&w)_A5Zzs~hdiSA0#}zu{GW2vA#jZ`asSt6MJUc^1pq7#QNzSD zG=YOu`xAW>>!_2Ff2z}3gyX1G+}f=bl7*qXy{oHw5;ihY?EZk{Du-9H(eVva&**JL zZA8J7eD$Tq_h;v)W}prqh`kW!-{h&AWj<#?-jdf!Bf?n=(f4=GACm*&eiL)gTq0(= z@HK2V0G~Yj_q=Cr`aardYK3dBTPZWW6%G4|nz3yYzwg3T?5>@jW&C&vf(+cyFcbLR zzHv7>8s0*?!#O{XRQhN-U9_Ju>ZiR}HoinVhm+obFkDn_P5e>nsvn$GQ$I<_Z+uPGCK%p#QNV~T0Olw4;aK}t1Y!o(6*1jxRD4##_iQ zQ&lkOJwc(h{dA_%|=}I{*xcyr--Ee)H&G6q$*c9^^n_%li zyfj@QmpKDmh6C-Z>OD^mECI0*ifgAYKodS1q#;K9xkEapwY{gQ%D{KbXB*>r37flr zbY(R2yQM?E?ii7LUm!Edg*!xror~tJNNrl@~_w3bMU&d9?f5Q z_g22?@Q9HhY2`bH=Iz;8$NUj$a{gisLh|X*glRjis-?o_+ul6db4J(FLj?*l+e({n zrSedcWm8u5f@@f*nyEZPQoG}B@V5_syy%FZkls!cnjc^!BHv5LW~cQkl%X$B1_p04 zPYg&F$XiuHVIAj>(1GWJPXb*m1AxI|Ez46CJ9h)Kd^TeGav;0vDN#+UfH3ZtqXB2v z`DSDdZ&Z!Gh2AEMs)Saw74)B09vc*#_}PRyQ5)-(b)MusDXH)LB-1)fLLQNfD*ml2 zgI`u!9aiC>bltvS3F=UujN)lF^Vb?ZGuP6BcGi-Gb#~=hLmD2y1OrE;D0VA*+G5pc znM7gq-WJrL%1u}@VWX^pLj|0yV;!+=EF^}0jK>>rr={}DKl4AKvt;nQPl;zp?l}F{ z_p0Zw(HJb?@8EKg4mxLjyxTgkqL|H$))!NV09`WbbpxNxuyteL6F))!KJ16y=Lc$z zrP_*61jyTmMG>Yais7!B`6_8~Ku+WA>ECz)+~Btt`cD^pHqvKY{v9lqws~38`ZLCC z`4JQ0$)NK?EJ)Mz{LBq*X0A2IONl$=X7u8jiX^pTS#SBhew4sK0cTYIgLSnW+0?wJAgXF#NzCFx-uRNKJMCif^GKiA z=&Pk<@)$?VCQdGTgYREM{%>bJAHxYALd)vjFT}2PzEgjm=fYgRc`1vZ>4%e5?v2EB zBM|-`Q=8M;XjWuQy2M7&WE_seYrs&m5(=G z-2WEcylDnK%<7elCwf2NuaSoD@%fzn+$*P5h!4IZ_5`EEDg0m0Mxm(eC`0d! zb#i^E8%AYXcStfBlf%5>Am}QzZ-$Y?XW1ObH{_4JYPmpRCoVAu76N*r!b>oYzehBq z5hN80!V{nsbd9I(h}i8=iy=!8iGU?cw%*CbNRx4>eKMulunq6Sf~PRNmhKmw+I34+ zp-ASI56->d4&MlNo|Cxi$wr@k68!-24~_0d^aZC)M#bS{yW9v@#$ilPR(6Jnw;Nv3)AD&zyz2M}ap!kET zw*^dOL^gLmObxcRD(8{hqF@SEa4g*0+{-hVeq1W5yQ-3{Pdm^TfBaU@$d_>I#X?eU zk8CdftHAZ&Ua3FBONqHhL~Xn*{1mINHR!Ix5TPLr>YhHsZEUyyG-{-Pd(voGO=b06 z(nmn58SaPBe9bvjboMitB#nivK4z|m3)B0F{KNcIX@W>7SmY-{% zMXJd8?M6lw{E~;N@t_IpQSlhRQbOQ0v#9f}joQnj_`U9nO~R#)(D~`WZ@74}^|90g zM{orMzRTnjIIuR^Vt7ml3F|0N!-+;*@|k>&Qj1u6l951*%xNkrJ6>k_+2hN( z(tEQB(Bz4{F@WU1xB#SSvj#gJnhhiFn0qu-hb}wBkegzS@{tpGn;Gru=pPMMbh#>y zT+e=k@Obp+r3bp#r&vC@#`e$gueTjJ?zwGRbh%#Ljr$y}zI!f^p^<9tq{vqDZenX0 zAPBcv7U>otBF{G*#E$+2o-mRr=DX0D!&B`@ZwBlW2*+ zCpJ$;ACynkR$mE>%fXq435Fc{Lk|$Vp6aVM8e+opMAP7>Y&@-Ng>j8_UD2OqNVk3; zZN(J1zQ$G5M#uYeA26uj?X3B7ONk>jG7q86hNgL9+rCX((D)AiUz7SP>~_Pcw#~@v z|BH*!LGx^u(SqKrgB({(t77+dLdY$y)<10--)1c|rz3`~&| z(yyT|l#><0WhzwDLFolwlKe&hn5(jFH5-ypw8&kbu;u9@z^x$?UOE&i2;hC+osqST zK_$>*Wf3VE`-EZFvkk};Nr6KPP1xzuMN|(>hD7_F}b1+Ud4r?xU4)t%zu;^)yP8J_UWq-|DM z?;bdZh;}`B^&hf-il6goRn=}an+a%^w*Vg!Q~O=-9q7No#w>Hanlf1u634AkF6{!( zM`HJvDz7O+WDiH0V^I01ZJ-gOvpn+EVnY!x^m+J~HD4=D)t>w5nzgfUKA@j8;IFo8 zy6@eYlASy4yYnoUm2sao6KGWGVJh%Ab3m4m6$t`_#&b9ockRlztJUZ%J{(}`Noi#P zzZ9=RAmaaQh5N-$T8-m*X&IVx#j6=1BiNtrd?{ojI)HSJIn-3s~o7LB?T2 zQV|;w1+mic`AmD}v@`a?E++ktziG1{C}%XOKCuDUjMm4$G!!cU#*NPhJmS-d$(Wld zjSS{)o8Y4}b^Q?X=LOjV6Oe`(!*I;#l{an5NtyBqw2AS_ZsfImVqBzof40tCNrLY7 z)02jAc)&f@Q8R5qkC~`S)7){*j(QGe`yf-&<_S;llrT|sN6|F=#vFhK57`|Ilq`XN z39@&?Ut4mMY@90I;{xB_Sb3D!L-~;zsr4DRomNLJ_0pO%PNz-xr?6wLGvR_O0=0!U zjJ|q(=_cmI@501Y>GT-3TBEUiqCdXFm)Z0MwN(2!&BY&dHcmN8=8pg63~+AQ%D`(c z(&t2tXmO#&HIzhvM)_&ri-Nqu8yP-O{m($Z>uT?BR)a`04<-2fa(|U^Ob-31K=^2X zJE!D`$B+K8%zjokS^9JBlScL0k&@|f=tlL$U_94rtl3Nwm(+^A^k)0d#C5Ey@3D&& zLvC2BG}O6FC_|vFy&W6kYi9C*Uu18O9AM~k66clxF>V;vzI;Z|L+9|#8^KH!u0~(b z1i1tZFthq^j;$oBEDal-sCzm3?x)4vHn=~jzE_rqAv?0_ll<@W@>z zm*Gq%PRhh%+NNccp5%iWO7`Ph=A#kK&wxcq2EWh>Z!Ck19UrxjcxS`%>P={afJc+* z(SW|AnG0U6-_G2B_XMi^Y3s-@m{wCjPL3_xKri|ZV7fIrcL(?$z1F>gA@3|cL&juc z_d3kXtc*v`tWB!rfNPQ@LMLN(isFAeN>@$$H1U*sIlvJt!V~mcf|Z~0AGJkL*S4`Q zBlSpi-?W`g>PVy;lfey+(^mryE@7CgeVdM*+O>7C-@JUbngpy)OsbZA9Pki082%PV z4&9ihK0w(HHS!=L;6h{Wcv4kqy;Gx__qVChTMb9k;u$=s3|m;6e>b4KST@h|o;aO< z*uTfC64l{rySA-u8=Z1nw=el z>_B$JI04V^f4H(0^b94iYnVAFdnx?XTOgf(3DOuHwa)xrg<2}*aXw#VJurS+q?k=C z&$+SfyKS0dbt86(I4qOPvr>a4u62G?L6H98vLW9KlWw<>{$<}F=H5K;FT`=pH<8vo zj}(}w;%i~Sm%q8BikwtKH!oi`)S$YUE$qd5ra|C&*X^j76giF1bK@Q^pkn%;mSl?g z#nfvjJV#Vv{}m!DqX5w-VR`gl}tDR(#Jmklyb31$`NGYE5no7M5cI zd(TNUJeaM0%NLrjoNFBRcrPgvM@sJ4la5L>Y8DiRc1KrJL zzZEMaKIrmiz{VpQj)Ip|v8KDt)2m z%daGU?gz_lL0u5mgYeCUO=dS&-5)MGdhx7H3XsG*qemqLbU~8#+ijg758!NG5#DpeHe&DJ4&9fj&dm|?M+jxPh^0O@#uaAC$ zMyNT=A6i{JYEJj1*KdeR=ypBycqp^LmK-JBVLR^coWVeAaPoPk*!--4%M<|9jEfKX zbQdYjEec`%)m?sSX(muP-i5|yB^UpQ7Ro^gC8EZZ10v$&?DBCEgq zmw&y1aLcgSxA*9Fby!-_s%&ssYUGU`=nwcMy2e}7hXBkS385vWxWl*E)T9tSdez9@cx#naaP!9+swNxLqaY?A|&RC{8`y2mT zf~{@V2t^LrPWjJi+QORhs%0oD*_aq-R^)fRL!l!Uk4=g=zQEV7bT>*E_u0e05S^%U zk-%7e-wU}#aa^@%bV0w-u!x#+xJ@5uopX6fL!`r0(4aS4wA`=T)`C>c*O=z8CXjWs z!6&Y<+^Kvho8@ zWCldhc<0pPwvmkpUjX~N+QJ&u2(cW*tWNy)}JC-_^F>hR3-XQqvR`y&l7} z%e9sIOuUe%TLc@hHx<(HuV^gp+SQ7xL89K>^`2ix7n=po3)IPNVCN_v_IRPWfGrx&-5x%wCf+610GVh3`u~9e7}U+qm=DH%6UO zqDNA$d1Cx8V0H4jaPZ5H!6W;1s&Q2QWa6|xsS9sP9soJxDA`~mlvp#A5R;}cLHt*@ zz$XdIq4Bq+2%dCIYXC8~bfY2HnjC42Ac> zh2kXf;%UN*B12AOAP3i$sb^ke$D>OZkuP7s<)qyRV(s5R)sQwPnN)*cl=$!Di^je_ z1?SWsF!S}Y%IbLxzM~&=PrY6E7iU!wmyvV52XpO)&|JkGAG!HTVdm?*E1$3p>DO+x zd>X18R~ zS~206EhB3MdEw6H8SJGYeRxO$n&a=;LrgsV)_m_jPsXGGw(V?XOrD&aWMHs=rw8+F z7#Yg&I&{O3&$}D2g=OTl+fzkqL0ZI&NdDZZik8SDG~Qs^-9%>udR45b+uU&6yoYvu ziXuH;b?&toDMNJmRdJuH`^vk`hHm*tMr;lQIPeRER#P0kLXaK=?>uD%T?D0`v5Xv|5_cB)d=AGIsBK?6 zFJ2l9><3wfhtZvdGtI#^&vSSeEV%Z39O{4X2n$ImwU;O43J&nChus~_Ed?A zWCWp5rgdJtNWH!C(T~`VX9dMD%wG$nH41;2L`c2{XuR8ETI%Ma?0PwNlM{)F(eYEv zKfl}t)T2IRP8JTy<}?}W;H$H@E&G8>MgE+J64uGz=Ue5XTIP-BGzT?aM~S{8a_&Gf zSmI3Up0^7Ej1pSzdRAxZq%v$*nf{7krH51jYu91fZ>&6{5;F@7Bl%;N7&nUStz0mi zL9C_but&L_6NC4>l8)itewxhX>-}~=4Vk{O9qJ&?8D|2O4Xb458u{8Tx)-yp zUHlJS`|YbQ{E`tHTIcrl5`=nkFcQUx+D56waW@u5$hZp!Juwd4-w8mn#z_Rpvf7Eb zn(XCF@UpBR&Z<;haSDeMb3}9eFS?IBou)LzO_Ydj+W&pz-a%+)8`S*^bVnG(@b$*J zkATi7{}MFlvCU`>)!A_4^aZk`Qy>*PVg%{HNoAG=uS*x=!&zZZMmHE0SkECpLV7{% zPlOiS(0WU;sZOKDFnGo?gh`|^~;D-nmPrS zG9+}8UPNZ)mM}V}Wj_{Qz}We%S3 z$4R;gTN5YWa9WD|)|6T; zl6ZSLIPYAB(Ov{4e3BCdvO-3mbP#gfJm6(#w~tI>zsI~z*<&FdORowsSexfFC(X}& z>JZoAxaTdrc=ORpc+EEqQ@~_>io1fO**QgNnMgSC?Rody$viCc^tcR`5xQ)iH z)_)o5i&M&L>7cuG`E}7RV(0xjuLisbaxH(ylkQ(T2nK4#hq_+Gh+^d&{JlcbAv3F` zgABO=5h8or8MyAc10ZDe-h!OULX{&1PB( zCmtXvMcyFH4j(xfdD-kI8sblq@`aHJMZ3j2YMr!9)Cq;x3mZjpdGtr zcqC2IW)&OApSGi5?_{k;I9jq}livE@UH;OgURKK&wy8h#|DqXOhvUh|8pSqA}KL>l?*g6s}Ll3U7d(^u16vuFDegqQRekj|#YL0un zk|CeQFcKZKa_cv({hqd7 z{Y+AVfLh2aJQp~v7AIBCL97axOf}j~Zfxp0sua;8aYD$3>qHT{wbduHdsA8!fs1*3 ztDoed=X$r^LO#1XVj%JUiFMD?G#A=eV^e8k2lp-){BW) z%d81OE>N4j^*kQ78gA;PZnlb5yyNxa~D|&s^fm;}uP>$qyfpB2KC7{&kb{jpj>A zrSq45an%oVS{a7%sPr+Q$Z|=F5obreZob{i99U<3ZC$`PPIB#)^6w&3@HJ8xAK4hd zUtT9p%6`EerboE7LiH?LpDbL(t(0**3S{(!q@BEe^2bas#X*vDR!&F%-SeCcm&>qy zjH@lPO=rNvsjDl-Xay{7?=~wA`@i2x9l2!W>z_a)Ml0-$79LNnX_vQ&(31nh;L5y{ z>KNyyNVox>Ge2)6%?Ns~>RD9v&KZc#{=`B00xe3lXIM4+6wPLgS%CU;NTR{bpry&vbLP;|msROYpO4%HTd+~$dluqq2HLc6Uri;8U*Vl zb!0ZCqdp{pr2|gg))1My%1(s|FEjm;00E>MHODGt6dVz$uZ(7VpHGskKd-^R&^cpbNaUFhBjhp-wXtR)4v^(^XJgXJ{L+nE1%!%K+Mo`=I zVxCqMWrAo6GX4X1L2BIVkG>NHmh2&_R=-|wx<~70OOowD6AoK-S*fostL+h7q$sY7 z$Xb{90=C&5e>{rdd1vSp4l$msqv*QpO>s#Mm#*p4-MU4g-ezn}Kq%UKVkMbI*(^Rs z{qmPK)3tRH#v|-d%XR^qmd_^SlTwM|)11pSk7l zxv;8lXWy5oq4s;?-Oc&0MpZ7|E0-It#+L1GgsM(S%;o6_s`kM*LGi7Gv+y*3v`wM9 z)~clc8uo!upQC2qzrc`LaW~q>EF@L<2ONNL<<(eOQVzdR66az5@>eYk+LoZ%pO|iV zv=Xz=ujO%w?ms)2IavHOXrN#tNZ+TztI`uz9{lQeW2iEeCK}>wx1cAcftfXvsd)U^ zelYGh@WhqbHUzb|c_2|CmEKJ58@*I@eT9T`n7nQ~=CcR5+?^=1EIY6!8pw0Q^M2d3 z$ORcdhq?>m#14NPnrso5$@pI z^wv3}4b~CAWMMdbcqX~+9_)2rn!#+$5G3Z-EGJ2ej4c3-!bu2u|;NQIh;Ve#j@2*CzLZ0*|;%_WFO;)vUz25iOh$-Mu#p z*a?L2M-o;Uy|1IY1Dgt|+SNw}N>kIz2`D@#%7PpA3F|Ql>2!C8o?nk3cWQiRd-&tQ zB@B7$v~{DUG&BXU%^QHgFcZIGyOxP1N21oc%vwjP$^WD2E#sPS-}i42rBkG1A}Rt> zO4kq+RHQ^gVw8$>NsJgGDFOpYX+B7|GC~+FAtgDa1`HTAY9m+ozQ5P~f4T>IaGkGf z*Us}ij`#755-7YvrOX^EE{^t)ef81}E?6PufvUo@vZ?K?z zdn;@r*bvHgSUqBWQwJ_DeC=3$_bBtQf#>j>GjcIjgNH9`tEd}d(A24w*vt#LIQ|8y z`w7&yyqzNRMo@N56K0ba-jk(4W?{ODzKWK7X;0r5!^Q2QPJl)MSp`l4q5(9eF$b04f=Fo5ft3_OWYRQc6lZ?*JfNi?~tMZ z)dt_asVm!;qqbM$ zlI*=whr~1i5pym-E_4jmM0Nl9L;O`FpRbtkL`|8MDev39wAk#+c)Owx|Ay$aTrZfG zE|X2yaociZw@8&1_c~bmcdk0^INn=By6LTq8ObAhLF>vYx6rmm+^WdxQ5ks@hf?)v z;UT}ArkEygQS%T3NDxJ~o*w54)IR!i!|N)-WK_?Go~u*eWmR%1c%vY)z(-v!s3yoJ zt4hqK_%HtVOv{SIJxst%GuMC?hDkYTt>1VoiohKx^-1P~FT}WAVPpHoK1cjdpGjxP z7j?561$q}D_t?tyTnXz5a>w$Nmi(1kmRS3~mzNidsToj{opaXb)fKxfTo26LEdhT< zfxjFiS)s1$DXT5EI*@L>6Y?1m*zyp~XI7z#a$|;dao9x%-7i5T9jGOUy5=%fgQ5jK!*;*kcH_DziN@ zZ<+je)5BTw&AeIHmpG1F275);`9%zc;C8Zi&Ahp4R~S}Y4RDwXjN72xO{4Tf8{APQ znXy&w!#?AM)V1AL=iijaXmSBrSlanuhw5qJ2u)#2(bqV>5ikrbA>H>GKz~VItnu;h z*Mi<}>wo(ia!x5F(>mMCHsNF!A;h!=GgO0YU9~&^Xzmt=7ejvJJ&@j9@s0v<&O2y` zj;OjGN~*uULXlvkHoEAH;6&%K=N%~Cpj^ke8BsxS+`l`EIg<+EkI9-84Q8Tia81yS zBIlks522${Wutyhy{sNgQ_TOnMGhSYJ8Np8Xm&JvGtZ^S%~?|iBU@G-!3?{O=-_om zr@UnSNG#7eWE1$<(rkKC*r&nv#+^wYy_&#dRpaxqWVMJ;wi0WjY+`&_gg=kl4in@W z$x~SQmF+{hKe1~*lSP5lzVY)$0{LxqZFMP}c5w}~>58We{nL);PX++3Mk4#|&+3x0 zcjF%THyjfsM!<-w=rJXTu1miukooN9^!LnM!EQIzBSnS~8K=-9TAk3J?Yd?Mhomi0 zxiM!>;k(t6fD`Y@9yb5o1wLQgc=yjgrxSQI??TEzbXa7l>5N(@{KY#Yo-O)G_ifRA zrL+6grckRaOl^d6PS|#f9Ruzs98sR=uEbYYE&NBfDXcnyj=zV0nC$w*xU#{JiJa^C={R8m2Tz)7G!OSaZ2bH&M_c&X~nC`tn~)$^$r=)s6=45IYr} zb5yRN<~pwA{#Ik(spvhfgDS|heL{p5SF{SJ2;obiZpn}OdbqVL=dbstSo(SD?wO`~P-`uD|FSlitOj9<*e z;}@&TEzjku6>ae*ViAal?EurUDdiZq0tZrz&{;Eb5wpYCtZ#sBDfmVo9=a~P<5z61 zdL(EJWx9|UJ2?HjoDUUqEPV+7b|+(Xu-iUI{p$Ug7h7k)CeFn^Al#+@Z^AA%wRFH6 zY}DFd`^URC;Q0cp?P2c2ogdH^?3n8{RvHyc1?ZPOwze1m#&RTgs)>&_3~jzti#oWz zom~1Ry4`_Em2k_7ps!J%ua}R*cKvS{-Gn+VaC`qvMrI?xO@niHx*0>=u#adC&zMcVQaazVGEV_s^NhQ~0sYhv>I>and1%ukza zc^4VU{D$|7)NxDG@Y|U9r};nE42M2PeR#){nmg(osr+zoLVJ;r>!*V@MS|{+hjn7| zCGzVWofY@0Fk$PDXVNg+qr9oAhs^pFL-kRlDs`-jK8 zjLV$6P+5o}Ca_0dC$qbr_93nZOK1mvQA&PWeo?kJ| zcY-^|7L90UT5K&zVAkJ)8U4Qu58Rm^)=LCW-w?C0kNfA(t5!7nBJ0)Up{~-DmNk!- zF`qi)(}naKvATIH0xL{%P0zjZVg6F)SCHHCJq}}WyLYN@yE?_T1jL4LTIxg(>4O9` zXYbl={w=10HR`Fam3LOnUTN5j`#Erda!beZ)z>^%`?np=#4P8Et;+Ua7P^vCd-x+t z)M9Ryg6})0p-BoK_!rv&V8nmPvWN|fy)>K0){cMldKPh%5*gJRe-b@sx^Awbt`zj# zK1@9S<*%h1vz!{o%bwYmIb>W}kSL}tp z>D_Sn;xnd#9z%Z2dO_;;-x7;#edHe)C}h^zLrU;b>;7Y%TOoFK7R|=C^Fz&uVKuWy zbw8z!-nZ8#ksc~!qXsMOyI{D8+OjRK#}67=L(vy7?&yQMu9KG?f`72F=U%+AElE+% ztf0E%R3BmbWih=YGwu6o1v-6rxj?4=Zmd}=Lmr;-kx^X9W zx7_4;cAXqIw|5m7M3r#&0~kZS@lk{omRb@cXRnpsukKh$AsRXb!0(2Yk0uCTi&OCn zQdTw;DNSzN(P2TD{8XG~sO4z-K@SIWNk$*^@vix&%qlx>8mrm3@-C=9I>>+xDcr5w zCB@9I_Y_k-xqcMPQTGDNfcPZe&f%AUwGiYQNd1hfe+JMv9Wb6J7|U4xRAvULIZoB- zS=$=~C!l{t&zZ+RYtfzdds@cle@263>+;hdkqi~yHS~GPZo2Qw>pe91=+<7)08;Gl zYk+)?o)JSR=8|grQqOYyhv#&7yc}CnsPaHttfthev#y8xdQbwdBM+H+s&o8dUnm}q zGQNkgxu(VyJ?Dr(dgo4_3BCTgF2*^tB)VIEnLfE=4pAE%&H8~I+CDJS-|8*iA@(hZ z;CM|IWzmVE>H)HJ@m8kYOD~rd7~7zJe(Id%#S>y>zhw>dTV(Xv5>tsv)uMgbA;Pbq z>4&KfVPTkxPaQg<8A4|Y>ji)RS5y^~!2(=+bz8fFjpctW0W#l&%d#>K16p6mdgK}fnVf_BLdUT-kCK-kk5b$ZD87c87`N~I z-5WZic;>$jAurWu_bA~BKlW}>6?Xm94;AF?&XZg#z>8)UJKz?iP3TZbn<4C%_PD=~ zrYu3ogkIUscF*Q2pQ!o7_hOA~ubb`miWD?|$yqL$cp{cymDv=*$+6Y!!m^;&nduj!S{A6v0v#RY!gIf)qEUM={MvkM?MDCdBUZ zU^I6)$nKyu#jgX*Xu70`EA85NU(gAvbFmD5)xKpeH7|2bXS#q&utRC_iT*dri2gay z*(@A4BYlSUhw1_o;E)Yo{lV_zz*`YS)@1gw85XE>oaZmKhtv znKG0iye#g+TzzMCxeT8)fb?Q)4EU#j*uO!u3WLxL2Qgu(cguto1SXE|EvJl8C@VxH zLh^|7<@07ySTc{pV>Nzcu;H~#nn2P~b8Z_Vf~}%hgU}+E6HfzC676LDInSCBH)NXi z>T~hQ+~cwnVVB#I)pMUA?UQLNCn%#2ZAbob3!)=ywo+!7q2<2~=Wxw&rro&_PkVXM zL-XStXCIF;IhwK#JN_()^xcrCmKbB9EUXoC`y~2UCEQCU9W8RNmJEgUfV;Aya@ljC z$6Dvr(kG&p&qB$Mb5y45EgD`1UnnQ_N;64EOv+gBlM`mREf4=v+Wi3AMD@alVLy`M z(7NsvE<^2Q(J`&cmvH$_QNbe4cK3sa%RjX@UdHJGSNqE$pF-lpXwij-m+@l7^(3)i zbWz~dBW~^S3{Hc6V*ya&XaDb)t;Ze4%R;q^4xULNqB~o+>tspsbiSFrr8~G3OL1wI zv4Ty(Q`P9#7V5gcom5u4`fT(@s~GT=YbEz;&h$==VMY~}CKQVTPg)=+#jh4^7;3wJ z44e_XHy%>J;jDjY`#Ypz+&DK~i7Dw}K9bVCJ9(`67l{r1Z`9W=6wN3sdY9{H_xV8v zZbB#VO^Ht}4#o9Oe|tc3$+M?1x9NCgUfEPgsV8xaV(&5mC>|7N4k{MkJ)QM zwsF^PgQ)v&uSczfrqNw-1OO&Vbm7j?>5mikS{1S74l+b(Dl)%Ax2ZUU^hsaqeERQM zuM2^OHN>RFVKug}vDxJHkM$20&cWQfaSA`K#5&B+8lx6Bq;NXbroS1w&#UBombmoj zQJ;feuXEY6+9#PvM+bfQj2uj zIg-=BZGcF;Sn$_%ip@>~jM4AiYcf0{?AB$56WuKIubxOR^u8R!%KzJ4r@sAIu3N1F zHk;e*F|2?dLOyPYrNR(p!byGwy%7#p86_GVZV3hAcY={CySTP{$&Qtl=kuFg^O>?n zU)Uhao*!yT)~&EV()`09;11i`QmMbF*?g+|!#`>lnpW}kf-rL)K(5#rb+a6Q8L^In zU>|a9naOqw3l4UL!a>U**Jl9C(SHEITQd(z#4e^a5p(a9FK1!hkH+bf8%MuHNc8hu zwy}R8C&O8nA9IubudBZn0BeQ%x&1}lSy797Sm}ICXGV47?3Gr``gpXO@Qv9x*V_pU zcPqm(j~Shkw3cPf+XMc~h`d1O772SbFWhz9aQr&?;W3w;lN2uF3jFD)$OWwT!n&gd zpfo~Fu!SXY7kvHtyEU<$Q=hQd1BvsGM=m{jq(i_)yi^&0WeLCCDb1kMxwaPDPEo&KxgS8AwV-piMA z6~Y6MB)3>UP^ib6v-^mT=XXJkS(7Y_8)R=g%MN1OC3A_XWf`=8~$VTRR*i2ruz2L6xMw0_fvn4hLpBA4^SGtVkv5Ag{YsO)X zq5FdV2~c80aA|hr7m@t4|9;-dr{)e%>N%?LTH!Ptjx99OC9;nv14Bm+M`Ga8X!UU7 zCCn|pxQQ6yrQ;sVZ$#F#6}0-G#U}clt-;ancKHuf#=OV;0n+-2`h68j(*WDi5I^gG zhoajVWQkpRGp3UmzD8Bpdx!h03+$_y7B=n=OflE|%IJA!X68bZzsHJ|fRRVv;mPX} zEOvM|plx3Lh_%2WE~mrSpd#L>n?-&?prAZ-; zd)fD2W&&({L#j7nLsB4yVEO;F1)9dY+F~sF7lOWn6L!Ba&KBQ2Q(yVHq@L&{YY+BF zK560}Mx!{_1(HpE{_AxRFuxu~Lk|#i^xzQ95v^iu$W1f;qkza=L)u} z0smU<)#lAZ<%A${@WRW$e+#YF=bV0x0n@%1=H#VFrr3+7abr7ep%iAt`;X5aL%w*_ zVLFvW=YbzJNC2dw|sWak! z+ynx=e*erly@?#MRX%MjwjIj{eBwXc0fLXUGZd6a$>=w4h+LA5eSpzsf~8LH zZwV<-2_1BNbg$-{WLh1{2_n158NEt0x+;BHljn@Zb%)&!LgJ$+PGG#T8=!7Ciiu;khoQM| z`v<_!cUXM-AOn)_cCG4~jNGz(&%rOj$X(TLGi%lrXT!^vgX2D7X47$NUVnc{ zGJ9?XJ|Y&KS$9VpXCp)5aUq(TIyUrXsB2VhLAE03c=>jnrLYos4FT{9sJzEgbp z%kim7g<5spUsTW0t*c(6;2d_PyOlCCShN4}aP!Y;l|dOkR8M=)Yx`x_=$G&yC8fSX zQC)Tl0dpuo_=@(Kst}Z4AfOe+!SS$6{=LS2lb=9eZVGuNjCNT^YS|}Ohz8w|5O`9r zS1s%+3;nfMZkp6V*8+-iX=>pJ)ZXrn&81tXxo1aTv5=??i4$=-`+5*{!5h^<#|D<6 zDy<)yERq--9Owdng|u%x1lvXNPB|gx-PHTGBtz?~MY9C@N4LZ2EJ3prVB;$r`o45W zslrTpUwvIt7fH2*y=|{?gvcK)`1zO=*5%;0n8rqhjk`sVzLYSojX8OewF!|bw9O-W zMH6yQh#_d%kEJb>9|8%9wojVt@NwN{5T5E)4+ZHK_PC04-uDM8ABo&(zS$P&klL)_ zV5|0s+!5#Dybi`=;O7-G9gYqB7$tbYR-OV?NJ55vB7KIx0$*#HlkzS~us2?Yk_a{3|6UD@R2-PgFEBPxGI8r|Y-y z+>B9+sQa?^Ea@pq&Y2w`L-Y$}jdd=1eGaj&OXejmhA7M!4%P(!A0dxJr7p&w1usy5 zyj9B@jIRzS=Tx>We<5%-CG+_7SpQUZ_g=OysG=W$Y5-p>UbJDuUV3+7c$n-C#$1sdY=T@W8-@#ewaLe3_J&L*jQ*^8t;+V%os99c!aG z$@UKa#744NSVKYN1=nep;}wW~$ll zd3Izi&|dI_S&r`Tp?2T*tpBG4P&P6{@pAsE?cgcQApCNWj{b#z9%6j~EDWbV)q!Q+5Zb+ZDF>(Nr+Jd-w*=U9{`y5_K5+|l7>iOUKfUSCt$OBNPn5>t zyy3$L!!w5N;MdKS;HpD0g<}l$d(?=u6{jFha-dtjng9dA=91n=T8+JY2xH zEoFQBYKn3A5hBYn5DK>;1fHQ)DPwJVQDht#|%1a z5$wKYOv92TUA1$@GiPdS5gpz!(gLzu8mB zK6y|duP30@l^{m{Dxj6i(YDK#V4^pB#fr|eWd&AaPgah^H>WeJh3>QZRzG%K$+0@^r$ z-BQ28_lzg1y8T2>qtp+hrsRv>b%GJM$DOr+@sJFvG2VTl8ggMQ&1U=dUvzgLt+k`Z zxp0%g2l`R1>yjn%d4bd0N=WGTFq7jY$FA4zlh8_+m8$A`u8#Khy`&mgMvXFpNqINW zs2L0@R4PrIS1H5(s|CDgm+fa6kMi__m6@Mu?4s1A~8wJs);(Zg>NfmBDQC73v_JCYfhbd7H zr|7z{H=)sIW>zZ&Gf82OL(U&NS+7nCcYA7ny2CP{-n|(hnA6{eQVv9u>CI0#)aCjQ z*W0`}WHwSRI7u=I8JQ*WPou?Rt;I+3~2>v4&{8?Q@Bq?`O2b51tR9#C0&>K80Hy7aW*5y~bD$ zw3W~-MrYdr`P(z!eqNhsA;<|dnzO-sUV9@c|qW!uzIz> zMX>`o1zlf+x&tmC2IkL|X@W#g^`n*V83%QqeDI833R z4FnRTT?mpC@5w>H^dbwK^{E~qlyqafP4(>i$*yK3|KXYZ@r;`SxgE$of0AQHNY{&U zd1W-E%{Yq6!fAr^tEubYthu#dc|fq;wq=!-DMdqJezxZam5-?by`rEl9ZLqPeRJfO zoPgBirHS50Ggmfc!!|uh(BK{0&$o`1lqcR>z>4MfdaX2%(pqxJ&`=&M=k8ixr?!hr zs&rXpoiS2%gnEOn2f{R9m3tmr9_p>B*wLYF#Jh;tBd()2FJs2YhbKc`MF7KcQRy%* zd)6aDH(g{1>;9u2q|RyR#I8HZ&2c=w4NIB#$dVd6b_9?AkwVV`8xB-5cAW6~S=fIe zw@j82L40EPCtFLe{(Nu0Z>audts|JgJ@YQh3v3+Ba<)rB*lGwadr^>3g$H@T*8jYU z^ti{q1>-MNQXNlp`k7rtj#Dgwp4etDSUWSmE)pG-bUVInVs7&1g z=9g2eXLG`=EXXT_HqUEn;K>!bowjD6EyL8aUo}x@9^p6Xvj5R-*8RR#@V)S~#^IBP zhiWaqPj2L_7v38D&3PK3XJFH3J7a~B`;^KaWBK;LL~DKsPiy@A_yMN4ECMW^R?K|J z<`Zo%Oceb4Fv4>xJ0|#~bD=iu8=CptaC&*HFg;(cQduYb!F!d@ykXPYcWuGfKPnNV zSq=RsVH~teKI@y;LEyd*O}eI=CACSrpFk`jVYYRz+|ptV4g}GD>i9KSDLRt)j*Fr{ zz^aKV@&{>ds+nkX_9RRE|A{PCZkhzTTCQqd-r~i>H5N7&VNqqebur71*Yi%HHt@2= z{zkFYRwXp0a~z4}B4SV;EunXnLXP)dLpHU>JMeRF#)WR>o&{SYJRWM``$vbDjk;Pu z#Zcq?cbzXE`pPCW>)0^i0K6&^{Yv(ly;>SSZriY3e+Zd8?p_=JMe2(Gjx|F$-7KYC zp{W*~Al4$R*@9lKFu5TR;qOuHh*De4$Q~-_!-j5!&eZ+_0~A1jHN3#t_^+#;mT&4) z(cc7vylaGvwzK?%cCsP28f(rQoW54doT{$T8^j$Dq$VZq?xn0Y2zO&SlK!loi^9P@ z?$PJIv!_Xi9*jDr@^~ZJ6k9#>t#C<$w|!O`Yff6c9eTLE14jogLz7iX3=7Se-bUoq zY0R$1gp>JPa7l%rBk4wMrX!cD0A+K&%dHoT5u5K)G>V3s29qC%MbBzFfQ0m}eIPmk z>44}gwCLsvfjzWl>GwTJTMTD{6XF98uUpAO13!BIAGXz30|#f4;&Q6p00qfR5q?39 zVuG+c4xdN>$DBrCOeyL{Og`{tSX;d&76o@p(^cGmBsuM5lMAA z1bB~@et}>j*4*Y=$wr+rjmSR059E@}*<^{~aggy}e)I|Y;iVd{936)>zn7m3~J+ZEljm@ZzXGH1`1@<}ut zV;1TBM7Yxc^t26XmB(Qrm2#i-aGJj@CnmAH-(=8CbIECyaLOdaHbP6KhNq zc=Dz%O*Dz(e$<8s^tt_)R97XG2xmGWnHjEyQt}nsY}m1`b)$>Zp6?TLul5lo^Pznd z;~X%Q#F6l0a;78JXYXZ=Xg`0$AcfYWq_EJeo9DhKQpHdiw4dzZKa9m^_ICq|*rPKdhtek$383RH#YGOn+Ln;60M% zG#^Wiklc(fEQ|lkZ*h6l5}1onIG(!CDnbG|7Q&MtSp|$tNjA}YPYQ%r#iClmEz0t- z?7flYZ}-n``t%ZBPw^-G{B#JmH?eeS#ofoQ7hzw4E-_FCB-)FVp#kRj7U6How7~k zQfPmadE+E7Z@CE}#CEdzY|3K0+Bt}{fg2Wu2TZ20DB#l}ol_*9OJupno_xAV+3Bz4 z6FF}ZgEvMj__PJY%USXadRZ5jq(xkr8>dD%X7_}8^Y3_Lnh%gV8t-t_S?H2A)19ZL z-#)CF{A>*u_Wdf~q~n2-%M37=+)9#!pEAfZZu`6`5ZmDkSz0qbu-p9pcYeT)ukK5s zay82yIswGqu-ra*4v_yDtGE6Q*W_gDaWM23RuYDc)3|33-)g%m&hX)f{*UouidOLo zCBD_VMy1;A)cGSnGu|?+P)r$`25uNHcz+n1FSYI?a#B_lzI@`^#a{&Ba<6Pe`#U%rJ1h}J$ZP#kW4C=eUxp|J zJ+g=VSF4_?(+UpEoHVU2bDYg(YXkWN>B4Bf$G-T`B%g-^DBr~(q%+@l zQkrP%sk$Zd%6nd!`kALCBYOHf)6D_seD8$;kIjFma(44*$qC#h$HTCTaIy?re2;C% zW!Dr%VP4xQsQOO`jk^qPs~I%og}w67>ZKM1{c+e7bg$(XW)gEz?c0=_c3>-cfwj@E zfi*2CSA0musT)+Jjip^7IDX^l?QK1Bd;28ZvTm#wt89yX$t#y~I;Cbrm6xDy+_HN< zo88RfpQgv+KRxaV{-p93m*WG!N7@vVb!1mtIcd>N;JN@BS0^yZ`3mnLLqK8Rirx8q zVMo@&n6Pq|gkKYCXEaCM7+O%p)l4N5XF<*(-XOsty8T=&p7)9gyKyHove|>ko9aH+ zI@r7}IRn$y4KCMy(ao$N9zM?ufp^4~)8AHR*6*;md)Sw=IZ9{c#mzB^-?TWsHEedJ z7PTsNj&-c@lMzH5bq-?>V_#_t9-4r zi#hmtMaF!R_(&cVe={-9@6b4~mVVRq)LojBb^I_1Q>WW+UuBjp*-pb33Pk!2ZIZ4=g(5d0o zA~_R{SManPMu)D`B&3?e3KOq-i|Uf**4+7z=xx${(7ehlQ8pIL=KZ6kU zs`TtXn%teI!|n|_e3@zTczc*U6r`&Ti#C?krGWNC%`9%0h z`S7qNa||1{MK0Glut>Y+E%d^aSFg_|#;ToB|GDyScJgJhV~Ok!UdiYJ^LZ?9czTsG z>u;&PBGuf2t~_9QH&PBq$-a~c`dTI872*2FAyjlx;*|RLmqLYf@SS7ex}3jfrc0X`Wb0WRIyn}nT66{G`oKH<2Tva{#m z!siBC`_=^D0-4Kb<#wIs44F&M@B$OsM3w}6kWk2qGzTHk_M47d12#fnri5?}&^Tjr{P~!T6X(Qhed+SzV4s)BicqZx2*Efh*`9Nc^DTqyd%{j z0&t~YePl+CGXeux4T=lL?R)3TUYR2QBSD>Oj(r%8_My0$R1yG7^Mq8@QF)BKhz}(`0dL~+ z9~z;F1@a_{_%XEf%9t=#fQ$l?dU1{>qO&fi$SFVn;5h@Q^$V~qg0j|TP%yxNuefB# zs8-`vhAtSo+)C~Mc5bC^1|ztnQ@8n2lTJQ^Naa8Sez-*bX|}vwUTw`bidFUKv`rBb z@>Ou>IA9d9U><#{GWHXtOW>aX7SpO|)HA_?UbkSV$x#4d$mbn3VPJrcVpsy7RFHtd2T>%EX&T@R z8Mx7l{YSEU33SU_M~jA;orDjM2NVK!*HS2zDOhIH@cVkE(uyR9_h&&2+6t(^orL3I z83Q-I$LjC;Zd@lRG=BF9p3{ST5L|cAcex^6JnKtyVpUL6!mAq^E17MNcTL|7q{uJ zUU_=#2Ym|$?5t**u|>m+vZXw{U|i_d#jmj#y!tTGGq|<)!`h!iKLCf}>+@izzS9> zzw4O*Z4{N94Z&y4>ftoknqT<+W`9pSh29?wcbr3X%d|#(OftK+S%-HxK-f$$ckF_b zN+R<1{rR#o*)bl@45<##Gx=%DUZIl^vqwA{?ESpuhG0R3ib9q50C}M zbUf%;s$Np8*);~fgn0!zxFzFwrAR(nb|19w}vkyQIPlEH{E>w)Jd7Cq<*b~+n=L$Wi>&IKvl{E5;T27(1PcWw!pJVMMxU}5^5%cL^ zi|i@#X!9wW0_#9pAvh)X=Vmim7=OZuhB&rWu<9<<6?yg^y}4ZZDfh0_LYL3%N4Y~TW;=#Y^9q}2>bGmlnYIK6{|;UB^^!lg{*vq_xO0{JNBYa2 zs?zA>B@52JQT7$u=h+YOez%(4aH^e;&Mk|A=_O@GG+Pa?icHL2gK*45@Cio=_0#HU z+^Pb~qI1!$E)d3Qri6tfn~Bpx)zS5~&Tv#yYw&AOs+K?RrpxoG>98}p(cbC)RlVld zbV^0FQb!67xwJQN|NQT#z3b4)2OYKiaeFQINsPh+@!~)yh8c%i4(>`O9Y%?;sysnE zC92YOuc;}HVL>9r6_x>xgWBc^{frm3f}9&L!Q;Zdu$a)Y<7IPULOjpyTDdo)M)DF4 zHXKG5!anQqoMw<-oNXRQY=}>oE)e2K8sQN{F(NpQXDM+p=O&tGOOjT7vddo_&j8g< z?EPF9L`h0O`kv?swYxAEv})(NvMpUwjq{fpV46!G6X|=-F-KZ{QSQI6mC(~X&OA0>tcV@tzcNO@;b#Uh^{oBR zYG~cX66p8=Tn~}AAhx!}t`ExnYg`qS;U%4$8h-?K_)F++?gMl6V0u$lyP@ih74o;m z+!UvaCTzm7Zv)Tljz7%)YSvq@B?x;Y;hzGmReN)2wJ!E<6-d%vuuPnO}PcoAyJ}fVE z{Rk%!Qk@2Gncv4Z{2)zbMS+In>7LYjwuMH8I$vL2n2fYLN8KtYv-HF90~92jY&b%8 z92s1h?itGC1nzof<#+K}|NCcr7^Q0-Liy4$z1jJ&Vz_hbiQduF`nb^LqLaIl+Mry_ zk|^AT@gGrdhxbhim+K;YUu(4anPf-jvd|i7g?hak&6?(j2gwy7R$UT_vwMfxFxp}@ch(LqbKNs zo@`<1SiFV??pUwMa=(n-Vo(|tC@w>0%w`;6+YVql6Dq;_y!~1yXO{%l+5UIPZDZkgHh`2I$FuEDZgo{Q+lT2yvTX5Khad1Q?dv3m>RQp8fzGUVZza8 zXMx!3NnrtSVDmBbKy!_YpchR(3vP`84NLx+gCA5}v`WZ0;F$ErEp~La0Knjmc}ZSe za=)9qpzu+M?tvK^gBf^Oomda@+5#XsSXbe;-JD8*;JkJCJ3Sd^0ZCls0G)=*jEK7O z$W_Aj!3>?ZTX)D%?C$U=>@2tTKSTOpr{cPRmX3PQA<8|rv03s|+;k0du)Xr9N;yV@ zr`tvn=v%qu;Fst&Fq6yyx$uOqT>d%ITqBH$JNJ;dE>rwG=tcyR0sFJr_TiV_VN0H? zn%Xe&J^n>KZ-Nn}-o(o+X1Cy$6MF1_?F2W2A=5k*B;IFZ)3%QWd~v4m>7u9~&x(kp zt|MyZw*;2^U3(p^+xleYO`+fuf3bcmmRD_}39*=|MC%|Hguv$=+ZI@Rd^WSIt&=Cm zNoZ5{y?5^SLY6;fvwbkI8L$U=OZ0$WIRmqi`GA}G;-@{A4}GEB{tWk=tqQhn0t2B< z*%qbZmk}PPfyX9e-4D@(0U)UX>zWVns9qS=u|KcD@}EG28FI`MFHU*3W|Ym z=K04xU`&VgGq*-QUpD^`X0HJY170k{PCLCeW8H+u6Gum9GWTh8!P8bRrrMXx2k_cr zDLz2q52F>c7bhNV{|g|kL!|FWD5r*?zWeoOHNZoO=TBqr-^V+$Mi4`L3zEnMZNlfi z_?=VaIeXa3tJlCr;c=&DG7V(+hi>5URf9oTh|skk6H<#yiVw%P&pqtvl1fLjKJwJ% zC;g^d8T}dBX^Ja}If?Gre09TxoX%#&|K?L>riBe+SSxP~8%oJDRk(g?>kPTjioUhy z24kA%afjVKcxfc?vu27dQD+-18@k#<|d}x1O?QW`;MH6_~k}42TXhkzHL9X zaQ-*v>SUs2k>Ve*Ee|h*DAPV+I(DA5?bK!AsnTR4d#kzAi!*-JS-{}XpsJ`?VleZ- z59q7Fv8`e|sN8KhU2t++fuEKl^jF#`<9}`Utjb>$GCX_L7tHVX`|0d0odO4`HvR|R ztb>P4bZ7T%?D`#=73FB3qNZKVlV#cxf!lq_iDRIUSzpcl-xNbV26arpHP%YUS}(=; zgx(*2F)ov#bg%5hN~_~;!YF#h z&`xgHWZwKW+k6p}^f|k?)@j7FGWw6X{gQwnK%ISRob<`RB#FqO5S!I2b=p4_r!b>X zUTF7#xEdh%AH+V#-1K+8&0I&5JuxD!v`t+a{AKw>=Z?AAg-&e3U0cq}QOWQrayp3< zfzO#2)7)D+z)gu9?Ylki9B&LPLMEmN(tl&Hk z)fr1nndhxB0YiBW1}blb)C9esj{VEKJmqyy#&yTJTuHgY@4xn;-b)crI6b!wcyj8b zh!j8T(z2gMqQ)P{)7*k&MZ_F6hXC71=OD+k^!`2K^1KN#Jh_O?Uu`GY6-%T}wBaSY z9ux=BpS=1bO8yS{R3l2Lc7&M`s^F+MLSX{JLn+)(mg*+YD>R<|?)-z1u&c;Y`RqJW zaB$YBMEThx=Z&%NipBj*j5qR^NvoUwR#qSxC2g`zeXmwqD7zB>eQh;GJ@miKpABY5 zMoyEkXR?SLckX`j!NlE}kE#_pa-E%>1=yBB?Q}YV@lvNu15n=Ae_ebxv`w`0;ugU` zFZ^r(4-MVf2q$2aU`C<5z740zG<+Wh?&#qEKbqb>p6UOO`>&)@Bq`@Z5{e2rpNpbI zD5o4I5i!egn3*L>a{f@{EIFTZW=IZG4s+Zv48t%CV`H=V?R)*M>+kJ$+xxcX>-{=C zACLQ^k8tbTtncq0f9NV01b0VU)G-H0PWq@<2quqwU^%h} z3)uZxGDj$kuWd3(uXp;&m$65cqI5InSRSPdawGp6J~ihB7*)5?F1B}oqrqenT;Ez4c)RH!3bi=5uv_G0BoO7;e^T@2Kbf5{0{Gg3*w00$mB6o64+k>4 zl{}^KwvQ@u?VKvzdW=xuNw{xAC(LN#L?_f2`ej&8z0Vc<+VT2EfAQJewtM4w&U%is zGCbS~OU|Rby+k5SuvgEch1S9bl2{|^GyaPs{GVddj@IyC2|a0h{ImcP+ba2o^Q?wJf*@R+4|{7j^aG7 zw86N1r1&+E`@4q7S)?uAmWzR_x~$DQ04_M-VLc|Q+xdOxwdO2W1820a7hOCa(w547 z*!PRIEc9Nb5FWjCNi=&DcYe^ZnEm?D!40w7vYY9rm%WDeg#|_=F&Xb2SHS!gV-{+! z72WXBcpRIwd!~Frke~k&_#EqvQ?^@ZNv55}9qTqAIsRK@30LCudjA_;pQN?`Q&jK! z{{7GvxI;c+0RMrFu9CON(jCDoZIH?;G1%=qIE&IUY zG@m$h&gPFP>j(En_?pwCVvlk8gNpCsEV`5ySkMET0P88ib`Sj=Jm+}1j?(>jANX$t z)R=Ms2%(1HH%d5P9j_e|dA3XENUovSNkVagplFo44}E&YWi+NeVki|DKV z4hi{PA#FU+mN_(~?`Pr1&^rbNEY$vM@$?RFb_&dW*jcY%Lk;vhe%HyntYo?qk05gl zyD!O$maR7%&cpoM9JT1n{VNkLXZ5G+l|Cpq<*V%Kk_rTn8XfI|Y+s@$``qXh&eumP zQE};M8(M4G7NQT17T=$Mf2t4~Y(lQczX6mJ);Ck!leH>pf&R_1EcFIfG?ekB**gcTejzK-y8B4j^of?d+IAB{NA{TGZZAtuEN&+ zOW4MFEx2d8Um|{lP$6ivdP%t_$V7=-q#FNfkm&U*% z#J5iJ=%(e5z4u*oPM3k-V^A7JDGd|NYr@-c1y@(j{yTn|Rxfue!Fg8r#&k_KCuE7& zsXalMHY|=k?LRSfYsMI^hpwuF$w1q9m*pJtR9A|}?7e}{*7o-&>H@(E**N|`xr(cd zfho$n@oR62*%a1Aq$RU1!q~^fZyE=M@5kG{YX;m6-r@w_v>Fb}ExZ8PO5Y7>ebeXH zglU3}X@Ope@_+TgIzqHnIlC*k(b z%1nDbTGCy#Yla3AK)k5Bz4g&`R5`9Ai0i#e(P0{MH5iN!u$ybg|kATJA zkdMOF(`?J%8Rz6e|Et=DTWv;Vf@IVNjUV`CC!>-C6fbcG(d6uR90r{pO6?e_@dObR*kt9V?TY`y> ztq}TFU^*sH!(PQq`Q3%B_KgqnNTSsyJE7;I5Zm53mARDzRsc(g@$8@34U6nGShKp~ zA03ir>hbKkAvd&D9(nWte*V|~su?F4%Ai**1erq4H$N}XxhAH#_q~^%j?ld^{$>97 zZvW+wza%&F2q&$O8~vFO0ZmlLNL!Ro zizGP(7keMF)v?^as|q%W^g-iPE;}2U%zTR>i337c_N2Sx?P%slcPN zQKz`oN5%f3&bK&QxKnGd?RvWy3>0TBX#s;pC?xQ>i}(I!@jT_kfhVfJ#bAsh>jR`M zsBGYOzj`n1&afHjqA3sJPEQQpAJQGaoVfuE0$=>8b`Edtsc&AiM9s2|+P)9sEjLn3 z_uV9))9}pZuRo?BDgs_Fa^^EJn?X{QO4o>w4oK&TrX?X-KMy&8ic)z~FX{tQ0R0p7 zCuU>Dk%smBZ{_I{pg+?KEqnoP{cr~He~|qR6*=9C??(wNxuZ3(a-y>Fo`}y&`V*!4 zECFI!QOfTBvBkkywzy68CNYixgqXi+|D{bRHdXZkf)#rw|2BQZYPKP@<7jyo1$V1u zi-6YXreHt8@-f{Du(o#AvZ5=Ws)_P=`3>AN*TDL4SYWZORTov;Oc#~6wHKXaHaZ&M zqj5l31b;o&PC8S5BO|Wa;uHJ(I7&KcD|Fctm<-x_~rfXB=uf*!uDwKjav!+61ASo1uFKmPBNxrUk_DvuA( zlC7E=Uti>;*7p$LU*uxU_8aZA4%#|(x7LfjZr#}J{LJ5FSF7#` zL=01+RSP@Z?FnOQ1}fE#)$-UW3)(WU*|}+jEONjWN;v*Eh{@UQk2O1blU-XAdv@p3 zWx?0z#)JgHXWLtKe!=Uc`msVmuH8+Q*ZbbG!U-L7XfSqKVQ_vT?uc5{42hxR(_gS>@BpRf>U6b zqXLTD-!JS(?wy^k0tuUu*?NyA4mM7wpWMsv&Q$)E*hP&MK0sqYz%M^IIhEV5-`8{b zNN~`J>T(h^3omr6ar^rM9xwJqSxgaJ;9)wJGP+gW4#EZ^GHpm7`>mXsX-URAi9pP?I;c7bO3gC%|YI6tu#SH`Rgv^N1zU{o$-wny=UHc>E zz4KmouwPlF9k&?OeoE9MwsjU$kMjQ6UhNQWxY55r<=;CL@F7pmeaB0l@rk>ZAASAl z?Z4Vu7t%TW(|3rLf0{*5-;1?^}E75rol-;UH)2v`sWA{U$>P;wIBLY>=#2ADz%K8cY9(e$~^ zl(E0GQ=m!Oj)aFj5Q(caO_wMhP+fT-mTd#Wkcx_gIs+@NcwfO>Iet7i4t8HCo$20G^Wfx{M zld&r-UHJ^s5(UeLa6n9vOG)C#oj)|f9P4fY)q?}aDs2?W=6Wg#@tnnRSLvV&37d%> zKhrE)F1jYw46@YQCe`@0Na=+oZ-V4ScvPmEVoDx?`b4kBRD`U6nhza8bQslCg#Nmk zQ+hN#5faqG!$V$r8kZT8Y4Gq4j}UfPD~Gfb9!8ly)vmYI`a{5+NkfP&)Z%`q+-&Q5 zWXfGY$UAyZe5^R-obeONA?Um86yHqi410};Og}lQzRwu1YE2Z?8~M85BE=n?Bgcqt zSxK7aFEzF4I=S`8!*2;dzOVNcrL*?@4>?*>>6Mpuu}inWIpW{qX04INy`v5MgNe~K z4P(sh=d`xUsF8hJSG{~4%Qf6HKgZx~%k-P;@M6pl;MR)SXz!kYdha&%t$!x6dQcnn zzi=12!M{HFmxs%b1c+QTVaFmUDrG2`4!#G zrQUCtlPtQMZp)pw z0*=#Wqf0d1*zxH!YqRg)dSvQf!^vg6rlwv~2W#lC&Q+^ygAM{29 z^<4j=@XO~%*unbY8<*VI*8S3Q+K#nW5N!$I)kD~*8KzL2OcuB%mKq=`=^m>)g~@@R zKeT)eC;ckgd|MCaLu>VF$1fyf!ajmZ?XKV9W|>L%hH!q53MudO>?=537Ay1yq>L1+ zMFY6j&JK5F=*H|jD>N98wrg^nO=HdN_2(8Ok}LeKtpW56Ls_j6<}&LS*3;$03C?v*=rIKQJl@WF5tVB($0>}3qA*2dzGqi|{u{Iay%rDc06|6SLFZmX9OE_mxg2GXjX5&V;?a&0 z2mWlCTX0#Oh*4k(vFk{19XEsu*84f=%jgBMsH5x_%!}BQbl|;Q%Dlw)C$a~hCFqa9 zCq9FE@YxK<1W%s6>goPp*iBXFu#)&wK^?jRyZXfR=EA`;(n3q>$6zSZHN-_X{-AoC+>=8YA1RHq~+UhXe z@)O+TAu#OJfw?5G$7V^*MVqv+(}T)hc7aYc+MN{#rtIC={{4khk@kXUvs4kNzw)A*$uUP&lkS zrDm`<$s0NLVDAqy{lw-_(9>mu3*pl;e8!8zCxuNl#&+t@c5UuG4zt}zQe80_6S(0d z9#JQCML}!_rS61X{&096RB~J9)t&f2onIT0$)*~^(+^SL(KZ3eEp0li66mkiLZT8o z%d&0#$7MePNPpcOh2dT@$@k7S&byeIMWkGZ8pzsR=>Jt0e$)PBgZi7kc#ziLh{gT;R*oELWDJ$w_ z^TEtXRk?%V+``D|8J@C4pk@0I?zEg+&Kt)2S3{YYU-NlM24LMn9_~%`R||vXM?Gt} zF4Y>n15$Ss_}H=Y*Hc3$sBo0n#JHMkB#3iDMO}W$Ufd7-&tC{R8^o0pnQJ2y(x zPslcyq3?O>S8o}u(uYJ!hsAEr>i0oj%$a+=JuU|TaX&&tJvUqTrKVX)@B+L9Gwzy) zn^E=BmIHWqE5LJy`hMt#C|!JlWW|Tw3>!Pi9zf0!baExS@aBN9@=zYBee_L<&ZFh) z>;AT>XXqvC&}zQxyU{_KBAc^fTPj~1dm%QU#o*FlYw%UeEh|l~bf5^_%FJNGV6}(0 z+o4z|vR8(6z5MRK(w7g?TY@)NRmDplxYp#Y*OCBC_yt(@m zS2X|HIO8&PPg}zE5Q8;a){}07QywR_-4l1g7h$#|Mmdnq&l*6^oSF&=?l=>HUHdOl zhVSe{l%RSpdmkQEEjO8>UQ^)Ine4cU)Ad)z-IJ#DzxD4h{^YluP%_@Q9WwO~7!P?6 zW>NFCk2jxChc|!PL+m0wiWhuo(nEF0xK&Us9Z|ZO%c7NLbs;2)(F50OIwas#>k^5i zu)YInXrm#s{rZqa*Lxrz=JRNndYDd7_E+t`F4e4OXDU-wPCoQ1tB-}8!23+2hpDh^ z=_OHv&G6AXH-|Fzp2~RL)KwD02mxjEt94`Xck} z1b>nUQTefvE50M_SnL=6F7*r468t5lupef<^u$Vy10%XNxPhCPmS70SV`qgPrbysJ zZu`8mpnsSKhUyeo!u}xQ>MvTF3fC9OwViCJS`54lts9#jtaN)S9F-Cln&C2AQ9Zb} z2@8WlFKiOxsT&1oL`V6_gdq>vvAS^=C*$_VO_28uL4}k6rJ}vPy#P9s#5%yg0rkXT zzvkquDQtM^0E^MerkhUFa5FQrdNhHRr>=(u1V&t#WCoV#>fE{Y_4!Wg##u(luzX+w zh15I$JOi14;UqhUzbrhg_R{M0q#u>f+w+AreB0fn+(Y%B5inc_k6frmG+PJBBkvJO z&qu^+;v|}|%|IW(zj`V!p%1_mh#qGGHhNwRsSgFmwHh7F1sZ|GHji%z>rS|hG3wNB z6;OQTz;@qSD%Wtw14cu}SD*?*lW?z`*Y~zE#NA_ZKxG156jH$r;8{W$NGXR z{{f?h)DxTw#vlW+8)0#{YTXSW-y%AWIzS4D}!8OsbJsAq>0FNhS!sBGe4q1T?-q=p@&Z(&-u z?nmlp|587#oYo(qkr2OZejp&rNk5|gO`|}>J8lgQ+S6ARiS{i%hF643Gb9j{CSq^ z4vCm5dTAI;scP(SfAGk9L|CA0E+ZUilEHG^I#k^&DbjhQ8leUmOJ5}oh z;F<7?&a6JaQAvu&OG7>cwT!S<5?p4Tq{PPliC89O_@4)0V|7xAwNr7+hgQfW}0DJ9`Dr+zC%X6S9VRkAS=w>B%`Q*a(Xu6M69R3fhx4LXqr<*2EUj{w1>) zfZ2&~5V8ls#cB|F`(@UvGP?odIi`JIrK`AV)9?I6@kG0?K*E%m2TfHPgu-`1J&%mh z=ro(X1+i3x{qXg+y~BF(AGb0Rv|#j>N|%jICo0Vv)5hJWlc8G#MRldu*Q~d16wHf# z)KSaX)p3grB)ju*Uwf;=PxMPo@B4tNH7|a~qN~dma(b@=0sb zE$UmT#L8gNbCFz;JCza|0qg@vvlmVeAituVHibqdMDVJSDTtbV>!&9fOs#~F;7IVV z)!@fb^=T$bK5YO+erLyA4@i4h=&QDi{~2drZTrnmUq%qvm0*8{qh=KDd3JYP zhsUOW3|dI2JbKshC~P4fJf=;9u6~U#XGt*4jw(dixEx;f<>LipS1xNP^;F0@0hXh~ ze&{uqMP3W!ed*eh9mdNUV4LwFt#7!MAL%eLcFj#O)+}A?@4g`-pM1=hxx-N_yt`wJ zC4bH)B-KCJ>_(JO{2BsNY+6Ry=7X~*Lf_k3!7erf2wY~_dm}F5^*GwXgub7&MzsEWD*LHK*RVLsf^c%Vlhk__yED@~ zDqXU(7SeH+Vp{Om0`h+7GR!PW(Slmw_j&Yu_IQ(ddU(6xUiM`rqUPDKm_3hDX-*Gr zv64r;=yr3ki`bWi7>*0Q`Y9l zbw5R|8ZQ|R*LSm1+#7Pa+T`pyZoOSe$(&-(Ie(3fKZKBsy9039ygh&Dcse0|z~O)Sm}EcE4l2(1K%etdZBREhYy!TxO4kUmCdEPQUKGZ;s7B zu&s}V$J>I`jPh(ky1we`+{fsDPUr46h=TPtx;{QT+kPwz35gMJKI3fa z$VB2o?rLsR8Gzq;zo5x1l$)JG-02>xpX@&-SA#+rr_o1}OTeih?cF>i)Fby_8ZwjO z@r6*_(=g$Aj%-yTwP$Tp^D%q%E>&OL&DN;mV%v75fD#)?WRu0*2)#MzGC+|iDo9|zL%r-@p?jv~O z268#N;YOg0f7m+i#k7yqNX7RW-D|G7q64UZ7sRO#9VB01%RcG!OkCzsu}=wn=JBdp zniDdIt9WF9=}za(OM0PLzJ5z%HnM}Nh{+m1KFoRNUtVBvIQ2IEkcHvYdJ#DzaTLcX z?q~Cb0Y1JMI@uRVVgi4!zv&5kpk<{nCc_Eqg!FdxQ_{4Lu5#yLaZ5D_Mt=7qUhS3%aE-? zYoD@~F5oRxY@9sfn1Rpygz#_&^@udrYn!SLO}eL!X?t%5$RD&R3_0g~RrOfX(uxzT zd|)e2wAL)Tpoq7nUxpY2~Awdy4!mR~Cop2T+EAxZH7Dd{n%0Sizp| znBcYlRWpmQEC8SBSNJrmX%!;iE9T=1bu?(t!CZ@VE;iL?e45D+n^c2%f2jlAFeOiBHyd-!oVsU9H!;vSH9CCTn^ch{eC;bpUC2E;VJpyb zMBufP{d>fhS;k69irqUk7r8-VBb?Mp7L=Q*tZ_Q^88`Jz!7um>LI|fVRD6~3VOECu?fJ6^LLFpO#>upS zA%Ab?=a}u8<9U$>-!0X0O`aNdgeGJJfqx}9izEhYquaBi^rPRK= zBj%xBi`_^^vle?N-Xt|1yZP(|UNVF4Ce-TrskzzDC`)72SE6X|?{2T-vA>6MT^=B~ z(YF{&^lJ40$g6o{d#_Z%0z% zg2f}w*$h*1byZ~kmcT?y-pnYq+s+g|`ZC|+pApV(mXmeK%e&A?v-e5^uv0~!j;G00 zw|6U>778JE)byZ2XU8)GKCSOp%vFL=noa9v%V`XjW6+vK-BfNQ{ov12wbm#I-4mQ5 zG6;(EH~W8;7if31d1K55?wGp2AqbcLhbCgZgyXnFw(T8bwh_)d9(WuR&_T61Io4km z$4zX_rSSCDVpWC-b0lB9?ql#Pnir2JQ<9Y(!M3%-CZO(P82Fg;$>PzxImdyU<~jLGLiAtbXg|Ui1$6GdKtzb;W9i}Mqt*|)L{EoKtU|Uh%RZ;Y?o1a_v8fM z=V=>_FD~{6|DyH{mh2+bEg@ggF^fPeuX*UUX5f?!%BO54gAho3_xz9he``UyLWv|h{K5bB}Jwk3|L-dxG1@!newhJY2n3a&^p2KTOYLFyK@hp z2xe(JmgY|;3>1*V`Iw!3EwhNIcklok;3_;eRLRd`$$R$DEp$)CGz)hbaIjh?+cw8$ zoiT;xJ$Bpen(I)L+OVI5AK`Y_()JTcHoCw1%<_YNm4&~bN!xZb{4}S-K}kQkoMon1 z>p%MY;yrFICSw$?v-t4u-#jQc=7+$`J?(~_W~SCk!_~7-M4bC>%c@SV-F%j+x{gmZm>mB99la5B{wT6FF%wB`; z>Lx5`a$$4)-qk-PK<4HJ0ZLWDOoV{9j_H`S@n*;G&MWMhzwBljQg00Eg=G_dfm90o zn(JH~ZoSb&EK$LGQF`Op3NQPx^rt1@bmlgkfy3%CnT*M{>~Dv=$BYj8t8#CJ+jyC#cKh*mq6@?0DRjHy4Et{2mOHWIzR{dsm# z$q}AJ348VOn_nzk*ngA~s;e{QP(`FI_w#48W)d5|?jA;?uQwQGcQDtS8tr4ciuA%} zb>(~S?TZ{JSBZ;5(gRi7QZ`8)-|TpGul8!Hnmw(!CI7UaJM~Qs)LYaudzGwBg&*%0 z%%JVgQ=PGXw}?n8n-vJ?-^w`hza>@lywOo+8102}tY1kv-j339sIrmG2tl;Yd75rc z1YqTIa&k61AJDa2Sp)ZBT5=6Dc5k15|9&P$D^pE@G$J zvMMFb*1dSw)iU`WEo*iT+x(wV?99kHC8RBO{Mc-{2{P&5zkGS?Yw=E3n+yHm+5V+o zB^k;BN1e#eJ2j+q*qtldN*}?M=?e;)590{D=!9^$!W`ajkQoCHJyyT+ziu~KgDabRmC4!md~dT;QGUf!pZcxO7|qu6GG!gA%a&uE)#dHfAH^Lb=F zue$C!P87)j!#5kmPtg!3&xW=|4z&D}DChrjv~kreK}35!-+_xSPtO7{>%#c1kW+>b zUD0vf^GL{Tz9>My3px`Z?uhagl{J|)wR4*Ih_v5Ge6y4OSZuQ)`h`LM8S#tcS zdg;8>)q01AtR&%K3j*v6*DZnGV;@2t8AZLYkSZ)4vmuAxCcChU zsTs^|AHKRCXKz}r7~DGhE+9@v)j@aI~i?xZ)z(>rlik5YegGN&j| zjP|snU1|LxekfZ@rbnl(>9^2D&~K!QvpIQT&Kwj4P>LPk{3f* z>+Mz{&uB6*PfLH4Ppp#fbc#`Ra2b(CqqP|Bpv9l2{7*l*HD7i#%M;1MU{X&$KjWc) z?%AV@DyA=tlRX{C{p^Yg zXD<$W+SJnY$5?XZZwLx(l%1DWH+`-dsWiV4N2a97L%yBe=ew^Jj(@Lm-cXOU#Rk(h z_T_A$UNGu7tlZQ<|MI9=UwAlIsV1ubiJ9`eI_KarqUU|tY*LZsg`wN%FU?0pr(*8T z^b@Nc@9I_VWeWHH`QgZax>-sqvbTm8lre$MEpkFP{sQs2^k6viGQFH#F!-orvTBo|tAU9ftJP(+xG5~DZ`$bd|I*g&{P?fda>#CJXEw*g8S#$4+b+by3x zc{NP0=qydc+1_~ZS_OihO2PcI2&V`7D&3pHrZqY}rPEX+){{+qRBLIfmX`lK7N*PO z{v``EYGgc%-G!hWqvi@lyp>HZICFD)z}2|ih1T!9f@SDrM={65QWs87#-0!J%0NGB zO|>X;Cx$%NEs-FWAjn@y^}7V!oon1}$!qD=-Yg!T_V?WZ>73vtAkS}oRZNpy&tVDF zMz@pY);tuHGfbSW)4c>2^sDRGuk{oeXJ|G6koR}K&gvV!tV#QFYh&*ABGhd1;W7lC zO4W&Oq<-#zFV!0NhvPQ{UgV)PoSVM#A2fdMzd@ljPFQXG^LWZWv-J@s^KL-~ysp^D zN}D0dy3)BRydUb$|MLbwqFm@Qz#FbxSNqF6tIbV5g&jM<4Z1nwA%p;S{w>ew;5gIb zpyytVrM13)MgqP4ER-JB90a$G`7VS#*b(&58>c2&bYKf0Ptl zdswpuDyCR`|A^2rKq8Uy%sf}aD-h(Q8Uq~g?pa`V`JV`c&I@ita#H_U)e%Vksf=d` z@apE5?5V!D*9kC|7&1`4kDwtYq#nF<=?i-eK(D0elOiKHv_*X~h3Uv#E- z0B+kuLFLs4w|hA6#bi}QDk@5z7$rOwr-h4(Xjo(#jXpXmY&oya|368D%GISH075RM z$7I#tL~PF4p(G8#*vrWaQW>(?2WyAWtHo-LWdH}Z!gYPK-JxOqwKUglZ0Ss6j)Uus5$*aBCqA(rE%lDGn~Mork2x} zuta3kew?S#{7fYA>0who--RmYGdiV8cyvs$%zP81DQE^)R{S?YBk#ahfLNg1eLdD7 zmRHkzkN&7~76&bU^8+^A3uhDkFj~5B-~?yha$xNn<%ySXyu2Va@Myi(Sgyd+xOn>E zU8hdmUG4+b3CIb8VkO5l&)35(M8)}fuE37H^J=av((z&lzd`~Q2am)5Bl#|97)^-! zsg!)Pm5dVVK;=zWqZTw6p%R+D z(kx~+BNN=`o{&CWOA%I&oT{4Sh@G%A#QHsBovY-+V&bfVNt-WYJY+XYB<8e+*yF7Z zrcy?Ubl{yevR_`%xyiFf8=c=l*l#5aq@Ml1fO{7g7@C#WzJxQ_slKGQ+g~JS2*B(e z=uWMGUa^BpmdnU0G{lws7Vl8_xA!L; zv(qx%9>Z)*-h& zFA*!39ht9(!Scl}ywZ$yiP^-41T>%O4PX3*-k-ItKeQ|KAZzgAJH>R&k2hPz{)P*% zIS(Lcij71vU>%0~8wjKKs!HdRyVKY_oXnfqkx_p9mHeT2&BLfgqObW@<*hV(1w9d< z|BQUOx4N|#yJER~x?~1*pUfA3mBNK=))5xMTv#StETO?wZnY*Ic-)UFP1lNM*J`@f_H-&Ns)^%~`^@^057bnmq9Oqi7J3^Q zVHI1WYLvxtZ7QXAMoGFbsS?7b)3HeyqnzDB@6KtfH2cqNz4g&^loXj5Ii5B>Sp$GL zrd~-^-On$X^Qups&$H1@D6qi)u==D~9M!QZN24I1^$nGLuNC@a%8TS{HWmM`y~(M` zPVsD1)_s(JS0TdfM6`1`OYgxwF5!xk?(OItJ5WA3^~N4^1)G#8>5|1Yt~76(w~@fu za4z3Ssb*mqQ5PyrSkeJ6pIW>UND7n&Xa5id5ZIq~v4e(tr7M}449!{)y!_jTnBuaCW5@x4lKy?)~qTIA2b7O~9wOQT?&k9~=~ z{YbEGG@vRj!Q!SW#s8FcnV;BIrq_F#naz)jlx~+cnd{RQo15#7@7phuzm%%!Lz+C6 z&?Fodva!6(PTg8wzKVHe_7z|dNhsR@&i+i9o0|&@&bS&jp*EYkrrO%$PzH&dN!tZ% z&Tam_EK&RD$hwdHI=vvxj?lKLVd=7x=-#yA8dMu?nN$ zKIQ;fbLb8Sy-M9B-O1{Bfsu`>Tl{bK;DWrr74T0@^lOpNMjIyCVr1%Per@NSjzd{H z$J7sV>q$=SizKtq)UKBE0db=e*OG;P4Ryc%L_5D+Q*pHWChK(PVA)i|Zmo?M>Ix<(} z2Fm_bP5UnW(Eaqq;44AAynjb*;*kZI?TVRMPFoqdv*tQeeZcWcwB872fm%vCQ+np< z>KMt^wfyQebr&GK+#A2H`cUQkc$g`^yiUhcJQirKo$K!dEgrsKN{*eT`d$~rG5ZA1vh#O4xa#FY$_Mg1d#1r!w?K!R9>{8S4ft_en%|1M` z<@()E&Ws<-@BpEOqecH;6?)uv{}I!bPcXy?V#(rgI=8S~Pm{}0nda3!QeOKaE2tpo zBHgc(Y4260Dch|hc|rKsbgAkEOw8w9*%jBGByXZhd4dGq+`l(re0jB*XT@m0nWw0Uo}#L&>mW7Bd_p@m@_3SyRT>zL#T>T!>3Qn*h!ErjJK&q@^g8i;zAYgu_ zKO+;RNb7k%5?p36%&6{!^D|ydRf#$UrK`z?2kG~`33N0odrAb@XLb)u&RUDB@n4ii_ePa{Ib`<7Jp1aRJ z0E32SkM+6OA1;?^atswA3b*IPOH9LwLWF0B!~CE9tujuLE&zRV<<;X+N)8caI&)N6q+c44^u}b+hlpb6ER|Aei$8*riD00)B z^^E*5Q4|?u!cm(_b5*w*{yq&8xA$`D7Gr8n z-1}j7GhYo+s+2pV#OF~*U6?w7|2D+&FC%9~xjcN>h0~wCf|#$Tyi&>lz<(nl!F+!7 z59-hxpKn;H^-kEnpMF^Cb`c$@{xZnf@k+TncsxngXEALlYa2cEw)WGj%CQS#Tkqh1!EJ!QO6@zXmD2Z(OH$rsW3XSu1}v-pK(2PQ zgBs_SfN8|%B$ppkPYa*+u%$a%j>9tR%d@fGU z8M9THf)f*vw+`C!-{v*Xx_r!+jk)e>gBWi?v{$5}s2I$?-;_&vO0)HDf`5TYQ03GPlF2VCK@SZ< zT7<}PU*HSSdEvi~uQX3j-pd`Z<^Anex@OX1R_AfT_^*AAsNMU`tC?kA#`gW5rT=i1(LgW9{PhK-hw1x>% zJ7+tNhA%pAo*F;1lxKG_uIq?q?QPRaZD0Fsr!aWGtYDV9^{vdm=<;ppB*{jyiG)O%Zix&-{_40D1MJMSYM0@|^~qr%YbQ)#|zOZb_80PXrDNR($L4Yc&gZ z>sjlhj6TtgNK)Eof+^3piW_USI|MMg>z&h6U96ln$STAGGYzwgV~1Y-1Z~lZ5S>=F z<(FIkaJyrwe6vJsUE_Y-t-D_7q3pONGky?BQc5QaUT6>=M@SZ*bgOl0vsRAVf>MP5 zOvHZ~3|p*9I4*0_TzYU={-PmC@?krAhnVzi{-Y76i{YUnuhZlmUCZ+GD7SU8nm6tW z?Gij@awf6WDg`7H8%ad?RTT1Ekb8EMAO0vcd*+dV#A8V5gi(GJH6HFV-c!5rcU+;= zqbG8&_PJB$&GhPHl7;1PQxA;SSfGCWtI)&d@iBqk8~+~w3PJV0t{B4;MNmj)KRrE- zca5`VEuZ+Qhu+)RCgrqH`=M6QiB99L$NwWUr8EgjKSnbf>XcM2qS*;O{;~ZNfBmo) z!6S7xm}^HZO|+uJd`_&ns&zo~8}4@xj;-~X^<$!zg{pVa_j;kLQF|-h29SSJ zyp;1{1@C8Ks-{2uVPwJoCpc{Do8#v3UOYP(veC}F+WX&!-;18;6?l4_cVs;$UuYS} z5II8hOGd^q)Cnja@hoOS@AI5(ovqj{v578BwSm{=}HEh5meFmC<>JuDyq?a zKb(a^l@`1&UZ`lI*|+{Q>%7qwTlK9T9%ZD2QLBCuY7kUzpi4cH=t`ATE|+i&*N<3D zL1Rd&0Lq6pYiH(ByL)0R8q|Sz`Z9pP%0gOytD*3!W<3AUs31L|CH5+~tVh@1?6 ze49Ck`bNs+^OrAQ8ds$Fsz=y*W~w4~3OOys3nKfgm`;38>e$&*96O~n0|)=K2wn=g zK&4yA^IR^Mkp=&)95(h18B^rI6r<0qEpUOznk)X>{(kmsbZ65CPPcaQ!J7AnRor5^P6|ct#&mMe@llhA$f9yb(5&gv-(OU}E2e4y@dB!8dgvBYR_9hp6 zoi`|Q;n+3!QAJkkSj=LEGAPsGioM@Xt>~9*Z0liaG4HQq_Dy=OwIU0P15!)99e%n- zo9*wsJma;$=|k517-4(YW4_~vYwxuP{P(uZF`81(_#od}IM`_89g(R;f9ToU_f~lQ zWGrtnn+X41)%g3j_v_`-e&tV4SH^E3{fSKk}Ov^!R>v~)Fl~Zfy zl2e)>K8;I8ZgqNjZQ6|Mb%k9i*MVuC=NSq-fIBrjHnx$+Y7%3OFgG&bm|ne$Jk3sl z!y*Cz+g7*BW$~3FcJ1;}?I<|`<+6SMZjS7kAV_d4&nYbj6^(=|XqR2^;G24MZMO@E zo6keZ9vhR8-0jQjP}JD0p{sOvABTz!Sb+h3mT(8bSS91EaK+VHw_4Y2v#fo+UfW7H zHPQ3i`*!_ACDs1#FRwHZnH3Sb$NR)w_Dp9 z*g5;qP|frF)@C2c<|9H}-2f;|eUYxgl344ZOxBlr#9j*LqkHD3V^+`;} zVz{;yL$tS3qdQQYm)!LO$$pxq!}y_RA#)v=rdDhLZ)91PwvK3jEF~qsn^??@x(=+J z($>PDQWh5v7!7u&D#tYujmwX(~yq?~_vn@#n{+KimrRd&DI zwmA)eW5Yf=yKWTM@uGNY_#eY}*RMjoicyc8KK^0p+NtHC_ zpOEQS-s&eBu&`E!s`a5XREnEF$%i;2;r^oPTAZjyLO%WxE??z9mv7O7AI4ev-&1rU z+a19dI%7G%DE4W$H-J$Bh?#Rs!++DjYs7{b_II0gi(1-n01g&z;R&L*_ zpO|4VT8?L3{JoCa6l^_SuN?YOA>+oANO7xdAo__k{QB!Jp=-4yP~qQIKgqpYk>!dA z52<48XP!D$Kk8m2(~qMe_KuM|A8Tc(`YHt?3Zn@37v$zuJ|uQF++S!P34OashZgej z8J_qmE}tSWtP|q02aL1wzn}7i<8SS#x+|(a31%v+-9bv8kln|q#`#jwuJ*(X(LS#3 zakbKZ(Z^ZT)~J3Jhi4MEYD9gK_2YY3vqJgMt89!hzd;QjtdE2lfaWW#8M0k2;du<} zhfuwXFzaG$%Xt(T40o%^*UGT(a_1kRnnMK?spIZ?|EnyGx`jov_~AJUHA_xe1_-JoO9OzAlFFzca8XI<>5-~CUR+a>jRLVtFcY&2ORmMBmInQqGT(Px0@Hd zCiG0r=(P{5$Z|kO9t3v{nR7PPxaSUgnkQv>h_lXcxG4_*O=U-l4eC_!ZGyUFI zJKQ@^14grXx4sH8>&~a2xMaWL#(c=O)ZzZ3>RMoQp>|6sUeqj{G38O65X}G1!(P;Z zA#Z!P3Zl9zC-q6f+8xN;hwT2-(-X4q+vhdh2PxXaJ<;WV7;}~Vl(&6Z~p z(EN}Biu5Pv-v6$KgRg~x882k<)j8@Ro#!z}DU~1IX7#n6PR^zCmoHyBvkqFeu^>SE zuT!>1KMWtlr=FJhko(-jaauBYnvx6nU_)!daKrQs>dK&$HIxl~rq}D$eA#QQ#ChlG z;QsBD<~>vQJ{-4(uw(NcMlyS>na~O2gJGS(hn`qKGWEytG(Y3{_#3y(_2UEmagPO% zi5eg6neEqn``G4d6qqh9`N2n470WZB_c_tejXpP4Z-0VP>js9k$ouZ^_>LHB{~@bKFfP3_Q}%gekpp8ImSP$Zahv%QiclAEd`p!NWj8%JQL zu!;pLSdh*%<%auV)6RL@Mv-h8#$2M2pj}>G%dI=X8xd~K+0LxWWgs`^IG&9pF5s=v z9IQ#VFyNbqmp`lyHhwW8Wq*&e z(;qruB!@bvbxmupk4Cv@#%jcEnVYZqx~730w*$&v?!#@t86(i5&R&?bh`Js$zdaq? z_d8&++p4!{M^4%_7zC5p>PUW$NV8F4#;Gam52|8HO2x%trdkcS64%?>l-x*~q1M9Y z+9JPfTh96R{d>#*)*pM?HNl-yJ%pC=GWhxj=NV8&VLbti8GJ2Zwx?+0MYV2FCb707 z$MHMR^aHKlj?3yTa~|~*P`^j#D2jGFx?q;J`WvRlb7kPXz79?6O`%jF_DKI`Jbi|` zG`K%Doe5Qfnx?r`Wx*mLZJ@9YfYo-W^Snd~D5}4-pOipLGYaJF+)}rKno_6_kf~mQ z<%j9z730(H3u=Je>Y+8aUme@F{T^+aOajLZbDiy6Q|Ho<*F;{*^GS+@3cZ1m{UTXgOausQvb4ETa^i)=!xQc@(j?;-KM7@RLe@B@IFkW-t z{oS*MA$v#tQU3RikF?h#!0ORFhMvUOrlQ8_dvV@-)i5N>eViz^IIMf%bQk`5#oLXs z_lW1Za?!S#Jt6;)<_r}(*ej$PRV18bfN*4J_7!pXeotk=YK^;I{vyNRJ>rQh$IV?LA`Ll@0;>OxGjFuQVGWqfgqZc8@gg zCwi(LnGjcQMI*28o}?WAnPyTnia9+{vCE1r43L!j;bo7s?hwXHc!syxI52Z zzkb~xO8|$2ycANc%9m7m1Cu{1x@C8dUepf=Ex`)z*W0!!ckrRSWk4i{e82L_Jt3{v zUw<*yGxSt;-wQn7`peHD2an@Sq;FVnfwd6Fy)6EkyYBBBcona|{t~ix)SuA*9$7kk zdxPHCr8sRv=t)dud`OMc_tt3kpZ?Ijy^)hsZ1MHypW?a)NTts+ahZy@qu5Kw$Scov z<;qM^8j^oFBREq;U3a<{s9C2rQO?|gh&?AnLnTbt1Jn|#ERb$|#LHi07?5#kxOX5E zA1XJV2F`W&u!H=sazgopo-04^!n&rAOQyH7V{UYN1oVH#nG&;4x}%=YAE`e8wO^b9 zWX@r83sX~pQ)z?I_{-|0IO51>b|88dy zdnN8Bic_z8W9&HwJ zKDW0+d(rf_x3}HI5ZNzaq=@4TS*RCavmAd9>=(IZ8=HmSiv;cX!W!MmM|W`I1r_NV z^8Mszf0wk*Id9%6JoHo!J#p9TE#%;5fA3ZJDdikpid(wKU{#j(!{dfY2?wRJhIyzmaBHk;hmPN?)3#H9^z^ENzV}TI zvd~z4<-CT{iDtvq9|-G9z!`(qfKBwJz{_^FEL%a68@u0V5S8J`njSHG`g+tUL>^;Uub^Mqpx%Kzi->s z3bzk64RBJ(|G0X8eWdHUQ~S0VJ4K0KSUijzbCPrz*)Ib!kywR#n}D6VVlAE zQK*uwjA*Fw@4nH)H^7D)Gok9x?L_!X;b|@(h=D*jH9lB z#Dz0xrIm}bZ1>1u{oyK|fW2vyXG&@FGrm~_qWTCl3H$Tl;~~@P)iNljp@=o2z22^k z+9c%+RgJL99^>OoB){#mVO(J;99E>H++M#>T=iEdKCarBPd=`itfklD*hM~DyHl*X zfOm&4HwcDql?SrdL5&{XP49%!HN&HQt75SXl_dgES*=UN%5NVZSPy5^Xqo20qL=bB z_CLeP4D)KNLOHY(Hg2u1f>m!o#S3}cV>J&_@9b3|2Cm)CH+>$D43J7im-ON*S77}C z)~dA!d9QDET}_Zc`+J_|R15m|huS|g>hBdlQp&kIznSK(MfG|Vjv%);(xuQImr8kB zmgnW^dcC$U8Y`vj#@3YcL0^Y8CDJrKy}sQ(KkdP#={oi?pXcrScVyptMjGTp+qO;Z z4S?4uPV-z#KeL&BVE+_6U*mDW9mF&7DCF2RHjuSQdvIix9Yb%rl=XT=%>Y&)F`Yw( zvquKS2zEH7G{FyPk{}j1BbhcMAAhG7qF6s;CA%N#ns}IoiGdWjJi|ywx z(+nK>(BgKEB(*34`LS)@YOSVGDW%0T)=uelu@wL3h~9gy-ikv~pLL9;@Mu5b>OzlO zsyV8sZYu!G1Z;`ku%i1+v{@^eLY?Zm4X8P;>Yyr1Ms;H|5CokPt4alOhJJ*>T; zILi}Gw6lZ$-mP!W`&rP~ijzB`$(8qZ=&`L>M#ms3_jdC88=8l6(~o$4qh`Gfw>sSCey*hsaUx<4WbC z+{7_TRpb!Gjw>#VOhpV+Y+%N~EYUMI^wTMAgmTHsa@lCOIQQ#O&z}5^*)kkkRlh==VNSGXaoq-(BlTIgPx*|5SvTy1(iYO*>S`B2RuAJ! zoxxnz5^F>$oldlKp~gdLCzNi`Rjtu$Kh%7xb)@27Wk^+%M2$lj55Gs7v^&V!AgBRw zoI0@JIp@2s-ikv~j^NE>V1j~(fk*omJ6J1^Tjxa$_j36ke+vm<hRO}$~XWQii z-{7E^JaTx*$|Hx@y?%uox_jJyy~CGRuV)x}uhG}pF{Z+YSUHZL)LsZVORA+Ba;roh zcLo&rMbr{F8e4F3>&Hh(lPm9S<*|*ige;>Y&IJQ%W7{8M~x$b(S>qp znx-%R{r@SKi;aehklgRI=p3Rrb&N**JFJG`+5`m)_DxkqC_)*6+8$N4!?Cu&siTLw z)60o`vi|xDvhQIoavBN93>2}}{>h39HDDOk6#3!)jw%$zvZIH3qWV0xSLRp)Ksvzq zv*PdU&DO%PRrM>>83tFAn@7+0TO6iRQgu&c$IoKy-Tv`+wL0N9}W(pvJ{em%!Qyl}=cP2ebF}=bvJYhgU9zXD6o{M7_#Ceo<>b)O?<-qcHwS zAr@*mim!5`>Jg3caH0?SpKgcnlmU2k)JqSoj$>)Cy!Y#~L2z5lb%A`R)NYnVa&EX{1_po|J1<#Mf5F{Glg zQJVkw$FPb;nU?uy2m}WV@}T^cZuI`>yNNW&xv-_LOkNk!nRnHRjB4f0y-V zw1>J|O%{Pd13=Ljem2t{5k)oW3PRl)X)4qi=0tlo#$kaBJZ9-pGedip^;z{nX$wi8 z(C@`F^l@AP@9y*oxR%8lQA#JJ2Po?nYCM#70?$sehQoCY*S@OhguCP;@jnmMU4ps< zLOU@kCMeG(Ek%UJnHxwn+n+r`g_?;th^{8~cyIpw&9FbngIa&6 z&69W-$1S{0!Ld4tNv7_i*r0iw;Vm|e0QTH^Mc2r$_7OQlOrJI@}URe!e9kL4DBaR8J^!8oT%PY+SMpu|j!ZvHpwwiEWGW3(a z3#(}3?VqeB6|rg+*uAK+4d-rLIFyn4N{r@|zH1+cr|0eR5sv5BH5XVr=b*UtEj zxFW*Ojy7`?4;Y6K{9@U!9m7)IUa=jX{vJpXTg zeH(Ki=6^gGg#A~00nTHXx5v5YZ64R-JgQ9c;68$VI2qe8-l+XC-oiZ&_jio3maIx8bTOQ6P9I@7D{q!ltsHH7Ze zr0zKLTsOUtSAc|{RV#wLx_gBR91R~W>a%veibjm&6YukHQI6sY4ACl9{Jn}^Rr%qh z4uH~w*=H%blol(jlA-dd@@}^_Df^w&4Ny8aRf9@=O~dmAFP{%EPm{ZkJ%V?EEJPb{hUY6JSTA#?sO;L+hYUAO1IzZ z4(WOY-^5O#G=!ms=cLXC_Wy^ssm`LTL3)3GANe!o*sc83l@BY{1VHa$^tDBX2?=9G zFq0oYepl#Oi}yt=c<3LmczvXJr<}Lzb@bv@Y#*|r$fYU%jQp5!e2^8p%Z4(&9r_BV zj6}Hg?GZ*6$BHO$Ym@l?uyz4)gcf@R=3V)JlN)`=l46^)_x27+cd82!a>;dn@WZi@ zqIoQbX$+14x)CdtLff3o4_;L;=o$cU-c%&$Bh@gR?>qeOvMiwkv~yVZbSYMK2v?R{ z1vqO$m4uGY_3+VZd!uuYj(qN&UP8D;BgKpJ;Mh%V_dY?N++52r{O@nY1D^&?bR2F{clc*;^bpS#=7<%%qW*b%AjI$Ois*<7d zYRW0}ZtrcTq^ew9Y7;X#_CKtjL&~D~%p>AT?R1|%{b%^SZui8>FgkAgZaBvp zKdL+v*Ej+Vq0;a;rB+mT2%i`Hs5VQjsIS1YC|APy>tFx+^z^is1r{&D+Vh6pFt~{r z2hPX-{pBxzx%~5=?Pp?thjj$*G)>F0eB5qnS(bIRT)AiAqq2143#}d8(=^Ymhk04bx<0=?-!9j_ENivzZTorqySL+< z)VFQRIG)x{DFxfd@$X}G=n$4=xm+%<@2|C_&&vhpq6JNZ>TG7$QqnZp_~+w}y!K#Q z%Y(}L``+Pu z66De$uUh}Z{J)dRu*zuO$Gu>Tf%f+_Eowg~qS`M-o?TOr#} zyoF>A{>|qZhz-j~v?^8Ryqjsq3^`^DJa^4vAEdbs_g{79QE`65_wRX-k+q5Mj@0m7d7htNUfaJn zAL91LWJJx(V-;T=)LOgU#35*>52E+KIi?@|xwaH#UahUE=9`OV+whufuHZYq`ywAs z;jR6xrfK&TzKq_nD2}n(0(pOcG$-%2z7sgD1Eu6`+v@;$r*QKvHUX~rC0iYX47N68 z@o}iNx~6J=eXDEt>CZ!GE&f?G`clIp%uPA{)GkJ;;G$@6|hHh0H#EX@H|?laR|v`U%hdA;63GhlNZ z-(|ZZjR$_g&uC=mJpj;HoCTxOSJW~ttLNB8KZ7r_1FH8+g#zv868*Cp6kJN-rSn) z8BhE7;{P4*#guB>w&7T{@3mFj-^JO!<@<>*ve1p5lrVdpicSD8?TFSs*s2yRFR$fx zdp$heyXX4B8CycY9DcoA#(FOSfE^E^Mj zzO6_7QDoVzuE;oI6#3g$(==g)1R62ROH|dt>Htu?6TI1IPQA#(H*rN*%0|S50)jV>>`L#ZL{PUky`)FDgizNc$+r9Lk+!L4R zvN)fnY5o4)YFyC1*)o#7?XkKUSRoE8nOJO8_}OVy9lO235qQ0(0i0)O@1uetJIzSX zFOCdZd<-P0hmfNuXz0mdr(xO!&`M;+T0lNd%(H)t+g*q7{9?P$JkKpfmaU+*31q^F zNPQfT;If_qVst%V$LmfFe_s->PCF zl?St8suWwM_$|r1!@nyY@x(P88N_eC8jBIwouONRQ z#CR`#oP`&!a+g>1_KDUa99z6E#VIO}fAZ81*+->GAivwtr<^#>&@Wuwuk+gmZW7zK z@g$M=sE|<(`(>z6N z+)vNPhe{_!H~h(j*?+5#%ipY)+Cc7!%eY3h{!I>kv`H$d#sCua<$EBF?j2b^9-%)6@#ff-MD z$x}PuL?s!E+mrJ~s4-9qCA=5n^05vBuA{qpRFwx*{S6#jrC&YK^Mw6Wbr|SgMm_59 z(I#nJu^q0zVHyBMrXnMSeyhk?D#lCs;v-Xa@B_@2Nj^;Q?v9fqo-)!EaGe35Y_Xq6 zU?Zp1{~f+p`BD?dANyegLy1n|ifL0G!_My(`Tvpmu;K(!k72Zz5<1Ph zsvwt3*iUjm50y@e%9RQzRNa6pHqK*S=11l?bj2oipGvKdsv*o01y&`-9!0o~k2h3d z4NMja6J%2B=Vu>1UkM>pCa6jjN|Q!a6hhB_?1NLV;Jx?}vxwS0zITNTL<07c6f$8R z#yS8evle^RFLTKL;(qP)T4FyXOTIu0j%+nO^(VQWpdO@fwaLhNVjBuR&xgyrud2T-RlBe@YKlAu1GL6Z*{$`=(KHqtLx<&dN7mEvAJlYcPajje!vU*uqqE% zbWaCwc)SO>}%W&tvfMm17I{h5b(tc>JR`u)Xwuety0l_Q|7{bJ(WxDaStdcWT}* zT-`6W>HK=VzjYhWby-?#_>JhPuN=zVh+#ynTj+SLW{q62@4BkvzvGH_KJlXZ0lGMo z>vjdZ@^O@^&k|``!ip0okxW@-beeZnL4-Rvxk1~wscfTa8mRdtN9|tcLHs+-UF?bt z&hc&~LUj(?!>AI7%dR5AUDb=x+a6|9dT(RP=#?(2D4^eY`+tpSc^K;es9B>*4q>$Hgw42LgI~MaPw`$=6Vbj9`sG)@ z$Bkn<))v@4FDlQ6eZcA;bzU&8XdlOVHRt~8W!rFn59dPe(S9EZ>jhE8lD?uhx2F0y zi+OjoaeS?b*h}7LQLNlTbqtJq3C{+YX-{fXgmsqO?&fPaQ07S;O%CcNsXUl;%VO=9y?_nJVIw!d5I-j2giT>C&+fS#s{*uqt`TzKD|BXCZPpoi5uixKv z{khNX$@M1=)8w8$dd;5uxjue9nfsEa?QsYC(Wf@_MJCVeM_jkfAJ_b1)rf_@!ecE0 zk2VQZtK_@|AuqDoV0zfd0A-TPecYbPG|VIDrIAlQ$K7AB*)IQgxf%a9J8YSaYIYfQ?gEa?2NqRU|6mMbGjsom^9%428>fS>g z50A7zeiyY*b9z$Wfbz^9uF(D?wIFQ#>3s4?`zPnLlL!oU9Q62ymGxuWOrj>kcwdw8 zPbb8%ab}83d*ph>n z9`<3?juQn`n3*Dul z^Q5*F*U0+v<%=;}iWo+QKIGCKx&DO7yL&wm#-aZ!a#2JrhuVYo-sJJ?E4-|k-@la4 z&z-sSp7H3m9{R^mjS~bz5Bou;JoURnIgIl;Lm4prLPtUEpoekj^6pr=Uw#g`NgPi_ z6)Q(}a<6xF145!Y<=Bf_=s;Y&fv$iE@{o*2o|v=;p?1aYJ!I>ZcRo_Q<#Iu~(R$e4 z%XhPsgD%At;pog|wvk8IXXUkz&gHlgotk2B9Jg7+$nPA#cZ&}zDk%NHBlIn~eTUIS z<7TS^=i0X?x0ke=LP33{H{%?hO*BR;rOU}4l)D7zdwQN|Hu%3 z{`^zto_$RWoY{~OkLt0cQYvYy`b;6C?5_#)Ek+>a=TL1z{_bI&5S8D^V>{%zX^9P*i32k;GIwd0>R(&^0y8~p-v62U@0-%0N?Mf} z86<(Z0O2rqxG_RKTe{E+r6L$44h{tQnVHfU5T+mXDoh7r)|9)M1MK*$t&HBoP3^$G zFbXKQGUL8TC99BB5O#c(gY@z49^WL8xEepBXOQEppvN<6E>{zx_I|H#f9m)+*Gx4Y z83;^+1Qj0VyUf#O?e%?+*;X`H1F-6htoZGJ{15c?M=xjBK^(n`|J3`LU;88PNAKIu zb#?t;LrCc1ihj4QpKH)Q)_33ktUZ;@qnX+F`ouHdxQvgRYQzuQcqiX=TQ~0P*3Ul1 z08Zz#+qayL>++61vg!4UX_H}MB|iP&L5u$1Cywj}5;z>+p>1(&ocQs(zSMDY>vw&- zm2WX|oxhu1P?h-w_Q#*O}#$nwX)p8XwlKte3X>_?W*Ni&WKIZ-NY;~XEy4eonUJg`6e82l$ zXQSP#5~kX?c@7~h^`4tM_WSTRoc+0*L2W;Ri$%3@?)vVVUN&bgt$}}cJiqw}WN8>B zER}e%vz!pOzJ)0-Wz-O|4xV_}&vkgtC1ACB&M;xK&z#Tbed9Op)xf5mo$H}HYu0TG zP{hz@y_95fAq=c&DjVjv%!wJ8ZZT&^nB&it0W$||J%{`p)Bd=g;&-v6kw1HU)>i0Y z&r&<&J-5$wti_}<+i_0D!`0*+r~kA z3CE_E?{3+6udbA`)*9fN71n-vt=rZV8_FksXi$_(dgy0z)DiHB-`Csaa=G2Me0eR~ z+8SiPUYE(fU2aqy?&ISeQ(G-5CG#zx=V?c*bYL4E|qQk;B(O?&|ZwM{<5aLq@L+ieTm&{eC91?Wn7 zozZoE3Vs$rSUU;)eR%j5*V-%yjPJP2ms@v$mTKPmy_wS&SiNv`ncl=RY42~2<`z

    iQ0W&H~wY;Cg%zltTBFCY*Sa`d=v&REd`9midldi2y+vpeS+W9=86 zfjzmAy{Z>XH7~JO=P*<^lJTfL2q7%}@eft(fJ=0WvDJ3i_kGi2AqpiW^z5WH&LDhA z*ph(!P(LOY`s?co5305aY^hNvW+v(2@^U@<2w;O{;b+?+%I{j+Ub0PTcP&R};9ld+UW&QIz2^{wgI z!o>Zzd)ZUQHh?tqUHt4}4Gl&g)f!-QWlV3-#=Z0vDt5PW(dHd(zYRKH97+r<&R>rHRF!dyi`^}&fYvC2^fcZuQjWTQc6!Rm$I%{ zPXqPkZ2^+%Y|^)-6r)v3lgz`_t~97-uK6%musN;*`W(q%vd;;?m0+K=Y(K?w7A?@+ z)Zu5}>VB4E_mA}`X1zqK#bI*YcoqToW%fVvpHPo6D$vPX?%IGN=ZE!os2XyX{RY+> z`ReDawPH;Pz?^a@WkIi1=Hu>q+Z(RPWyBdXjqH)(*pPk4>$-d-BYm+wCw|7mu^X<- z_&nFsy**`d-M$r%2rL(?fxx_n4WEa7;_~a*x6I8QKWCozj45Q}r5wb8vt+*hj61ac z{k;!Qyqw2a5MO^hp2Y*}9}`zU5nlE~2YR`8*NK@i*=N-@82KlP7cwG9g5u~fm5b>O z=E^*D2t>ocM$k~vquPd^t;`8t?#0YL869(9uDkPz0>nLrsXo}u!uzE&MOPhhwFfFo zKwp{J zvw&%n*tH($(aqbMHTqOyyQzu{uDRtwd$?Nc{>{2ZPlaU~`0JOIG!TG4v;UHn$GL zgH>zX%=Sn<3KmOd6?U}~c>GDN2DhdV%U9Cp-{PFJPQ$&I&}=|wA9wV)Ro<)cAUrTe zT(ftBnFjW#l)=L#VEc@ZyURy1($_FvuAeb--ijUuN*LduAz$SdRkiNy$h9L`OKKos zeE`ORnLcs(byYXu(|4|$`=T`fuID{t3bB81ypT%2{qj%YESaxAY9z2fmqq#U4{jA0 z#F=lCM|7^QKOWygagK+R{y{x}%M12@&m8FG-a{#~6En^x#blFe8(230BU4qPSo{$| z5_Hv76kL^yaU6GDnH5b-Gz?hD0Y_v9r34b9+xt7tR^|jhh;3l{x8Hv=uPLw(XLsil z1&DhLQ+*)q%G}3mite~zG&1c0Qo^dQuGf)ah)Xn^_39oqHS5NS%6>~Od%+$^A^3SR zMqdjASARlwnM96Z`rR4=s_sXBfNHpN%xR|1jL(ScS}5);VA>>hE#>>pJlY}JaRga} zq}Mk$=Nm1-Sg(oiyU|goXc0vXtiLfYm?egPxz=g4d#QEDwaFZ#W?%oC)#NF+E7p8) zYibc4GVTrS_M%7;o6Oi>?QSG3n+jrnUGM z=XCGo`G+6t{WdfJ)*IFHwm008&xiwihs-o`dxnQoL@#*j`cC2d?vlO%+H>M(EXN~{ zD6Em;^NQ!`t^@+w?Hjpv#n=HaZu-jg9yT19@f)7`b>wapdq=blhT;2=DK!1#Qt7ek zQV^c6KWZc_ci8VS<|TMcfgO=s+*`9{YP>Jd!Cu zu(!=IZe%K|b+2?pfWWSv`U0uPIa+2{X5&WeY8bGR1CF4IaICfgqr;rwm18s#x7%)J z=qNbvx|kCMNMgrK4$}_p$|9D`6qB7??SUdwfu=PSuRAXL?e4bC5YOsbBu>Em@t72N z4{n~E8FZ(r1IZ_*28i(ppKAyx4V%fIo?@hTcsQ>mV%8MqO+IUrD!CT(DQC(Ytj@vI zDadv!Ws&yR9}G0FXX37*>b_vMn#h;zVRRaO2d1)$IYudVU`=;x@|bnXjT5F-F#W95 zJKlBGtmIlj%ua?opR2E!ejD+Y7guHUNc{>{2V<@$aOfGx9ARGgtm+G^1Hkrd7$+y^ zbo-5Fwg>7_lrAGNv83u*Fi;S=Nq|f(#Z=TAi{cx?6v2KIm+l(#r;Zq9^?sClK za=HHX7wRR3@2~Nq77i1%4H6FlbRp=!dw41%$5|`*`5YeP#v$JL6TAFt~?jNfc9vQmj65=DxkY4H#F4Q3jTQPiR{Lba-(R=#TJ+Z#hdbrOEse$0cWUnCM)8t(*(b{I5p~qvh?zMz7PGQ;h_l3nF{dGzQDd1=UAF?pE!P zjb}p|+dB6{rI(^LJVvpAUfPGIYagb)Ei%QE8}ULJ&BnEh^G48BX&aA@{Hrkz7jmFI zAl&=HgyIKNDMIcJJ+npdV>oYQ4=|!keV7In-0yc|@g%Qv=V}!}=bV`H^W}A4?^vUz ztwCj54*?$NyHu?MT_*=4gw->_*=^R)BW(2gds3IctZ4W~!mS%q@Rdaubd5Z3O6BPN zMq4AcQcx2j8Ur&^%!XCAs;B{z_9v~`P42IZ7=Fg?lS^WXUCZcA5_+GQx3nw)MTwTXW%?Fnk zJgMQpobO$ZQ|T*+|MZD#e*0YU^dG52SXBfwQm*r~nKi@PUX!EDEtvHlQqe!b>}Jfm z>tL;%yqU*8^ofcz@;Mtp+6F!2#_T4av#K4~Cx+2?UA^&d7Euq9sc!rzMxPMpCl1+f zWcIl+HVT2k?+sR0Wb~4bK;(>F<%a2b``e~iCR^1E;cJI`9(MdAzVb|qb)p|&^$>;v zM|*X<+&Qc9!s_IxHICOaaqp4MbmcLRk*vpBfF*ODaV=f*!L3bX?#0zDoUFwkR>olU ze@-+T%oqQSWJvdZ+1hQ^Xg5|LsRZ)KckOt6^xYGUrTbmRvY&j{tqVc5e7dhb{4U#% zQLRx*^N;g6E4sCYFg`IJB;LNoIjh$0o~-`)^XJcw?~;xYq*R&rKVFM@tTG?v#)mmNhZxKCc${g@BYkMvgD%~Jbt@%IwFOOo z)>?f3*AQIhlKBnC7^OYNkJ+Wt>%P172e3wj;{1s3HLJalH2zmR0LI z@EGQN?{b{#x~01Q(}t*?+jEHC^pUKWuvMli0=iJU&eQilenTdHL0uf{d`AiQ-=2Kk&-?LgOR><5$CTxyd= z)PrQI8$ZUS+a=C3amaRE+l@m%#@P1zZ{}5`EGMR}2=>w(fx_0i%8dw~<(74p7HZyo z^tRSzxf&ikkI^2u{^HD6o@udKMT=QKfGP`94`Hmo+N;~;&T(X)$md>rQibyNb3GIH z9%*F^xREMh%d%Xr*Y>+=+qP1Qdmi;-uSUEtY(IY2?a%hR zC5b;Bl)gesM>9r;W7BR{Jn)m zuB+Mr*P5?u+Ed$RqgFi9j2iY5w#tcK==|d$I?NRO+eBmg%G3AXOV8uqHAdEZ7|CX& z=Ju2ja0W?xw%aOE*UD0+{tEtsDAIj}pPP1$Q7g%9!+O2rjFadJA+XP-ohD+jPXhTL zW<2@3q~t~vW*)qj(B8|k+}4%FkCP1!DBaH<(pMqaY$>yk#hBFAC}=gi@6CVuq?g(W zbx8UcNx z@~Zc_IggtSn&*U^=OilJ%p>=LQEkpIf6U9VjEnUD{kE!^D_KRKAN!EaVs~A@Y*Sxf zF;-2yjX3Q6V`i3#+ZKCCXQvPEx2(IncDGxTZ0W`-{jOe*9{KL*YP|}uIb!y5AAZ;D zg+Bc5yvIBHZu7{JmF0o&vi+FZi<&WQDf&Dsp6sQq9eIqYJ@fk7=d9Xym974zl>F(_ zCq=IUYlWm~7VCX{76nY0_$A-(cVXR-7BybNhE7Jqlfl)MvgEw2o8jsra#O8!-TGDhEUKW?(c^p?ee;>_sivSzi;OGcl+bz<@NAC4x!YzJimzh zJ37Hf)NjCBV?}qsQ``1<75(+A=FuaVG^66e`0HbINsg1s4Ct@#(wPksXryfIWM>GW zq-3f$%(m-7B1+u=rS#}TvY?sA{{>g<7H?hiVA=En@h1682=duwfBfH0xDK~tO$>)p za!UI;C|)GFk6Z59KqBO58`Lyd&{6()f1)2`Ohr{Oksi$h#ZLRXMQIbpv<0l(ZZbyl z-F01qSCU0Cwp+zT#TE3OaY;uaS>6SO$u<9|LzGekEJ_|WV?^Nw7pwEicZci`yR?Dk zZK`_Za;4?%zqb4--xbY3tBBI{=*!DxyWiy(2x_aO+s&+L-r+58ueX~-X^Spo_mR(@ zb5y&>r1O6Qr3z{W#v?GDdxh~0?a7UvjfN>-F0XalUR#c;H6lt5*F_!F>{Z{Mpv|Ti zSi|9{E+WD<;MbA8Zdwi*(^==!#${AE=`Sd3-J9OG&iV-168mbXR&=J7dO_E}{%T`k zd^_^xwXExr=b@I4omu)N7}l$CxBjRllNuCN_p?z@pf*yTG)P9B_dlxsTDRX-+J>$W z3%XB6*<<~f46CWgeyr^)j#?9-)2NeCUMpxI+7)EkC6;jY!TKAc)<>^+WA>0JIKjS( z&Je^lrmeVv_5R173R*XaHQ+)BZ?CWS`+ZawT^6j*fb+{}GbFB1Ptq>`>Fw>SpHu0e zVvIOOHK@7}E<=w@mGO3UJ(~^hI2cOq_3QGE)KiwTZa;aRz9$~E!kL-RUAmfS4_aQE z{cD-SIx{6`dG2q@Ws~y37f>}SC zwz)CMX!}R{S=DnuZ)POUJ%4eD{1eA+-|wGPjbJqd9w9qbR6uLlOvKr$qMB$JXf}X$ zGADATJzx&jCaX|&5cI7(%Wwo0^{X`uZdS1l_nv>h>08%{oH~E&dr@RF#0jgW;wo)e z-3B((t=>RaFuzDD4$SI}R6!iO~oVfL@34(rJJYd+Q2 zPL$nuF^BK2zyFHtrh8xYc5|Tj@mN30&je!aSV zMYV`nH)&Dc`F`E19vkPm<-__9F*RIgQSwskV;%Tr1{1r2%jmaYGH_=Z2fa zhXIx&?3~$$yyMK!pEK@;+n#y-_uEaFLS*BRxILk(UG2f~B3sx&qDjDZBAbZ)=4vNq zvU&XY#_x7Ek=@tHbr~OTGzLd?@st#w=Mn9AT^v(Ox|91gWVy?$J<`v}ak??N?~&2= zANI51ZU_5IV#)m7A|G2QXE1!ZjDiS{M0ql+HIRTro%#vcDc8jop3Fp-(mv5JxIJHr z$||Z?i3-RiIFnYGsJ`_g1pCVDBjs9V)+lZsGz@N5ImsT#PB=4ysjc)F&ANhlwzm9k zGIosh`G@~-l{SWMANRQK?o2mhea@94|LrPRPFQNivO~Vb*5c=`s>Ga=>a27gaQS%l zUBfre5oq$8QJBp7qInj~iV-!N!h$2^=BrtgFl(F)>yHe&qs*Dcj^$yTxn^9D!=5!H z$aX8x8Q4=8__YRJv==DyhMbF(GO08Gz@_hmAkJC04?GV}3fUbuZSw*mJC zvl{JWPO(05*>pFSB-^|5SLRyKN;9{wm=@9K2~Fla0uMBhvzFCuo2xZ4dW>0bGw;Fv z_vbV^ll6L6x*a_J^XJcItKEJXBU5Dr@8|)KZr|182*vMN(5u)PyT&cWS{Lm>D~}(9 zVX8PK`Z4XC$kmBwGuC@*tlPn>!M)^{OWn5iHc%t`ihMmzm6iy;uptDYf%D~6`6z36 zPUvLi+77&_tRE^LX?B0On1>KbNjcZjoz&aoH>7wqLn(}`%ef+lH){sQU6>6wjI^v4zO|1hQBk)nizr__la)T(ri+ko`f| z?J@c;)YPe*27RJ@^mVO+V|~Xb8l5+9%|q1?E_Y^L$Y!o~J)~&KTGvD<$7^(1qGyX3 zKTyTi9M5VF1g|JfM5R`*$z%EiwS1`lQaU==+hBIW+6&kxip%%%fT<1Rx>qMSAN$^6Bc zTe<5+&9n`ymIAw0%E{$@SxhoMlGP*uX_Stgl#`4R?!q#`T`Z_AuU;Dl2r3a((C-d&)ReGj@ujg#d8pJM$OEb~0~r zR$IgLgF6T1c;nY@RS=|7fyBJZIVAtv7?%7@swk*jO8S;nhhRC-wA1xvH}UL_qtPe) zJ)(s%z%+wh3SgK_+JeI#oZ-V3XB zP{6*zRXUk-vf3AJ+f+_KKAzV%z^7NP#vqUyJ`eKZBae}aB6P3C>nX8%7i?{E?~&yt zTf>3W81XC8@Vy+H%kx|?6>=VFv&!4hPC3uFIOnX5adogEg#7mQ);OyBzkYYUe(}dT zdcZ5EZD8mrzs|TNc+;n3^-D%(9ho`T1C?=X$loi!RbZhaVcd~XQ%>HxCIDkDT}SP$ zKM6K^2Fln0%eDXOcb~1)e820D%N*7fmr1B}B&UP+>>r<(-Sz2bOsyf&(Kp)l7dM&# zm%BwTYD2NR@r<<;s6L@VpcC(_=y~EO&uUy?U4ogsud3kjI6vOV?B}gm-ciH27~k#@ zxBaQJxo!^skeCR8wgTXk|pcNX5FYmbs?*-?(sW#w}{q06(Z*o)}sC*UE=m# zuN_qoCzT3tuDQ7s^M8#>J2ch~hyhhap;Tm--M-zv_!TP9*PPWBFka)#Hpfj z)=51jR_}tXP3}FaK7qW1xq{_+R*}Z!D5Y=o=CWn(QwTM*3d(-12GZsyy`L=bR;Qh3 z+xM@2PNR)cc@K23A%y(t)2FAWr}fLf&C7j}>f+!1Jwj)`LulU}ISYQs3S)5iUS=qG z-n`PlO)}@)Fs$)fv(&UKb=$(f|BO}DN|$qDo6UKo4Yib)*O#1^z4=4SeU&oW0BtMx zo2)(Re!&w;X4>=f^R}*Xo|2ay*ugn* ztns?o=DE+?`SEk?AM7_ABk{8f`raioK0iONwYt~Ec~NVXcoPmMjQ5GBZ6o;s&ly6L zSgJL;eWhXv+AO{z@UpHmj{W@I#kZ!E+9KE5gKfiHg!h7T2m5W?Hi-coYwYs{<{JJT zbl+mk%e`YR!h2EkT_cyO4`JS+haJwH(N{QMpdWDV1b2S@e}8OyG2?sOCA8nf;fQ(Y zVbiyAUHq=<6KJ!|w=lolzQq_YIn&L7CO2ZdVGLkAyW@y!3Xa#)_aok(fA|6C(dcvN zHylTt7ZtKO-dEXnj14zuvb<#0FI;oS94EQ1K%X=d2-$FtHI%FuTZ1a)JiX6x?NECF zxZmZw&uq=YdpGOXyr027!8kPYNZM(}&TU)ln%9OjkNZjqV;ILB^ZYpeFwwU0U~-on z!}eX+Cn`tj_1E2Nsd-KIS8P4S?*?{{*e7JKxUQ?8=Q~YQ^n7P~9_$C4%gvv_%!PTr zeAs53`z9|5AN$qMxtaM0{ebZhbIzYXe>T6oYtGBdWw?3+7p|Bs^!WF9?&0y=b|=8N z9~`;%*FR88@I4iVDL%i5*Qs^smYM^HH|ZM=x-{Zl3m_2Bb>LKYWu!&b^o9SrWa2LjunXKdYxnDQ zQAJ+Uq}x%)_lJ~O809t}yVp!SmWuwk*O1~1WV*pS19yl%=t9^V0u}3Nm=`-e{ueL< zNCzkneT8GR*ShU{EM);jTAPn9RvSV{DJyOsX-mkt%d&`;W_y26)Am}@W1H{IcUk=7 zw{_e0J)jOJgbKwIM!!wo?f5z+PPHTSkKrV~__M~N<=7CCJPccF4Lu}GY~-A4jID*a z|A;)Ee)WDp#%5_;fk4&!UTZDejuln${6QOOV;m}ms#d8Kam~;`*hT)Cw?c`nGO$D)!R)2U&0-o24Rz(t{bnlGcW`dL!4r{t`VyoBJcV z!DG}`Mi-xf)uv^vHO43=;uY45r)7Cwo?88rrZ;Hq7e9EMYepiXGh9i0?h`wwcI<&dE4ibSC`i}+yjUf5i6WvpO~5thccw7q=EYxtOJ1c zZ49%X$2z6G)p6(0efKe=wj6T&N(UVXu0caen{#L^$Mjm>tPw^@b+oM%)L|x2R0>ZI z`MelyhIu26YYoOg%Yl;ehEFzqgAOZ#EHt1ynC*5oo$ zCqB4}tNzGYTrsS~li2WWE)&eW*wuN6uPv=D0LP!Oxr`Ao*I8jgAJqk8^g47>i&Cmz@;4n2=^Y#ZZ= znFlu0DxCO~%Q5&li(AH&n>M&yvSN|7hDZ9x^s}p}Fk?OL5xIG25BpnHhal}g@v6su zX1?9X7USox=7f!}8Ly$=_?z`l*m+bNbU%!`0n9(1=NXr)#_KXI85`e|-1`%0znqiB z{7G)dH4(>4uKRb#<&hdh*fzCZle#xd@28F@YXm!<>B`vgY<*|CBc*|SU>|i-hXL0k zcU)NRJvpbl_j^R6c%lJw_dI58!gT@Lz;vhXI)0*cVf8V7B6=H~U!z`u(I@mVrF9kh zJ${RG&ifPWHs3#j7> zo6CH8+tUN#sH7jBmc?fl;oi{$*wh4Y*r-s+ymIdbRw z_1)!(+w0)j1Dk0Tp8oM2^C`y%gyUM6e=u(U_|0X?O~1KZvhl`7e|_m6)6cG^!uads zYqX)A_%!Yp+s3p{Zu<=%&vYym?oq|buI2>u7>=*e5)1~qX)+$Jf5Og# z9QpG03F{2Vy1@M7S)Mu3u#M~PyQ?Lm{rWAaNto9ux$fMb zCv|C1+s0}TsryZXhpy27cz&k$!{gJwxod=~6@%x$-&|c8JHOGHxGa9+`mPW6QLGLF zzG&)k?u?6@d$G^WIo-V<=4Yx=B>4*SJY)JjEy~dbS9faL>FPqY)`iton6*_Vcd2?- z)0!^pom*EybV|$T@4xyvP5V7vN4Inn4FEDy$Qv2XPtXX(Wx_FrwHi!SUJRezIJ`D% zgspU$VC0f#R#na;ZJ@dW#@XZj0#k)7onij=?nh>sU5{Br-cj{4FoH*A_KE#{{y}re z$eVt|`_4?f&s%$11;v)_1-Vj}1vLDkVh3He9>-C0tBm{i`AB3CHIL}(9~P~_Ff27X z8MnS|XrRO=_M7x)DFORU+4CWHOY|y#>-crw2g|OpEDu1iW(T;&KXaPal7BH(q^VrFgzvde2j*q$l1NP-S3;rlhE~wd9SLtWun`fOyt){j{#QwqiWq;!s&7X%58YAZRzv<@@C&=HU4gung zX-?SqiqCJY6*+9hi|gEijI2ApcpmI$6DLE@K=dRwH{x3kkE>P;x8}mxT=sPu6R+QL z)ONkQ^EZ%~KhN!=m(YUnQ3&=q(ITv7|g6E05 z-`5RZry^G>;eyC30Gu#b;NzRcws)Z#JLzmj}pL zADnKjA;k1@DeL<3^3v)<4WTyeJysukhh+le9f~>VGGVhLw35`LfQ#KhxAJy4VlS70-cl^b3 zPAQ?MHIAc5HSp~XTDBu&JLY4`@@DUNI#sLW_Qth~wn4@eH6iHouHp^!8>)Ut*B%^i zL7^Uk#9q^}NX?3E-C&P0G*oJH(-~Q0(;G`YYAj6sAbs0nxMAgkFqU;BM#;mC`Nlkh zyl*?t^{>AgvwOU;0snr{9ibM^S=Y2c9DV&$T0%b{moK6v6OGx?=P#GCu1D>H7_pDHGG5i1awX%s_uK5zuIlY{9{teE z?R$(7>;GVF0h2#R9e`3|tvf^`Mg>Zq8mF$bkx;is=1$OF>@D6}U5=Iyar$c+?As_P8kuPMQ3CAV0I64)l9#%9*!sCyg_nDgxYuToQtHN>DRpO_j829aMt zo@X?TqJt6*41SL5%dGvwniyRUscL0NjfIx4+SIO7`Exm@lwxv`S0hV3jQ{HA#A8&A zh^{*w8wQs*WlW*rz2u9?Au*QJa8Asl*XQ+-g(cq7$UGU(Z`U*X5%1U!>mlr#<3Fnd z05l}_GyD9_(@0?78jkSI(?U>gkNI}PwHVWkv2jvEz^!{=yw%6GP!~biM_W_EV;mXp z&aS0+ZvEXiUB_p>#}h8_Lk+_t-v6wYg{@x!{eT|!Ok*(nbDOz9=N&&Mw!zipFb3Mp zWtSH>IY++BJgpfc&a?_l-@?4TAJIjaw#m3NFKWhdGXHO;2{FgJtS#e8F($EX?wp#r zdF&szZibl`?p#oDNc^p_msA4j*I35!*8kGR&bwQP9U^Er#(b$R_qv~cDgrEQE4 zW?CtwAt7_k=yqJ4+e!V9);7!BlX?rRrp?J(<7(KLUhYKS=rYzPEI6x~z_fhKci*kc z!N!r*lwkV`rZKSju=gADq&K=3HNQTpgQ3K|?K!{2IUlUsli%LnX5N(Y+`#Q^zyF4hGlfHnmsgi1HH@Ik!ZKc8v0U6+ zT9_x~GO@ma@c{nNJGS2MtRBMfTa9)25dZQ|m)%reyv9?Ud_LIIW%!XRrdewtq zE7NRPF5J^FAlrvbv*F-f|7=$G0QpX2nhgW(vya+~+GQLW@6N7ev>*6gqdjozBupIt zspbKFqo;ZWv-iK^FQJx&(&tS5fX{|!jlr@kvp;v!|HxcmwKdQSU%eJX7Pb^ulfxKj zqaks5apY*5&-dYBpL|bi!;exQcaLF3eT%0Vu=PwBR~@w9HhQkRUeq|&$Z<0NZ>9-B zrrG$@yLpCj=PmrCZS$P68UP*tD(`vT^94MraV{X=&-|@%ePO=fl&vTAOjxWMO$hcs zTgwJ3Pv&fb@0#;47TMLp6|G;AwwYM+>*2utsyLZE_2;~*Vv^|S7SB(8zg`!jkyF0x zq^1q4SEK53Kt7Byx_UXBo0-(TQR_Qsz3@D)PrO;{?Hu%c_b~>L?>BWV-1uiTK#cdl zuYJS!u6Y7)y$r z6Jucwa^N!10SIEoa_v=dd#-18DIa^sp4US-UM*pt)Znt4$TSN`fqTG$TTBI zs2IBkG#kvfTY0Mk_m52T%yu*X?78lN@;`>Z(es|Nj}v1$Gme???v-3??n7*Y#HV|Y zhA;eB^FZnqFz?y$LxFs}SK5zE+s^$%`6&TahLgz81aG4c}G-#?_?|k;!g8!DX;?#lWM3$?k7SoWfFC zdoYyd{VY*i$fJvSYiFwlSHXHrSVpV^Fka<^5GJ4IQtP&DajKsn6VK=h!~+=pq=lh3 z{=~>Zf|8~RPhZe$99Yl${f@8y+E~Z7^X}i8y^326ftYhzp6{Ijh*0`b-dHs`#16eD zShGAr!+Vd~m$xy*!ai0Vd+q%x_9xz;yd=Hf@1~e#g_tyc+s7N~*SE$88{LSEqhS!; z+67|9B3|agOr!U_DF`uu{!;gKHGb_m=g@DkHfv<)bJV~f5{CZV=y7hG%jH3fC22p2t#*EidU8*DBt&_xB7kUvJG? znr5JRnJ*Ks@A}^h$KP`1%;K9mClaeOD?b*gW9t)R&dbYXyWd+hWi&tO*N&#nKtHBw z!{q$bxGu|jBy|7|Z3YzEX+Pv!jtV_bqK-v;{V`>=b!W+W zTUC9SMeAxr>xEhxQ`1213-?Jz?^la7EQ*&u)&ZCq@m6PJdAXEzl{gvsN2>*dcVD1> z2-X(Bxi4B5ysx=}N}OUCIrXMnGkMHZ#m29zDcl)x%tB2^XTrd+`^&OiF0Y3it8wbx zyR5BoOMk>X=i3%bSog!!+;DXWIA3rc;OBMHT!{t=_ZVi0Y`JUJheVmeTFZxfC$&Xs z^_uz>jRFuipI`l)s>ix^tDW=x&p+G#txdzk_#wu(xjxX0-DLjm$aOIW_k;y^IW5M6 zGB%EB1MPOM;s5|307*naR1BXz_+8De4PK3S&l`U9Lrz*TTg+P*+GhAX<_YcA5HQ>r za;P8bI+$<$BTVOsH|_AcCdZp`{K@0nSnY)q{Q#?nAn{+359U6*u7CN-Sh(KI?C(ds z+fV%L-8suxcFHLdM%=KQOf%qWX&5hV7+IHJXIdRI?ryyZ>gi5uBe2{^Ybg*ff5ji8 z-#Iy+#gE~w8JmvrHrRBcr#jIgINFcNOPlh+y$x)QV0nz`g_zg)iEq8DM`CNxNlh4x z2bbGsUhk|{0QQx-7ow+9xz5ZH&y)T{^M?7&oi8ds7|jyasBy=_)2+?iyz5P_YUYq} zVOko~C+=E?vBAdW5e*O1VzK=XiwAYQ(dK!&M3x&d&ofOItIxo+XPA>uv;ivTc$z&{ zTSo2E;J#Qao#?OJdL67k%^t(8H{$DLxIUI??M&`v`_-?0&J+DDo^xmbkOFF_cKNo! z71e^AsLO5!;_to#XNC;D@|Y(q_?ZW}$AdC94*hNwOQ-7<45kg*S^xZ_FD-?6&l`W` z4>@VYlIG}o>ncC*Wn9bn;~M?OTtmQkjU!wCp{~Q~3WUFWfa$#d`itvLi{~-g1I9R_ zmScEhliCZ7v!C??vhSbkAq?KP))W&yFPVLIO?>*?Ka7Q8%28k8{>}W_+27_o?wn;T zJ7o$rt3Bqv=2>0MfXOW`bIBN4#;+s$j#`~E=_}@X5qQ6bpLS~_u-wRwXI}ouADdj^ zA3tfajz`5Ipbo@k(+%s1=W+E^Oo!mstS}5T(3Gc?lIhYBPpg?ClkSF&gf$?-cW0YxhO-w$@=K-6aJUyH1)XH9xuiifByOB zmf|JX%a5m`jZn5ymXvU1YMOCDR^&YRcU+dTZO@nI^?I*4OVw+9{))%o70oKxvHvLT zNg=dnmgs%EEK767Y{!R?1^lj>zrC+YO4y&y`8(!!%(dGM z#|!%$|HeLd@=S~o+8K|>d}&#h_uH-cQ#B;uq@5CD7@sHce4MJk#a17BxzRlyzk>Zx zLr6K-Y5vmVN&LupO#3CSUVi*h9pBFrV2svvm3|I7C$sjL{NVmA|1)iH*9dvt>t3UM!h8=*<1o&(#{#$EB}!>@!Y;E zngQWT)3PAjirlKim|+C_u;!4Gc;O?LiR`|qy^uA(+wL)?^mKXMy4oRuXE3tM<7a9q z`!stkH|z=L>vOKUBO9KrtR9tu>kvP5NhnDjN3lZX>~x~Xn`8%YJBD8oWju>ulJ@& zIFw|U*Sa12t}x0`*SMYQa?F*U)o7aj1dbp5wuL`#^*Zjoo}i7ZuHO)LR^q2>AMx4a zx%J}?>@VteWNx-cl{Tt%ErrthQ|myMWkGIRu8X<4^~3t*3woSm&Jng-boRyvUG_Ay zSV*)DIF2TwP^Tohw`gyB6gFTTk`xC$JlD!-tJ3mv*_sbM=44$0PrTt(?GEs;53~Qd z=Jkd37rnt;&jdHnM-NOM;h1mD*Jtg=p*`z)1N9+Q)hAgBu1zsYeTkOOj|!DJxB3H7 z*QP*1L(Rcbq(4oajTl1Xe~R8gnp_lfPH?C5enaMk(fgq`0QE(q47}FtsoF&S>{d_J z*D^Kk02nW?Z%uR30@ASc$9}9IY;{xmNT>c1Qa3R!YF!SZc`zCe+z(&_%o_v2xy8dC zwwsHo^)Y@sf!+`57(}y9MLji|P9Qx!i$14KHwk;ZcdTdP_GdUWYBiLKyRuM9(~rv> zY|%@XF=e0fdCW{qclz+)l1X1FWn zyX^WsE0&k|;2I{Fo!@11m7g>)XY6ysNVysS=2OnNK*h4_&t2{ik2%plxU~_~ca2}H z%iWUinrjU`X!MwncBV=QJ;_2)9MyoN> zoFcNbGB1=)gVYvaT8k4d*7X->e4*8=z;#h0@kUr=x35^=GS2&i)pl!xoaD4OPjh1W zO74+)`5P?+GOVsoJj;zI?Cgj`G8T;OX7~F@?vh-6qR}#a<$B38zj=&3bMGqti53EN z8cY-AY9ts_&ibF#4Pa{l^PXosH{*AiZ#vVMVZX6F#MlsmXSFp>>cITuG3YF2u-}+2h}FknnoOo^Qe#T$2(cJue*8?k z!qya%1F`)~6X>pYX1=>Q&D61R`;+Ma%^aDvrYAKGSWORF&jDOnzxp}nnkTMisjO>$ zdwc5~?QJk~LmXX@b$bHtiuo=xzi0G?t;7cxIpCA?yKFA9zsQ`Gj;NZ?w_^=Benq<) z0C{+5e9EOIv$r?;k>lqscZhAkdo=8tTN}Z6=NqPf=5E>f&9#KlG>o0g5Hl9dFxD=I z&HSx1VX}?Jz-9ND?>LT;InT%153F^7-p|^v+8yhlA3`Xe*z=86x)fb=L$0g1N#HdL zsV#ty+fi$QOeb=&>%af)`itWmY8Bg)cep%YKtE=ePi1`-m+bZ}%` zm++}i->ck3V-k4Q^O$MJV2;9julKvrIk;K~_btt=iJCPM$Uq|}P5YnJ4PbRhnD=}o zS{KIeDt~mQ0YHtJ_NsUD7}Y{R{Pf4)Q+*QM&*xtIMb`(wzKwYqwH;9B_USu!zro_4 zd8K2V@9$qSl$LjMKCaPNTZ7es!8~JYgLpBc9w(>d>Vg93F0eiZ(_|w1&eo}Ny}EUT z3W;In$A5=4!sy4`HN|r3(0*4F*zR;*?^HdFx8kvohtsUEVF71GYOqQ!uNGs_ z%#&e)=kpte%w>O(IYX`sKR0}ss{t_W#I`Xmkm)5{?$Fga%sijV*D~hs>HF_bxZC-= zC)ZMZxyKMAql_$?aGx_{tvGCq6T&oO``LG0j{Ibd@H~%bKMa>YC}fW#oWJYd%h0iC z7GDi0@S}_clxG+i=Z3vzS__wpbNI8J&Zx)4+aUedYG;3Fm#nY9HfU z66Jk8W)$zYvF}~}Yx@>sL!Nk{7DCMnX!FnxK~BSatdJ{A-g9!b?zj88Gc5#TWIxPZ z$furYv@ovN@kZxk7~Ga>B>E z%(uHn8{QrDey%2M-$4t(V@AcNrwiI+G`fpa*`Oy@gv7?)$&}Run{HDk8m!D2Oyjmx6+#gecuia`Yreh_tkHi-dGY zcW)q_Lq^92j4@yg7%+JFe2?F=KVjFgWA}Yuuh)5g&JjjL*mZ1a7E(NK*3A<)K~CFN z>jTA(LkN9k$nwxpq&!B>#$vdk%!Q4T4L>fCdgI9Mjzir*s64=z7X#Iubw>Z#m6IS_&fl$;WS~<6o5}H1L2es*` z@P+9G&^p!gN;`Gx^7w%ZjQv4!-EEu9FSHF6siS#b`^*4f+YH#(oz@xqfRtGyaNP+8Q2>YPp+pAU~#_jom> zo-(Q#O=G9u_)+&vI%9Qnmluq~)>C8UIm1H{WiMBQ1fOiH@zlF+#!Ayw3lJSM5s44^ zUzW0@c^28ca17my*X2D=(T2gFLd?efar&^Arvlw`Oh0$SY|}oGLK5Q!RkzXakyGxs z3Kd1D)P$entQhbwGeXoQ-Ki;m(^resK3Fbx4yNPQjSf|ZJUd0X6@@$!N#k*Uv@2l* zeh@C1X=N=GIGUlxq7?byibt+Ae|%@{!{pD}?IZhzuFSlvqyOSj8ZZ3nB6|n?&Hba} zka+-`vKH%qD{=S3{`%Roj6Q3aJq4?`I-~mwJUzOKrc1h_BJ2wQl(tzia(2F*?C6W={^3i z)U~DXT_x|h$a+) zG${3PZ|Vw@l!%3fK^53*q2}r5U~^1^U?sP)_H9rL1DTe)YJ2HLGA^?(rd@sPe_kq`;He zAHi&FHGorNv+IfocFW}(NKXUrBTScVA+n*X{Le`%S1EZHO?Bul;n1+UEKmMA{%~bK zXz(#`J&F-7Q5JAcg9aq`_8*E=o)H$NUoU%3 zH`)S`OJ%b~TM% z%Fieinvkkys3wPsJbqa(H<*oL^-@oPjg%s7RD_qm#cx=Cfrx)H!FNwzO_T+>+F1v6 z8V0np!<&8tTP?6 zLrdv@xcQ@d%C>9a$B|^~xk>+^w2Q=ls48i1j@Ts~@HMhC{5qn!lLmWNjPp%~>(y?* zr~OBxrJp_|Nuju)KQ;8uhT$yQtz$*DyZv_ZZ@lWc;^kh@xk;&g25XA{LP)Q^?4oUk z_OoHGCUP5|5fufFcE)YUSuIs-?wwC$--1r|YENs5#~`+ak5Sp?F?2i1(AL^Z5|v_D z>x+OGPsHT;>sD2Cw?Et36R)6%QI8jqPm)2;;P==S7pt(a-dWrG37q@anX3yvX%FeM zy_%C~ATb}`b__jQmVU=#wY5j^t4wu9829*h!VvRHZrmf0(o2>xKX7?p7_k8fROhaN z1n>n5#a-~2NEEr})O-DHV?`R$Ej#W(t665OlYd;>w=BGPzhAW+y9V0&(wGB$@C+@} zA82b3iT!!lkygW%v&>T-j5i;(!^pI($)-kPd{r1VR8!Is~K zzbfsff3klkkp}U)Ji@^wRHPeU;`jO%T$CAXiXLeciei}um$8l9l#We@RC#Jco<`lx z7%WlD9W_u$;g}*2pwN9Fj3-=v3*#*af~r-n?RxHev8T9w#JY#X?1AqcQ;#WfBUTru zqgn_H3Leu&HE8j+{MRvE?K-dpAjMTle`P74!mPa$YSiB*Yy+X&$K(WLZ(OhWK@Gf& zoqluZaZ>m;O%ntFi#9)xK~M}HoS*;CBw4>a>YGgxOjP>vs=7u+_svT?p1+}#@;{&q z0P~Cu(|PO_RzhRzVq-}|Tx5ageN$wX!}bYt!^bktug@c^&@VGsMlm0JelF&q{jK!45*7AG&q5celS*GKBZZj|P$D;N<_Oljt)|t~1-sBBIzYf33zz zfF1hXF|eFEK3i{vf1tDZZDB>qVJy2dF0&A{XNvYl6i)E>WVKBf05Bfu0So@{c2U3X zIbJH^t?v1Td!xFU@*73caNnj}r;G?kPy2UfX_qqakfr#H1a(E>0WLP(R!>QuQQW5~ zgVAZHoaHui+D6FV%#_5TFNQSpP0(QZ!-2O7cKcP>^R-iKPKsR5i6@d?LXd}4zfhT> zY(K(#gU~d8@>au~G*3Q%teDE2eJRhPnhXoElJrIm6(^W0Gu-}g3SS=mw&{Q6n}uE=@s@-OP#^S&ebi@VKh z^~2}#qe4R;Vk`S_nS+BNeX)>^F3Ss4*5qbxmijHVsCW}7Ne)dM@%qxo?}oq3spaU} z$s1}lVd)r@3r#{wS?CY9H6jJD-_xnkSwcAP-b$1Gy!1)8w0AoV4DAp8DeP#nbFJ^) zXSy|1FzCqj?ytVl`ehY)Nb@xKA9;+BDiRMj;_!A#dHH;8^-oafRpZ`8zC*oCH0J`) zw#W#I@|9~+&AVn^ChgYXWb%yxWTod!csRKOkJw^p$O@JAKMU`(Ne3n8rAjt!mBzP( z9|e(C#gg^xOu~=g>z}v65VZsnXcNOoAoilk{zl3QTDa{hMl#K-nUp<>P%P0$*Fu%=NXdU)=xEkQ(={Q z^1^=Vd_6iVt)n7aYg+$GNQ%#%Qg%V^GWdnacD(m@K}Af1_cP1<;|+*=P)YPv3}7G6 zAYgWJPO2HKXz~U6tUj~;vhRIJ_Tgw>n?D1Q)lEQFhpLk24TJbcY+=Bjw<)qj7Tx9X zrAtf)84G6)@{vRPU;r0DzupKl*a8)R!%anF&`R*iGx4o#HbT&{^-q)JY6P9H?Qg`4Ijf3^EB&fOZgu5u|1Pb{~(L(%BL+(8m~fb>juRvl(3 zKX$>U3FFTh9DBlYO5M}uE60l(*Z9_$!LJ18dr|skt3|jwt{UXi!7!QUP<(}MnB9G@ zG&B9n!2QjlK1;~U$ArRmyPWbSSWA`n~O)or`%PoglOc7s{AT zGL-AE+=%D6p*s=dZgb7Z3ZI73b&%PE_Rl@4aoVNv_Us85#dKA}{jICNM?Dk`2@UdO zc_k(o##3ue72hIW&57)jdg(DA6**Y7>c_J9Y3{49T$}1<7{iQlg_XCJ9$uunJZ2Gn ztRXM3)-o9_GqnIkypUcMUS#Kd}&_6Q7qG*;~cCu;cW`O;N} ze@>gDv+fN%GS6E*3#aX*KhHd!AoUT!?J6{NEJgbd4eu73c#Ft9A7YC`7@IJFcXiI! znD3g5l>su{h3r9pdJOY0m8Cqd7H)0_%(!!qsm~rkH9T?Fr?;nkSI?EA??5p90(g84 zTyvKRd2^m;83P@{Be8mlHe&%|0%o^315OVI`lmB;uwJOy%5jC16kTky3NDR&^{7Ai z5i0fI_hk>!4CaLy#I`RAr9_6m%IM(zyOZv@HpplEGHb0{~MPEnzNP<>%FD-;aR$p`EO%?a2=zRpgv^4e2s|+AN0j}J&I7x+b@PYKx3MbU8N5#_v_MUb3n9(e~=NJ5pJhF3K-Q3&GY+k=jP)15M9U6`t&O zBfNjB7&lnt&nfJRg&WkF-)};RWQDjt@sW2-Bz6U|zGC6P46WcgmFj(nBQ?eKv& z#k#*f@=GyfIcVJQLh-H5YSiIfmy|tUcJBT#q|#^Vo~nFt>9EnXNJx#B3QN2#{7D3p zUz*WZkr@xl3FB-A<~8wGFisF(4i$D=U7D%A%a9%JK}`v}RxM|yq`Vu%9iPp#Hlr*9 zT{Av@m*)l;k&jZF5ZQJDGnFn@K!V@2Atc-=$4tEU$eO=cb?fb7=CD6$4PkUkJoqYg zMa96w9m}C`s!ChN&C}q$jV`@ttVo~ZUX?d%30-$MQS#?cpy5bk43YvHwZnloAhY+vz6 z=Df0UksHMZu2ZI)ip_JTMKi31M79%?$FO^4fnYf_Thi{$%l|(M5SH*I;IE7ztm(|J z=YoCiUU`q}+b;&HmQnhLZ;xI((Xo7-TRq|U!~cIc$kjZMa=3V>>66vPdszP>vz@rf zD^O$#vYgSqsWthGj3W{~+R|7J){r9`j7ZP*mNA&#%%QXEh_ooplo(50D>DEmx?023 zKFCRGAK7bI$sEg=A;wraBwO4r4rs!F9Sz= k19V`uD7lb1PL3ZT&73Y)<%etFG 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

    OZtWj(Uf8j+b)su{gA5XnI5^vM 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 w$|)mQ<2&3=;A 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 - {{:helper.link('Overall info', 'note', {'state' :'status'}, null, data.state == 'status' ? 'selected' : null)}} - {{:helper.link('Details', 'note', {'state' : 'engines'}, null, data.state == 'engines' ? 'selected' : null)}} - -
    -
    -
    - Global controls: -
    -
    - {{:helper.link(data.global_state ? 'Shut all down' : 'Power all up', 'power', {'global_toggle' : 1}, null, data.global_state ? 'selected' : null)}} -
    -
    -
    -
    - Thrust limit: -
    -
    - {{:helper.link('', 'circle-plus', { 'global_limit' : 0.1}, null, null)}} - {{:helper.link(data.global_limit+'%', null, { 'set_global_limit' : 1 }, null, null)}} - {{:helper.link('', 'circle-minus', { 'global_limit' : -0.1}, null, null)}} -
    -
    -
    -
    - Total thrust: -
    -
    - {{:data.total_thrust}} -
    -
    -
    -{{if data.state == "engines"}} - {{if data.engines_info}} - {{for data.engines_info}} -
    -
    - Engine #{{:(index + 1)}}: -
    -
    - {{:helper.link(value.eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : value.eng_reference }, null, value.eng_on ? value.eng_on == 1 ? 'linkOn' : 'yellowButton' : null)}} -
    -
    -
    -
    - Type: -
    -
    - {{:value.eng_type}} -
    -
    -
    -
    - Status: -
    -
    - {{:value.eng_on ? value.eng_on == 1 ? 'Online' : 'Booting' : 'Offline'}}
    - {{:value.eng_status}} -
    -
    -
    -
    - Current thrust: -
    -
    - {{:value.eng_thrust}} -
    -
    -
    -
    - Thrust limit: -
    -
    - {{:helper.link('', 'circle-plus', { 'limit' : 0.1, 'engine' : value.eng_reference }, null, null)}} - {{:helper.link(value.eng_thrust_limiter+'%', null, { 'set_limit' : 1, 'engine' : value.eng_reference }, null, null)}} - {{:helper.link('', 'circle-minus', { 'limit' : -0.1, 'engine' : value.eng_reference }, null, null)}} -
    -
    -
    - {{/for}} - {{/if}} -{{/if}} -{{if data.state == "status"}} - {{if data.engines_info}} - {{for data.engines_info}} -
    -
    -
    - Engine #{{:(index + 1)}}: -
    -
    - {{:helper.link(value.eng_on ? 'Shutdown' : 'Power up', 'power', { 'toggle' : 1, 'engine' : value.eng_reference }, null, value.eng_on ? value.eng_on == 1 ? 'linkOn' : 'yellowButton' : null)}} -
    -
    -
    -
    - Thrust: -
    - Thrust limit: -
    -
    - {{:value.eng_thrust}} -
    - {{:value.eng_thrust_limiter}}% -
    -
    -
    - {{/for}} - {{/if}} -{{/if}} \ No newline at end of file diff --git a/nano/templates/hardsuit.tmpl b/nano/templates/hardsuit.tmpl deleted file mode 100644 index b32bb621c8e..00000000000 --- a/nano/templates/hardsuit.tmpl +++ /dev/null @@ -1,257 +0,0 @@ - - - - -{{if data.interfacelock || data.malf > 0}} -
    -- HARDSUIT INTERFACE OFFLINE --
    -{{else}} - {{if data.aicontrol && data.ai != 1}} -
    -- HARDSUIT CONTROL OVERRIDDEN BY AI --
    - {{else}} -
    -
    -
    - Power supply -
    -
    - {{:helper.displayBar(data.chargestatus, 0, 50, (data.chargestatus >= 35) ? 'good' : (data.chargestatus >= 15) ? 'average' : 'bad')}} {{:data.charge}}/{{:data.maxcharge}} -
    -
    -
    -
    -
    - AI control: -
    -
    - {{if data.aioverride}} -
    ENABLED
    - {{else}} -
    DISABLED
    - {{/if}} -
    -
    - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_ai_control' : 1}, null)}} -
    -
    -
    -
    - Suit status: -
    -
    - {{if data.sealing == 1}} -
    PROCESSING
    - {{else}} - {{if data.seals == 1}} -
    INACTIVE
    - {{else}} -
    ACTIVE
    - {{/if}} - {{/if}} -
    -
    - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_seals' : 1}, null)}} -
    -
    -
    -
    - Cover status: -
    -
    - {{if data.emagged || !data.securitycheck}} -
    ERROR - MAINTENANCE LOCK CONTROL OFFLINE
    - {{else}} - {{if data.coverlock}} -
    LOCKED
    - {{else}} -
    UNLOCKED
    - {{/if}} - {{/if}} -
    -
    - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_suit_lock' : 1}, null)}} -
    -
    -
    -
    - -

    Hardware

    -

    Suit pieces

    - -
    -
    -
    - Helmet: -
    -
    - {{:helper.capitalizeFirstLetter(data.helmet)}} -
    - {{if data.sealing != 1}} -
    - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'helmet'}, null)}} -
    - {{/if}} -
    -
    -
    - Gauntlets: -
    -
    - {{:helper.capitalizeFirstLetter(data.gauntlets)}} -
    - {{if data.sealing != 1}} -
    - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'gauntlets'}, null)}} -
    - {{/if}} -
    -
    -
    - Boots: -
    -
    - {{:helper.capitalizeFirstLetter(data.boots)}} -
    - {{if data.sealing != 1}} -
    - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'boots'}, null)}} -
    - {{/if}} -
    -
    -
    - Chestpiece: -
    -
    - {{:helper.capitalizeFirstLetter(data.chest)}} -
    - {{if data.sealing != 1}} -
    - {{:helper.link('Toggle', 'circle-arrow-s', {'toggle_piece' : 'chest'}, null)}} -
    - {{/if}} -
    -
    - -

    System modules

    - {{if data.seals == 1 || data.sealing == 1}} -

    HARDSUIT SYSTEMS OFFLINE

    - {{else}} -

    Selected primary system: - {{if data.primarysystem}} - {{:helper.capitalizeFirstLetter(data.primarysystem)}} - {{else}} - None - {{/if}} -

    - {{if data.modules}} -
    - {{for data.modules}} -
    -
    -
    -
    {{:helper.capitalizeFirstLetter(value.name)}}
    - {{if value.damage > 0}} -
    - {{if value.damage == 1}} - (
    damaged
    ) - {{else}} - (
    destroyed
    ) - {{/if}} -
    - {{/if}} -
    -
    - Engage: {{:value.engagecost}} - Activate: {{:value.activecost}} - Passive: {{:value.passivecost}} -
    -
    - {{:value.desc}} -
    -
    - {{if value.can_use == 1}} -
    - {{:helper.link(value.engagestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'engage'}, null)}} -
    - {{/if}} - {{if value.can_select == 1}} -
    - {{if value.name == data.primarysystem}} -
    SELECTED
    - {{else}} - {{:helper.link('Select', 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'select'}, null)}} - {{/if}} -
    - {{/if}} - {{if value.can_toggle == 1}} -
    - {{if value.is_active == 1}} - {{:helper.link(value.deactivatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'deactivate'}, null)}} - {{else}} - {{:helper.link(value.activatestring, 'circle-arrow-s', {'interact_module' : value.index, 'module_mode' : 'activate'}, null)}} - {{/if}} -
    - {{/if}} -
    -
    -
    -
    - {{if value.charges}} -
    Stored charges
    -
    Selected:
    {{:helper.capitalizeFirstLetter(value.chargetype)}} - {{for value.charges :itemValue:itemIndex}} -
    - {{:helper.link(helper.capitalizeFirstLetter(itemValue.caption), null, {'interact_module' : value.index, 'module_mode' : 'select_charge_type', 'charge_type' : itemValue.index}, null)}} -
    - {{/for}} - {{/if}} -
    -
    -
    - {{/for}} -
    - {{else}} - None. - {{/if}} - {{/if}} - {{/if}} -{{/if}} \ No newline at end of file diff --git a/nano/templates/layout_basic.tmpl b/nano/templates/layout_basic.tmpl deleted file mode 100644 index 67fcd51f805..00000000000 --- a/nano/templates/layout_basic.tmpl +++ /dev/null @@ -1,3 +0,0 @@ -
    -
    Initiating...
    -
    \ No newline at end of file diff --git a/nano/templates/layout_default.tmpl b/nano/templates/layout_default.tmpl deleted file mode 100644 index 45c304ae745..00000000000 --- a/nano/templates/layout_default.tmpl +++ /dev/null @@ -1,73 +0,0 @@ -{{if data._PC}} -
    -
    - - {{if data._PC.batteryicon && data._PC.showbatteryicon}} -
    - {{/if}} - {{if data._PC.batterypercent && data._PC.showbatteryicon}} - {{:data._PC.batterypercent}} - {{/if}} - {{if data._PC.ntneticon}} - - {{/if}} - {{if data._PC.apclinkicon}} - - {{/if}} - {{if data._PC.stationtime}} - {{:data._PC.stationtime}} - {{/if}} - {{for data._PC.programheaders}} - - {{/for}} -
    -
    -
    -
    - - {{if data._PC.showexitprogram}} -
    {{:helper.link('Minimize', null, {'PC_minimize' : 1})}} - {{:helper.link('Exit', null, {'PC_exit' : 1})}} - {{/if}} -
    -
    -
    -{{/if}} - -
    {{:config.title}}
    - -
    -
    Initiating...
    -
    diff --git a/package.json b/package.json new file mode 100644 index 00000000000..1d123f3ffce --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "devDependencies": { + "@biomejs/biome": "^2.1.2", + "prettier": "^3.6.2" + }, + "scripts": { + "tgui:fix": "biome check --write --unsafe tgui", + "tgui:lint": "biome lint tgui" + } +} diff --git a/tgui/.eslintignore b/tgui/.eslintignore deleted file mode 100644 index a59187b933a..00000000000 --- a/tgui/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -/.yarn/** -/**/node_modules -/**/*.bundle.* -/**/*.chunk.* -/**/*.hot-update.* -/packages/inferno/** diff --git a/tgui/.eslintrc-sonar.yml b/tgui/.eslintrc-sonar.yml deleted file mode 100644 index 3cdd49f889e..00000000000 --- a/tgui/.eslintrc-sonar.yml +++ /dev/null @@ -1,26 +0,0 @@ -rules: - # radar/cognitive-complexity: error - radar/max-switch-cases: error - radar/no-all-duplicated-branches: error - radar/no-collapsible-if: error - radar/no-collection-size-mischeck: error - radar/no-duplicate-string: error - radar/no-duplicated-branches: error - radar/no-element-overwrite: error - radar/no-extra-arguments: error - radar/no-identical-conditions: error - radar/no-identical-expressions: error - radar/no-identical-functions: error - radar/no-inverted-boolean-check: error - radar/no-one-iteration-loop: error - radar/no-redundant-boolean: error - radar/no-redundant-jump: error - radar/no-same-line-conditional: error - radar/no-small-switch: error - radar/no-unused-collection: error - radar/no-use-of-empty-return-value: error - radar/no-useless-catch: error - radar/prefer-immediate-return: error - radar/prefer-object-literal: error - radar/prefer-single-boolean-return: error - radar/prefer-while: error diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml deleted file mode 100644 index 4ab8f84dccc..00000000000 --- a/tgui/.eslintrc.yml +++ /dev/null @@ -1,766 +0,0 @@ -root: true -extends: prettier -parser: '@typescript-eslint/parser' -parserOptions: - ecmaVersion: 2020 - sourceType: module - ecmaFeatures: - jsx: true -env: - es6: true - browser: true - node: true -plugins: - - radar - - react - - unused-imports -settings: - react: - version: '16.10' -rules: - ## Possible Errors - ## ---------------------------------------- - ## Enforce “for” loop update clause moving the counter in the right - ## direction. - # for-direction: error - ## Enforce return statements in getters - # getter-return: error - ## Disallow using an async function as a Promise executor - no-async-promise-executor: error - ## Disallow await inside of loops - # no-await-in-loop: error - ## Disallow comparing against -0 - # no-compare-neg-zero: error - ## Disallow assignment operators in conditional expressions - no-cond-assign: error - ## Disallow the use of console - # no-console: error - ## Disallow constant expressions in conditions - # no-constant-condition: error - ## Disallow control characters in regular expressions - # no-control-regex: error - ## Disallow the use of debugger - no-debugger: error - ## Disallow duplicate arguments in function definitions - no-dupe-args: error - ## Disallow duplicate keys in object literals - no-dupe-keys: error - ## Disallow duplicate case labels - no-duplicate-case: error - ## Disallow empty block statements - # no-empty: error - ## Disallow empty character classes in regular expressions - no-empty-character-class: error - ## Disallow reassigning exceptions in catch clauses - no-ex-assign: error - ## Disallow unnecessary boolean casts - no-extra-boolean-cast: error - ## Disallow unnecessary parentheses - # no-extra-parens: warn - ## Disallow unnecessary semicolons - no-extra-semi: error - ## Disallow reassigning function declarations - no-func-assign: error - ## Disallow assigning to imported bindings - no-import-assign: error - ## Disallow variable or function declarations in nested blocks - no-inner-declarations: error - ## Disallow invalid regular expression strings in RegExp constructors - no-invalid-regexp: error - ## Disallow irregular whitespace - no-irregular-whitespace: error - ## Disallow characters which are made with multiple code points in character - ## class syntax - no-misleading-character-class: error - ## Disallow calling global object properties as functions - no-obj-calls: error - ## Disallow calling some Object.prototype methods directly on objects - no-prototype-builtins: error - ## Disallow multiple spaces in regular expressions - no-regex-spaces: error - ## Disallow sparse arrays - no-sparse-arrays: error - ## Disallow template literal placeholder syntax in regular strings - no-template-curly-in-string: error - ## Disallow confusing multiline expressions - no-unexpected-multiline: error - ## Disallow unreachable code after return, throw, continue, and break - ## statements - # no-unreachable: warn - ## Disallow control flow statements in finally blocks - no-unsafe-finally: error - ## Disallow negating the left operand of relational operators - no-unsafe-negation: error - ## Disallow assignments that can lead to race conditions due to usage of - ## await or yield - # require-atomic-updates: error - ## Require calls to isNaN() when checking for NaN - use-isnan: error - ## Enforce comparing typeof expressions against valid strings - valid-typeof: error - - ## Best practices - ## ---------------------------------------- - ## Enforce getter and setter pairs in objects and classes - # accessor-pairs: error - ## Enforce return statements in callbacks of array methods - # array-callback-return: error - ## Enforce the use of variables within the scope they are defined - # block-scoped-var: error - ## Enforce that class methods utilize this - # class-methods-use-this: error - ## Enforce a maximum cyclomatic complexity allowed in a program - complexity: [error, { max: 50 }] - ## Require return statements to either always or never specify values - # consistent-return: error - ## Enforce consistent brace style for all control statements - curly: [error, multi-line] - ## Require default cases in switch statements - # default-case: error - ## Enforce default parameters to be last - # default-param-last: error - ## Enforce consistent newlines before and after dots - dot-location: [error, property] - ## Enforce dot notation whenever possible - # dot-notation: error - ## Require the use of === and !== - eqeqeq: [error, always] - ## Require for-in loops to include an if statement - # guard-for-in: error - ## Enforce a maximum number of classes per file - # max-classes-per-file: error - ## Disallow the use of alert, confirm, and prompt - # no-alert: error - ## Disallow the use of arguments.caller or arguments.callee - # no-caller: error - ## Disallow lexical declarations in case clauses - no-case-declarations: error - ## Disallow division operators explicitly at the beginning of regular - ## expressions - # no-div-regex: error - ## Disallow else blocks after return statements in if statements - # no-else-return: error - ## Disallow empty functions - # no-empty-function: error - ## Disallow empty destructuring patterns - no-empty-pattern: error - ## Disallow null comparisons without type-checking operators - # no-eq-null: error - ## Disallow the use of eval() - # no-eval: error - ## Disallow extending native types - # no-extend-native: error - ## Disallow unnecessary calls to .bind() - # no-extra-bind: error - ## Disallow unnecessary labels - # no-extra-label: error - ## Disallow fallthrough of case statements - no-fallthrough: error - ## Disallow leading or trailing decimal points in numeric literals - # no-floating-decimal: error - ## Disallow assignments to native objects or read-only global variables - no-global-assign: error - ## Disallow shorthand type conversions - # no-implicit-coercion: error - ## Disallow variable and function declarations in the global scope - # no-implicit-globals: error - ## Disallow the use of eval()-like methods - # no-implied-eval: error - ## Disallow this keywords outside of classes or class-like objects - # no-invalid-this: error - ## Disallow the use of the __iterator__ property - # no-iterator: error - ## Disallow labeled statements - # no-labels: error - ## Disallow unnecessary nested blocks - # no-lone-blocks: error - ## Disallow function declarations that contain unsafe references inside - ## loop statements - # no-loop-func: error - ## Disallow magic numbers - # no-magic-numbers: error - ## Disallow multiple spaces - no-multi-spaces: warn - ## Disallow multiline strings - # no-multi-str: error - ## Disallow new operators outside of assignments or comparisons - # no-new: error - ## Disallow new operators with the Function object - # no-new-func: error - ## Disallow new operators with the String, Number, and Boolean objects - # no-new-wrappers: error - ## Disallow octal literals - no-octal: error - ## Disallow octal escape sequences in string literals - no-octal-escape: error - ## Disallow reassigning function parameters - # no-param-reassign: error - ## Disallow the use of the __proto__ property - # no-proto: error - ## Disallow variable redeclaration - no-redeclare: error - ## Disallow certain properties on certain objects - # no-restricted-properties: error - ## Disallow assignment operators in return statements - no-return-assign: error - ## Disallow unnecessary return await - # no-return-await: error - ## Disallow javascript: urls - # no-script-url: error - ## Disallow assignments where both sides are exactly the same - no-self-assign: error - ## Disallow comparisons where both sides are exactly the same - # no-self-compare: error - ## Disallow comma operators - no-sequences: error - ## Disallow throwing literals as exceptions - # no-throw-literal: error - ## Disallow unmodified loop conditions - # no-unmodified-loop-condition: error - ## Disallow unused expressions - # no-unused-expressions: error - ## Disallow unused labels - no-unused-labels: warn - ## Disallow unnecessary calls to .call() and .apply() - # no-useless-call: error - ## Disallow unnecessary catch clauses - # no-useless-catch: error - ## Disallow unnecessary concatenation of literals or template literals - # no-useless-concat: error - ## Disallow unnecessary escape characters - no-useless-escape: warn - ## Disallow redundant return statements - # no-useless-return: error - ## Disallow void operators - # no-void: error - ## Disallow specified warning terms in comments - # no-warning-comments: error - ## Disallow with statements - no-with: error - ## Enforce using named capture group in regular expression - # prefer-named-capture-group: error - ## Require using Error objects as Promise rejection reasons - # prefer-promise-reject-errors: error - ## Disallow use of the RegExp constructor in favor of regular expression - ## literals - # prefer-regex-literals: error - ## Enforce the consistent use of the radix argument when using parseInt() - radix: error - ## Disallow async functions which have no await expression - # require-await: error - ## Enforce the use of u flag on RegExp - # require-unicode-regexp: error - ## Require var declarations be placed at the top of their containing scope - # vars-on-top: error - ## Require parentheses around immediate function invocations - # wrap-iife: error - ## Require or disallow “Yoda” conditions - # yoda: error - - ## Strict mode - ## ---------------------------------------- - ## Require or disallow strict mode directives - strict: error - - ## Variables - ## ---------------------------------------- - ## Require or disallow initialization in variable declarations - # init-declarations: error - ## Disallow deleting variables - no-delete-var: error - ## Disallow labels that share a name with a variable - # no-label-var: error - ## Disallow specified global variables - # no-restricted-globals: error - ## Disallow variable declarations from shadowing variables declared in - ## the outer scope - # no-shadow: error - ## Disallow identifiers from shadowing restricted names - no-shadow-restricted-names: error - ## Disallow the use of undeclared variables unless mentioned - ## in /*global*/ comments - ## NOTE: Pointless when TypeScript can check for this - # no-undef: error - ## Disallow initializing variables to undefined - no-undef-init: error - ## Disallow the use of undefined as an identifier - # no-undefined: error - ## Disallow unused variables - # no-unused-vars: error - ## Disallow the use of variables before they are defined - # no-use-before-define: error - - ## Code style - ## ---------------------------------------- - ## Enforce linebreaks after opening and before closing array brackets - array-bracket-newline: [error, consistent] - ## Enforce consistent spacing inside array brackets - array-bracket-spacing: [error, never] - ## Enforce line breaks after each array element - # array-element-newline: error - ## Disallow or enforce spaces inside of blocks after opening block and - ## before closing block - block-spacing: [error, always] - ## Enforce consistent brace style for blocks - # brace-style: [error, stroustrup, { allowSingleLine: false }] - ## Enforce camelcase naming convention - # camelcase: error - ## Enforce or disallow capitalization of the first letter of a comment - # capitalized-comments: error - ## Require or disallow trailing commas - comma-dangle: [ - error, - { - arrays: always-multiline, - objects: always-multiline, - imports: always-multiline, - exports: always-multiline, - functions: only-multiline, ## Optional on functions - }, - ] - ## Enforce consistent spacing before and after commas - comma-spacing: [error, { before: false, after: true }] - ## Enforce consistent comma style - comma-style: [error, last] - ## Enforce consistent spacing inside computed property brackets - computed-property-spacing: [error, never] - ## Enforce consistent naming when capturing the current execution context - # consistent-this: error - ## Require or disallow newline at the end of files - # eol-last: error - ## Require or disallow spacing between function identifiers and their - ## invocations - func-call-spacing: [error, never] - ## Require function names to match the name of the variable or property - ## to which they are assigned - # func-name-matching: error - ## Require or disallow named function expressions - # func-names: error - ## Enforce the consistent use of either function declarations or expressions - # func-style: [error, expression] - ## Enforce line breaks between arguments of a function call - # function-call-argument-newline: error - ## Enforce consistent line breaks inside function parentheses - ## NOTE: This rule does not honor a newline on opening paren. - # function-paren-newline: [error, never] - ## Disallow specified identifiers - # id-blacklist: error - ## Enforce minimum and maximum identifier lengths - # id-length: error - ## Require identifiers to match a specified regular expression - # id-match: error - ## Enforce the location of arrow function bodies - # implicit-arrow-linebreak: error - ## Enforce consistent indentation - # indent: [error, 2, { SwitchCase: 1 }] - ## Enforce the consistent use of either double or single quotes in JSX - ## attributes - # jsx-quotes: [error, prefer-double] - ## Enforce consistent spacing between keys and values in object literal - ## properties - # key-spacing: [error, { beforeColon: false, afterColon: true }] - ## Enforce consistent spacing before and after keywords - # keyword-spacing: [error, { before: true, after: true }] - ## Enforce position of line comments - # line-comment-position: error - ## Enforce consistent linebreak style - # linebreak-style: error - ## Require empty lines around comments - # lines-around-comment: error - ## Require or disallow an empty line between class members - # lines-between-class-members: error - ## Enforce a maximum depth that blocks can be nested - # max-depth: error - ## Enforce a maximum line length - # max-len: [error, { - # code: 80, - # ## Ignore imports - # ignorePattern: '^(import\s.+\sfrom\s|.*require\()', - # ignoreUrls: true, - # ignoreRegExpLiterals: true, - # ignoreStrings: true, - # ignoreTemplateLiterals: true, - # }] - ## Enforce a maximum number of lines per file - # max-lines: error - ## Enforce a maximum number of line of code in a function - # max-lines-per-function: error - ## Enforce a maximum depth that callbacks can be nested - # max-nested-callbacks: error - ## Enforce a maximum number of parameters in function definitions - # max-params: error - ## Enforce a maximum number of statements allowed in function blocks - # max-statements: error - ## Enforce a maximum number of statements allowed per line - # max-statements-per-line: error - ## Enforce a particular style for multiline comments - # multiline-comment-style: error - ## Enforce newlines between operands of ternary expressions - # multiline-ternary: [error, always-multiline] - ## Require constructor names to begin with a capital letter - # new-cap: error - ## Enforce or disallow parentheses when invoking a constructor with no - ## arguments - # new-parens: error - ## Require a newline after each call in a method chain - # newline-per-chained-call: error - ## Disallow Array constructors - # no-array-constructor: error - ## Disallow bitwise operators - # no-bitwise: error - ## Disallow continue statements - # no-continue: error - ## Disallow inline comments after code - # no-inline-comments: error - ## Disallow if statements as the only statement in else blocks - # no-lonely-if: error - ## Disallow mixed binary operators - # no-mixed-operators: error - ## Disallow mixed spaces and tabs for indentation - # no-mixed-spaces-and-tabs: error - ## Disallow use of chained assignment expressions - # no-multi-assign: error - ## Disallow multiple empty lines - # no-multiple-empty-lines: error - ## Disallow negated conditions - # no-negated-condition: error - ## Disallow nested ternary expressions - # no-nested-ternary: error - ## Disallow Object constructors - # no-new-object: error - ## Disallow the unary operators ++ and -- - # no-plusplus: error - ## Disallow specified syntax - # no-restricted-syntax: error - ## Disallow all tabs - # no-tabs: error - ## Disallow ternary operators - # no-ternary: error - ## Disallow trailing whitespace at the end of lines - # no-trailing-spaces: error - ## Disallow dangling underscores in identifiers - # no-underscore-dangle: error - ## Disallow ternary operators when simpler alternatives exist - # no-unneeded-ternary: error - ## Disallow whitespace before properties - # no-whitespace-before-property: error - ## Enforce the location of single-line statements - # nonblock-statement-body-position: error - ## Enforce consistent line breaks inside braces - # object-curly-newline: [error, { multiline: true }] - ## Enforce consistent spacing inside braces - object-curly-spacing: [error, always] - ## Enforce placing object properties on separate lines - # object-property-newline: error - ## Enforce variables to be declared either together or separately in - ## functions - # one-var: error - ## Require or disallow newlines around variable declarations - # one-var-declaration-per-line: error - ## Require or disallow assignment operator shorthand where possible - # operator-assignment: error - ## Enforce consistent linebreak style for operators - # operator-linebreak: [error, before] - ## Require or disallow padding within blocks - # padded-blocks: error - ## Require or disallow padding lines between statements - # padding-line-between-statements: error - ## Disallow using Object.assign with an object literal as the first - ## argument and prefer the use of object spread instead. - # prefer-object-spread: error - ## Require quotes around object literal property names - # quote-props: error - ## Enforce the consistent use of either backticks, double, or single quotes - # quotes: [error, single] - ## Require or disallow semicolons instead of ASI - semi: error - ## Enforce consistent spacing before and after semicolons - semi-spacing: [error, { before: false, after: true }] - ## Enforce location of semicolons - semi-style: [error, last] - ## Require object keys to be sorted - # sort-keys: error - ## Require variables within the same declaration block to be sorted - # sort-vars: error - ## Enforce consistent spacing before blocks - space-before-blocks: [error, always] - ## Enforce consistent spacing before function definition opening parenthesis - # space-before-function-paren: [error, { - # anonymous: always, - # named: never, - # asyncArrow: always, - # }] - ## Enforce consistent spacing inside parentheses - space-in-parens: [error, never] - ## Require spacing around infix operators - # space-infix-ops: error - ## Enforce consistent spacing before or after unary operators - # space-unary-ops: error - ## Enforce consistent spacing after the // or /* in a comment - spaced-comment: [error, always] - ## Enforce spacing around colons of switch statements - switch-colon-spacing: [error, { before: false, after: true }] - ## Require or disallow spacing between template tags and their literals - template-tag-spacing: [error, never] - ## Require or disallow Unicode byte order mark (BOM) - # unicode-bom: [error, never] - ## Require parenthesis around regex literals - # wrap-regex: error - - ## ES6 - ## ---------------------------------------- - ## Require braces around arrow function bodies - # arrow-body-style: error - ## Require parentheses around arrow function arguments - # arrow-parens: [error, as-needed] - ## Enforce consistent spacing before and after the arrow in arrow functions - arrow-spacing: [error, { before: true, after: true }] - ## Require super() calls in constructors - # constructor-super: error - ## Enforce consistent spacing around * operators in generator functions - generator-star-spacing: [error, { before: false, after: true }] - ## Disallow reassigning class members - no-class-assign: error - ## Disallow arrow functions where they could be confused with comparisons - # no-confusing-arrow: error - ## Disallow reassigning const variables - no-const-assign: error - ## Disallow duplicate class members - no-dupe-class-members: error - ## Disallow duplicate module imports - # no-duplicate-imports: error - ## Disallow new operators with the Symbol object - no-new-symbol: error - ## Disallow specified modules when loaded by import - # no-restricted-imports: error - ## Disallow this/super before calling super() in constructors - no-this-before-super: error - ## Disallow unnecessary computed property keys in object literals - # no-useless-computed-key: error - ## Disallow unnecessary constructors - # no-useless-constructor: error - ## Disallow renaming import, export, and destructured assignments to the - ## same name - # no-useless-rename: error - ## Require let or const instead of var - no-var: error - ## Require or disallow method and property shorthand syntax for object - ## literals - # object-shorthand: error - ## Require using arrow functions for callbacks - prefer-arrow-callback: error - ## Require const declarations for variables that are never reassigned after - ## declared - # prefer-const: error - ## Require destructuring from arrays and/or objects - # prefer-destructuring: error - ## Disallow parseInt() and Number.parseInt() in favor of binary, octal, and - ## hexadecimal literals - # prefer-numeric-literals: error - ## Require rest parameters instead of arguments - # prefer-rest-params: error - ## Require spread operators instead of .apply() - # prefer-spread: error - ## Require template literals instead of string concatenation - # prefer-template: error - ## Require generator functions to contain yield - # require-yield: error - ## Enforce spacing between rest and spread operators and their expressions - # rest-spread-spacing: error - ## Enforce sorted import declarations within modules - # sort-imports: error - ## Require symbol descriptions - # symbol-description: error - ## Require or disallow spacing around embedded expressions of template - ## strings - # template-curly-spacing: error - ## Require or disallow spacing around the * in yield* expressions - yield-star-spacing: [error, { before: false, after: true }] - - ## React - ## ---------------------------------------- - ## Enforces consistent naming for boolean props - react/boolean-prop-naming: error - ## Forbid "button" element without an explicit "type" attribute - react/button-has-type: error - ## Prevent extraneous defaultProps on components - react/default-props-match-prop-types: error - ## Rule enforces consistent usage of destructuring assignment in component - # react/destructuring-assignment: [error, always, { ignoreClassFields: true }] - ## Prevent missing displayName in a React component definition - # react/display-name: error - ## Forbid certain props on Components - # react/forbid-component-props: error - ## Forbid certain props on DOM Nodes - # react/forbid-dom-props: error - ## Forbid certain elements - # react/forbid-elements: error - ## Forbid certain propTypes - # react/forbid-prop-types: error - ## Forbid foreign propTypes - # react/forbid-foreign-prop-types: error - ## Prevent using this.state inside this.setState - react/no-access-state-in-setstate: error - ## Prevent using Array index in key props - # react/no-array-index-key: error - ## Prevent passing children as props - react/no-children-prop: error - ## Prevent usage of dangerous JSX properties - react/no-danger: error - ## Prevent problem with children and props.dangerouslySetInnerHTML - react/no-danger-with-children: error - ## Prevent usage of deprecated methods, including component lifecycle - ## methods - react/no-deprecated: error - ## Prevent usage of setState in componentDidMount - react/no-did-mount-set-state: error - ## Prevent usage of setState in componentDidUpdate - react/no-did-update-set-state: error - ## Prevent direct mutation of this.state - react/no-direct-mutation-state: error - ## Prevent usage of findDOMNode - react/no-find-dom-node: error - ## Prevent usage of isMounted - react/no-is-mounted: error - ## Prevent multiple component definition per file - # react/no-multi-comp: error - ## Prevent usage of shouldComponentUpdate when extending React.PureComponent - react/no-redundant-should-component-update: error - ## Prevent usage of the return value of React.render - react/no-render-return-value: error - ## Prevent usage of setState - # react/no-set-state: error - ## Prevent common casing typos - react/no-typos: error - ## Prevent using string references in ref attribute. - react/no-string-refs: error - ## Prevent using this in stateless functional components - react/no-this-in-sfc: error - ## Prevent invalid characters from appearing in markup - react/no-unescaped-entities: error - ## Prevent usage of unknown DOM property (fixable) - # react/no-unknown-property: error - ## Prevent usage of unsafe lifecycle methods - react/no-unsafe: error - ## Prevent definitions of unused prop types - react/no-unused-prop-types: error - ## Prevent definitions of unused state properties - react/no-unused-state: error - ## Prevent usage of setState in componentWillUpdate - react/no-will-update-set-state: error - ## Enforce ES5 or ES6 class for React Components - react/prefer-es6-class: error - ## Enforce that props are read-only - react/prefer-read-only-props: error - ## Enforce stateless React Components to be written as a pure function - react/prefer-stateless-function: error - ## Prevent missing props validation in a React component definition - # react/prop-types: error - ## Prevent missing React when using JSX - # react/react-in-jsx-scope: error - ## Enforce a defaultProps definition for every prop that is not a required - ## prop - # react/require-default-props: error - ## Enforce React components to have a shouldComponentUpdate method - # react/require-optimization: error - ## Enforce ES5 or ES6 class for returning value in render function - react/require-render-return: error - ## Prevent extra closing tags for components without children (fixable) - react/self-closing-comp: error - ## Enforce component methods order (fixable) - # react/sort-comp: error - ## Enforce propTypes declarations alphabetical sorting - # react/sort-prop-types: error - ## Enforce the state initialization style to be either in a constructor or - ## with a class property - # react/state-in-constructor: error - ## Enforces where React component static properties should be positioned. - # react/static-property-placement: error - ## Enforce style prop value being an object - react/style-prop-object: error - ## Prevent void DOM elements (e.g. ,
    ) from receiving children - react/void-dom-elements-no-children: error - - ## JSX-specific rules - ## ---------------------------------------- - ## Enforce boolean attributes notation in JSX (fixable) - react/jsx-boolean-value: error - ## Enforce or disallow spaces inside of curly braces in JSX attributes and - ## expressions. - # react/jsx-child-element-spacing: error - ## Validate closing bracket location in JSX (fixable) - # react/jsx-closing-bracket-location: [error, { - # ## NOTE: Not really sure about enforcing this one - # selfClosing: false, - # nonEmpty: after-props, - # }] - ## Validate closing tag location in JSX (fixable) - react/jsx-closing-tag-location: error - ## Enforce or disallow newlines inside of curly braces in JSX attributes and - ## expressions (fixable) - # react/jsx-curly-newline: error - ## Enforce or disallow spaces inside of curly braces in JSX attributes and - ## expressions (fixable) - react/jsx-curly-spacing: error - ## Enforce or disallow spaces around equal signs in JSX attributes (fixable) - react/jsx-equals-spacing: error - ## Restrict file extensions that may contain JSX - # react/jsx-filename-extension: error - ## Enforce position of the first prop in JSX (fixable) - # react/jsx-first-prop-new-line: error - ## Enforce event handler naming conventions in JSX - react/jsx-handler-names: error - ## Validate JSX indentation (fixable) - # react/jsx-indent: [error, 2, { - # checkAttributes: true, - # }] - ## Validate props indentation in JSX (fixable) - # react/jsx-indent-props: [error, 2] - ## Validate JSX has key prop when in array or iterator - react/jsx-key: error - ## Validate JSX maximum depth - react/jsx-max-depth: [error, { max: 10 }] ## Generous - ## Limit maximum of props on a single line in JSX (fixable) - # react/jsx-max-props-per-line: error - ## Prevent usage of .bind() and arrow functions in JSX props - # react/jsx-no-bind: error - ## Prevent comments from being inserted as text nodes - react/jsx-no-comment-textnodes: error - ## Prevent duplicate props in JSX - react/jsx-no-duplicate-props: error - ## Prevent usage of unwrapped JSX strings - # react/jsx-no-literals: error - ## Prevent usage of unsafe target='_blank' - react/jsx-no-target-blank: error - ## Disallow undeclared variables in JSX - react/jsx-no-undef: error - ## Disallow unnecessary fragments (fixable) - react/jsx-no-useless-fragment: error - ## Limit to one expression per line in JSX - # react/jsx-one-expression-per-line: error - ## Enforce curly braces or disallow unnecessary curly braces in JSX - # react/jsx-curly-brace-presence: error - ## Enforce shorthand or standard form for React fragments - react/jsx-fragments: error - ## Enforce PascalCase for user-defined JSX components - react/jsx-pascal-case: error - ## Disallow multiple spaces between inline JSX props (fixable) - react/jsx-props-no-multi-spaces: error - ## Disallow JSX props spreading - # react/jsx-props-no-spreading: error - ## Enforce default props alphabetical sorting - # react/jsx-sort-default-props: error - ## Enforce props alphabetical sorting (fixable) - # react/jsx-sort-props: error - ## Validate whitespace in and around the JSX opening and closing brackets - ## (fixable) - react/jsx-tag-spacing: error - ## Prevent React to be incorrectly marked as unused - react/jsx-uses-react: error - ## Prevent variables used in JSX to be incorrectly marked as unused - react/jsx-uses-vars: error - ## Prevent missing parentheses around multilines JSX (fixable) - react/jsx-wrap-multilines: error - ## Prevents the use of unused imports. - ## This could be done by enabling no-unused-vars, but we're doing this for now - unused-imports/no-unused-imports: error diff --git a/tgui/.gitattributes b/tgui/.gitattributes index 482063210d3..3103a46c242 100644 --- a/tgui/.gitattributes +++ b/tgui/.gitattributes @@ -6,7 +6,6 @@ *.ts text eol=lf *.tsx text eol=lf *.css text eol=lf -*.cjs text eol=lf *.scss text eol=lf *.html text eol=lf *.json text eol=lf diff --git a/tgui/.gitignore b/tgui/.gitignore index 4d0dd666d88..46b4182f604 100644 --- a/tgui/.gitignore +++ b/tgui/.gitignore @@ -1,24 +1,9 @@ ## NPM garbage node_modules *.log -package-lock.json - -## Yarn stuff -/.pnp.* -/.yarn/* -!/.yarn/releases -!/.yarn/plugins -!/.yarn/sdks -!/.yarn/versions -!/.yarn/lock.yml ## Build artifacts -/public/.tmp/**/* /public/**/* !/public/*.html -!/public/tgui-polyfill.min.js -/coverage - -## Previously ignored locations that are kept to avoid confusing git -## while transitioning to a new project structure. -/packages/tgui/public/** +!/public/ntos-error.min.css +!/public/helpers.min.js diff --git a/tgui/.prettierignore b/tgui/.prettierignore index 97d37c5a6fa..64ad6361de2 100644 --- a/tgui/.prettierignore +++ b/tgui/.prettierignore @@ -1,8 +1,12 @@ -.pnp.* -.yarn node_modules +public + +*.js +*.ts +*.tsx +*.css +*.jsx +*.json -# Avoid running on any bundles. -/public/**/* # Running it on tgui.html is fine, however. !/public/tgui.html diff --git a/tgui/.prettierrc.yml b/tgui/.prettierrc.yml index e3cf66636e8..64d6436bcd0 100644 --- a/tgui/.prettierrc.yml +++ b/tgui/.prettierrc.yml @@ -1,6 +1,6 @@ singleQuote: true overrides: - - files: 'public/tgui.html' + - files: 'packages/tgui-setup/helpers.js' options: trailingComma: es5 arrowParens: always diff --git a/tgui/.swcrc b/tgui/.swcrc new file mode 100644 index 00000000000..5cc7c7f5dec --- /dev/null +++ b/tgui/.swcrc @@ -0,0 +1,15 @@ +{ + "$schema": "https://swc.rs/schema.json", + "jsc": { + "loose": true, + "parser": { + "syntax": "typescript", + "tsx": true + }, + "transform": { + "react": { + "runtime": "automatic" + } + } + } +} diff --git a/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs b/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs deleted file mode 100644 index 527659ff97f..00000000000 --- a/tgui/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +++ /dev/null @@ -1,363 +0,0 @@ -/* eslint-disable */ -//prettier-ignore -module.exports = { -name: "@yarnpkg/plugin-interactive-tools", -factory: function (require) { -var plugin=(()=>{var PR=Object.create,J1=Object.defineProperty,MR=Object.defineProperties,FR=Object.getOwnPropertyDescriptor,LR=Object.getOwnPropertyDescriptors,RR=Object.getOwnPropertyNames,hh=Object.getOwnPropertySymbols,NR=Object.getPrototypeOf,Z4=Object.prototype.hasOwnProperty,aD=Object.prototype.propertyIsEnumerable;var dD=(i,u,f)=>u in i?J1(i,u,{enumerable:!0,configurable:!0,writable:!0,value:f}):i[u]=f,dt=(i,u)=>{for(var f in u||(u={}))Z4.call(u,f)&&dD(i,f,u[f]);if(hh)for(var f of hh(u))aD.call(u,f)&&dD(i,f,u[f]);return i},zn=(i,u)=>MR(i,LR(u)),BR=i=>J1(i,"__esModule",{value:!0});var Si=(i,u)=>{var f={};for(var c in i)Z4.call(i,c)&&u.indexOf(c)<0&&(f[c]=i[c]);if(i!=null&&hh)for(var c of hh(i))u.indexOf(c)<0&&aD.call(i,c)&&(f[c]=i[c]);return f};var Me=(i,u)=>()=>(u||i((u={exports:{}}).exports,u),u.exports),jR=(i,u)=>{for(var f in u)J1(i,f,{get:u[f],enumerable:!0})},UR=(i,u,f)=>{if(u&&typeof u=="object"||typeof u=="function")for(let c of RR(u))!Z4.call(i,c)&&c!=="default"&&J1(i,c,{get:()=>u[c],enumerable:!(f=FR(u,c))||f.enumerable});return i},Er=i=>UR(BR(J1(i!=null?PR(NR(i)):{},"default",i&&i.__esModule&&"default"in i?{get:()=>i.default,enumerable:!0}:{value:i,enumerable:!0})),i);var ey=Me((YH,pD)=>{"use strict";var hD=Object.getOwnPropertySymbols,qR=Object.prototype.hasOwnProperty,zR=Object.prototype.propertyIsEnumerable;function WR(i){if(i==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(i)}function HR(){try{if(!Object.assign)return!1;var i=new String("abc");if(i[5]="de",Object.getOwnPropertyNames(i)[0]==="5")return!1;for(var u={},f=0;f<10;f++)u["_"+String.fromCharCode(f)]=f;var c=Object.getOwnPropertyNames(u).map(function(t){return u[t]});if(c.join("")!=="0123456789")return!1;var g={};return"abcdefghijklmnopqrst".split("").forEach(function(t){g[t]=t}),Object.keys(Object.assign({},g)).join("")==="abcdefghijklmnopqrst"}catch(t){return!1}}pD.exports=HR()?Object.assign:function(i,u){for(var f,c=WR(i),g,t=1;t{"use strict";var ty=ey(),as=typeof Symbol=="function"&&Symbol.for,Q1=as?Symbol.for("react.element"):60103,bR=as?Symbol.for("react.portal"):60106,GR=as?Symbol.for("react.fragment"):60107,VR=as?Symbol.for("react.strict_mode"):60108,YR=as?Symbol.for("react.profiler"):60114,$R=as?Symbol.for("react.provider"):60109,KR=as?Symbol.for("react.context"):60110,XR=as?Symbol.for("react.forward_ref"):60112,JR=as?Symbol.for("react.suspense"):60113,QR=as?Symbol.for("react.memo"):60115,ZR=as?Symbol.for("react.lazy"):60116,mD=typeof Symbol=="function"&&Symbol.iterator;function Z1(i){for(var u="https://reactjs.org/docs/error-decoder.html?invariant="+i,f=1;fmh.length&&mh.push(i)}function uy(i,u,f,c){var g=typeof i;(g==="undefined"||g==="boolean")&&(i=null);var t=!1;if(i===null)t=!0;else switch(g){case"string":case"number":t=!0;break;case"object":switch(i.$$typeof){case Q1:case bR:t=!0}}if(t)return f(c,i,u===""?"."+sy(i,0):u),1;if(t=0,u=u===""?".":u+":",Array.isArray(i))for(var C=0;C{"use strict";kD.exports=xD()});var AD=Me((ga,e2)=>{(function(){var i,u="4.17.21",f=200,c="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",g="Expected a function",t="Invalid `variable` option passed into `_.template`",C="__lodash_hash_undefined__",A=500,x="__lodash_placeholder__",D=1,L=2,N=4,j=1,$=2,h=1,re=2,ce=4,Q=8,oe=16,Se=32,me=64,De=128,J=256,Te=512,Oe=30,Le="...",ot=800,ct=16,Ue=1,be=2,At=3,Ot=1/0,Nt=9007199254740991,Je=17976931348623157e292,V=0/0,ne=4294967295,ge=ne-1,Z=ne>>>1,Ae=[["ary",De],["bind",h],["bindKey",re],["curry",Q],["curryRight",oe],["flip",Te],["partial",Se],["partialRight",me],["rearg",J]],at="[object Arguments]",it="[object Array]",Ft="[object AsyncFunction]",jt="[object Boolean]",hn="[object Date]",Un="[object DOMException]",Jt="[object Error]",Yt="[object Function]",cr="[object GeneratorFunction]",w="[object Map]",pt="[object Number]",Mn="[object Null]",Bn="[object Object]",Xn="[object Promise]",vr="[object Proxy]",gr="[object RegExp]",r0="[object Set]",Ci="[object String]",yo="[object Symbol]",Ds="[object Undefined]",Mu="[object WeakMap]",Gf="[object WeakSet]",iu="[object ArrayBuffer]",ou="[object DataView]",ol="[object Float32Array]",ul="[object Float64Array]",Es="[object Int8Array]",Uo="[object Int16Array]",sl="[object Int32Array]",Ss="[object Uint8Array]",Cs="[object Uint8ClampedArray]",Ti="[object Uint16Array]",Fu="[object Uint32Array]",ll=/\b__p \+= '';/g,fl=/\b(__p \+=) '' \+/g,cl=/(__e\(.*?\)|\b__t\)) \+\n'';/g,al=/&(?:amp|lt|gt|quot|#39);/g,Ui=/[&<>"']/g,Mr=RegExp(al.source),Ac=RegExp(Ui.source),of=/<%-([\s\S]+?)%>/g,Ts=/<%([\s\S]+?)%>/g,xs=/<%=([\s\S]+?)%>/g,dl=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,qi=/^\w*$/,qo=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,kr=/[\\^$.*+?()[\]{}|]/g,Fr=RegExp(kr.source),si=/^\s+/,H0=/\s/,b0=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Bt=/\{\n\/\* \[wrapped with (.+)\] \*/,Lu=/,? & /,c0=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Ru=/[()=,{}\[\]\/\s]/,ks=/\\(\\)?/g,As=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,uu=/\w*$/,wo=/^[-+]0x[0-9a-f]+$/i,zo=/^0b[01]+$/i,Os=/^\[object .+?Constructor\]$/,Is=/^0o[0-7]+$/i,uf=/^(?:0|[1-9]\d*)$/,_n=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Nu=/($^)/,Wo=/['\n\r\u2028\u2029\\]/g,su="\\ud800-\\udfff",Ps="\\u0300-\\u036f",pl="\\ufe20-\\ufe2f",Vf="\\u20d0-\\u20ff",hl=Ps+pl+Vf,Bu="\\u2700-\\u27bf",ju="a-z\\xdf-\\xf6\\xf8-\\xff",sf="\\xac\\xb1\\xd7\\xf7",ro="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",Ms="\\u2000-\\u206f",ml=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Uu="A-Z\\xc0-\\xd6\\xd8-\\xde",G0="\\ufe0e\\ufe0f",Fs=sf+ro+Ms+ml,tt="['\u2019]",zi="["+su+"]",lu="["+Fs+"]",Ho="["+hl+"]",O0="\\d+",vl="["+Bu+"]",gl="["+ju+"]",fu="[^"+su+Fs+O0+Bu+ju+Uu+"]",_l="\\ud83c[\\udffb-\\udfff]",Sn="(?:"+Ho+"|"+_l+")",gt="[^"+su+"]",en="(?:\\ud83c[\\udde6-\\uddff]){2}",I0="[\\ud800-\\udbff][\\udc00-\\udfff]",li="["+Uu+"]",qu="\\u200d",Wi="(?:"+gl+"|"+fu+")",zu="(?:"+li+"|"+fu+")",Wu="(?:"+tt+"(?:d|ll|m|re|s|t|ve))?",Ls="(?:"+tt+"(?:D|LL|M|RE|S|T|VE))?",fi=Sn+"?",e0="["+G0+"]?",io="(?:"+qu+"(?:"+[gt,en,I0].join("|")+")"+e0+fi+")*",D0="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Do="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",i0=e0+fi+io,Rs="(?:"+[vl,en,I0].join("|")+")"+i0,a0="(?:"+[gt+Ho+"?",Ho,en,I0,zi].join("|")+")",Hu=RegExp(tt,"g"),V0=RegExp(Ho,"g"),bu=RegExp(_l+"(?="+_l+")|"+a0+i0,"g"),Ns=RegExp([li+"?"+gl+"+"+Wu+"(?="+[lu,li,"$"].join("|")+")",zu+"+"+Ls+"(?="+[lu,li+Wi,"$"].join("|")+")",li+"?"+Wi+"+"+Wu,li+"+"+Ls,Do,D0,O0,Rs].join("|"),"g"),bo=RegExp("["+qu+su+hl+G0+"]"),P0=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ln=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],lf=-1,nr={};nr[ol]=nr[ul]=nr[Es]=nr[Uo]=nr[sl]=nr[Ss]=nr[Cs]=nr[Ti]=nr[Fu]=!0,nr[at]=nr[it]=nr[iu]=nr[jt]=nr[ou]=nr[hn]=nr[Jt]=nr[Yt]=nr[w]=nr[pt]=nr[Bn]=nr[gr]=nr[r0]=nr[Ci]=nr[Mu]=!1;var rr={};rr[at]=rr[it]=rr[iu]=rr[ou]=rr[jt]=rr[hn]=rr[ol]=rr[ul]=rr[Es]=rr[Uo]=rr[sl]=rr[w]=rr[pt]=rr[Bn]=rr[gr]=rr[r0]=rr[Ci]=rr[yo]=rr[Ss]=rr[Cs]=rr[Ti]=rr[Fu]=!0,rr[Jt]=rr[Yt]=rr[Mu]=!1;var Go={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},Gu={"&":"&","<":"<",">":">",'"':""","'":"'"},yl={"&":"&","<":"<",">":">",""":'"',"'":"'"},cu={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Bs=parseFloat,Vu=parseInt,M0=typeof global=="object"&&global&&global.Object===Object&&global,au=typeof self=="object"&&self&&self.Object===Object&&self,Lr=M0||au||Function("return this")(),F=typeof ga=="object"&&ga&&!ga.nodeType&&ga,R=F&&typeof e2=="object"&&e2&&!e2.nodeType&&e2,U=R&&R.exports===F,H=U&&M0.process,fe=function(){try{var ae=R&&R.require&&R.require("util").types;return ae||H&&H.binding&&H.binding("util")}catch(Be){}}(),ue=fe&&fe.isArrayBuffer,de=fe&&fe.isDate,W=fe&&fe.isMap,ve=fe&&fe.isRegExp,Fe=fe&&fe.isSet,Ge=fe&&fe.isTypedArray;function K(ae,Be,Ie){switch(Ie.length){case 0:return ae.call(Be);case 1:return ae.call(Be,Ie[0]);case 2:return ae.call(Be,Ie[0],Ie[1]);case 3:return ae.call(Be,Ie[0],Ie[1],Ie[2])}return ae.apply(Be,Ie)}function xe(ae,Be,Ie,ht){for(var mt=-1,wn=ae==null?0:ae.length;++mt-1}function wt(ae,Be,Ie){for(var ht=-1,mt=ae==null?0:ae.length;++ht-1;);return Ie}function js(ae,Be){for(var Ie=ae.length;Ie--&&Qe(Be,ae[Ie],0)>-1;);return Ie}function Dl(ae,Be){for(var Ie=ae.length,ht=0;Ie--;)ae[Ie]===Be&&++ht;return ht}var du=Cn(Go),Yu=Cn(Gu);function Us(ae){return"\\"+cu[ae]}function oo(ae,Be){return ae==null?i:ae[Be]}function Hi(ae){return bo.test(ae)}function qs(ae){return P0.test(ae)}function F0(ae){for(var Be,Ie=[];!(Be=ae.next()).done;)Ie.push(Be.value);return Ie}function Gr(ae){var Be=-1,Ie=Array(ae.size);return ae.forEach(function(ht,mt){Ie[++Be]=[mt,ht]}),Ie}function ir(ae,Be){return function(Ie){return ae(Be(Ie))}}function L0(ae,Be){for(var Ie=-1,ht=ae.length,mt=0,wn=[];++Ie-1}function Ju(a,p){var E=this.__data__,I=hf(E,a);return I<0?(++this.size,E.push([a,p])):E[I][1]=p,this}Z0.prototype.clear=df,Z0.prototype.delete=Ba,Z0.prototype.get=Oc,Z0.prototype.has=mu,Z0.prototype.set=Ju;function ei(a){var p=-1,E=a==null?0:a.length;for(this.clear();++p=p?a:p)),a}function vi(a,p,E,I,B,G){var te,se=p&D,Ee=p&L,$e=p&N;if(E&&(te=B?E(a,I,B,G):E(a)),te!==i)return te;if(!Jr(a))return a;var Ke=On(a);if(Ke){if(te=f1(a),!se)return Xr(a,te)}else{var nt=U0(a),Ct=nt==Yt||nt==cr;if(Eu(a))return Od(a,se);if(nt==Bn||nt==at||Ct&&!B){if(te=Ee||Ct?{}:zd(a),!se)return Ee?Zu(a,Wa(te,a)):j0(a,mf(te,a))}else{if(!rr[nt])return B?a:{};te=Wd(a,nt,se)}}G||(G=new co);var Gt=G.get(a);if(Gt)return Gt;G.set(a,te),kp(a)?a.forEach(function(dn){te.add(vi(dn,p,E,dn,a,G))}):Tp(a)&&a.forEach(function(dn,Yn){te.set(Yn,vi(dn,p,E,Yn,a,G))});var an=$e?Ee?Dn:r1:Ee?Yi:q0,qn=Ke?i:an(a);return je(qn||a,function(dn,Yn){qn&&(Yn=dn,dn=a[Yn]),xl(te,Yn,vi(dn,p,E,Yn,a,G))}),te}function Xf(a){var p=q0(a);return function(E){return Rc(E,a,p)}}function Rc(a,p,E){var I=E.length;if(a==null)return!I;for(a=$t(a);I--;){var B=E[I],G=p[B],te=a[B];if(te===i&&!(B in a)||!G(te))return!1}return!0}function Jf(a,p,E){if(typeof a!="function")throw new Yr(g);return wf(function(){a.apply(i,E)},p)}function ao(a,p,E,I){var B=-1,G=xt,te=!0,se=a.length,Ee=[],$e=p.length;if(!se)return Ee;E&&(p=lt(p,qr(E))),I?(G=wt,te=!1):p.length>=f&&(G=So,te=!1,p=new vu(p));e:for(;++BB?0:B+E),I=I===i||I>B?B:jn(I),I<0&&(I+=B),I=E>I?0:Ip(I);E0&&E(se)?p>1?k0(se,p-1,E,I,B):Rt(B,se):I||(B[B.length]=se)}return B}var v=ec(),m=ec(!0);function S(a,p){return a&&v(a,p,q0)}function O(a,p){return a&&m(a,p,q0)}function M(a,p){return st(p,function(E){return rs(a[E])})}function b(a,p){p=Gs(p,a);for(var E=0,I=p.length;a!=null&&Ep}function ut(a,p){return a!=null&&or.call(a,p)}function In(a,p){return a!=null&&p in $t(a)}function A0(a,p,E){return a>=kn(p,E)&&a=120&&Ke.length>=120)?new vu(te&&Ke):i}Ke=a[0];var nt=-1,Ct=se[0];e:for(;++nt-1;)se!==a&&C0.call(se,Ee,1),C0.call(a,Ee,1);return a}function jc(a,p){for(var E=a?p.length:0,I=E-1;E--;){var B=p[E];if(E==I||B!==G){var G=B;es(B)?C0.call(a,B,1):$a(a,B)}}return a}function Ga(a,p){return a+hu(Ai()*(p-a+1))}function Lm(a,p,E,I){for(var B=-1,G=wr(B0((p-a)/(E||1)),0),te=Ie(G);G--;)te[I?G:++B]=a,a+=E;return te}function Va(a,p){var E="";if(!a||p<1||p>Nt)return E;do p%2&&(E+=a),p=hu(p/2),p&&(a+=a);while(p);return E}function Wn(a,p){return m1(Gd(a,p,$i),a+"")}function wd(a){return Fc(Ef(a))}function Dd(a,p){var E=Ef(a);return Yc(E,mi(p,0,E.length))}function Ol(a,p,E,I){if(!Jr(a))return a;p=Gs(p,a);for(var B=-1,G=p.length,te=G-1,se=a;se!=null&&++BB?0:B+p),E=E>B?B:E,E<0&&(E+=B),B=p>E?0:E-p>>>0,p>>>=0;for(var G=Ie(B);++I>>1,te=a[G];te!==null&&!mo(te)&&(E?te<=p:te=f){var $e=p?null:bm(a);if($e)return Y0($e);te=!1,B=So,Ee=new vu}else Ee=p?[]:se;e:for(;++I=I?a:Oo(a,p,E)}var Ad=pu||function(a){return Lr.clearTimeout(a)};function Od(a,p){if(p)return a.slice();var E=a.length,I=Nr?Nr(E):new a.constructor(E);return a.copy(I),I}function Qa(a){var p=new a.constructor(a.byteLength);return new R0(p).set(new R0(a)),p}function jm(a,p){var E=p?Qa(a.buffer):a.buffer;return new a.constructor(E,a.byteOffset,a.byteLength)}function Um(a){var p=new a.constructor(a.source,uu.exec(a));return p.lastIndex=a.lastIndex,p}function qm(a){return Wr?$t(Wr.call(a)):{}}function Id(a,p){var E=p?Qa(a.buffer):a.buffer;return new a.constructor(E,a.byteOffset,a.length)}function Pd(a,p){if(a!==p){var E=a!==i,I=a===null,B=a===a,G=mo(a),te=p!==i,se=p===null,Ee=p===p,$e=mo(p);if(!se&&!$e&&!G&&a>p||G&&te&&Ee&&!se&&!$e||I&&te&&Ee||!E&&Ee||!B)return 1;if(!I&&!G&&!$e&&a=se)return Ee;var $e=E[I];return Ee*($e=="desc"?-1:1)}}return a.index-p.index}function gf(a,p,E,I){for(var B=-1,G=a.length,te=E.length,se=-1,Ee=p.length,$e=wr(G-te,0),Ke=Ie(Ee+$e),nt=!I;++se1?E[B-1]:i,te=B>2?E[2]:i;for(G=a.length>3&&typeof G=="function"?(B--,G):i,te&&Ii(E[0],E[1],te)&&(G=B<3?i:G,B=1),p=$t(p);++I-1?B[G?p[te]:te]:i}}function Rd(a){return yu(function(p){var E=p.length,I=E,B=Qn.prototype.thru;for(a&&p.reverse();I--;){var G=p[I];if(typeof G!="function")throw new Yr(g);if(B&&!te&&Gc(G)=="wrapper")var te=new Qn([],!0)}for(I=te?I:E;++I1&&er.reverse(),Ke&&Eese))return!1;var $e=G.get(a),Ke=G.get(p);if($e&&Ke)return $e==p&&Ke==a;var nt=-1,Ct=!0,Gt=E&$?new vu:i;for(G.set(a,p),G.set(p,a);++nt1?"& ":"")+p[I],p=p.join(E>2?", ":" "),a.replace(b0,`{ -/* [wrapped with `+p+`] */ -`)}function Xm(a){return On(a)||Ll(a)||!!(di&&a&&a[di])}function es(a,p){var E=typeof a;return p=p==null?Nt:p,!!p&&(E=="number"||E!="symbol"&&uf.test(a))&&a>-1&&a%1==0&&a0){if(++p>=ot)return arguments[0]}else p=0;return a.apply(i,arguments)}}function Yc(a,p){var E=-1,I=a.length,B=I-1;for(p=p===i?I:p;++E1?a[p-1]:i;return E=typeof E=="function"?(a.pop(),E):i,sp(a,E)});function fp(a){var p=z(a);return p.__chain__=!0,p}function cp(a,p){return p(a),a}function Kc(a,p){return p(a)}var Wv=yu(function(a){var p=a.length,E=p?a[0]:0,I=this.__wrapped__,B=function(G){return Hs(G,a)};return p>1||this.__actions__.length||!(I instanceof nn)||!es(E)?this.thru(B):(I=I.slice(E,+E+(p?1:0)),I.__actions__.push({func:Kc,args:[B],thisArg:i}),new Qn(I,this.__chain__).thru(function(G){return p&&!G.length&&G.push(i),G}))});function Hv(){return fp(this)}function bv(){return new Qn(this.value(),this.__chain__)}function Gv(){this.__values__===i&&(this.__values__=Op(this.value()));var a=this.__index__>=this.__values__.length,p=a?i:this.__values__[this.__index__++];return{done:a,value:p}}function Vv(){return this}function Yv(a){for(var p,E=this;E instanceof Or;){var I=Jd(E);I.__index__=0,I.__values__=i,p?B.__wrapped__=I:p=I;var B=I;E=E.__wrapped__}return B.__wrapped__=a,p}function Ml(){var a=this.__wrapped__;if(a instanceof nn){var p=a;return this.__actions__.length&&(p=new nn(this)),p=p.reverse(),p.__actions__.push({func:Kc,args:[g1],thisArg:i}),new Qn(p,this.__chain__)}return this.thru(g1)}function Fl(){return xd(this.__wrapped__,this.__actions__)}var Xc=_f(function(a,p,E){or.call(a,E)?++a[E]:ti(a,E,1)});function $v(a,p,E){var I=On(a)?rt:Nc;return E&&Ii(a,p,E)&&(p=i),I(a,cn(p,3))}function Kv(a,p){var E=On(a)?st:Qf;return E(a,cn(p,3))}var Xv=Ld(Qd),D1=Ld($c);function Jv(a,p){return k0(Jc(a,p),1)}function Qv(a,p){return k0(Jc(a,p),Ot)}function ap(a,p,E){return E=E===i?1:jn(E),k0(Jc(a,p),E)}function dp(a,p){var E=On(a)?je:$o;return E(a,cn(p,3))}function pp(a,p){var E=On(a)?Xe:kl;return E(a,cn(p,3))}var Zv=_f(function(a,p,E){or.call(a,E)?a[E].push(p):ti(a,E,[p])});function eg(a,p,E,I){a=Vi(a)?a:Ef(a),E=E&&!I?jn(E):0;var B=a.length;return E<0&&(E=wr(B+E,0)),ia(a)?E<=B&&a.indexOf(p,E)>-1:!!B&&Qe(a,p,E)>-1}var tg=Wn(function(a,p,E){var I=-1,B=typeof p=="function",G=Vi(a)?Ie(a.length):[];return $o(a,function(te){G[++I]=B?K(p,te,E):po(te,p,E)}),G}),hp=_f(function(a,p,E){ti(a,E,p)});function Jc(a,p){var E=On(a)?lt:vd;return E(a,cn(p,3))}function ng(a,p,E,I){return a==null?[]:(On(p)||(p=p==null?[]:[p]),E=I?i:E,On(E)||(E=E==null?[]:[E]),Oi(a,p,E))}var rg=_f(function(a,p,E){a[E?0:1].push(p)},function(){return[[],[]]});function mp(a,p,E){var I=On(a)?yn:bn,B=arguments.length<3;return I(a,cn(p,4),E,B,$o)}function ig(a,p,E){var I=On(a)?sn:bn,B=arguments.length<3;return I(a,cn(p,4),E,B,kl)}function og(a,p){var E=On(a)?st:Qf;return E(a,Zc(cn(p,3)))}function ug(a){var p=On(a)?Fc:wd;return p(a)}function sg(a,p,E){(E?Ii(a,p,E):p===i)?p=1:p=jn(p);var I=On(a)?Lc:Dd;return I(a,p)}function lg(a){var p=On(a)?Kf:Ao;return p(a)}function E1(a){if(a==null)return 0;if(Vi(a))return ia(a)?Rr(a):a.length;var p=U0(a);return p==w||p==r0?a.size:Zf(a).length}function fg(a,p,E){var I=On(a)?ar:Nm;return E&&Ii(a,p,E)&&(p=i),I(a,cn(p,3))}var cg=Wn(function(a,p){if(a==null)return[];var E=p.length;return E>1&&Ii(a,p[0],p[1])?p=[]:E>2&&Ii(p[0],p[1],p[2])&&(p=[p[0]]),Oi(a,k0(p,1),[])}),rc=Sl||function(){return Lr.Date.now()};function ag(a,p){if(typeof p!="function")throw new Yr(g);return a=jn(a),function(){if(--a<1)return p.apply(this,arguments)}}function vp(a,p,E){return p=E?i:p,p=a&&p==null?a.length:p,Lt(a,De,i,i,i,i,p)}function gp(a,p){var E;if(typeof p!="function")throw new Yr(g);return a=jn(a),function(){return--a>0&&(E=p.apply(this,arguments)),a<=1&&(p=i),E}}var S1=Wn(function(a,p,E){var I=h;if(E.length){var B=L0(E,An(S1));I|=Se}return Lt(a,I,p,E,B)}),_p=Wn(function(a,p,E){var I=h|re;if(E.length){var B=L0(E,An(_p));I|=Se}return Lt(p,I,a,E,B)});function C1(a,p,E){p=E?i:p;var I=Lt(a,Q,i,i,i,i,i,p);return I.placeholder=C1.placeholder,I}function yp(a,p,E){p=E?i:p;var I=Lt(a,oe,i,i,i,i,i,p);return I.placeholder=yp.placeholder,I}function wp(a,p,E){var I,B,G,te,se,Ee,$e=0,Ke=!1,nt=!1,Ct=!0;if(typeof a!="function")throw new Yr(g);p=Fo(p)||0,Jr(E)&&(Ke=!!E.leading,nt="maxWait"in E,G=nt?wr(Fo(E.maxWait)||0,p):G,Ct="trailing"in E?!!E.trailing:Ct);function Gt(f0){var Jo=I,Su=B;return I=B=i,$e=f0,te=a.apply(Su,Jo),te}function an(f0){return $e=f0,se=wf(Yn,p),Ke?Gt(f0):te}function qn(f0){var Jo=f0-Ee,Su=f0-$e,Zp=p-Jo;return nt?kn(Zp,G-Su):Zp}function dn(f0){var Jo=f0-Ee,Su=f0-$e;return Ee===i||Jo>=p||Jo<0||nt&&Su>=G}function Yn(){var f0=rc();if(dn(f0))return er(f0);se=wf(Yn,qn(f0))}function er(f0){return se=i,Ct&&I?Gt(f0):(I=B=i,te)}function vo(){se!==i&&Ad(se),$e=0,I=Ee=B=se=i}function Pi(){return se===i?te:er(rc())}function Mi(){var f0=rc(),Jo=dn(f0);if(I=arguments,B=this,Ee=f0,Jo){if(se===i)return an(Ee);if(nt)return Ad(se),se=wf(Yn,p),Gt(Ee)}return se===i&&(se=wf(Yn,p)),te}return Mi.cancel=vo,Mi.flush=Pi,Mi}var dg=Wn(function(a,p){return Jf(a,1,p)}),Dp=Wn(function(a,p,E){return Jf(a,Fo(p)||0,E)});function pg(a){return Lt(a,Te)}function Qc(a,p){if(typeof a!="function"||p!=null&&typeof p!="function")throw new Yr(g);var E=function(){var I=arguments,B=p?p.apply(this,I):I[0],G=E.cache;if(G.has(B))return G.get(B);var te=a.apply(this,I);return E.cache=G.set(B,te)||G,te};return E.cache=new(Qc.Cache||ei),E}Qc.Cache=ei;function Zc(a){if(typeof a!="function")throw new Yr(g);return function(){var p=arguments;switch(p.length){case 0:return!a.call(this);case 1:return!a.call(this,p[0]);case 2:return!a.call(this,p[0],p[1]);case 3:return!a.call(this,p[0],p[1],p[2])}return!a.apply(this,p)}}function ea(a){return gp(2,a)}var hg=Bm(function(a,p){p=p.length==1&&On(p[0])?lt(p[0],qr(cn())):lt(k0(p,1),qr(cn()));var E=p.length;return Wn(function(I){for(var B=-1,G=kn(I.length,E);++B=p}),Ll=_i(function(){return arguments}())?_i:function(a){return n0(a)&&or.call(a,"callee")&&!N0.call(a,"callee")},On=Ie.isArray,x1=ue?qr(ue):Re;function Vi(a){return a!=null&&na(a.length)&&!rs(a)}function l0(a){return n0(a)&&Vi(a)}function kg(a){return a===!0||a===!1||n0(a)&&Ye(a)==jt}var Eu=pi||W1,Ag=de?qr(de):Ce;function Og(a){return n0(a)&&a.nodeType===1&&!ic(a)}function Cp(a){if(a==null)return!0;if(Vi(a)&&(On(a)||typeof a=="string"||typeof a.splice=="function"||Eu(a)||Df(a)||Ll(a)))return!a.length;var p=U0(a);if(p==w||p==r0)return!a.size;if(nc(a))return!Zf(a).length;for(var E in a)if(or.call(a,E))return!1;return!0}function Ig(a,p){return ze(a,p)}function Pg(a,p,E){E=typeof E=="function"?E:i;var I=E?E(a,p):i;return I===i?ze(a,p,i,E):!!I}function k1(a){if(!n0(a))return!1;var p=Ye(a);return p==Jt||p==Un||typeof a.message=="string"&&typeof a.name=="string"&&!ic(a)}function Mg(a){return typeof a=="number"&&Br(a)}function rs(a){if(!Jr(a))return!1;var p=Ye(a);return p==Yt||p==cr||p==Ft||p==vr}function A1(a){return typeof a=="number"&&a==jn(a)}function na(a){return typeof a=="number"&&a>-1&&a%1==0&&a<=Nt}function Jr(a){var p=typeof a;return a!=null&&(p=="object"||p=="function")}function n0(a){return a!=null&&typeof a=="object"}var Tp=W?qr(W):on;function Fg(a,p){return a===p||sr(a,p,Nn(p))}function Lg(a,p,E){return E=typeof E=="function"?E:i,sr(a,p,Nn(p),E)}function Rg(a){return xp(a)&&a!=+a}function Ng(a){if(Zm(a))throw new mt(c);return mn(a)}function Bg(a){return a===null}function O1(a){return a==null}function xp(a){return typeof a=="number"||n0(a)&&Ye(a)==pt}function ic(a){if(!n0(a)||Ye(a)!=Bn)return!1;var p=uo(a);if(p===null)return!0;var E=or.call(p,"constructor")&&p.constructor;return typeof E=="function"&&E instanceof E&&bi.call(E)==af}var ra=ve?qr(ve):pr;function jg(a){return A1(a)&&a>=-Nt&&a<=Nt}var kp=Fe?qr(Fe):Hr;function ia(a){return typeof a=="string"||!On(a)&&n0(a)&&Ye(a)==Ci}function mo(a){return typeof a=="symbol"||n0(a)&&Ye(a)==yo}var Df=Ge?qr(Ge):Vn;function Ap(a){return a===i}function Ug(a){return n0(a)&&U0(a)==Mu}function qg(a){return n0(a)&&Ye(a)==Gf}var zg=bc(Ha),Wg=bc(function(a,p){return a<=p});function Op(a){if(!a)return[];if(Vi(a))return ia(a)?Jn(a):Xr(a);if(u0&&a[u0])return F0(a[u0]());var p=U0(a),E=p==w?Gr:p==r0?Y0:Ef;return E(a)}function is(a){if(!a)return a===0?a:0;if(a=Fo(a),a===Ot||a===-Ot){var p=a<0?-1:1;return p*Je}return a===a?a:0}function jn(a){var p=is(a),E=p%1;return p===p?E?p-E:p:0}function Ip(a){return a?mi(jn(a),0,ne):0}function Fo(a){if(typeof a=="number")return a;if(mo(a))return V;if(Jr(a)){var p=typeof a.valueOf=="function"?a.valueOf():a;a=Jr(p)?p+"":p}if(typeof a!="string")return a===0?a:+a;a=E0(a);var E=zo.test(a);return E||Is.test(a)?Vu(a.slice(2),E?2:8):wo.test(a)?V:+a}function oa(a){return yi(a,Yi(a))}function Hg(a){return a?mi(jn(a),-Nt,Nt):a===0?a:0}function yr(a){return a==null?"":ho(a)}var Pp=Io(function(a,p){if(nc(p)||Vi(p)){yi(p,q0(p),a);return}for(var E in p)or.call(p,E)&&xl(a,E,p[E])}),Mp=Io(function(a,p){yi(p,Yi(p),a)}),ua=Io(function(a,p,E,I){yi(p,Yi(p),a,I)}),bg=Io(function(a,p,E,I){yi(p,q0(p),a,I)}),Gg=yu(Hs);function Vg(a,p){var E=dr(a);return p==null?E:mf(E,p)}var Fp=Wn(function(a,p){a=$t(a);var E=-1,I=p.length,B=I>2?p[2]:i;for(B&&Ii(p[0],p[1],B)&&(I=1);++E1),G}),yi(a,Dn(a),E),I&&(E=vi(E,D|L|N,Gm));for(var B=p.length;B--;)$a(E,p[B]);return E});function l_(a,p){return Bp(a,Zc(cn(p)))}var f_=yu(function(a,p){return a==null?{}:Fm(a,p)});function Bp(a,p){if(a==null)return{};var E=lt(Dn(a),function(I){return[I]});return p=cn(p),yd(a,E,function(I,B){return p(I,B[0])})}function c_(a,p,E){p=Gs(p,a);var I=-1,B=p.length;for(B||(B=1,a=i);++Ip){var I=a;a=p,p=I}if(E||a%1||p%1){var B=Ai();return kn(a+B*(p-a+Bs("1e-"+((B+"").length-1))),p)}return Ga(a,p)}var __=yf(function(a,p,E){return p=p.toLowerCase(),a+(E?Wp(p):p)});function Wp(a){return L1(yr(a).toLowerCase())}function Hp(a){return a=yr(a),a&&a.replace(_n,du).replace(V0,"")}function y_(a,p,E){a=yr(a),p=ho(p);var I=a.length;E=E===i?I:mi(jn(E),0,I);var B=E;return E-=p.length,E>=0&&a.slice(E,B)==p}function M1(a){return a=yr(a),a&&Ac.test(a)?a.replace(Ui,Yu):a}function w_(a){return a=yr(a),a&&Fr.test(a)?a.replace(kr,"\\$&"):a}var D_=yf(function(a,p,E){return a+(E?"-":"")+p.toLowerCase()}),bp=yf(function(a,p,E){return a+(E?" ":"")+p.toLowerCase()}),E_=Fd("toLowerCase");function S_(a,p,E){a=yr(a),p=jn(p);var I=p?Rr(a):0;if(!p||I>=p)return a;var B=(p-I)/2;return Hc(hu(B),E)+a+Hc(B0(B),E)}function C_(a,p,E){a=yr(a),p=jn(p);var I=p?Rr(a):0;return p&&I>>0,E?(a=yr(a),a&&(typeof p=="string"||p!=null&&!ra(p))&&(p=ho(p),!p&&Hi(a))?Vs(Jn(a),0,E):a.split(p,E)):[]}var I_=yf(function(a,p,E){return a+(E?" ":"")+L1(p)});function P_(a,p,E){return a=yr(a),E=E==null?0:mi(jn(E),0,a.length),p=ho(p),a.slice(E,E+p.length)==p}function M_(a,p,E){var I=z.templateSettings;E&&Ii(a,p,E)&&(p=i),a=yr(a),p=ua({},p,I,n1);var B=ua({},p.imports,I.imports,n1),G=q0(B),te=Eo(B,G),se,Ee,$e=0,Ke=p.interpolate||Nu,nt="__p += '",Ct=X0((p.escape||Nu).source+"|"+Ke.source+"|"+(Ke===xs?As:Nu).source+"|"+(p.evaluate||Nu).source+"|$","g"),Gt="//# sourceURL="+(or.call(p,"sourceURL")?(p.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++lf+"]")+` -`;a.replace(Ct,function(dn,Yn,er,vo,Pi,Mi){return er||(er=vo),nt+=a.slice($e,Mi).replace(Wo,Us),Yn&&(se=!0,nt+=`' + -__e(`+Yn+`) + -'`),Pi&&(Ee=!0,nt+=`'; -`+Pi+`; -__p += '`),er&&(nt+=`' + -((__t = (`+er+`)) == null ? '' : __t) + -'`),$e=Mi+dn.length,dn}),nt+=`'; -`;var an=or.call(p,"variable")&&p.variable;if(!an)nt=`with (obj) { -`+nt+` -} -`;else if(Ru.test(an))throw new mt(t);nt=(Ee?nt.replace(ll,""):nt).replace(fl,"$1").replace(cl,"$1;"),nt="function("+(an||"obj")+`) { -`+(an?"":`obj || (obj = {}); -`)+"var __t, __p = ''"+(se?", __e = _.escape":"")+(Ee?`, __j = Array.prototype.join; -function print() { __p += __j.call(arguments, '') } -`:`; -`)+nt+`return __p -}`;var qn=$p(function(){return wn(G,Gt+"return "+nt).apply(i,te)});if(qn.source=nt,k1(qn))throw qn;return qn}function F_(a){return yr(a).toLowerCase()}function L_(a){return yr(a).toUpperCase()}function R_(a,p,E){if(a=yr(a),a&&(E||p===i))return E0(a);if(!a||!(p=ho(p)))return a;var I=Jn(a),B=Jn(p),G=wl(I,B),te=js(I,B)+1;return Vs(I,G,te).join("")}function F1(a,p,E){if(a=yr(a),a&&(E||p===i))return a.slice(0,ai(a)+1);if(!a||!(p=ho(p)))return a;var I=Jn(a),B=js(I,Jn(p))+1;return Vs(I,0,B).join("")}function N_(a,p,E){if(a=yr(a),a&&(E||p===i))return a.replace(si,"");if(!a||!(p=ho(p)))return a;var I=Jn(a),B=wl(I,Jn(p));return Vs(I,B).join("")}function B_(a,p){var E=Oe,I=Le;if(Jr(p)){var B="separator"in p?p.separator:B;E="length"in p?jn(p.length):E,I="omission"in p?ho(p.omission):I}a=yr(a);var G=a.length;if(Hi(a)){var te=Jn(a);G=te.length}if(E>=G)return a;var se=E-Rr(I);if(se<1)return I;var Ee=te?Vs(te,0,se).join(""):a.slice(0,se);if(B===i)return Ee+I;if(te&&(se+=Ee.length-se),ra(B)){if(a.slice(se).search(B)){var $e,Ke=Ee;for(B.global||(B=X0(B.source,yr(uu.exec(B))+"g")),B.lastIndex=0;$e=B.exec(Ke);)var nt=$e.index;Ee=Ee.slice(0,nt===i?se:nt)}}else if(a.indexOf(ho(B),se)!=se){var Ct=Ee.lastIndexOf(B);Ct>-1&&(Ee=Ee.slice(0,Ct))}return Ee+I}function Vp(a){return a=yr(a),a&&Mr.test(a)?a.replace(al,o0):a}var j_=yf(function(a,p,E){return a+(E?" ":"")+p.toUpperCase()}),L1=Fd("toUpperCase");function Yp(a,p,E){return a=yr(a),p=E?i:p,p===i?qs(a)?cf(a):d0(a):a.match(p)||[]}var $p=Wn(function(a,p){try{return K(a,i,p)}catch(E){return k1(E)?E:new mt(E)}}),U_=yu(function(a,p){return je(p,function(E){E=Xo(E),ti(a,E,S1(a[E],a))}),a});function Kp(a){var p=a==null?0:a.length,E=cn();return a=p?lt(a,function(I){if(typeof I[1]!="function")throw new Yr(g);return[E(I[0]),I[1]]}):[],Wn(function(I){for(var B=-1;++BNt)return[];var E=ne,I=kn(a,ne);p=cn(p),a-=ne;for(var B=ci(I,p);++E0||p<0)?new nn(E):(a<0?E=E.takeRight(-a):a&&(E=E.drop(a)),p!==i&&(p=jn(p),E=p<0?E.dropRight(-p):E.take(p-a)),E)},nn.prototype.takeRightWhile=function(a){return this.reverse().takeWhile(a).reverse()},nn.prototype.toArray=function(){return this.take(ne)},S(nn.prototype,function(a,p){var E=/^(?:filter|find|map|reject)|While$/.test(p),I=/^(?:head|last)$/.test(p),B=z[I?"take"+(p=="last"?"Right":""):p],G=I||/^find/.test(p);!B||(z.prototype[p]=function(){var te=this.__wrapped__,se=I?[1]:arguments,Ee=te instanceof nn,$e=se[0],Ke=Ee||On(te),nt=function(Yn){var er=B.apply(z,Rt([Yn],se));return I&&Ct?er[0]:er};Ke&&E&&typeof $e=="function"&&$e.length!=1&&(Ee=Ke=!1);var Ct=this.__chain__,Gt=!!this.__actions__.length,an=G&&!Ct,qn=Ee&&!Gt;if(!G&&Ke){te=qn?te:new nn(this);var dn=a.apply(te,se);return dn.__actions__.push({func:Kc,args:[nt],thisArg:i}),new Qn(dn,Ct)}return an&&qn?a.apply(this,se):(dn=this.thru(nt),an?I?dn.value()[0]:dn.value():dn)})}),je(["pop","push","shift","sort","splice","unshift"],function(a){var p=$r[a],E=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",I=/^(?:pop|shift)$/.test(a);z.prototype[a]=function(){var B=arguments;if(I&&!this.__chain__){var G=this.value();return p.apply(On(G)?G:[],B)}return this[E](function(te){return p.apply(On(te)?te:[],B)})}}),S(nn.prototype,function(a,p){var E=z[p];if(E){var I=E.name+"";or.call(bt,I)||(bt[I]=[]),bt[I].push({name:p,func:E})}}),bt[zc(i,re).name]=[{name:"wrapper",func:i}],nn.prototype.clone=s0,nn.prototype.reverse=t0,nn.prototype.value=g0,z.prototype.at=Wv,z.prototype.chain=Hv,z.prototype.commit=bv,z.prototype.next=Gv,z.prototype.plant=Yv,z.prototype.reverse=Ml,z.prototype.toJSON=z.prototype.valueOf=z.prototype.value=Fl,z.prototype.first=z.prototype.head,u0&&(z.prototype[u0]=Vv),z},K0=$0();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Lr._=K0,define(function(){return K0})):R?((R.exports=K0)._=K0,F._=K0):Lr._=K0}).call(ga)});var ay=Me((XH,cy)=>{"use strict";var fr=cy.exports;cy.exports.default=fr;var Pr="[",t2="]",ya="\x07",vh=";",OD=process.env.TERM_PROGRAM==="Apple_Terminal";fr.cursorTo=(i,u)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");return typeof u!="number"?Pr+(i+1)+"G":Pr+(u+1)+";"+(i+1)+"H"};fr.cursorMove=(i,u)=>{if(typeof i!="number")throw new TypeError("The `x` argument is required");let f="";return i<0?f+=Pr+-i+"D":i>0&&(f+=Pr+i+"C"),u<0?f+=Pr+-u+"A":u>0&&(f+=Pr+u+"B"),f};fr.cursorUp=(i=1)=>Pr+i+"A";fr.cursorDown=(i=1)=>Pr+i+"B";fr.cursorForward=(i=1)=>Pr+i+"C";fr.cursorBackward=(i=1)=>Pr+i+"D";fr.cursorLeft=Pr+"G";fr.cursorSavePosition=OD?"7":Pr+"s";fr.cursorRestorePosition=OD?"8":Pr+"u";fr.cursorGetPosition=Pr+"6n";fr.cursorNextLine=Pr+"E";fr.cursorPrevLine=Pr+"F";fr.cursorHide=Pr+"?25l";fr.cursorShow=Pr+"?25h";fr.eraseLines=i=>{let u="";for(let f=0;f[t2,"8",vh,vh,u,ya,i,t2,"8",vh,vh,ya].join("");fr.image=(i,u={})=>{let f=`${t2}1337;File=inline=1`;return u.width&&(f+=`;width=${u.width}`),u.height&&(f+=`;height=${u.height}`),u.preserveAspectRatio===!1&&(f+=";preserveAspectRatio=0"),f+":"+i.toString("base64")+ya};fr.iTerm={setCwd:(i=process.cwd())=>`${t2}50;CurrentDir=${i}${ya}`,annotation:(i,u={})=>{let f=`${t2}1337;`,c=typeof u.x!="undefined",g=typeof u.y!="undefined";if((c||g)&&!(c&&g&&typeof u.length!="undefined"))throw new Error("`x`, `y` and `length` must be defined when `x` or `y` is defined");return i=i.replace(/\|/g,""),f+=u.isHidden?"AddHiddenAnnotation=":"AddAnnotation=",u.length>0?f+=(c?[i,u.length,u.x,u.y]:[u.length,i]).join("|"):f+=i,f+ya}}});var PD=Me((JH,dy)=>{"use strict";var ID=(i,u)=>{for(let f of Reflect.ownKeys(u))Object.defineProperty(i,f,Object.getOwnPropertyDescriptor(u,f));return i};dy.exports=ID;dy.exports.default=ID});var FD=Me((QH,gh)=>{"use strict";var oN=PD(),_h=new WeakMap,MD=(i,u={})=>{if(typeof i!="function")throw new TypeError("Expected a function");let f,c=!1,g=0,t=i.displayName||i.name||"",C=function(...A){if(_h.set(C,++g),c){if(u.throw===!0)throw new Error(`Function \`${t}\` can only be called once`);return f}return c=!0,f=i.apply(this,A),i=null,f};return oN(C,i),_h.set(C,g),C};gh.exports=MD;gh.exports.default=MD;gh.exports.callCount=i=>{if(!_h.has(i))throw new Error(`The given function \`${i.name}\` is not wrapped by the \`onetime\` package`);return _h.get(i)}});var LD=Me((ZH,yh)=>{yh.exports=["SIGABRT","SIGALRM","SIGHUP","SIGINT","SIGTERM"];process.platform!=="win32"&&yh.exports.push("SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT");process.platform==="linux"&&yh.exports.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT","SIGUNUSED")});var vy=Me((eb,n2)=>{var uN=require("assert"),r2=LD(),sN=/^win/i.test(process.platform),wh=require("events");typeof wh!="function"&&(wh=wh.EventEmitter);var Bi;process.__signal_exit_emitter__?Bi=process.__signal_exit_emitter__:(Bi=process.__signal_exit_emitter__=new wh,Bi.count=0,Bi.emitted={});Bi.infinite||(Bi.setMaxListeners(Infinity),Bi.infinite=!0);n2.exports=function(i,u){uN.equal(typeof i,"function","a callback must be provided for exit handler"),i2===!1&&RD();var f="exit";u&&u.alwaysLast&&(f="afterexit");var c=function(){Bi.removeListener(f,i),Bi.listeners("exit").length===0&&Bi.listeners("afterexit").length===0&&py()};return Bi.on(f,i),c};n2.exports.unload=py;function py(){!i2||(i2=!1,r2.forEach(function(i){try{process.removeListener(i,hy[i])}catch(u){}}),process.emit=my,process.reallyExit=ND,Bi.count-=1)}function wa(i,u,f){Bi.emitted[i]||(Bi.emitted[i]=!0,Bi.emit(i,u,f))}var hy={};r2.forEach(function(i){hy[i]=function(){var f=process.listeners(i);f.length===Bi.count&&(py(),wa("exit",null,i),wa("afterexit",null,i),sN&&i==="SIGHUP"&&(i="SIGINT"),process.kill(process.pid,i))}});n2.exports.signals=function(){return r2};n2.exports.load=RD;var i2=!1;function RD(){i2||(i2=!0,Bi.count+=1,r2=r2.filter(function(i){try{return process.on(i,hy[i]),!0}catch(u){return!1}}),process.emit=fN,process.reallyExit=lN)}var ND=process.reallyExit;function lN(i){process.exitCode=i||0,wa("exit",process.exitCode,null),wa("afterexit",process.exitCode,null),ND.call(process,process.exitCode)}var my=process.emit;function fN(i,u){if(i==="exit"){u!==void 0&&(process.exitCode=u);var f=my.apply(this,arguments);return wa("exit",process.exitCode,null),wa("afterexit",process.exitCode,null),f}else return my.apply(this,arguments)}});var jD=Me((tb,BD)=>{"use strict";var cN=FD(),aN=vy();BD.exports=cN(()=>{aN(()=>{process.stderr.write("[?25h")},{alwaysLast:!0})})});var gy=Me(Da=>{"use strict";var dN=jD(),Dh=!1;Da.show=(i=process.stderr)=>{!i.isTTY||(Dh=!1,i.write("[?25h"))};Da.hide=(i=process.stderr)=>{!i.isTTY||(dN(),Dh=!0,i.write("[?25l"))};Da.toggle=(i,u)=>{i!==void 0&&(Dh=i),Dh?Da.show(u):Da.hide(u)}});var WD=Me(o2=>{"use strict";var UD=o2&&o2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(o2,"__esModule",{value:!0});var qD=UD(ay()),zD=UD(gy()),pN=(i,{showCursor:u=!1}={})=>{let f=0,c="",g=!1,t=C=>{!u&&!g&&(zD.default.hide(),g=!0);let A=C+` -`;A!==c&&(c=A,i.write(qD.default.eraseLines(f)+A),f=A.split(` -`).length)};return t.clear=()=>{i.write(qD.default.eraseLines(f)),c="",f=0},t.done=()=>{c="",f=0,u||(zD.default.show(),g=!1)},t};o2.default={create:pN}});var bD=Me((ib,HD)=>{HD.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY_BUILD_BASE",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}}]});var YD=Me(ru=>{"use strict";var GD=bD(),nl=process.env;Object.defineProperty(ru,"_vendors",{value:GD.map(function(i){return i.constant})});ru.name=null;ru.isPR=null;GD.forEach(function(i){var u=Array.isArray(i.env)?i.env:[i.env],f=u.every(function(c){return VD(c)});if(ru[i.constant]=f,f)switch(ru.name=i.name,typeof i.pr){case"string":ru.isPR=!!nl[i.pr];break;case"object":"env"in i.pr?ru.isPR=i.pr.env in nl&&nl[i.pr.env]!==i.pr.ne:"any"in i.pr?ru.isPR=i.pr.any.some(function(c){return!!nl[c]}):ru.isPR=VD(i.pr);break;default:ru.isPR=null}});ru.isCI=!!(nl.CI||nl.CONTINUOUS_INTEGRATION||nl.BUILD_NUMBER||nl.RUN_ID||ru.name);function VD(i){return typeof i=="string"?!!nl[i]:Object.keys(i).every(function(u){return nl[u]===i[u]})}});var KD=Me((ub,$D)=>{"use strict";$D.exports=YD().isCI});var JD=Me((sb,XD)=>{"use strict";var hN=i=>{let u=new Set;do for(let f of Reflect.ownKeys(i))u.add([i,f]);while((i=Reflect.getPrototypeOf(i))&&i!==Object.prototype);return u};XD.exports=(i,{include:u,exclude:f}={})=>{let c=g=>{let t=C=>typeof C=="string"?g===C:C.test(g);return u?u.some(t):f?!f.some(t):!0};for(let[g,t]of hN(i.constructor.prototype)){if(t==="constructor"||!c(t))continue;let C=Reflect.getOwnPropertyDescriptor(g,t);C&&typeof C.value=="function"&&(i[t]=i[t].bind(i))}return i}});var iE=Me(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});var Ea,u2,Eh,Sh,_y;typeof window=="undefined"||typeof MessageChannel!="function"?(Sa=null,yy=null,wy=function(){if(Sa!==null)try{var i=Sr.unstable_now();Sa(!0,i),Sa=null}catch(u){throw setTimeout(wy,0),u}},QD=Date.now(),Sr.unstable_now=function(){return Date.now()-QD},Ea=function(i){Sa!==null?setTimeout(Ea,0,i):(Sa=i,setTimeout(wy,0))},u2=function(i,u){yy=setTimeout(i,u)},Eh=function(){clearTimeout(yy)},Sh=function(){return!1},_y=Sr.unstable_forceFrameRate=function(){}):(Ch=window.performance,Dy=window.Date,ZD=window.setTimeout,eE=window.clearTimeout,typeof console!="undefined"&&(tE=window.cancelAnimationFrame,typeof window.requestAnimationFrame!="function"&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills"),typeof tE!="function"&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills")),typeof Ch=="object"&&typeof Ch.now=="function"?Sr.unstable_now=function(){return Ch.now()}:(nE=Dy.now(),Sr.unstable_now=function(){return Dy.now()-nE}),s2=!1,l2=null,Th=-1,Ey=5,Sy=0,Sh=function(){return Sr.unstable_now()>=Sy},_y=function(){},Sr.unstable_forceFrameRate=function(i){0>i||125kh(C,f))x!==void 0&&0>kh(x,C)?(i[c]=x,i[A]=f,c=A):(i[c]=C,i[t]=f,c=t);else if(x!==void 0&&0>kh(x,f))i[c]=x,i[A]=f,c=A;else break e}}return u}return null}function kh(i,u){var f=i.sortIndex-u.sortIndex;return f!==0?f:i.id-u.id}var ds=[],Nf=[],mN=1,_o=null,to=3,Oh=!1,pc=!1,f2=!1;function Ih(i){for(var u=Iu(Nf);u!==null;){if(u.callback===null)Ah(Nf);else if(u.startTime<=i)Ah(Nf),u.sortIndex=u.expirationTime,Ty(ds,u);else break;u=Iu(Nf)}}function xy(i){if(f2=!1,Ih(i),!pc)if(Iu(ds)!==null)pc=!0,Ea(ky);else{var u=Iu(Nf);u!==null&&u2(xy,u.startTime-i)}}function ky(i,u){pc=!1,f2&&(f2=!1,Eh()),Oh=!0;var f=to;try{for(Ih(u),_o=Iu(ds);_o!==null&&(!(_o.expirationTime>u)||i&&!Sh());){var c=_o.callback;if(c!==null){_o.callback=null,to=_o.priorityLevel;var g=c(_o.expirationTime<=u);u=Sr.unstable_now(),typeof g=="function"?_o.callback=g:_o===Iu(ds)&&Ah(ds),Ih(u)}else Ah(ds);_o=Iu(ds)}if(_o!==null)var t=!0;else{var C=Iu(Nf);C!==null&&u2(xy,C.startTime-u),t=!1}return t}finally{_o=null,to=f,Oh=!1}}function rE(i){switch(i){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1e4;default:return 5e3}}var vN=_y;Sr.unstable_ImmediatePriority=1;Sr.unstable_UserBlockingPriority=2;Sr.unstable_NormalPriority=3;Sr.unstable_IdlePriority=5;Sr.unstable_LowPriority=4;Sr.unstable_runWithPriority=function(i,u){switch(i){case 1:case 2:case 3:case 4:case 5:break;default:i=3}var f=to;to=i;try{return u()}finally{to=f}};Sr.unstable_next=function(i){switch(to){case 1:case 2:case 3:var u=3;break;default:u=to}var f=to;to=u;try{return i()}finally{to=f}};Sr.unstable_scheduleCallback=function(i,u,f){var c=Sr.unstable_now();if(typeof f=="object"&&f!==null){var g=f.delay;g=typeof g=="number"&&0c?(i.sortIndex=g,Ty(Nf,i),Iu(ds)===null&&i===Iu(Nf)&&(f2?Eh():f2=!0,u2(xy,g-c))):(i.sortIndex=f,Ty(ds,i),pc||Oh||(pc=!0,Ea(ky))),i};Sr.unstable_cancelCallback=function(i){i.callback=null};Sr.unstable_wrapCallback=function(i){var u=to;return function(){var f=to;to=u;try{return i.apply(this,arguments)}finally{to=f}}};Sr.unstable_getCurrentPriorityLevel=function(){return to};Sr.unstable_shouldYield=function(){var i=Sr.unstable_now();Ih(i);var u=Iu(ds);return u!==_o&&_o!==null&&u!==null&&u.callback!==null&&u.startTime<=i&&u.expirationTime<_o.expirationTime||Sh()};Sr.unstable_requestPaint=vN;Sr.unstable_continueExecution=function(){pc||Oh||(pc=!0,Ea(ky))};Sr.unstable_pauseExecution=function(){};Sr.unstable_getFirstCallbackNode=function(){return Iu(ds)};Sr.unstable_Profiling=null});var Ay=Me((fb,oE)=>{"use strict";oE.exports=iE()});var uE=Me((cb,c2)=>{c2.exports=function i(u){"use strict";var f=ey(),c=lr(),g=Ay();function t(v){for(var m="https://reactjs.org/docs/error-decoder.html?invariant="+v,S=1;Sqo||(v.current=qi[qo],qi[qo]=null,qo--)}function Fr(v,m){qo++,qi[qo]=v.current,v.current=m}var si={},H0={current:si},b0={current:!1},Bt=si;function Lu(v,m){var S=v.type.contextTypes;if(!S)return si;var O=v.stateNode;if(O&&O.__reactInternalMemoizedUnmaskedChildContext===m)return O.__reactInternalMemoizedMaskedChildContext;var M={},b;for(b in S)M[b]=m[b];return O&&(v=v.stateNode,v.__reactInternalMemoizedUnmaskedChildContext=m,v.__reactInternalMemoizedMaskedChildContext=M),M}function c0(v){return v=v.childContextTypes,v!=null}function Ru(v){kr(b0,v),kr(H0,v)}function ks(v){kr(b0,v),kr(H0,v)}function As(v,m,S){if(H0.current!==si)throw Error(t(168));Fr(H0,m,v),Fr(b0,S,v)}function uu(v,m,S){var O=v.stateNode;if(v=m.childContextTypes,typeof O.getChildContext!="function")return S;O=O.getChildContext();for(var M in O)if(!(M in v))throw Error(t(108,Oe(m)||"Unknown",M));return f({},S,{},O)}function wo(v){var m=v.stateNode;return m=m&&m.__reactInternalMemoizedMergedChildContext||si,Bt=H0.current,Fr(H0,m,v),Fr(b0,b0.current,v),!0}function zo(v,m,S){var O=v.stateNode;if(!O)throw Error(t(169));S?(m=uu(v,m,Bt),O.__reactInternalMemoizedMergedChildContext=m,kr(b0,v),kr(H0,v),Fr(H0,m,v)):kr(b0,v),Fr(b0,S,v)}var Os=g.unstable_runWithPriority,Is=g.unstable_scheduleCallback,uf=g.unstable_cancelCallback,_n=g.unstable_shouldYield,Nu=g.unstable_requestPaint,Wo=g.unstable_now,su=g.unstable_getCurrentPriorityLevel,Ps=g.unstable_ImmediatePriority,pl=g.unstable_UserBlockingPriority,Vf=g.unstable_NormalPriority,hl=g.unstable_LowPriority,Bu=g.unstable_IdlePriority,ju={},sf=Nu!==void 0?Nu:function(){},ro=null,Ms=null,ml=!1,Uu=Wo(),G0=1e4>Uu?Wo:function(){return Wo()-Uu};function Fs(){switch(su()){case Ps:return 99;case pl:return 98;case Vf:return 97;case hl:return 96;case Bu:return 95;default:throw Error(t(332))}}function tt(v){switch(v){case 99:return Ps;case 98:return pl;case 97:return Vf;case 96:return hl;case 95:return Bu;default:throw Error(t(332))}}function zi(v,m){return v=tt(v),Os(v,m)}function lu(v,m,S){return v=tt(v),Is(v,m,S)}function Ho(v){return ro===null?(ro=[v],Ms=Is(Ps,vl)):ro.push(v),ju}function O0(){if(Ms!==null){var v=Ms;Ms=null,uf(v)}vl()}function vl(){if(!ml&&ro!==null){ml=!0;var v=0;try{var m=ro;zi(99,function(){for(;v=m&&(ai=!0),v.firstContext=null)}function D0(v,m){if(zu!==v&&m!==!1&&m!==0)if((typeof m!="number"||m===1073741823)&&(zu=v,m=1073741823),m={context:v,observedBits:m,next:null},Wi===null){if(qu===null)throw Error(t(308));Wi=m,qu.dependencies={expirationTime:0,firstContext:m,responders:null}}else Wi=Wi.next=m;return Jt?v._currentValue:v._currentValue2}var Do=!1;function i0(v){return{baseState:v,firstUpdate:null,lastUpdate:null,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function Rs(v){return{baseState:v.baseState,firstUpdate:v.firstUpdate,lastUpdate:v.lastUpdate,firstCapturedUpdate:null,lastCapturedUpdate:null,firstEffect:null,lastEffect:null,firstCapturedEffect:null,lastCapturedEffect:null}}function a0(v,m){return{expirationTime:v,suspenseConfig:m,tag:0,payload:null,callback:null,next:null,nextEffect:null}}function Hu(v,m){v.lastUpdate===null?v.firstUpdate=v.lastUpdate=m:(v.lastUpdate.next=m,v.lastUpdate=m)}function V0(v,m){var S=v.alternate;if(S===null){var O=v.updateQueue,M=null;O===null&&(O=v.updateQueue=i0(v.memoizedState))}else O=v.updateQueue,M=S.updateQueue,O===null?M===null?(O=v.updateQueue=i0(v.memoizedState),M=S.updateQueue=i0(S.memoizedState)):O=v.updateQueue=Rs(M):M===null&&(M=S.updateQueue=Rs(O));M===null||O===M?Hu(O,m):O.lastUpdate===null||M.lastUpdate===null?(Hu(O,m),Hu(M,m)):(Hu(O,m),M.lastUpdate=m)}function bu(v,m){var S=v.updateQueue;S=S===null?v.updateQueue=i0(v.memoizedState):Ns(v,S),S.lastCapturedUpdate===null?S.firstCapturedUpdate=S.lastCapturedUpdate=m:(S.lastCapturedUpdate.next=m,S.lastCapturedUpdate=m)}function Ns(v,m){var S=v.alternate;return S!==null&&m===S.updateQueue&&(m=v.updateQueue=Rs(m)),m}function bo(v,m,S,O,M,b){switch(S.tag){case 1:return v=S.payload,typeof v=="function"?v.call(b,O,M):v;case 3:v.effectTag=v.effectTag&-4097|64;case 0:if(v=S.payload,M=typeof v=="function"?v.call(b,O,M):v,M==null)break;return f({},O,M);case 2:Do=!0}return O}function P0(v,m,S,O,M){Do=!1,m=Ns(v,m);for(var b=m.baseState,ee=null,Ye=0,Ze=m.firstUpdate,ut=b;Ze!==null;){var In=Ze.expirationTime;Inpr?(Hr=mn,mn=null):Hr=mn.sibling;var Vn=jr(Re,mn,ze[pr],Et);if(Vn===null){mn===null&&(mn=Hr);break}v&&mn&&Vn.alternate===null&&m(Re,mn),Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn,mn=Hr}if(pr===ze.length)return S(Re,mn),on;if(mn===null){for(;prpr?(Hr=mn,mn=null):Hr=mn.sibling;var ni=jr(Re,mn,Vn.value,Et);if(ni===null){mn===null&&(mn=Hr);break}v&&mn&&ni.alternate===null&&m(Re,mn),Ce=b(ni,Ce,pr),sr===null?on=ni:sr.sibling=ni,sr=ni,mn=Hr}if(Vn.done)return S(Re,mn),on;if(mn===null){for(;!Vn.done;pr++,Vn=ze.next())Vn=A0(Re,Vn.value,Et),Vn!==null&&(Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn);return on}for(mn=O(Re,mn);!Vn.done;pr++,Vn=ze.next())Vn=gi(mn,Re,pr,Vn.value,Et),Vn!==null&&(v&&Vn.alternate!==null&&mn.delete(Vn.key===null?pr:Vn.key),Ce=b(Vn,Ce,pr),sr===null?on=Vn:sr.sibling=Vn,sr=Vn);return v&&mn.forEach(function(Zf){return m(Re,Zf)}),on}return function(Re,Ce,ze,Et){var on=typeof ze=="object"&&ze!==null&&ze.type===L&&ze.key===null;on&&(ze=ze.props.children);var sr=typeof ze=="object"&&ze!==null;if(sr)switch(ze.$$typeof){case x:e:{for(sr=ze.key,on=Ce;on!==null;){if(on.key===sr)if(on.tag===7?ze.type===L:on.elementType===ze.type){S(Re,on.sibling),Ce=M(on,ze.type===L?ze.props.children:ze.props,Et),Ce.ref=au(Re,on,ze),Ce.return=Re,Re=Ce;break e}else{S(Re,on);break}else m(Re,on);on=on.sibling}ze.type===L?(Ce=mi(ze.props.children,Re.mode,Et,ze.key),Ce.return=Re,Re=Ce):(Et=Hs(ze.type,ze.key,ze.props,null,Re.mode,Et),Et.ref=au(Re,Ce,ze),Et.return=Re,Re=Et)}return ee(Re);case D:e:{for(on=ze.key;Ce!==null;){if(Ce.key===on)if(Ce.tag===4&&Ce.stateNode.containerInfo===ze.containerInfo&&Ce.stateNode.implementation===ze.implementation){S(Re,Ce.sibling),Ce=M(Ce,ze.children||[],Et),Ce.return=Re,Re=Ce;break e}else{S(Re,Ce);break}else m(Re,Ce);Ce=Ce.sibling}Ce=Xf(ze,Re.mode,Et),Ce.return=Re,Re=Ce}return ee(Re)}if(typeof ze=="string"||typeof ze=="number")return ze=""+ze,Ce!==null&&Ce.tag===6?(S(Re,Ce.sibling),Ce=M(Ce,ze,Et),Ce.return=Re,Re=Ce):(S(Re,Ce),Ce=vi(ze,Re.mode,Et),Ce.return=Re,Re=Ce),ee(Re);if(M0(ze))return po(Re,Ce,ze,Et);if(J(ze))return _i(Re,Ce,ze,Et);if(sr&&Lr(Re,ze),typeof ze=="undefined"&&!on)switch(Re.tag){case 1:case 0:throw Re=Re.type,Error(t(152,Re.displayName||Re.name||"Component"))}return S(Re,Ce)}}var R=F(!0),U=F(!1),H={},fe={current:H},ue={current:H},de={current:H};function W(v){if(v===H)throw Error(t(174));return v}function ve(v,m){Fr(de,m,v),Fr(ue,v,v),Fr(fe,H,v),m=Ot(m),kr(fe,v),Fr(fe,m,v)}function Fe(v){kr(fe,v),kr(ue,v),kr(de,v)}function Ge(v){var m=W(de.current),S=W(fe.current);m=Nt(S,v.type,m),S!==m&&(Fr(ue,v,v),Fr(fe,m,v))}function K(v){ue.current===v&&(kr(fe,v),kr(ue,v))}var xe={current:0};function je(v){for(var m=v;m!==null;){if(m.tag===13){var S=m.memoizedState;if(S!==null&&(S=S.dehydrated,S===null||ll(S)||fl(S)))return m}else if(m.tag===19&&m.memoizedProps.revealOrder!==void 0){if((m.effectTag&64)!=0)return m}else if(m.child!==null){m.child.return=m,m=m.child;continue}if(m===v)break;for(;m.sibling===null;){if(m.return===null||m.return===v)return null;m=m.return}m.sibling.return=m.return,m=m.sibling}return null}function Xe(v,m){return{responder:v,props:m}}var rt=C.ReactCurrentDispatcher,st=C.ReactCurrentBatchConfig,xt=0,wt=null,lt=null,Rt=null,yn=null,sn=null,ar=null,rn=0,Hn=null,d0=0,Cr=!1,He=null,Qe=0;function Ne(){throw Error(t(321))}function ft(v,m){if(m===null)return!1;for(var S=0;Srn&&(rn=In,pf(rn))):(Yf(In,Ze.suspenseConfig),b=Ze.eagerReducer===v?Ze.eagerState:v(b,Ze.action)),ee=Ze,Ze=Ze.next}while(Ze!==null&&Ze!==O);ut||(Ye=ee,M=b),Sn(b,m.memoizedState)||(ai=!0),m.memoizedState=b,m.baseUpdate=Ye,m.baseState=M,S.lastRenderedState=b}return[m.memoizedState,S.dispatch]}function ci(v){var m=Cn();return typeof v=="function"&&(v=v()),m.memoizedState=m.baseState=v,v=m.queue={last:null,dispatch:null,lastRenderedReducer:p0,lastRenderedState:v},v=v.dispatch=Us.bind(null,wt,v),[m.memoizedState,v]}function xi(v){return h0(p0,v)}function E0(v,m,S,O){return v={tag:v,create:m,destroy:S,deps:O,next:null},Hn===null?(Hn={lastEffect:null},Hn.lastEffect=v.next=v):(m=Hn.lastEffect,m===null?Hn.lastEffect=v.next=v:(S=m.next,m.next=v,v.next=S,Hn.lastEffect=v)),v}function qr(v,m,S,O){var M=Cn();d0|=v,M.memoizedState=E0(m,S,void 0,O===void 0?null:O)}function Eo(v,m,S,O){var M=bn();O=O===void 0?null:O;var b=void 0;if(lt!==null){var ee=lt.memoizedState;if(b=ee.destroy,O!==null&&ft(O,ee.deps)){E0(0,S,b,O);return}}d0|=v,M.memoizedState=E0(m,S,b,O)}function So(v,m){return qr(516,192,v,m)}function wl(v,m){return Eo(516,192,v,m)}function js(v,m){if(typeof m=="function")return v=v(),m(v),function(){m(null)};if(m!=null)return v=v(),m.current=v,function(){m.current=null}}function Dl(){}function du(v,m){return Cn().memoizedState=[v,m===void 0?null:m],v}function Yu(v,m){var S=bn();m=m===void 0?null:m;var O=S.memoizedState;return O!==null&&m!==null&&ft(m,O[1])?O[0]:(S.memoizedState=[v,m],v)}function Us(v,m,S){if(!(25>Qe))throw Error(t(301));var O=v.alternate;if(v===wt||O!==null&&O===wt)if(Cr=!0,v={expirationTime:xt,suspenseConfig:null,action:S,eagerReducer:null,eagerState:null,next:null},He===null&&(He=new Map),S=He.get(m),S===void 0)He.set(m,v);else{for(m=S;m.next!==null;)m=m.next;m.next=v}else{var M=g0(),b=nr.suspense;M=Kr(M,v,b),b={expirationTime:M,suspenseConfig:b,action:S,eagerReducer:null,eagerState:null,next:null};var ee=m.last;if(ee===null)b.next=b;else{var Ye=ee.next;Ye!==null&&(b.next=Ye),ee.next=b}if(m.last=b,v.expirationTime===0&&(O===null||O.expirationTime===0)&&(O=m.lastRenderedReducer,O!==null))try{var Ze=m.lastRenderedState,ut=O(Ze,S);if(b.eagerReducer=O,b.eagerState=ut,Sn(ut,Ze))return}catch(In){}finally{}_0(v,M)}}var oo={readContext:D0,useCallback:Ne,useContext:Ne,useEffect:Ne,useImperativeHandle:Ne,useLayoutEffect:Ne,useMemo:Ne,useReducer:Ne,useRef:Ne,useState:Ne,useDebugValue:Ne,useResponder:Ne,useDeferredValue:Ne,useTransition:Ne},Hi={readContext:D0,useCallback:du,useContext:D0,useEffect:So,useImperativeHandle:function(v,m,S){return S=S!=null?S.concat([v]):null,qr(4,36,js.bind(null,m,v),S)},useLayoutEffect:function(v,m){return qr(4,36,v,m)},useMemo:function(v,m){var S=Cn();return m=m===void 0?null:m,v=v(),S.memoizedState=[v,m],v},useReducer:function(v,m,S){var O=Cn();return m=S!==void 0?S(m):m,O.memoizedState=O.baseState=m,v=O.queue={last:null,dispatch:null,lastRenderedReducer:v,lastRenderedState:m},v=v.dispatch=Us.bind(null,wt,v),[O.memoizedState,v]},useRef:function(v){var m=Cn();return v={current:v},m.memoizedState=v},useState:ci,useDebugValue:Dl,useResponder:Xe,useDeferredValue:function(v,m){var S=ci(v),O=S[0],M=S[1];return So(function(){g.unstable_next(function(){var b=st.suspense;st.suspense=m===void 0?null:m;try{M(v)}finally{st.suspense=b}})},[v,m]),O},useTransition:function(v){var m=ci(!1),S=m[0],O=m[1];return[du(function(M){O(!0),g.unstable_next(function(){var b=st.suspense;st.suspense=v===void 0?null:v;try{O(!1),M()}finally{st.suspense=b}})},[v,S]),S]}},qs={readContext:D0,useCallback:Yu,useContext:D0,useEffect:wl,useImperativeHandle:function(v,m,S){return S=S!=null?S.concat([v]):null,Eo(4,36,js.bind(null,m,v),S)},useLayoutEffect:function(v,m){return Eo(4,36,v,m)},useMemo:function(v,m){var S=bn();m=m===void 0?null:m;var O=S.memoizedState;return O!==null&&m!==null&&ft(m,O[1])?O[0]:(v=v(),S.memoizedState=[v,m],v)},useReducer:h0,useRef:function(){return bn().memoizedState},useState:xi,useDebugValue:Dl,useResponder:Xe,useDeferredValue:function(v,m){var S=xi(v),O=S[0],M=S[1];return wl(function(){g.unstable_next(function(){var b=st.suspense;st.suspense=m===void 0?null:m;try{M(v)}finally{st.suspense=b}})},[v,m]),O},useTransition:function(v){var m=xi(!1),S=m[0],O=m[1];return[Yu(function(M){O(!0),g.unstable_next(function(){var b=st.suspense;st.suspense=v===void 0?null:v;try{O(!1),M()}finally{st.suspense=b}})},[v,S]),S]}},F0=null,Gr=null,ir=!1;function L0(v,m){var S=xo(5,null,null,0);S.elementType="DELETED",S.type="DELETED",S.stateNode=m,S.return=v,S.effectTag=8,v.lastEffect!==null?(v.lastEffect.nextEffect=S,v.lastEffect=S):v.firstEffect=v.lastEffect=S}function Y0(v,m){switch(v.tag){case 5:return m=Ti(m,v.type,v.pendingProps),m!==null?(v.stateNode=m,!0):!1;case 6:return m=Fu(m,v.pendingProps),m!==null?(v.stateNode=m,!0):!1;case 13:return!1;default:return!1}}function Co(v){if(ir){var m=Gr;if(m){var S=m;if(!Y0(v,m)){if(m=cl(S),!m||!Y0(v,m)){v.effectTag=v.effectTag&-1025|2,ir=!1,F0=v;return}L0(F0,S)}F0=v,Gr=al(m)}else v.effectTag=v.effectTag&-1025|2,ir=!1,F0=v}}function $u(v){for(v=v.return;v!==null&&v.tag!==5&&v.tag!==3&&v.tag!==13;)v=v.return;F0=v}function Vo(v){if(!w||v!==F0)return!1;if(!ir)return $u(v),ir=!0,!1;var m=v.type;if(v.tag!==5||m!=="head"&&m!=="body"&&!at(m,v.memoizedProps))for(m=Gr;m;)L0(v,m),m=cl(m);if($u(v),v.tag===13){if(!w)throw Error(t(316));if(v=v.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(t(317));Gr=Ac(v)}else Gr=F0?cl(v.stateNode):null;return!0}function Rr(){w&&(Gr=F0=null,ir=!1)}var Jn=C.ReactCurrentOwner,ai=!1;function o0(v,m,S,O){m.child=v===null?U(m,null,S,O):R(m,v.child,S,O)}function Vr(v,m,S,O,M){S=S.render;var b=m.ref;return io(m,M),O=St(v,m,S,O,b,M),v!==null&&!ai?(m.updateQueue=v.updateQueue,m.effectTag&=-517,v.expirationTime<=M&&(v.expirationTime=0),X0(v,m,M)):(m.effectTag|=1,o0(v,m,O,M),m.child)}function ff(v,m,S,O,M,b){if(v===null){var ee=S.type;return typeof ee=="function"&&!mf(ee)&&ee.defaultProps===void 0&&S.compare===null&&S.defaultProps===void 0?(m.tag=15,m.type=ee,cf(v,m,ee,O,M,b)):(v=Hs(S.type,null,O,null,m.mode,b),v.ref=m.ref,v.return=m,m.child=v)}return ee=v.child,Mm)&&Qn.set(v,m)))}}function Gi(v,m){v.expirationTimev?m:v)}function x0(v){if(v.lastExpiredTime!==0)v.callbackExpirationTime=1073741823,v.callbackPriority=99,v.callbackNode=Ho(Z0.bind(null,v));else{var m=fo(v),S=v.callbackNode;if(m===0)S!==null&&(v.callbackNode=null,v.callbackExpirationTime=0,v.callbackPriority=90);else{var O=g0();if(m===1073741823?O=99:m===1||m===2?O=95:(O=10*(1073741821-m)-10*(1073741821-O),O=0>=O?99:250>=O?98:5250>=O?97:95),S!==null){var M=v.callbackPriority;if(v.callbackExpirationTime===m&&M>=O)return;S!==ju&&uf(S)}v.callbackExpirationTime=m,v.callbackPriority=O,m=m===1073741823?Ho(Z0.bind(null,v)):lu(O,Xu.bind(null,v),{timeout:10*(1073741821-m)-G0()}),v.callbackNode=m}}}function Xu(v,m){if(t0=0,m)return m=g0(),kl(v,m),x0(v),null;var S=fo(v);if(S!==0){if(m=v.callbackNode,(Kt&(Br|zr))!==Fn)throw Error(t(327));if(Ws(),v===X&&S===ye||mu(v,S),Y!==null){var O=Kt;Kt|=Br;var M=ei(v);do try{Ua();break}catch(Ye){Ju(v,Ye)}while(1);if(Wu(),Kt=O,B0.current=M,he===wr)throw m=We,mu(v,S),ao(v,S),x0(v),m;if(Y===null)switch(M=v.finishedWork=v.current.alternate,v.finishedExpirationTime=S,O=he,X=null,O){case lo:case wr:throw Error(t(345));case kn:kl(v,2=S){v.lastPingedTime=S,mu(v,S);break}}if(b=fo(v),b!==0&&b!==S)break;if(O!==0&&O!==S){v.lastPingedTime=O;break}v.timeoutHandle=jt(gu.bind(null,v),M);break}gu(v);break;case hi:if(ao(v,S),O=v.lastSuspendedTime,S===O&&(v.nextKnownPendingLevel=$f(M)),qt&&(M=v.lastPingedTime,M===0||M>=S)){v.lastPingedTime=S,mu(v,S);break}if(M=fo(v),M!==0&&M!==S)break;if(O!==0&&O!==S){v.lastPingedTime=O;break}if(Dt!==1073741823?O=10*(1073741821-Dt)-G0():et===1073741823?O=0:(O=10*(1073741821-et)-5e3,M=G0(),S=10*(1073741821-S)-M,O=M-O,0>O&&(O=0),O=(120>O?120:480>O?480:1080>O?1080:1920>O?1920:3e3>O?3e3:4320>O?4320:1960*Cl(O/1960))-O,S=O?O=0:(M=ee.busyDelayMs|0,b=G0()-(10*(1073741821-b)-(ee.timeoutMs|0||5e3)),O=b<=M?0:M+O-b),10 component higher in the tree to provide a loading indicator or placeholder to display.`+dl(M))}he!==Ai&&(he=kn),b=zs(b,M),Ze=O;do{switch(Ze.tag){case 3:ee=b,Ze.effectTag|=4096,Ze.expirationTime=m;var Ce=pu(Ze,ee,m);bu(Ze,Ce);break e;case 1:ee=b;var ze=Ze.type,Et=Ze.stateNode;if((Ze.effectTag&64)==0&&(typeof ze.getDerivedStateFromError=="function"||Et!==null&&typeof Et.componentDidCatch=="function"&&(Ar===null||!Ar.has(Et)))){Ze.effectTag|=4096,Ze.expirationTime=m;var on=Sl(Ze,ee,m);bu(Ze,on);break e}}Ze=Ze.return}while(Ze!==null)}Y=vu(Y)}catch(sr){m=sr;continue}break}while(1)}function ei(){var v=B0.current;return B0.current=oo,v===null?oo:v}function Yf(v,m){vZt&&(Zt=v)}function ja(){for(;Y!==null;)Y=Ic(Y)}function Ua(){for(;Y!==null&&!_n();)Y=Ic(Y)}function Ic(v){var m=Lc(v.alternate,v,ye);return v.memoizedProps=v.pendingProps,m===null&&(m=vu(v)),hu.current=null,m}function vu(v){Y=v;do{var m=Y.alternate;if(v=Y.return,(Y.effectTag&2048)==0){e:{var S=m;m=Y;var O=ye,M=m.pendingProps;switch(m.tag){case 2:break;case 16:break;case 15:case 0:break;case 1:c0(m.type)&&Ru(m);break;case 3:Fe(m),ks(m),M=m.stateNode,M.pendingContext&&(M.context=M.pendingContext,M.pendingContext=null),(S===null||S.child===null)&&Vo(m)&&ki(m),$r(m);break;case 5:K(m);var b=W(de.current);if(O=m.type,S!==null&&m.stateNode!=null)m0(S,m,O,M,b),S.ref!==m.ref&&(m.effectTag|=128);else if(M){if(S=W(fe.current),Vo(m)){if(M=m,!w)throw Error(t(175));S=Ui(M.stateNode,M.type,M.memoizedProps,b,S,M),M.updateQueue=S,S=S!==null,S&&ki(m)}else{var ee=ne(O,M,b,S,m);Yr(ee,m,!1,!1),m.stateNode=ee,Z(ee,O,M,b,S)&&ki(m)}m.ref!==null&&(m.effectTag|=128)}else if(m.stateNode===null)throw Error(t(166));break;case 6:if(S&&m.stateNode!=null)Tn(S,m,S.memoizedProps,M);else{if(typeof M!="string"&&m.stateNode===null)throw Error(t(166));if(S=W(de.current),b=W(fe.current),Vo(m)){if(S=m,!w)throw Error(t(176));(S=Mr(S.stateNode,S.memoizedProps,S))&&ki(m)}else m.stateNode=Ft(M,S,b,m)}break;case 11:break;case 13:if(kr(xe,m),M=m.memoizedState,(m.effectTag&64)!=0){m.expirationTime=O;break e}M=M!==null,b=!1,S===null?m.memoizedProps.fallback!==void 0&&Vo(m):(O=S.memoizedState,b=O!==null,M||O===null||(O=S.child.sibling,O!==null&&(ee=m.firstEffect,ee!==null?(m.firstEffect=O,O.nextEffect=ee):(m.firstEffect=m.lastEffect=O,O.nextEffect=null),O.effectTag=8))),M&&!b&&(m.mode&2)!=0&&(S===null&&m.memoizedProps.unstable_avoidThisFallback!==!0||(xe.current&1)!=0?he===lo&&(he=T0):((he===lo||he===T0)&&(he=hi),Zt!==0&&X!==null&&(ao(X,ye),$o(X,Zt)))),cr&&M&&(m.effectTag|=4),Yt&&(M||b)&&(m.effectTag|=4);break;case 7:break;case 8:break;case 12:break;case 4:Fe(m),$r(m);break;case 10:fi(m);break;case 9:break;case 14:break;case 17:c0(m.type)&&Ru(m);break;case 19:if(kr(xe,m),M=m.memoizedState,M===null)break;if(b=(m.effectTag&64)!=0,ee=M.rendering,ee===null){if(b)bi(M,!1);else if(he!==lo||S!==null&&(S.effectTag&64)!=0)for(S=m.child;S!==null;){if(ee=je(S),ee!==null){for(m.effectTag|=64,bi(M,!1),S=ee.updateQueue,S!==null&&(m.updateQueue=S,m.effectTag|=4),M.lastEffect===null&&(m.firstEffect=null),m.lastEffect=M.lastEffect,S=O,M=m.child;M!==null;)b=M,O=S,b.effectTag&=2,b.nextEffect=null,b.firstEffect=null,b.lastEffect=null,ee=b.alternate,ee===null?(b.childExpirationTime=0,b.expirationTime=O,b.child=null,b.memoizedProps=null,b.memoizedState=null,b.updateQueue=null,b.dependencies=null):(b.childExpirationTime=ee.childExpirationTime,b.expirationTime=ee.expirationTime,b.child=ee.child,b.memoizedProps=ee.memoizedProps,b.memoizedState=ee.memoizedState,b.updateQueue=ee.updateQueue,O=ee.dependencies,b.dependencies=O===null?null:{expirationTime:O.expirationTime,firstContext:O.firstContext,responders:O.responders}),M=M.sibling;Fr(xe,xe.current&1|2,m),m=m.child;break e}S=S.sibling}}else{if(!b)if(S=je(ee),S!==null){if(m.effectTag|=64,b=!0,S=S.updateQueue,S!==null&&(m.updateQueue=S,m.effectTag|=4),bi(M,!0),M.tail===null&&M.tailMode==="hidden"&&!ee.alternate){m=m.lastEffect=M.lastEffect,m!==null&&(m.nextEffect=null);break}}else G0()>M.tailExpiration&&1M&&(M=O),ee>M&&(M=ee),b=b.sibling;S.childExpirationTime=M}if(m!==null)return m;v!==null&&(v.effectTag&2048)==0&&(v.firstEffect===null&&(v.firstEffect=Y.firstEffect),Y.lastEffect!==null&&(v.lastEffect!==null&&(v.lastEffect.nextEffect=Y.firstEffect),v.lastEffect=Y.lastEffect),1v?m:v}function gu(v){var m=Fs();return zi(99,co.bind(null,v,m)),null}function co(v,m){do Ws();while(dr!==null);if((Kt&(Br|zr))!==Fn)throw Error(t(327));var S=v.finishedWork,O=v.finishedExpirationTime;if(S===null)return null;if(v.finishedWork=null,v.finishedExpirationTime=0,S===v.current)throw Error(t(177));v.callbackNode=null,v.callbackExpirationTime=0,v.callbackPriority=90,v.nextKnownPendingLevel=0;var M=$f(S);if(v.firstPendingTime=M,O<=v.lastSuspendedTime?v.firstSuspendedTime=v.lastSuspendedTime=v.nextKnownPendingLevel=0:O<=v.firstSuspendedTime&&(v.firstSuspendedTime=O-1),O<=v.lastPingedTime&&(v.lastPingedTime=0),O<=v.lastExpiredTime&&(v.lastExpiredTime=0),v===X&&(Y=X=null,ye=0),1=S?mt(v,m,S):(Fr(xe,xe.current&1,m),m=X0(v,m,S),m!==null?m.sibling:null);Fr(xe,xe.current&1,m);break;case 19:if(O=m.childExpirationTime>=S,(v.effectTag&64)!=0){if(O)return $t(v,m,S);m.effectTag|=64}if(M=m.memoizedState,M!==null&&(M.rendering=null,M.tail=null),Fr(xe,xe.current,m),!O)return null}return X0(v,m,S)}ai=!1}}else ai=!1;switch(m.expirationTime=0,m.tag){case 2:if(O=m.type,v!==null&&(v.alternate=null,m.alternate=null,m.effectTag|=2),v=m.pendingProps,M=Lu(m,H0.current),io(m,S),M=St(null,m,O,v,M,S),m.effectTag|=1,typeof M=="object"&&M!==null&&typeof M.render=="function"&&M.$$typeof===void 0){if(m.tag=1,Qt(),c0(O)){var b=!0;wo(m)}else b=!1;m.memoizedState=M.state!==null&&M.state!==void 0?M.state:null;var ee=O.getDerivedStateFromProps;typeof ee=="function"&&Go(m,O,ee,v),M.updater=Gu,m.stateNode=M,M._reactInternalFiber=m,Vu(m,O,v,S),m=Be(null,m,O,!0,b,S)}else m.tag=0,o0(null,m,M,S),m=m.child;return m;case 16:if(M=m.elementType,v!==null&&(v.alternate=null,m.alternate=null,m.effectTag|=2),v=m.pendingProps,Te(M),M._status!==1)throw M._result;switch(M=M._result,m.type=M,b=m.tag=Wa(M),v=I0(M,v),b){case 0:m=K0(null,m,M,v,S);break;case 1:m=ae(null,m,M,v,S);break;case 11:m=Vr(null,m,M,v,S);break;case 14:m=ff(null,m,M,I0(M.type,v),O,S);break;default:throw Error(t(306,M,""))}return m;case 0:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),K0(v,m,O,M,S);case 1:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),ae(v,m,O,M,S);case 3:if(Ie(m),O=m.updateQueue,O===null)throw Error(t(282));if(M=m.memoizedState,M=M!==null?M.element:null,P0(m,O,m.pendingProps,null,S),O=m.memoizedState.element,O===M)Rr(),m=X0(v,m,S);else{if((M=m.stateNode.hydrate)&&(w?(Gr=al(m.stateNode.containerInfo),F0=m,M=ir=!0):M=!1),M)for(S=U(m,null,O,S),m.child=S;S;)S.effectTag=S.effectTag&-3|1024,S=S.sibling;else o0(v,m,O,S),Rr();m=m.child}return m;case 5:return Ge(m),v===null&&Co(m),O=m.type,M=m.pendingProps,b=v!==null?v.memoizedProps:null,ee=M.children,at(O,M)?ee=null:b!==null&&at(O,b)&&(m.effectTag|=16),$0(v,m),m.mode&4&&S!==1&&it(O,M)?(m.expirationTime=m.childExpirationTime=1,m=null):(o0(v,m,ee,S),m=m.child),m;case 6:return v===null&&Co(m),null;case 13:return mt(v,m,S);case 4:return ve(m,m.stateNode.containerInfo),O=m.pendingProps,v===null?m.child=R(m,null,O,S):o0(v,m,O,S),m.child;case 11:return O=m.type,M=m.pendingProps,M=m.elementType===O?M:I0(O,M),Vr(v,m,O,M,S);case 7:return o0(v,m,m.pendingProps,S),m.child;case 8:return o0(v,m,m.pendingProps.children,S),m.child;case 12:return o0(v,m,m.pendingProps.children,S),m.child;case 10:e:{if(O=m.type._context,M=m.pendingProps,ee=m.memoizedProps,b=M.value,Ls(m,b),ee!==null){var Ye=ee.value;if(b=Sn(Ye,b)?0:(typeof O._calculateChangedBits=="function"?O._calculateChangedBits(Ye,b):1073741823)|0,b===0){if(ee.children===M.children&&!b0.current){m=X0(v,m,S);break e}}else for(Ye=m.child,Ye!==null&&(Ye.return=m);Ye!==null;){var Ze=Ye.dependencies;if(Ze!==null){ee=Ye.child;for(var ut=Ze.firstContext;ut!==null;){if(ut.context===O&&(ut.observedBits&b)!=0){Ye.tag===1&&(ut=a0(S,null),ut.tag=2,V0(Ye,ut)),Ye.expirationTime=m&&v<=m}function ao(v,m){var S=v.firstSuspendedTime,O=v.lastSuspendedTime;Sm||S===0)&&(v.lastSuspendedTime=m),m<=v.lastPingedTime&&(v.lastPingedTime=0),m<=v.lastExpiredTime&&(v.lastExpiredTime=0)}function $o(v,m){m>v.firstPendingTime&&(v.firstPendingTime=m);var S=v.firstSuspendedTime;S!==0&&(m>=S?v.firstSuspendedTime=v.lastSuspendedTime=v.nextKnownPendingLevel=0:m>=v.lastSuspendedTime&&(v.lastSuspendedTime=m+1),m>v.nextKnownPendingLevel&&(v.nextKnownPendingLevel=m))}function kl(v,m){var S=v.lastExpiredTime;(S===0||S>m)&&(v.lastExpiredTime=m)}function Nc(v){var m=v._reactInternalFiber;if(m===void 0)throw typeof v.render=="function"?Error(t(188)):Error(t(268,Object.keys(v)));return v=Ue(m),v===null?null:v.stateNode}function Al(v,m){v=v.memoizedState,v!==null&&v.dehydrated!==null&&v.retryTime{"use strict";sE.exports=uE()});var cE=Me((db,fE)=>{"use strict";var gN={ALIGN_COUNT:8,ALIGN_AUTO:0,ALIGN_FLEX_START:1,ALIGN_CENTER:2,ALIGN_FLEX_END:3,ALIGN_STRETCH:4,ALIGN_BASELINE:5,ALIGN_SPACE_BETWEEN:6,ALIGN_SPACE_AROUND:7,DIMENSION_COUNT:2,DIMENSION_WIDTH:0,DIMENSION_HEIGHT:1,DIRECTION_COUNT:3,DIRECTION_INHERIT:0,DIRECTION_LTR:1,DIRECTION_RTL:2,DISPLAY_COUNT:2,DISPLAY_FLEX:0,DISPLAY_NONE:1,EDGE_COUNT:9,EDGE_LEFT:0,EDGE_TOP:1,EDGE_RIGHT:2,EDGE_BOTTOM:3,EDGE_START:4,EDGE_END:5,EDGE_HORIZONTAL:6,EDGE_VERTICAL:7,EDGE_ALL:8,EXPERIMENTAL_FEATURE_COUNT:1,EXPERIMENTAL_FEATURE_WEB_FLEX_BASIS:0,FLEX_DIRECTION_COUNT:4,FLEX_DIRECTION_COLUMN:0,FLEX_DIRECTION_COLUMN_REVERSE:1,FLEX_DIRECTION_ROW:2,FLEX_DIRECTION_ROW_REVERSE:3,JUSTIFY_COUNT:6,JUSTIFY_FLEX_START:0,JUSTIFY_CENTER:1,JUSTIFY_FLEX_END:2,JUSTIFY_SPACE_BETWEEN:3,JUSTIFY_SPACE_AROUND:4,JUSTIFY_SPACE_EVENLY:5,LOG_LEVEL_COUNT:6,LOG_LEVEL_ERROR:0,LOG_LEVEL_WARN:1,LOG_LEVEL_INFO:2,LOG_LEVEL_DEBUG:3,LOG_LEVEL_VERBOSE:4,LOG_LEVEL_FATAL:5,MEASURE_MODE_COUNT:3,MEASURE_MODE_UNDEFINED:0,MEASURE_MODE_EXACTLY:1,MEASURE_MODE_AT_MOST:2,NODE_TYPE_COUNT:2,NODE_TYPE_DEFAULT:0,NODE_TYPE_TEXT:1,OVERFLOW_COUNT:3,OVERFLOW_VISIBLE:0,OVERFLOW_HIDDEN:1,OVERFLOW_SCROLL:2,POSITION_TYPE_COUNT:2,POSITION_TYPE_RELATIVE:0,POSITION_TYPE_ABSOLUTE:1,PRINT_OPTIONS_COUNT:3,PRINT_OPTIONS_LAYOUT:1,PRINT_OPTIONS_STYLE:2,PRINT_OPTIONS_CHILDREN:4,UNIT_COUNT:4,UNIT_UNDEFINED:0,UNIT_POINT:1,UNIT_PERCENT:2,UNIT_AUTO:3,WRAP_COUNT:3,WRAP_NO_WRAP:0,WRAP_WRAP:1,WRAP_WRAP_REVERSE:2};fE.exports=gN});var hE=Me((pb,aE)=>{"use strict";var _N=Object.assign||function(i){for(var u=1;u"}}]),i}(),dE=function(){Ph(i,null,[{key:"fromJS",value:function(f){var c=f.width,g=f.height;return new i(c,g)}}]);function i(u,f){Iy(this,i),this.width=u,this.height=f}return Ph(i,[{key:"fromJS",value:function(f){f(this.width,this.height)}},{key:"toString",value:function(){return""}}]),i}(),pE=function(){function i(u,f){Iy(this,i),this.unit=u,this.value=f}return Ph(i,[{key:"fromJS",value:function(f){f(this.unit,this.value)}},{key:"toString",value:function(){switch(this.unit){case ps.UNIT_POINT:return String(this.value);case ps.UNIT_PERCENT:return this.value+"%";case ps.UNIT_AUTO:return"auto";default:return this.value+"?"}}},{key:"valueOf",value:function(){return this.value}}]),i}();aE.exports=function(i,u){function f(C,A,x){var D=C[A];C[A]=function(){for(var L=arguments.length,N=Array(L),j=0;j1?N-1:0),$=1;$1&&arguments[1]!==void 0?arguments[1]:NaN,x=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,D=arguments.length>3&&arguments[3]!==void 0?arguments[3]:ps.DIRECTION_LTR;return C.call(this,A,x,D)}),_N({Config:u.Config,Node:u.Node,Layout:i("Layout",yN),Size:i("Size",dE),Value:i("Value",pE),getInstanceCount:function(){return u.getInstanceCount.apply(u,arguments)}},ps)}});var mE=Me((exports,module)=>{(function(i,u){typeof define=="function"&&define.amd?define([],function(){return u}):typeof module=="object"&&module.exports?module.exports=u:(i.nbind=i.nbind||{}).init=u})(exports,function(Module,cb){typeof Module=="function"&&(cb=Module,Module={}),Module.onRuntimeInitialized=function(i,u){return function(){i&&i.apply(this,arguments);try{Module.ccall("nbind_init")}catch(f){u(f);return}u(null,{bind:Module._nbind_value,reflect:Module.NBind.reflect,queryType:Module.NBind.queryType,toggleLightGC:Module.toggleLightGC,lib:Module})}}(Module.onRuntimeInitialized,cb);var Module;Module||(Module=(typeof Module!="undefined"?Module:null)||{});var moduleOverrides={};for(var key in Module)Module.hasOwnProperty(key)&&(moduleOverrides[key]=Module[key]);var ENVIRONMENT_IS_WEB=!1,ENVIRONMENT_IS_WORKER=!1,ENVIRONMENT_IS_NODE=!1,ENVIRONMENT_IS_SHELL=!1;if(Module.ENVIRONMENT)if(Module.ENVIRONMENT==="WEB")ENVIRONMENT_IS_WEB=!0;else if(Module.ENVIRONMENT==="WORKER")ENVIRONMENT_IS_WORKER=!0;else if(Module.ENVIRONMENT==="NODE")ENVIRONMENT_IS_NODE=!0;else if(Module.ENVIRONMENT==="SHELL")ENVIRONMENT_IS_SHELL=!0;else throw new Error("The provided Module['ENVIRONMENT'] value is not valid. It must be one of: WEB|WORKER|NODE|SHELL.");else ENVIRONMENT_IS_WEB=typeof window=="object",ENVIRONMENT_IS_WORKER=typeof importScripts=="function",ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof require=="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER,ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){Module.print||(Module.print=console.log),Module.printErr||(Module.printErr=console.warn);var nodeFS,nodePath;Module.read=function(u,f){nodeFS||(nodeFS={}("")),nodePath||(nodePath={}("")),u=nodePath.normalize(u);var c=nodeFS.readFileSync(u);return f?c:c.toString()},Module.readBinary=function(u){var f=Module.read(u,!0);return f.buffer||(f=new Uint8Array(f)),assert(f.buffer),f},Module.load=function(u){globalEval(read(u))},Module.thisProgram||(process.argv.length>1?Module.thisProgram=process.argv[1].replace(/\\/g,"/"):Module.thisProgram="unknown-program"),Module.arguments=process.argv.slice(2),typeof module!="undefined"&&(module.exports=Module),Module.inspect=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL)Module.print||(Module.print=print),typeof printErr!="undefined"&&(Module.printErr=printErr),typeof read!="undefined"?Module.read=read:Module.read=function(){throw"no read() available"},Module.readBinary=function(u){if(typeof readbuffer=="function")return new Uint8Array(readbuffer(u));var f=read(u,"binary");return assert(typeof f=="object"),f},typeof scriptArgs!="undefined"?Module.arguments=scriptArgs:typeof arguments!="undefined"&&(Module.arguments=arguments),typeof quit=="function"&&(Module.quit=function(i,u){quit(i)});else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(Module.read=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.send(null),f.responseText},ENVIRONMENT_IS_WORKER&&(Module.readBinary=function(u){var f=new XMLHttpRequest;return f.open("GET",u,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),Module.readAsync=function(u,f,c){var g=new XMLHttpRequest;g.open("GET",u,!0),g.responseType="arraybuffer",g.onload=function(){g.status==200||g.status==0&&g.response?f(g.response):c()},g.onerror=c,g.send(null)},typeof arguments!="undefined"&&(Module.arguments=arguments),typeof console!="undefined")Module.print||(Module.print=function(u){console.log(u)}),Module.printErr||(Module.printErr=function(u){console.warn(u)});else{var TRY_USE_DUMP=!1;Module.print||(Module.print=TRY_USE_DUMP&&typeof dump!="undefined"?function(i){dump(i)}:function(i){})}ENVIRONMENT_IS_WORKER&&(Module.load=importScripts),typeof Module.setWindowTitle=="undefined"&&(Module.setWindowTitle=function(i){document.title=i})}else throw"Unknown runtime environment. Where are we?";function globalEval(i){eval.call(null,i)}!Module.load&&Module.read&&(Module.load=function(u){globalEval(Module.read(u))}),Module.print||(Module.print=function(){}),Module.printErr||(Module.printErr=Module.print),Module.arguments||(Module.arguments=[]),Module.thisProgram||(Module.thisProgram="./this.program"),Module.quit||(Module.quit=function(i,u){throw u}),Module.print=Module.print,Module.printErr=Module.printErr,Module.preRun=[],Module.postRun=[];for(var key in moduleOverrides)moduleOverrides.hasOwnProperty(key)&&(Module[key]=moduleOverrides[key]);moduleOverrides=void 0;var Runtime={setTempRet0:function(i){return tempRet0=i,i},getTempRet0:function(){return tempRet0},stackSave:function(){return STACKTOP},stackRestore:function(i){STACKTOP=i},getNativeTypeSize:function(i){switch(i){case"i1":case"i8":return 1;case"i16":return 2;case"i32":return 4;case"i64":return 8;case"float":return 4;case"double":return 8;default:{if(i[i.length-1]==="*")return Runtime.QUANTUM_SIZE;if(i[0]==="i"){var u=parseInt(i.substr(1));return assert(u%8==0),u/8}else return 0}}},getNativeFieldSize:function(i){return Math.max(Runtime.getNativeTypeSize(i),Runtime.QUANTUM_SIZE)},STACK_ALIGN:16,prepVararg:function(i,u){return u==="double"||u==="i64"?i&7&&(assert((i&7)==4),i+=4):assert((i&3)==0),i},getAlignSize:function(i,u,f){return!f&&(i=="i64"||i=="double")?8:i?Math.min(u||(i?Runtime.getNativeFieldSize(i):0),Runtime.QUANTUM_SIZE):Math.min(u,8)},dynCall:function(i,u,f){return f&&f.length?Module["dynCall_"+i].apply(null,[u].concat(f)):Module["dynCall_"+i].call(null,u)},functionPointers:[],addFunction:function(i){for(var u=0;u>2],f=(u+i+15|0)&-16;if(HEAP32[DYNAMICTOP_PTR>>2]=f,f>=TOTAL_MEMORY){var c=enlargeMemory();if(!c)return HEAP32[DYNAMICTOP_PTR>>2]=u,0}return u},alignMemory:function(i,u){var f=i=Math.ceil(i/(u||16))*(u||16);return f},makeBigInt:function(i,u,f){var c=f?+(i>>>0)+ +(u>>>0)*4294967296:+(i>>>0)+ +(u|0)*4294967296;return c},GLOBAL_BASE:8,QUANTUM_SIZE:4,__dummy__:0};Module.Runtime=Runtime;var ABORT=0,EXITSTATUS=0;function assert(i,u){i||abort("Assertion failed: "+u)}function getCFunc(ident){var func=Module["_"+ident];if(!func)try{func=eval("_"+ident)}catch(i){}return assert(func,"Cannot call unknown function "+ident+" (perhaps LLVM optimizations or closure removed it?)"),func}var cwrap,ccall;(function(){var JSfuncs={stackSave:function(){Runtime.stackSave()},stackRestore:function(){Runtime.stackRestore()},arrayToC:function(i){var u=Runtime.stackAlloc(i.length);return writeArrayToMemory(i,u),u},stringToC:function(i){var u=0;if(i!=null&&i!==0){var f=(i.length<<2)+1;u=Runtime.stackAlloc(f),stringToUTF8(i,u,f)}return u}},toC={string:JSfuncs.stringToC,array:JSfuncs.arrayToC};ccall=function(u,f,c,g,t){var C=getCFunc(u),A=[],x=0;if(g)for(var D=0;D>0]=u;break;case"i8":HEAP8[i>>0]=u;break;case"i16":HEAP16[i>>1]=u;break;case"i32":HEAP32[i>>2]=u;break;case"i64":tempI64=[u>>>0,(tempDouble=u,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[i>>2]=tempI64[0],HEAP32[i+4>>2]=tempI64[1];break;case"float":HEAPF32[i>>2]=u;break;case"double":HEAPF64[i>>3]=u;break;default:abort("invalid type for setValue: "+f)}}Module.setValue=setValue;function getValue(i,u,f){switch(u=u||"i8",u.charAt(u.length-1)==="*"&&(u="i32"),u){case"i1":return HEAP8[i>>0];case"i8":return HEAP8[i>>0];case"i16":return HEAP16[i>>1];case"i32":return HEAP32[i>>2];case"i64":return HEAP32[i>>2];case"float":return HEAPF32[i>>2];case"double":return HEAPF64[i>>3];default:abort("invalid type for setValue: "+u)}return null}Module.getValue=getValue;var ALLOC_NORMAL=0,ALLOC_STACK=1,ALLOC_STATIC=2,ALLOC_DYNAMIC=3,ALLOC_NONE=4;Module.ALLOC_NORMAL=ALLOC_NORMAL,Module.ALLOC_STACK=ALLOC_STACK,Module.ALLOC_STATIC=ALLOC_STATIC,Module.ALLOC_DYNAMIC=ALLOC_DYNAMIC,Module.ALLOC_NONE=ALLOC_NONE;function allocate(i,u,f,c){var g,t;typeof i=="number"?(g=!0,t=i):(g=!1,t=i.length);var C=typeof u=="string"?u:null,A;if(f==ALLOC_NONE?A=c:A=[typeof _malloc=="function"?_malloc:Runtime.staticAlloc,Runtime.stackAlloc,Runtime.staticAlloc,Runtime.dynamicAlloc][f===void 0?ALLOC_STATIC:f](Math.max(t,C?1:u.length)),g){var c=A,x;for(assert((A&3)==0),x=A+(t&~3);c>2]=0;for(x=A+t;c>0]=0;return A}if(C==="i8")return i.subarray||i.slice?HEAPU8.set(i,A):HEAPU8.set(new Uint8Array(i),A),A;for(var D=0,L,N,j;D>0],f|=c,!(c==0&&!u||(g++,u&&g==u)););u||(u=g);var t="";if(f<128){for(var C=1024,A;u>0;)A=String.fromCharCode.apply(String,HEAPU8.subarray(i,i+Math.min(u,C))),t=t?t+A:A,i+=C,u-=C;return t}return Module.UTF8ToString(i)}Module.Pointer_stringify=Pointer_stringify;function AsciiToString(i){for(var u="";;){var f=HEAP8[i++>>0];if(!f)return u;u+=String.fromCharCode(f)}}Module.AsciiToString=AsciiToString;function stringToAscii(i,u){return writeAsciiToMemory(i,u,!1)}Module.stringToAscii=stringToAscii;var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function UTF8ArrayToString(i,u){for(var f=u;i[f];)++f;if(f-u>16&&i.subarray&&UTF8Decoder)return UTF8Decoder.decode(i.subarray(u,f));for(var c,g,t,C,A,x,D="";;){if(c=i[u++],!c)return D;if(!(c&128)){D+=String.fromCharCode(c);continue}if(g=i[u++]&63,(c&224)==192){D+=String.fromCharCode((c&31)<<6|g);continue}if(t=i[u++]&63,(c&240)==224?c=(c&15)<<12|g<<6|t:(C=i[u++]&63,(c&248)==240?c=(c&7)<<18|g<<12|t<<6|C:(A=i[u++]&63,(c&252)==248?c=(c&3)<<24|g<<18|t<<12|C<<6|A:(x=i[u++]&63,c=(c&1)<<30|g<<24|t<<18|C<<12|A<<6|x))),c<65536)D+=String.fromCharCode(c);else{var L=c-65536;D+=String.fromCharCode(55296|L>>10,56320|L&1023)}}}Module.UTF8ArrayToString=UTF8ArrayToString;function UTF8ToString(i){return UTF8ArrayToString(HEAPU8,i)}Module.UTF8ToString=UTF8ToString;function stringToUTF8Array(i,u,f,c){if(!(c>0))return 0;for(var g=f,t=f+c-1,C=0;C=55296&&A<=57343&&(A=65536+((A&1023)<<10)|i.charCodeAt(++C)&1023),A<=127){if(f>=t)break;u[f++]=A}else if(A<=2047){if(f+1>=t)break;u[f++]=192|A>>6,u[f++]=128|A&63}else if(A<=65535){if(f+2>=t)break;u[f++]=224|A>>12,u[f++]=128|A>>6&63,u[f++]=128|A&63}else if(A<=2097151){if(f+3>=t)break;u[f++]=240|A>>18,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}else if(A<=67108863){if(f+4>=t)break;u[f++]=248|A>>24,u[f++]=128|A>>18&63,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}else{if(f+5>=t)break;u[f++]=252|A>>30,u[f++]=128|A>>24&63,u[f++]=128|A>>18&63,u[f++]=128|A>>12&63,u[f++]=128|A>>6&63,u[f++]=128|A&63}}return u[f]=0,f-g}Module.stringToUTF8Array=stringToUTF8Array;function stringToUTF8(i,u,f){return stringToUTF8Array(i,HEAPU8,u,f)}Module.stringToUTF8=stringToUTF8;function lengthBytesUTF8(i){for(var u=0,f=0;f=55296&&c<=57343&&(c=65536+((c&1023)<<10)|i.charCodeAt(++f)&1023),c<=127?++u:c<=2047?u+=2:c<=65535?u+=3:c<=2097151?u+=4:c<=67108863?u+=5:u+=6}return u}Module.lengthBytesUTF8=lengthBytesUTF8;var UTF16Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function demangle(i){var u=Module.___cxa_demangle||Module.__cxa_demangle;if(u){try{var f=i.substr(1),c=lengthBytesUTF8(f)+1,g=_malloc(c);stringToUTF8(f,g,c);var t=_malloc(4),C=u(g,0,0,t);if(getValue(t,"i32")===0&&C)return Pointer_stringify(C)}catch(A){}finally{g&&_free(g),t&&_free(t),C&&_free(C)}return i}return Runtime.warnOnce("warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling"),i}function demangleAll(i){var u=/__Z[\w\d_]+/g;return i.replace(u,function(f){var c=demangle(f);return f===c?f:f+" ["+c+"]"})}function jsStackTrace(){var i=new Error;if(!i.stack){try{throw new Error(0)}catch(u){i=u}if(!i.stack)return"(no stack trace available)"}return i.stack.toString()}function stackTrace(){var i=jsStackTrace();return Module.extraStackTrace&&(i+=` -`+Module.extraStackTrace()),demangleAll(i)}Module.stackTrace=stackTrace;var HEAP,buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferViews(){Module.HEAP8=HEAP8=new Int8Array(buffer),Module.HEAP16=HEAP16=new Int16Array(buffer),Module.HEAP32=HEAP32=new Int32Array(buffer),Module.HEAPU8=HEAPU8=new Uint8Array(buffer),Module.HEAPU16=HEAPU16=new Uint16Array(buffer),Module.HEAPU32=HEAPU32=new Uint32Array(buffer),Module.HEAPF32=HEAPF32=new Float32Array(buffer),Module.HEAPF64=HEAPF64=new Float64Array(buffer)}var STATIC_BASE,STATICTOP,staticSealed,STACK_BASE,STACKTOP,STACK_MAX,DYNAMIC_BASE,DYNAMICTOP_PTR;STATIC_BASE=STATICTOP=STACK_BASE=STACKTOP=STACK_MAX=DYNAMIC_BASE=DYNAMICTOP_PTR=0,staticSealed=!1;function abortOnCannotGrowMemory(){abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+TOTAL_MEMORY+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")}function enlargeMemory(){abortOnCannotGrowMemory()}var TOTAL_STACK=Module.TOTAL_STACK||5242880,TOTAL_MEMORY=Module.TOTAL_MEMORY||134217728;TOTAL_MEMORY0;){var u=i.shift();if(typeof u=="function"){u();continue}var f=u.func;typeof f=="number"?u.arg===void 0?Module.dynCall_v(f):Module.dynCall_vi(f,u.arg):f(u.arg===void 0?null:u.arg)}}var __ATPRERUN__=[],__ATINIT__=[],__ATMAIN__=[],__ATEXIT__=[],__ATPOSTRUN__=[],runtimeInitialized=!1,runtimeExited=!1;function preRun(){if(Module.preRun)for(typeof Module.preRun=="function"&&(Module.preRun=[Module.preRun]);Module.preRun.length;)addOnPreRun(Module.preRun.shift());callRuntimeCallbacks(__ATPRERUN__)}function ensureInitRuntime(){runtimeInitialized||(runtimeInitialized=!0,callRuntimeCallbacks(__ATINIT__))}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){callRuntimeCallbacks(__ATEXIT__),runtimeExited=!0}function postRun(){if(Module.postRun)for(typeof Module.postRun=="function"&&(Module.postRun=[Module.postRun]);Module.postRun.length;)addOnPostRun(Module.postRun.shift());callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(i){__ATPRERUN__.unshift(i)}Module.addOnPreRun=addOnPreRun;function addOnInit(i){__ATINIT__.unshift(i)}Module.addOnInit=addOnInit;function addOnPreMain(i){__ATMAIN__.unshift(i)}Module.addOnPreMain=addOnPreMain;function addOnExit(i){__ATEXIT__.unshift(i)}Module.addOnExit=addOnExit;function addOnPostRun(i){__ATPOSTRUN__.unshift(i)}Module.addOnPostRun=addOnPostRun;function intArrayFromString(i,u,f){var c=f>0?f:lengthBytesUTF8(i)+1,g=new Array(c),t=stringToUTF8Array(i,g,0,g.length);return u&&(g.length=t),g}Module.intArrayFromString=intArrayFromString;function intArrayToString(i){for(var u=[],f=0;f255&&(c&=255),u.push(String.fromCharCode(c))}return u.join("")}Module.intArrayToString=intArrayToString;function writeStringToMemory(i,u,f){Runtime.warnOnce("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!");var c,g;f&&(g=u+lengthBytesUTF8(i),c=HEAP8[g]),stringToUTF8(i,u,Infinity),f&&(HEAP8[g]=c)}Module.writeStringToMemory=writeStringToMemory;function writeArrayToMemory(i,u){HEAP8.set(i,u)}Module.writeArrayToMemory=writeArrayToMemory;function writeAsciiToMemory(i,u,f){for(var c=0;c>0]=i.charCodeAt(c);f||(HEAP8[u>>0]=0)}if(Module.writeAsciiToMemory=writeAsciiToMemory,(!Math.imul||Math.imul(4294967295,5)!==-5)&&(Math.imul=function(u,f){var c=u>>>16,g=u&65535,t=f>>>16,C=f&65535;return g*C+(c*C+g*t<<16)|0}),Math.imul=Math.imul,!Math.fround){var froundBuffer=new Float32Array(1);Math.fround=function(i){return froundBuffer[0]=i,froundBuffer[0]}}Math.fround=Math.fround,Math.clz32||(Math.clz32=function(i){i=i>>>0;for(var u=0;u<32;u++)if(i&1<<31-u)return u;return 32}),Math.clz32=Math.clz32,Math.trunc||(Math.trunc=function(i){return i<0?Math.ceil(i):Math.floor(i)}),Math.trunc=Math.trunc;var Math_abs=Math.abs,Math_cos=Math.cos,Math_sin=Math.sin,Math_tan=Math.tan,Math_acos=Math.acos,Math_asin=Math.asin,Math_atan=Math.atan,Math_atan2=Math.atan2,Math_exp=Math.exp,Math_log=Math.log,Math_sqrt=Math.sqrt,Math_ceil=Math.ceil,Math_floor=Math.floor,Math_pow=Math.pow,Math_imul=Math.imul,Math_fround=Math.fround,Math_round=Math.round,Math_min=Math.min,Math_clz32=Math.clz32,Math_trunc=Math.trunc,runDependencies=0,runDependencyWatcher=null,dependenciesFulfilled=null;function getUniqueRunDependency(i){return i}function addRunDependency(i){runDependencies++,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies)}Module.addRunDependency=addRunDependency;function removeRunDependency(i){if(runDependencies--,Module.monitorRunDependencies&&Module.monitorRunDependencies(runDependencies),runDependencies==0&&(runDependencyWatcher!==null&&(clearInterval(runDependencyWatcher),runDependencyWatcher=null),dependenciesFulfilled)){var u=dependenciesFulfilled;dependenciesFulfilled=null,u()}}Module.removeRunDependency=removeRunDependency,Module.preloadedImages={},Module.preloadedAudios={};var ASM_CONSTS=[function(i,u,f,c,g,t,C,A){return _nbind.callbackSignatureList[i].apply(this,arguments)}];function _emscripten_asm_const_iiiiiiii(i,u,f,c,g,t,C,A){return ASM_CONSTS[i](u,f,c,g,t,C,A)}function _emscripten_asm_const_iiiii(i,u,f,c,g){return ASM_CONSTS[i](u,f,c,g)}function _emscripten_asm_const_iiidddddd(i,u,f,c,g,t,C,A,x){return ASM_CONSTS[i](u,f,c,g,t,C,A,x)}function _emscripten_asm_const_iiididi(i,u,f,c,g,t,C){return ASM_CONSTS[i](u,f,c,g,t,C)}function _emscripten_asm_const_iiii(i,u,f,c){return ASM_CONSTS[i](u,f,c)}function _emscripten_asm_const_iiiid(i,u,f,c,g){return ASM_CONSTS[i](u,f,c,g)}function _emscripten_asm_const_iiiiii(i,u,f,c,g,t){return ASM_CONSTS[i](u,f,c,g,t)}STATIC_BASE=Runtime.GLOBAL_BASE,STATICTOP=STATIC_BASE+12800,__ATINIT__.push({func:function(){__GLOBAL__sub_I_Yoga_cpp()}},{func:function(){__GLOBAL__sub_I_nbind_cc()}},{func:function(){__GLOBAL__sub_I_common_cc()}},{func:function(){__GLOBAL__sub_I_Binding_cc()}}),allocate([0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,192,127,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,3,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192,127,0,0,192,127,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,128,191,0,0,128,191,0,0,192,127,0,0,0,0,0,0,0,0,0,0,128,63,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,1,0,0,0,2,0,0,0,0,0,0,0,190,12,0,0,200,12,0,0,208,12,0,0,216,12,0,0,230,12,0,0,242,12,0,0,1,0,0,0,3,0,0,0,0,0,0,0,2,0,0,0,0,0,192,127,3,0,0,0,180,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,182,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,1,0,0,0,4,0,0,0,183,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,181,45,0,0,184,45,0,0,185,45,0,0,181,45,0,0,181,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,148,4,0,0,3,0,0,0,187,45,0,0,164,4,0,0,188,45,0,0,2,0,0,0,189,45,0,0,164,4,0,0,188,45,0,0,185,45,0,0,164,4,0,0,185,45,0,0,164,4,0,0,188,45,0,0,181,45,0,0,182,45,0,0,181,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0,0,0,6,0,0,0,1,0,0,0,7,0,0,0,183,45,0,0,182,45,0,0,181,45,0,0,190,45,0,0,190,45,0,0,182,45,0,0,182,45,0,0,185,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,181,45,0,0,185,45,0,0,182,45,0,0,185,45,0,0,48,5,0,0,3,0,0,0,56,5,0,0,1,0,0,0,189,45,0,0,185,45,0,0,164,4,0,0,76,5,0,0,2,0,0,0,191,45,0,0,186,45,0,0,182,45,0,0,185,45,0,0,192,45,0,0,185,45,0,0,182,45,0,0,186,45,0,0,185,45,0,0,76,5,0,0,76,5,0,0,136,5,0,0,182,45,0,0,181,45,0,0,2,0,0,0,190,45,0,0,136,5,0,0,56,19,0,0,156,5,0,0,2,0,0,0,184,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,9,0,0,0,1,0,0,0,10,0,0,0,204,5,0,0,181,45,0,0,181,45,0,0,2,0,0,0,180,45,0,0,204,5,0,0,2,0,0,0,195,45,0,0,236,5,0,0,97,19,0,0,198,45,0,0,211,45,0,0,212,45,0,0,213,45,0,0,214,45,0,0,215,45,0,0,188,45,0,0,182,45,0,0,216,45,0,0,217,45,0,0,218,45,0,0,219,45,0,0,192,45,0,0,181,45,0,0,0,0,0,0,185,45,0,0,110,19,0,0,186,45,0,0,115,19,0,0,221,45,0,0,120,19,0,0,148,4,0,0,132,19,0,0,96,6,0,0,145,19,0,0,222,45,0,0,164,19,0,0,223,45,0,0,173,19,0,0,0,0,0,0,3,0,0,0,104,6,0,0,1,0,0,0,187,45,0,0,0,0,0,0,0,0,0,0,1,0,0,0,11,0,0,0,12,0,0,0,1,0,0,0,13,0,0,0,185,45,0,0,224,45,0,0,164,6,0,0,188,45,0,0,172,6,0,0,180,6,0,0,2,0,0,0,188,6,0,0,7,0,0,0,224,45,0,0,7,0,0,0,164,6,0,0,1,0,0,0,213,45,0,0,185,45,0,0,224,45,0,0,172,6,0,0,185,45,0,0,224,45,0,0,164,6,0,0,185,45,0,0,224,45,0,0,211,45,0,0,211,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,222,45,0,0,211,45,0,0,224,45,0,0,172,6,0,0,222,45,0,0,211,45,0,0,224,45,0,0,188,45,0,0,222,45,0,0,211,45,0,0,40,7,0,0,188,45,0,0,2,0,0,0,224,45,0,0,185,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,188,45,0,0,222,45,0,0,224,45,0,0,148,4,0,0,185,45,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,148,4,0,0,185,45,0,0,164,6,0,0,148,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,14,0,0,0,15,0,0,0,1,0,0,0,16,0,0,0,148,7,0,0,2,0,0,0,225,45,0,0,183,45,0,0,188,45,0,0,168,7,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,234,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,148,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,9,0,0,5,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,242,45,0,0,0,4,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,110,111,100,101,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,119,104,105,99,104,32,115,116,105,108,108,32,104,97,115,32,99,104,105,108,100,114,101,110,32,97,116,116,97,99,104,101,100,0,67,97,110,110,111,116,32,114,101,115,101,116,32,97,32,110,111,100,101,32,115,116,105,108,108,32,97,116,116,97,99,104,101,100,32,116,111,32,97,32,112,97,114,101,110,116,0,67,111,117,108,100,32,110,111,116,32,97,108,108,111,99,97,116,101,32,109,101,109,111,114,121,32,102,111,114,32,99,111,110,102,105,103,0,67,97,110,110,111,116,32,115,101,116,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,67,104,105,108,100,32,97,108,114,101,97,100,121,32,104,97,115,32,97,32,112,97,114,101,110,116,44,32,105,116,32,109,117,115,116,32,98,101,32,114,101,109,111,118,101,100,32,102,105,114,115,116,46,0,67,97,110,110,111,116,32,97,100,100,32,99,104,105,108,100,58,32,78,111,100,101,115,32,119,105,116,104,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,32,99,97,110,110,111,116,32,104,97,118,101,32,99,104,105,108,100,114,101,110,46,0,79,110,108,121,32,108,101,97,102,32,110,111,100,101,115,32,119,105,116,104,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,115,115,104,111,117,108,100,32,109,97,110,117,97,108,108,121,32,109,97,114,107,32,116,104,101,109,115,101,108,118,101,115,32,97,115,32,100,105,114,116,121,0,67,97,110,110,111,116,32,103,101,116,32,108,97,121,111,117,116,32,112,114,111,112,101,114,116,105,101,115,32,111,102,32,109,117,108,116,105,45,101,100,103,101,32,115,104,111,114,116,104,97,110,100,115,0,37,115,37,100,46,123,91,115,107,105,112,112,101,100,93,32,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,61,62,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,37,115,37,100,46,123,37,115,0,42,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,97,119,58,32,37,102,32,97,104,58,32,37,102,32,37,115,10,0,37,115,37,100,46,125,37,115,0,119,109,58,32,37,115,44,32,104,109,58,32,37,115,44,32,100,58,32,40,37,102,44,32,37,102,41,32,37,115,10,0,79,117,116,32,111,102,32,99,97,99,104,101,32,101,110,116,114,105,101,115,33,10,0,83,99,97,108,101,32,102,97,99,116,111,114,32,115,104,111,117,108,100,32,110,111,116,32,98,101,32,108,101,115,115,32,116,104,97,110,32,122,101,114,111,0,105,110,105,116,105,97,108,0,37,115,10,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,85,78,68,69,70,73,78,69,68,0,69,88,65,67,84,76,89,0,65,84,95,77,79,83,84,0,76,65,89,95,85,78,68,69,70,73,78,69,68,0,76,65,89,95,69,88,65,67,84,76,89,0,76,65,89,95,65,84,95,77,79,83,84,0,97,118,97,105,108,97,98,108,101,87,105,100,116,104,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,119,105,100,116,104,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,97,118,97,105,108,97,98,108,101,72,101,105,103,104,116,32,105,115,32,105,110,100,101,102,105,110,105,116,101,32,115,111,32,104,101,105,103,104,116,77,101,97,115,117,114,101,77,111,100,101,32,109,117,115,116,32,98,101,32,89,71,77,101,97,115,117,114,101,77,111,100,101,85,110,100,101,102,105,110,101,100,0,102,108,101,120,0,115,116,114,101,116,99,104,0,109,117,108,116,105,108,105,110,101,45,115,116,114,101,116,99,104,0,69,120,112,101,99,116,101,100,32,110,111,100,101,32,116,111,32,104,97,118,101,32,99,117,115,116,111,109,32,109,101,97,115,117,114,101,32,102,117,110,99,116,105,111,110,0,109,101,97,115,117,114,101,0,69,120,112,101,99,116,32,99,117,115,116,111,109,32,98,97,115,101,108,105,110,101,32,102,117,110,99,116,105,111,110,32,116,111,32,110,111,116,32,114,101,116,117,114,110,32,78,97,78,0,97,98,115,45,109,101,97,115,117,114,101,0,97,98,115,45,108,97,121,111,117,116,0,78,111,100,101,0,99,114,101,97,116,101,68,101,102,97,117,108,116,0,99,114,101,97,116,101,87,105,116,104,67,111,110,102,105,103,0,100,101,115,116,114,111,121,0,114,101,115,101,116,0,99,111,112,121,83,116,121,108,101,0,115,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,115,101,116,80,111,115,105,116,105,111,110,0,115,101,116,80,111,115,105,116,105,111,110,80,101,114,99,101,110,116,0,115,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,115,101,116,65,108,105,103,110,73,116,101,109,115,0,115,101,116,65,108,105,103,110,83,101,108,102,0,115,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,115,101,116,70,108,101,120,87,114,97,112,0,115,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,115,101,116,77,97,114,103,105,110,0,115,101,116,77,97,114,103,105,110,80,101,114,99,101,110,116,0,115,101,116,77,97,114,103,105,110,65,117,116,111,0,115,101,116,79,118,101,114,102,108,111,119,0,115,101,116,68,105,115,112,108,97,121,0,115,101,116,70,108,101,120,0,115,101,116,70,108,101,120,66,97,115,105,115,0,115,101,116,70,108,101,120,66,97,115,105,115,80,101,114,99,101,110,116,0,115,101,116,70,108,101,120,71,114,111,119,0,115,101,116,70,108,101,120,83,104,114,105,110,107,0,115,101,116,87,105,100,116,104,0,115,101,116,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,87,105,100,116,104,65,117,116,111,0,115,101,116,72,101,105,103,104,116,0,115,101,116,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,72,101,105,103,104,116,65,117,116,111,0,115,101,116,77,105,110,87,105,100,116,104,0,115,101,116,77,105,110,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,105,110,72,101,105,103,104,116,0,115,101,116,77,105,110,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,77,97,120,87,105,100,116,104,0,115,101,116,77,97,120,87,105,100,116,104,80,101,114,99,101,110,116,0,115,101,116,77,97,120,72,101,105,103,104,116,0,115,101,116,77,97,120,72,101,105,103,104,116,80,101,114,99,101,110,116,0,115,101,116,65,115,112,101,99,116,82,97,116,105,111,0,115,101,116,66,111,114,100,101,114,0,115,101,116,80,97,100,100,105,110,103,0,115,101,116,80,97,100,100,105,110,103,80,101,114,99,101,110,116,0,103,101,116,80,111,115,105,116,105,111,110,84,121,112,101,0,103,101,116,80,111,115,105,116,105,111,110,0,103,101,116,65,108,105,103,110,67,111,110,116,101,110,116,0,103,101,116,65,108,105,103,110,73,116,101,109,115,0,103,101,116,65,108,105,103,110,83,101,108,102,0,103,101,116,70,108,101,120,68,105,114,101,99,116,105,111,110,0,103,101,116,70,108,101,120,87,114,97,112,0,103,101,116,74,117,115,116,105,102,121,67,111,110,116,101,110,116,0,103,101,116,77,97,114,103,105,110,0,103,101,116,70,108,101,120,66,97,115,105,115,0,103,101,116,70,108,101,120,71,114,111,119,0,103,101,116,70,108,101,120,83,104,114,105,110,107,0,103,101,116,87,105,100,116,104,0,103,101,116,72,101,105,103,104,116,0,103,101,116,77,105,110,87,105,100,116,104,0,103,101,116,77,105,110,72,101,105,103,104,116,0,103,101,116,77,97,120,87,105,100,116,104,0,103,101,116,77,97,120,72,101,105,103,104,116,0,103,101,116,65,115,112,101,99,116,82,97,116,105,111,0,103,101,116,66,111,114,100,101,114,0,103,101,116,79,118,101,114,102,108,111,119,0,103,101,116,68,105,115,112,108,97,121,0,103,101,116,80,97,100,100,105,110,103,0,105,110,115,101,114,116,67,104,105,108,100,0,114,101,109,111,118,101,67,104,105,108,100,0,103,101,116,67,104,105,108,100,67,111,117,110,116,0,103,101,116,80,97,114,101,110,116,0,103,101,116,67,104,105,108,100,0,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,117,110,115,101,116,77,101,97,115,117,114,101,70,117,110,99,0,109,97,114,107,68,105,114,116,121,0,105,115,68,105,114,116,121,0,99,97,108,99,117,108,97,116,101,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,76,101,102,116,0,103,101,116,67,111,109,112,117,116,101,100,82,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,84,111,112,0,103,101,116,67,111,109,112,117,116,101,100,66,111,116,116,111,109,0,103,101,116,67,111,109,112,117,116,101,100,87,105,100,116,104,0,103,101,116,67,111,109,112,117,116,101,100,72,101,105,103,104,116,0,103,101,116,67,111,109,112,117,116,101,100,76,97,121,111,117,116,0,103,101,116,67,111,109,112,117,116,101,100,77,97,114,103,105,110,0,103,101,116,67,111,109,112,117,116,101,100,66,111,114,100,101,114,0,103,101,116,67,111,109,112,117,116,101,100,80,97,100,100,105,110,103,0,67,111,110,102,105,103,0,99,114,101,97,116,101,0,115,101,116,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,115,101,116,80,111,105,110,116,83,99,97,108,101,70,97,99,116,111,114,0,105,115,69,120,112,101,114,105,109,101,110,116,97,108,70,101,97,116,117,114,101,69,110,97,98,108,101,100,0,86,97,108,117,101,0,76,97,121,111,117,116,0,83,105,122,101,0,103,101,116,73,110,115,116,97,110,99,101,67,111,117,110,116,0,73,110,116,54,52,0,1,1,1,2,2,4,4,4,4,8,8,4,8,118,111,105,100,0,98,111,111,108,0,115,116,100,58,58,115,116,114,105,110,103,0,99,98,70,117,110,99,116,105,111,110,32,38,0,99,111,110,115,116,32,99,98,70,117,110,99,116,105,111,110,32,38,0,69,120,116,101,114,110,97,108,0,66,117,102,102,101,114,0,78,66,105,110,100,73,68,0,78,66,105,110,100,0,98,105,110,100,95,118,97,108,117,101,0,114,101,102,108,101,99,116,0,113,117,101,114,121,84,121,112,101,0,108,97,108,108,111,99,0,108,114,101,115,101,116,0,123,114,101,116,117,114,110,40,95,110,98,105,110,100,46,99,97,108,108,98,97,99,107,83,105,103,110,97,116,117,114,101,76,105,115,116,91,36,48,93,46,97,112,112,108,121,40,116,104,105,115,44,97,114,103,117,109,101,110,116,115,41,41,59,125,0,95,110,98,105,110,100,95,110,101,119,0,17,0,10,0,17,17,17,0,0,0,0,5,0,0,0,0,0,0,9,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,15,10,17,17,17,3,10,7,0,1,19,9,11,11,0,0,9,6,11,0,0,11,0,6,17,0,0,0,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,17,0,10,10,17,17,17,0,10,0,0,2,0,9,11,0,0,0,9,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,13,0,0,0,4,13,0,0,0,0,9,14,0,0,0,0,0,14,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,0,15,0,0,0,0,9,16,0,0,0,0,0,16,0,0,16,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,0,0,0,18,18,18,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,10,0,0,0,0,9,11,0,0,0,0,0,11,0,0,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,0,0,0,0,12,0,0,0,0,12,0,0,0,0,9,12,0,0,0,0,0,12,0,0,12,0,0,45,43,32,32,32,48,88,48,120,0,40,110,117,108,108,41,0,45,48,88,43,48,88,32,48,88,45,48,120,43,48,120,32,48,120,0,105,110,102,0,73,78,70,0,110,97,110,0,78,65,78,0,48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70,46,0,84,33,34,25,13,1,2,3,17,75,28,12,16,4,11,29,18,30,39,104,110,111,112,113,98,32,5,6,15,19,20,21,26,8,22,7,40,36,23,24,9,10,14,27,31,37,35,131,130,125,38,42,43,60,61,62,63,67,71,74,77,88,89,90,91,92,93,94,95,96,97,99,100,101,102,103,105,106,107,108,114,115,116,121,122,123,124,0,73,108,108,101,103,97,108,32,98,121,116,101,32,115,101,113,117,101,110,99,101,0,68,111,109,97,105,110,32,101,114,114,111,114,0,82,101,115,117,108,116,32,110,111,116,32,114,101,112,114,101,115,101,110,116,97,98,108,101,0,78,111,116,32,97,32,116,116,121,0,80,101,114,109,105,115,115,105,111,110,32,100,101,110,105,101,100,0,79,112,101,114,97,116,105,111,110,32,110,111,116,32,112,101,114,109,105,116,116,101,100,0,78,111,32,115,117,99,104,32,102,105,108,101,32,111,114,32,100,105,114,101,99,116,111,114,121,0,78,111,32,115,117,99,104,32,112,114,111,99,101,115,115,0,70,105,108,101,32,101,120,105,115,116,115,0,86,97,108,117,101,32,116,111,111,32,108,97,114,103,101,32,102,111,114,32,100,97,116,97,32,116,121,112,101,0,78,111,32,115,112,97,99,101,32,108,101,102,116,32,111,110,32,100,101,118,105,99,101,0,79,117,116,32,111,102,32,109,101,109,111,114,121,0,82,101,115,111,117,114,99,101,32,98,117,115,121,0,73,110,116,101,114,114,117,112,116,101,100,32,115,121,115,116,101,109,32,99,97,108,108,0,82,101,115,111,117,114,99,101,32,116,101,109,112,111,114,97,114,105,108,121,32,117,110,97,118,97,105,108,97,98,108,101,0,73,110,118,97,108,105,100,32,115,101,101,107,0,67,114,111,115,115,45,100,101,118,105,99,101,32,108,105,110,107,0,82,101,97,100,45,111,110,108,121,32,102,105,108,101,32,115,121,115,116,101,109,0,68,105,114,101,99,116,111,114,121,32,110,111,116,32,101,109,112,116,121,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,112,101,101,114,0,79,112,101,114,97,116,105,111,110,32,116,105,109,101,100,32,111,117,116,0,67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100,0,72,111,115,116,32,105,115,32,100,111,119,110,0,72,111,115,116,32,105,115,32,117,110,114,101,97,99,104,97,98,108,101,0,65,100,100,114,101,115,115,32,105,110,32,117,115,101,0,66,114,111,107,101,110,32,112,105,112,101,0,73,47,79,32,101,114,114,111,114,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,32,111,114,32,97,100,100,114,101,115,115,0,66,108,111,99,107,32,100,101,118,105,99,101,32,114,101,113,117,105,114,101,100,0,78,111,32,115,117,99,104,32,100,101,118,105,99,101,0,78,111,116,32,97,32,100,105,114,101,99,116,111,114,121,0,73,115,32,97,32,100,105,114,101,99,116,111,114,121,0,84,101,120,116,32,102,105,108,101,32,98,117,115,121,0,69,120,101,99,32,102,111,114,109,97,116,32,101,114,114,111,114,0,73,110,118,97,108,105,100,32,97,114,103,117,109,101,110,116,0,65,114,103,117,109,101,110,116,32,108,105,115,116,32,116,111,111,32,108,111,110,103,0,83,121,109,98,111,108,105,99,32,108,105,110,107,32,108,111,111,112,0,70,105,108,101,110,97,109,101,32,116,111,111,32,108,111,110,103,0,84,111,111,32,109,97,110,121,32,111,112,101,110,32,102,105,108,101,115,32,105,110,32,115,121,115,116,101,109,0,78,111,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,115,32,97,118,97,105,108,97,98,108,101,0,66,97,100,32,102,105,108,101,32,100,101,115,99,114,105,112,116,111,114,0,78,111,32,99,104,105,108,100,32,112,114,111,99,101,115,115,0,66,97,100,32,97,100,100,114,101,115,115,0,70,105,108,101,32,116,111,111,32,108,97,114,103,101,0,84,111,111,32,109,97,110,121,32,108,105,110,107,115,0,78,111,32,108,111,99,107,115,32,97,118,97,105,108,97,98,108,101,0,82,101,115,111,117,114,99,101,32,100,101,97,100,108,111,99,107,32,119,111,117,108,100,32,111,99,99,117,114,0,83,116,97,116,101,32,110,111,116,32,114,101,99,111,118,101,114,97,98,108,101,0,80,114,101,118,105,111,117,115,32,111,119,110,101,114,32,100,105,101,100,0,79,112,101,114,97,116,105,111,110,32,99,97,110,99,101,108,101,100,0,70,117,110,99,116,105,111,110,32,110,111,116,32,105,109,112,108,101,109,101,110,116,101,100,0,78,111,32,109,101,115,115,97,103,101,32,111,102,32,100,101,115,105,114,101,100,32,116,121,112,101,0,73,100,101,110,116,105,102,105,101,114,32,114,101,109,111,118,101,100,0,68,101,118,105,99,101,32,110,111,116,32,97,32,115,116,114,101,97,109,0,78,111,32,100,97,116,97,32,97,118,97,105,108,97,98,108,101,0,68,101,118,105,99,101,32,116,105,109,101,111,117,116,0,79,117,116,32,111,102,32,115,116,114,101,97,109,115,32,114,101,115,111,117,114,99,101,115,0,76,105,110,107,32,104,97,115,32,98,101,101,110,32,115,101,118,101,114,101,100,0,80,114,111,116,111,99,111,108,32,101,114,114,111,114,0,66,97,100,32,109,101,115,115,97,103,101,0,70,105,108,101,32,100,101,115,99,114,105,112,116,111,114,32,105,110,32,98,97,100,32,115,116,97,116,101,0,78,111,116,32,97,32,115,111,99,107,101,116,0,68,101,115,116,105,110,97,116,105,111,110,32,97,100,100,114,101,115,115,32,114,101,113,117,105,114,101,100,0,77,101,115,115,97,103,101,32,116,111,111,32,108,97,114,103,101,0,80,114,111,116,111,99,111,108,32,119,114,111,110,103,32,116,121,112,101,32,102,111,114,32,115,111,99,107,101,116,0,80,114,111,116,111,99,111,108,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,80,114,111,116,111,99,111,108,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,83,111,99,107,101,116,32,116,121,112,101,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,78,111,116,32,115,117,112,112,111,114,116,101,100,0,80,114,111,116,111,99,111,108,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,0,65,100,100,114,101,115,115,32,102,97,109,105,108,121,32,110,111,116,32,115,117,112,112,111,114,116,101,100,32,98,121,32,112,114,111,116,111,99,111,108,0,65,100,100,114,101,115,115,32,110,111,116,32,97,118,97,105,108,97,98,108,101,0,78,101,116,119,111,114,107,32,105,115,32,100,111,119,110,0,78,101,116,119,111,114,107,32,117,110,114,101,97,99,104,97,98,108,101,0,67,111,110,110,101,99,116,105,111,110,32,114,101,115,101,116,32,98,121,32,110,101,116,119,111,114,107,0,67,111,110,110,101,99,116,105,111,110,32,97,98,111,114,116,101,100,0,78,111,32,98,117,102,102,101,114,32,115,112,97,99,101,32,97,118,97,105,108,97,98,108,101,0,83,111,99,107,101,116,32,105,115,32,99,111,110,110,101,99,116,101,100,0,83,111,99,107,101,116,32,110,111,116,32,99,111,110,110,101,99,116,101,100,0,67,97,110,110,111,116,32,115,101,110,100,32,97,102,116,101,114,32,115,111,99,107,101,116,32,115,104,117,116,100,111,119,110,0,79,112,101,114,97,116,105,111,110,32,97,108,114,101,97,100,121,32,105,110,32,112,114,111,103,114,101,115,115,0,79,112,101,114,97,116,105,111,110,32,105,110,32,112,114,111,103,114,101,115,115,0,83,116,97,108,101,32,102,105,108,101,32,104,97,110,100,108,101,0,82,101,109,111,116,101,32,73,47,79,32,101,114,114,111,114,0,81,117,111,116,97,32,101,120,99,101,101,100,101,100,0,78,111,32,109,101,100,105,117,109,32,102,111,117,110,100,0,87,114,111,110,103,32,109,101,100,105,117,109,32,116,121,112,101,0,78,111,32,101,114,114,111,114,32,105,110,102,111,114,109,97,116,105,111,110,0,0],"i8",ALLOC_NONE,Runtime.GLOBAL_BASE);var tempDoublePtr=STATICTOP;STATICTOP+=16;function _atexit(i,u){__ATEXIT__.unshift({func:i,arg:u})}function ___cxa_atexit(){return _atexit.apply(null,arguments)}function _abort(){Module.abort()}function __ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj(){Module.printErr("missing function: _ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj"),abort(-1)}function __decorate(i,u,f,c){var g=arguments.length,t=g<3?u:c===null?c=Object.getOwnPropertyDescriptor(u,f):c,C;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")t=Reflect.decorate(i,u,f,c);else for(var A=i.length-1;A>=0;A--)(C=i[A])&&(t=(g<3?C(t):g>3?C(u,f,t):C(u,f))||t);return g>3&&t&&Object.defineProperty(u,f,t),t}function _defineHidden(i){return function(u,f){Object.defineProperty(u,f,{configurable:!1,enumerable:!1,value:i,writable:!0})}}var _nbind={};function __nbind_free_external(i){_nbind.externalList[i].dereference(i)}function __nbind_reference_external(i){_nbind.externalList[i].reference()}function _llvm_stackrestore(i){var u=_llvm_stacksave,f=u.LLVM_SAVEDSTACKS[i];u.LLVM_SAVEDSTACKS.splice(i,1),Runtime.stackRestore(f)}function __nbind_register_pool(i,u,f,c){_nbind.Pool.pageSize=i,_nbind.Pool.usedPtr=u/4,_nbind.Pool.rootPtr=f,_nbind.Pool.pagePtr=c/4,HEAP32[u/4]=16909060,HEAP8[u]==1&&(_nbind.bigEndian=!0),HEAP32[u/4]=0,_nbind.makeTypeKindTbl=(t={},t[1024]=_nbind.PrimitiveType,t[64]=_nbind.Int64Type,t[2048]=_nbind.BindClass,t[3072]=_nbind.BindClassPtr,t[4096]=_nbind.SharedClassPtr,t[5120]=_nbind.ArrayType,t[6144]=_nbind.ArrayType,t[7168]=_nbind.CStringType,t[9216]=_nbind.CallbackType,t[10240]=_nbind.BindType,t),_nbind.makeTypeNameTbl={Buffer:_nbind.BufferType,External:_nbind.ExternalType,Int64:_nbind.Int64Type,_nbind_new:_nbind.CreateValueType,bool:_nbind.BooleanType,"cbFunction &":_nbind.CallbackType,"const cbFunction &":_nbind.CallbackType,"const std::string &":_nbind.StringType,"std::string":_nbind.StringType},Module.toggleLightGC=_nbind.toggleLightGC,_nbind.callUpcast=Module.dynCall_ii;var g=_nbind.makeType(_nbind.constructType,{flags:2048,id:0,name:""});g.proto=Module,_nbind.BindClass.list.push(g);var t}function _emscripten_set_main_loop_timing(i,u){if(Browser.mainLoop.timingMode=i,Browser.mainLoop.timingValue=u,!Browser.mainLoop.func)return 1;if(i==0)Browser.mainLoop.scheduler=function(){var C=Math.max(0,Browser.mainLoop.tickStartTime+u-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,C)},Browser.mainLoop.method="timeout";else if(i==1)Browser.mainLoop.scheduler=function(){Browser.requestAnimationFrame(Browser.mainLoop.runner)},Browser.mainLoop.method="rAF";else if(i==2){if(!window.setImmediate){let t=function(C){C.source===window&&C.data===c&&(C.stopPropagation(),f.shift()())};var g=t,f=[],c="setimmediate";window.addEventListener("message",t,!0),window.setImmediate=function(A){f.push(A),ENVIRONMENT_IS_WORKER?(Module.setImmediates===void 0&&(Module.setImmediates=[]),Module.setImmediates.push(A),window.postMessage({target:c})):window.postMessage(c,"*")}}Browser.mainLoop.scheduler=function(){window.setImmediate(Browser.mainLoop.runner)},Browser.mainLoop.method="immediate"}return 0}function _emscripten_get_now(){abort()}function _emscripten_set_main_loop(i,u,f,c,g){Module.noExitRuntime=!0,assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters."),Browser.mainLoop.func=i,Browser.mainLoop.arg=c;var t;typeof c!="undefined"?t=function(){Module.dynCall_vi(i,c)}:t=function(){Module.dynCall_v(i)};var C=Browser.mainLoop.currentlyRunningMainloop;if(Browser.mainLoop.runner=function(){if(!ABORT){if(Browser.mainLoop.queue.length>0){var x=Date.now(),D=Browser.mainLoop.queue.shift();if(D.func(D.arg),Browser.mainLoop.remainingBlockers){var L=Browser.mainLoop.remainingBlockers,N=L%1==0?L-1:Math.floor(L);D.counted?Browser.mainLoop.remainingBlockers=N:(N=N+.5,Browser.mainLoop.remainingBlockers=(8*L+N)/9)}if(console.log('main loop blocker "'+D.name+'" took '+(Date.now()-x)+" ms"),Browser.mainLoop.updateStatus(),C1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else Browser.mainLoop.timingMode==0&&(Browser.mainLoop.tickStartTime=_emscripten_get_now());Browser.mainLoop.method==="timeout"&&Module.ctx&&(Module.printErr("Looks like you are rendering without using requestAnimationFrame for the main loop. You should use 0 for the frame rate in emscripten_set_main_loop in order to use requestAnimationFrame, as that can greatly improve your frame rates!"),Browser.mainLoop.method=""),Browser.mainLoop.runIter(t),!(C0?_emscripten_set_main_loop_timing(0,1e3/u):_emscripten_set_main_loop_timing(1,1),Browser.mainLoop.scheduler()),f)throw"SimulateInfiniteLoop"}var Browser={mainLoop:{scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause:function(){Browser.mainLoop.scheduler=null,Browser.mainLoop.currentlyRunningMainloop++},resume:function(){Browser.mainLoop.currentlyRunningMainloop++;var i=Browser.mainLoop.timingMode,u=Browser.mainLoop.timingValue,f=Browser.mainLoop.func;Browser.mainLoop.func=null,_emscripten_set_main_loop(f,0,!1,Browser.mainLoop.arg,!0),_emscripten_set_main_loop_timing(i,u),Browser.mainLoop.scheduler()},updateStatus:function(){if(Module.setStatus){var i=Module.statusMessage||"Please wait...",u=Browser.mainLoop.remainingBlockers,f=Browser.mainLoop.expectedBlockers;u?u=6;){var Le=J>>Te-6&63;Te-=6,De+=Se[Le]}return Te==2?(De+=Se[(J&3)<<4],De+=me+me):Te==4&&(De+=Se[(J&15)<<2],De+=me),De}h.src="data:audio/x-"+C.substr(-3)+";base64,"+Q(t),L(h)},h.src=$,Browser.safeSetTimeout(function(){L(h)},1e4)}else return N()},Module.preloadPlugins.push(u);function f(){Browser.pointerLock=document.pointerLockElement===Module.canvas||document.mozPointerLockElement===Module.canvas||document.webkitPointerLockElement===Module.canvas||document.msPointerLockElement===Module.canvas}var c=Module.canvas;c&&(c.requestPointerLock=c.requestPointerLock||c.mozRequestPointerLock||c.webkitRequestPointerLock||c.msRequestPointerLock||function(){},c.exitPointerLock=document.exitPointerLock||document.mozExitPointerLock||document.webkitExitPointerLock||document.msExitPointerLock||function(){},c.exitPointerLock=c.exitPointerLock.bind(document),document.addEventListener("pointerlockchange",f,!1),document.addEventListener("mozpointerlockchange",f,!1),document.addEventListener("webkitpointerlockchange",f,!1),document.addEventListener("mspointerlockchange",f,!1),Module.elementPointerLock&&c.addEventListener("click",function(g){!Browser.pointerLock&&Module.canvas.requestPointerLock&&(Module.canvas.requestPointerLock(),g.preventDefault())},!1))},createContext:function(i,u,f,c){if(u&&Module.ctx&&i==Module.canvas)return Module.ctx;var g,t;if(u){var C={antialias:!1,alpha:!1};if(c)for(var A in c)C[A]=c[A];t=GL.createContext(i,C),t&&(g=GL.getContext(t).GLctx)}else g=i.getContext("2d");return g?(f&&(u||assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it"),Module.ctx=g,u&&GL.makeContextCurrent(t),Module.useWebGL=u,Browser.moduleContextCreatedCallbacks.forEach(function(x){x()}),Browser.init()),g):null},destroyContext:function(i,u,f){},fullscreenHandlersInstalled:!1,lockPointer:void 0,resizeCanvas:void 0,requestFullscreen:function(i,u,f){Browser.lockPointer=i,Browser.resizeCanvas=u,Browser.vrDevice=f,typeof Browser.lockPointer=="undefined"&&(Browser.lockPointer=!0),typeof Browser.resizeCanvas=="undefined"&&(Browser.resizeCanvas=!1),typeof Browser.vrDevice=="undefined"&&(Browser.vrDevice=null);var c=Module.canvas;function g(){Browser.isFullscreen=!1;var C=c.parentNode;(document.fullscreenElement||document.mozFullScreenElement||document.msFullscreenElement||document.webkitFullscreenElement||document.webkitCurrentFullScreenElement)===C?(c.exitFullscreen=document.exitFullscreen||document.cancelFullScreen||document.mozCancelFullScreen||document.msExitFullscreen||document.webkitCancelFullScreen||function(){},c.exitFullscreen=c.exitFullscreen.bind(document),Browser.lockPointer&&c.requestPointerLock(),Browser.isFullscreen=!0,Browser.resizeCanvas&&Browser.setFullscreenCanvasSize()):(C.parentNode.insertBefore(c,C),C.parentNode.removeChild(C),Browser.resizeCanvas&&Browser.setWindowedCanvasSize()),Module.onFullScreen&&Module.onFullScreen(Browser.isFullscreen),Module.onFullscreen&&Module.onFullscreen(Browser.isFullscreen),Browser.updateCanvasDimensions(c)}Browser.fullscreenHandlersInstalled||(Browser.fullscreenHandlersInstalled=!0,document.addEventListener("fullscreenchange",g,!1),document.addEventListener("mozfullscreenchange",g,!1),document.addEventListener("webkitfullscreenchange",g,!1),document.addEventListener("MSFullscreenChange",g,!1));var t=document.createElement("div");c.parentNode.insertBefore(t,c),t.appendChild(c),t.requestFullscreen=t.requestFullscreen||t.mozRequestFullScreen||t.msRequestFullscreen||(t.webkitRequestFullscreen?function(){t.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}:null)||(t.webkitRequestFullScreen?function(){t.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT)}:null),f?t.requestFullscreen({vrDisplay:f}):t.requestFullscreen()},requestFullScreen:function(i,u,f){return Module.printErr("Browser.requestFullScreen() is deprecated. Please call Browser.requestFullscreen instead."),Browser.requestFullScreen=function(c,g,t){return Browser.requestFullscreen(c,g,t)},Browser.requestFullscreen(i,u,f)},nextRAF:0,fakeRequestAnimationFrame:function(i){var u=Date.now();if(Browser.nextRAF===0)Browser.nextRAF=u+1e3/60;else for(;u+2>=Browser.nextRAF;)Browser.nextRAF+=1e3/60;var f=Math.max(Browser.nextRAF-u,0);setTimeout(i,f)},requestAnimationFrame:function(u){typeof window=="undefined"?Browser.fakeRequestAnimationFrame(u):(window.requestAnimationFrame||(window.requestAnimationFrame=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame||Browser.fakeRequestAnimationFrame),window.requestAnimationFrame(u))},safeCallback:function(i){return function(){if(!ABORT)return i.apply(null,arguments)}},allowAsyncCallbacks:!0,queuedAsyncCallbacks:[],pauseAsyncCallbacks:function(){Browser.allowAsyncCallbacks=!1},resumeAsyncCallbacks:function(){if(Browser.allowAsyncCallbacks=!0,Browser.queuedAsyncCallbacks.length>0){var i=Browser.queuedAsyncCallbacks;Browser.queuedAsyncCallbacks=[],i.forEach(function(u){u()})}},safeRequestAnimationFrame:function(i){return Browser.requestAnimationFrame(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))})},safeSetTimeout:function(i,u){return Module.noExitRuntime=!0,setTimeout(function(){ABORT||(Browser.allowAsyncCallbacks?i():Browser.queuedAsyncCallbacks.push(i))},u)},safeSetInterval:function(i,u){return Module.noExitRuntime=!0,setInterval(function(){ABORT||Browser.allowAsyncCallbacks&&i()},u)},getMimetype:function(i){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[i.substr(i.lastIndexOf(".")+1)]},getUserMedia:function(i){window.getUserMedia||(window.getUserMedia=navigator.getUserMedia||navigator.mozGetUserMedia),window.getUserMedia(i)},getMovementX:function(i){return i.movementX||i.mozMovementX||i.webkitMovementX||0},getMovementY:function(i){return i.movementY||i.mozMovementY||i.webkitMovementY||0},getMouseWheelDelta:function(i){var u=0;switch(i.type){case"DOMMouseScroll":u=i.detail;break;case"mousewheel":u=i.wheelDelta;break;case"wheel":u=i.deltaY;break;default:throw"unrecognized mouse wheel event: "+i.type}return u},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent:function(i){if(Browser.pointerLock)i.type!="mousemove"&&"mozMovementX"in i?Browser.mouseMovementX=Browser.mouseMovementY=0:(Browser.mouseMovementX=Browser.getMovementX(i),Browser.mouseMovementY=Browser.getMovementY(i)),typeof SDL!="undefined"?(Browser.mouseX=SDL.mouseX+Browser.mouseMovementX,Browser.mouseY=SDL.mouseY+Browser.mouseMovementY):(Browser.mouseX+=Browser.mouseMovementX,Browser.mouseY+=Browser.mouseMovementY);else{var u=Module.canvas.getBoundingClientRect(),f=Module.canvas.width,c=Module.canvas.height,g=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset,t=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(i.type==="touchstart"||i.type==="touchend"||i.type==="touchmove"){var C=i.touch;if(C===void 0)return;var A=C.pageX-(g+u.left),x=C.pageY-(t+u.top);A=A*(f/u.width),x=x*(c/u.height);var D={x:A,y:x};if(i.type==="touchstart")Browser.lastTouches[C.identifier]=D,Browser.touches[C.identifier]=D;else if(i.type==="touchend"||i.type==="touchmove"){var L=Browser.touches[C.identifier];L||(L=D),Browser.lastTouches[C.identifier]=L,Browser.touches[C.identifier]=D}return}var N=i.pageX-(g+u.left),j=i.pageY-(t+u.top);N=N*(f/u.width),j=j*(c/u.height),Browser.mouseMovementX=N-Browser.mouseX,Browser.mouseMovementY=j-Browser.mouseY,Browser.mouseX=N,Browser.mouseY=j}},asyncLoad:function(i,u,f,c){var g=c?"":getUniqueRunDependency("al "+i);Module.readAsync(i,function(t){assert(t,'Loading data file "'+i+'" failed (no arrayBuffer).'),u(new Uint8Array(t)),g&&removeRunDependency(g)},function(t){if(f)f();else throw'Loading data file "'+i+'" failed.'}),g&&addRunDependency(g)},resizeListeners:[],updateResizeListeners:function(){var i=Module.canvas;Browser.resizeListeners.forEach(function(u){u(i.width,i.height)})},setCanvasSize:function(i,u,f){var c=Module.canvas;Browser.updateCanvasDimensions(c,i,u),f||Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i|8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},setWindowedCanvasSize:function(){if(typeof SDL!="undefined"){var i=HEAPU32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2];i=i&~8388608,HEAP32[SDL.screen+Runtime.QUANTUM_SIZE*0>>2]=i}Browser.updateResizeListeners()},updateCanvasDimensions:function(i,u,f){u&&f?(i.widthNative=u,i.heightNative=f):(u=i.widthNative,f=i.heightNative);var c=u,g=f;if(Module.forcedAspectRatio&&Module.forcedAspectRatio>0&&(c/g>2];return u},getStr:function(){var i=Pointer_stringify(SYSCALLS.get());return i},get64:function(){var i=SYSCALLS.get(),u=SYSCALLS.get();return i>=0?assert(u===0):assert(u===-1),i},getZero:function(){assert(SYSCALLS.get()===0)}};function ___syscall6(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.getStreamFromFD();return FS.close(f),0}catch(c){return(typeof FS=="undefined"||!(c instanceof FS.ErrnoError))&&abort(c),-c.errno}}function ___syscall54(i,u){SYSCALLS.varargs=u;try{return 0}catch(f){return(typeof FS=="undefined"||!(f instanceof FS.ErrnoError))&&abort(f),-f.errno}}function _typeModule(i){var u=[[0,1,"X"],[1,1,"const X"],[128,1,"X *"],[256,1,"X &"],[384,1,"X &&"],[512,1,"std::shared_ptr"],[640,1,"std::unique_ptr"],[5120,1,"std::vector"],[6144,2,"std::array"],[9216,-1,"std::function"]];function f(x,D,L,N,j,$){if(D==1){var h=N&896;(h==128||h==256||h==384)&&(x="X const")}var re;return $?re=L.replace("X",x).replace("Y",j):re=x.replace("X",L).replace("Y",j),re.replace(/([*&]) (?=[*&])/g,"$1")}function c(x,D,L,N,j){throw new Error(x+" type "+L.replace("X",D+"?")+(N?" with flag "+N:"")+" in "+j)}function g(x,D,L,N,j,$,h,re){$===void 0&&($="X"),re===void 0&&(re=1);var ce=L(x);if(ce)return ce;var Q=N(x),oe=Q.placeholderFlag,Se=u[oe];h&&Se&&($=f(h[2],h[0],$,Se[0],"?",!0));var me;oe==0&&(me="Unbound"),oe>=10&&(me="Corrupt"),re>20&&(me="Deeply nested"),me&&c(me,x,$,oe,j||"?");var De=Q.paramList[0],J=g(De,D,L,N,j,$,Se,re+1),Te,Oe={flags:Se[0],id:x,name:"",paramList:[J]},Le=[],ot="?";switch(Q.placeholderFlag){case 1:Te=J.spec;break;case 2:if((J.flags&15360)==1024&&J.spec.ptrSize==1){Oe.flags=7168;break}case 3:case 6:case 5:Te=J.spec,(J.flags&15360)!=2048;break;case 8:ot=""+Q.paramList[1],Oe.paramList.push(Q.paramList[1]);break;case 9:for(var ct=0,Ue=Q.paramList[1];ct>2]=i),i}function _llvm_stacksave(){var i=_llvm_stacksave;return i.LLVM_SAVEDSTACKS||(i.LLVM_SAVEDSTACKS=[]),i.LLVM_SAVEDSTACKS.push(Runtime.stackSave()),i.LLVM_SAVEDSTACKS.length-1}function ___syscall140(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.getStreamFromFD(),c=SYSCALLS.get(),g=SYSCALLS.get(),t=SYSCALLS.get(),C=SYSCALLS.get(),A=g;return FS.llseek(f,A,C),HEAP32[t>>2]=f.position,f.getdents&&A===0&&C===0&&(f.getdents=null),0}catch(x){return(typeof FS=="undefined"||!(x instanceof FS.ErrnoError))&&abort(x),-x.errno}}function ___syscall146(i,u){SYSCALLS.varargs=u;try{var f=SYSCALLS.get(),c=SYSCALLS.get(),g=SYSCALLS.get(),t=0;___syscall146.buffer||(___syscall146.buffers=[null,[],[]],___syscall146.printChar=function(L,N){var j=___syscall146.buffers[L];assert(j),N===0||N===10?((L===1?Module.print:Module.printErr)(UTF8ArrayToString(j,0)),j.length=0):j.push(N)});for(var C=0;C>2],x=HEAP32[c+(C*8+4)>>2],D=0;Di.pageSize/2||u>i.pageSize-f){var c=_nbind.typeNameTbl.NBind.proto;return c.lalloc(u)}else return HEAPU32[i.usedPtr]=f+u,i.rootPtr+f},i.lreset=function(u,f){var c=HEAPU32[i.pagePtr];if(c){var g=_nbind.typeNameTbl.NBind.proto;g.lreset(u,f)}else HEAPU32[i.usedPtr]=u},i}();_nbind.Pool=Pool;function constructType(i,u){var f=i==10240?_nbind.makeTypeNameTbl[u.name]||_nbind.BindType:_nbind.makeTypeKindTbl[i],c=new f(u);return typeIdTbl[u.id]=c,_nbind.typeNameTbl[u.name]=c,c}_nbind.constructType=constructType;function getType(i){return typeIdTbl[i]}_nbind.getType=getType;function queryType(i){var u=HEAPU8[i],f=_nbind.structureList[u][1];i/=4,f<0&&(++i,f=HEAPU32[i]+1);var c=Array.prototype.slice.call(HEAPU32.subarray(i+1,i+1+f));return u==9&&(c=[c[0],c.slice(1)]),{paramList:c,placeholderFlag:u}}_nbind.queryType=queryType;function getTypes(i,u){return i.map(function(f){return typeof f=="number"?_nbind.getComplexType(f,constructType,getType,queryType,u):_nbind.typeNameTbl[f]})}_nbind.getTypes=getTypes;function readTypeIdList(i,u){return Array.prototype.slice.call(HEAPU32,i/4,i/4+u)}_nbind.readTypeIdList=readTypeIdList;function readAsciiString(i){for(var u=i;HEAPU8[u++];);return String.fromCharCode.apply("",HEAPU8.subarray(i,u-1))}_nbind.readAsciiString=readAsciiString;function readPolicyList(i){var u={};if(i)for(;;){var f=HEAPU32[i/4];if(!f)break;u[readAsciiString(f)]=!0,i+=4}return u}_nbind.readPolicyList=readPolicyList;function getDynCall(i,u){var f={float32_t:"d",float64_t:"d",int64_t:"d",uint64_t:"d",void:"v"},c=i.map(function(t){return f[t.name]||"i"}).join(""),g=Module["dynCall_"+c];if(!g)throw new Error("dynCall_"+c+" not found for "+u+"("+i.map(function(t){return t.name}).join(", ")+")");return g}_nbind.getDynCall=getDynCall;function addMethod(i,u,f,c){var g=i[u];i.hasOwnProperty(u)&&g?((g.arity||g.arity===0)&&(g=_nbind.makeOverloader(g,g.arity),i[u]=g),g.addMethod(f,c)):(f.arity=c,i[u]=f)}_nbind.addMethod=addMethod;function throwError(i){throw new Error(i)}_nbind.throwError=throwError,_nbind.bigEndian=!1,_a=_typeModule(_typeModule),_nbind.Type=_a.Type,_nbind.makeType=_a.makeType,_nbind.getComplexType=_a.getComplexType,_nbind.structureList=_a.structureList;var BindType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.heap=HEAPU32,f.ptrSize=4,f}return u.prototype.needsWireRead=function(f){return!!this.wireRead||!!this.makeWireRead},u.prototype.needsWireWrite=function(f){return!!this.wireWrite||!!this.makeWireWrite},u}(_nbind.Type);_nbind.BindType=BindType;var PrimitiveType=function(i){__extends(u,i);function u(f){var c=i.call(this,f)||this,g=f.flags&32?{32:HEAPF32,64:HEAPF64}:f.flags&8?{8:HEAPU8,16:HEAPU16,32:HEAPU32}:{8:HEAP8,16:HEAP16,32:HEAP32};return c.heap=g[f.ptrSize*8],c.ptrSize=f.ptrSize,c}return u.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},u.prototype.makeWireWrite=function(f,c){return c&&c.Strict&&function(g){if(typeof g=="number")return g;throw new Error("Type mismatch")}},u}(BindType);_nbind.PrimitiveType=PrimitiveType;function pushCString(i,u){if(i==null){if(u&&u.Nullable)return 0;throw new Error("Type mismatch")}if(u&&u.Strict){if(typeof i!="string")throw new Error("Type mismatch")}else i=i.toString();var f=Module.lengthBytesUTF8(i)+1,c=_nbind.Pool.lalloc(f);return Module.stringToUTF8Array(i,HEAPU8,c,f),c}_nbind.pushCString=pushCString;function popCString(i){return i===0?null:Module.Pointer_stringify(i)}_nbind.popCString=popCString;var CStringType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=popCString,f.wireWrite=pushCString,f.readResources=[_nbind.resources.pool],f.writeResources=[_nbind.resources.pool],f}return u.prototype.makeWireWrite=function(f,c){return function(g){return pushCString(g,c)}},u}(BindType);_nbind.CStringType=CStringType;var BooleanType=function(i){__extends(u,i);function u(){var f=i!==null&&i.apply(this,arguments)||this;return f.wireRead=function(c){return!!c},f}return u.prototype.needsWireWrite=function(f){return!!f&&!!f.Strict},u.prototype.makeWireRead=function(f){return"!!("+f+")"},u.prototype.makeWireWrite=function(f,c){return c&&c.Strict&&function(g){if(typeof g=="boolean")return g;throw new Error("Type mismatch")}||f},u}(BindType);_nbind.BooleanType=BooleanType;var Wrapper=function(){function i(){}return i.prototype.persist=function(){this.__nbindState|=1},i}();_nbind.Wrapper=Wrapper;function makeBound(i,u){var f=function(c){__extends(g,c);function g(t,C,A,x){var D=c.call(this)||this;if(!(D instanceof g))return new(Function.prototype.bind.apply(g,Array.prototype.concat.apply([null],arguments)));var L=C,N=A,j=x;if(t!==_nbind.ptrMarker){var $=D.__nbindConstructor.apply(D,arguments);L=4096|512,j=HEAPU32[$/4],N=HEAPU32[$/4+1]}var h={configurable:!0,enumerable:!1,value:null,writable:!1},re={__nbindFlags:L,__nbindPtr:N};j&&(re.__nbindShared=j,_nbind.mark(D));for(var ce=0,Q=Object.keys(re);ce>=1;var f=_nbind.valueList[i];return _nbind.valueList[i]=firstFreeValue,firstFreeValue=i,f}else{if(u)return _nbind.popShared(i,u);throw new Error("Invalid value slot "+i)}}_nbind.popValue=popValue;var valueBase=18446744073709552e3;function push64(i){return typeof i=="number"?i:pushValue(i)*4096+valueBase}function pop64(i){return i=3?C=Buffer.from(t):C=new Buffer(t),C.copy(c)}else getBuffer(c).set(t)}}_nbind.commitBuffer=commitBuffer;var dirtyList=[],gcTimer=0;function sweep(){for(var i=0,u=dirtyList;i>2]=DYNAMIC_BASE,staticSealed=!0;function invoke_viiiii(i,u,f,c,g,t){try{Module.dynCall_viiiii(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_vif(i,u,f){try{Module.dynCall_vif(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_vid(i,u,f){try{Module.dynCall_vid(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_fiff(i,u,f,c){try{return Module.dynCall_fiff(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_vi(i,u){try{Module.dynCall_vi(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_vii(i,u,f){try{Module.dynCall_vii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_ii(i,u){try{return Module.dynCall_ii(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_viddi(i,u,f,c,g){try{Module.dynCall_viddi(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_vidd(i,u,f,c){try{Module.dynCall_vidd(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_iiii(i,u,f,c){try{return Module.dynCall_iiii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_diii(i,u,f,c){try{return Module.dynCall_diii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_di(i,u){try{return Module.dynCall_di(i,u)}catch(f){if(typeof f!="number"&&f!=="longjmp")throw f;Module.setThrew(1,0)}}function invoke_iid(i,u,f){try{return Module.dynCall_iid(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_iii(i,u,f){try{return Module.dynCall_iii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiddi(i,u,f,c,g,t){try{Module.dynCall_viiddi(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_viiiiii(i,u,f,c,g,t,C){try{Module.dynCall_viiiiii(i,u,f,c,g,t,C)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_dii(i,u,f){try{return Module.dynCall_dii(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_i(i){try{return Module.dynCall_i(i)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_iiiiii(i,u,f,c,g,t){try{return Module.dynCall_iiiiii(i,u,f,c,g,t)}catch(C){if(typeof C!="number"&&C!=="longjmp")throw C;Module.setThrew(1,0)}}function invoke_viiid(i,u,f,c,g){try{Module.dynCall_viiid(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}function invoke_viififi(i,u,f,c,g,t,C){try{Module.dynCall_viififi(i,u,f,c,g,t,C)}catch(A){if(typeof A!="number"&&A!=="longjmp")throw A;Module.setThrew(1,0)}}function invoke_viii(i,u,f,c){try{Module.dynCall_viii(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_v(i){try{Module.dynCall_v(i)}catch(u){if(typeof u!="number"&&u!=="longjmp")throw u;Module.setThrew(1,0)}}function invoke_viid(i,u,f,c){try{Module.dynCall_viid(i,u,f,c)}catch(g){if(typeof g!="number"&&g!=="longjmp")throw g;Module.setThrew(1,0)}}function invoke_idd(i,u,f){try{return Module.dynCall_idd(i,u,f)}catch(c){if(typeof c!="number"&&c!=="longjmp")throw c;Module.setThrew(1,0)}}function invoke_viiii(i,u,f,c,g){try{Module.dynCall_viiii(i,u,f,c,g)}catch(t){if(typeof t!="number"&&t!=="longjmp")throw t;Module.setThrew(1,0)}}Module.asmGlobalArg={Math,Int8Array,Int16Array,Int32Array,Uint8Array,Uint16Array,Uint32Array,Float32Array,Float64Array,NaN:NaN,Infinity:Infinity},Module.asmLibraryArg={abort,assert,enlargeMemory,getTotalMemory,abortOnCannotGrowMemory,invoke_viiiii,invoke_vif,invoke_vid,invoke_fiff,invoke_vi,invoke_vii,invoke_ii,invoke_viddi,invoke_vidd,invoke_iiii,invoke_diii,invoke_di,invoke_iid,invoke_iii,invoke_viiddi,invoke_viiiiii,invoke_dii,invoke_i,invoke_iiiiii,invoke_viiid,invoke_viififi,invoke_viii,invoke_v,invoke_viid,invoke_idd,invoke_viiii,_emscripten_asm_const_iiiii,_emscripten_asm_const_iiidddddd,_emscripten_asm_const_iiiid,__nbind_reference_external,_emscripten_asm_const_iiiiiiii,_removeAccessorPrefix,_typeModule,__nbind_register_pool,__decorate,_llvm_stackrestore,___cxa_atexit,__extends,__nbind_get_value_object,__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,_emscripten_set_main_loop_timing,__nbind_register_primitive,__nbind_register_type,_emscripten_memcpy_big,__nbind_register_function,___setErrNo,__nbind_register_class,__nbind_finish,_abort,_nbind_value,_llvm_stacksave,___syscall54,_defineHidden,_emscripten_set_main_loop,_emscripten_get_now,__nbind_register_callback_signature,_emscripten_asm_const_iiiiii,__nbind_free_external,_emscripten_asm_const_iiii,_emscripten_asm_const_iiididi,___syscall6,_atexit,___syscall140,___syscall146,DYNAMICTOP_PTR,tempDoublePtr,ABORT,STACKTOP,STACK_MAX,cttz_i8,___dso_handle};var asm=function(i,u,f){var c=new i.Int8Array(f),g=new i.Int16Array(f),t=new i.Int32Array(f),C=new i.Uint8Array(f),A=new i.Uint16Array(f),x=new i.Uint32Array(f),D=new i.Float32Array(f),L=new i.Float64Array(f),N=u.DYNAMICTOP_PTR|0,j=u.tempDoublePtr|0,$=u.ABORT|0,h=u.STACKTOP|0,re=u.STACK_MAX|0,ce=u.cttz_i8|0,Q=u.___dso_handle|0,oe=0,Se=0,me=0,De=0,J=i.NaN,Te=i.Infinity,Oe=0,Le=0,ot=0,ct=0,Ue=0,be=0,At=i.Math.floor,Ot=i.Math.abs,Nt=i.Math.sqrt,Je=i.Math.pow,V=i.Math.cos,ne=i.Math.sin,ge=i.Math.tan,Z=i.Math.acos,Ae=i.Math.asin,at=i.Math.atan,it=i.Math.atan2,Ft=i.Math.exp,jt=i.Math.log,hn=i.Math.ceil,Un=i.Math.imul,Jt=i.Math.min,Yt=i.Math.max,cr=i.Math.clz32,w=i.Math.fround,pt=u.abort,Mn=u.assert,Bn=u.enlargeMemory,Xn=u.getTotalMemory,vr=u.abortOnCannotGrowMemory,gr=u.invoke_viiiii,r0=u.invoke_vif,Ci=u.invoke_vid,yo=u.invoke_fiff,Ds=u.invoke_vi,Mu=u.invoke_vii,Gf=u.invoke_ii,iu=u.invoke_viddi,ou=u.invoke_vidd,ol=u.invoke_iiii,ul=u.invoke_diii,Es=u.invoke_di,Uo=u.invoke_iid,sl=u.invoke_iii,Ss=u.invoke_viiddi,Cs=u.invoke_viiiiii,Ti=u.invoke_dii,Fu=u.invoke_i,ll=u.invoke_iiiiii,fl=u.invoke_viiid,cl=u.invoke_viififi,al=u.invoke_viii,Ui=u.invoke_v,Mr=u.invoke_viid,Ac=u.invoke_idd,of=u.invoke_viiii,Ts=u._emscripten_asm_const_iiiii,xs=u._emscripten_asm_const_iiidddddd,dl=u._emscripten_asm_const_iiiid,qi=u.__nbind_reference_external,qo=u._emscripten_asm_const_iiiiiiii,kr=u._removeAccessorPrefix,Fr=u._typeModule,si=u.__nbind_register_pool,H0=u.__decorate,b0=u._llvm_stackrestore,Bt=u.___cxa_atexit,Lu=u.__extends,c0=u.__nbind_get_value_object,Ru=u.__ZN8facebook4yoga14YGNodeToStringEPNSt3__212basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEP6YGNode14YGPrintOptionsj,ks=u._emscripten_set_main_loop_timing,As=u.__nbind_register_primitive,uu=u.__nbind_register_type,wo=u._emscripten_memcpy_big,zo=u.__nbind_register_function,Os=u.___setErrNo,Is=u.__nbind_register_class,uf=u.__nbind_finish,_n=u._abort,Nu=u._nbind_value,Wo=u._llvm_stacksave,su=u.___syscall54,Ps=u._defineHidden,pl=u._emscripten_set_main_loop,Vf=u._emscripten_get_now,hl=u.__nbind_register_callback_signature,Bu=u._emscripten_asm_const_iiiiii,ju=u.__nbind_free_external,sf=u._emscripten_asm_const_iiii,ro=u._emscripten_asm_const_iiididi,Ms=u.___syscall6,ml=u._atexit,Uu=u.___syscall140,G0=u.___syscall146,Fs=w(0);let tt=w(0);function zi(e){e=e|0;var n=0;return n=h,h=h+e|0,h=h+15&-16,n|0}function lu(){return h|0}function Ho(e){e=e|0,h=e}function O0(e,n){e=e|0,n=n|0,h=e,re=n}function vl(e,n){e=e|0,n=n|0,oe||(oe=e,Se=n)}function gl(e){e=e|0,be=e}function fu(){return be|0}function _l(){var e=0,n=0;vn(8104,8,400)|0,vn(8504,408,540)|0,e=9044,n=e+44|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));c[9088]=0,c[9089]=1,t[2273]=0,t[2274]=948,t[2275]=948,Bt(17,8104,Q|0)|0}function Sn(e){e=e|0,lf(e+948|0)}function gt(e){return e=w(e),((Ar(e)|0)&2147483647)>>>0>2139095040|0}function en(e,n,r){e=e|0,n=n|0,r=r|0;e:do if(t[e+(n<<3)+4>>2]|0)e=e+(n<<3)|0;else{if((n|2|0)==3?t[e+60>>2]|0:0){e=e+56|0;break}switch(n|0){case 0:case 2:case 4:case 5:{if(t[e+52>>2]|0){e=e+48|0;break e}break}default:}if(t[e+68>>2]|0){e=e+64|0;break}else{e=(n|1|0)==5?948:r;break}}while(0);return e|0}function I0(e){e=e|0;var n=0;return n=uh(1e3)|0,li(e,(n|0)!=0,2456),t[2276]=(t[2276]|0)+1,vn(n|0,8104,1e3)|0,c[e+2>>0]|0&&(t[n+4>>2]=2,t[n+12>>2]=4),t[n+976>>2]=e,n|0}function li(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;s=h,h=h+16|0,o=s,n||(t[o>>2]=r,zs(e,5,3197,o)),h=s}function qu(){return I0(956)|0}function Wi(e){e=e|0;var n=0;return n=Tt(1e3)|0,zu(n,e),li(t[e+976>>2]|0,1,2456),t[2276]=(t[2276]|0)+1,t[n+944>>2]=0,n|0}function zu(e,n){e=e|0,n=n|0;var r=0;vn(e|0,n|0,948)|0,af(e+948|0,n+948|0),r=e+960|0,e=n+960|0,n=r+40|0;do t[r>>2]=t[e>>2],r=r+4|0,e=e+4|0;while((r|0)<(n|0))}function Wu(e){e=e|0;var n=0,r=0,o=0,s=0;if(n=e+944|0,r=t[n>>2]|0,r|0&&(Ls(r+948|0,e)|0,t[n>>2]=0),r=fi(e)|0,r|0){n=0;do t[(e0(e,n)|0)+944>>2]=0,n=n+1|0;while((n|0)!=(r|0))}r=e+948|0,o=t[r>>2]|0,s=e+952|0,n=t[s>>2]|0,(n|0)!=(o|0)&&(t[s>>2]=n+(~((n+-4-o|0)>>>2)<<2)),io(r),sh(e),t[2276]=(t[2276]|0)+-1}function Ls(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0;o=t[e>>2]|0,_=e+4|0,r=t[_>>2]|0,l=r;e:do if((o|0)==(r|0))s=o,d=4;else for(e=o;;){if((t[e>>2]|0)==(n|0)){s=e,d=4;break e}if(e=e+4|0,(e|0)==(r|0)){e=0;break}}while(0);return(d|0)==4&&((s|0)!=(r|0)?(o=s+4|0,e=l-o|0,n=e>>2,n&&(Y1(s|0,o|0,e|0)|0,r=t[_>>2]|0),e=s+(n<<2)|0,(r|0)==(e|0)||(t[_>>2]=r+(~((r+-4-e|0)>>>2)<<2)),e=1):e=0),e|0}function fi(e){return e=e|0,(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2|0}function e0(e,n){e=e|0,n=n|0;var r=0;return r=t[e+948>>2]|0,(t[e+952>>2]|0)-r>>2>>>0>n>>>0?e=t[r+(n<<2)>>2]|0:e=0,e|0}function io(e){e=e|0;var n=0,r=0,o=0,s=0;o=h,h=h+32|0,n=o,s=t[e>>2]|0,r=(t[e+4>>2]|0)-s|0,((t[e+8>>2]|0)-s|0)>>>0>r>>>0&&(s=r>>2,z(n,s,s,e+8|0),dr(e,n),Or(n)),h=o}function D0(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;k=fi(e)|0;do if(k|0){if((t[(e0(e,0)|0)+944>>2]|0)==(e|0)){if(!(Ls(e+948|0,n)|0))break;vn(n+400|0,8504,540)|0,t[n+944>>2]=0,ln(e);break}d=t[(t[e+976>>2]|0)+12>>2]|0,_=e+948|0,y=(d|0)==0,r=0,l=0;do o=t[(t[_>>2]|0)+(l<<2)>>2]|0,(o|0)==(n|0)?ln(e):(s=Wi(o)|0,t[(t[_>>2]|0)+(r<<2)>>2]=s,t[s+944>>2]=e,y||Q4[d&15](o,s,e,r),r=r+1|0),l=l+1|0;while((l|0)!=(k|0));if(r>>>0>>0){y=e+948|0,_=e+952|0,d=r,r=t[_>>2]|0;do l=(t[y>>2]|0)+(d<<2)|0,o=l+4|0,s=r-o|0,n=s>>2,n&&(Y1(l|0,o|0,s|0)|0,r=t[_>>2]|0),s=r,o=l+(n<<2)|0,(s|0)!=(o|0)&&(r=s+(~((s+-4-o|0)>>>2)<<2)|0,t[_>>2]=r),d=d+1|0;while((d|0)!=(k|0))}}while(0)}function Do(e){e=e|0;var n=0,r=0,o=0,s=0;i0(e,(fi(e)|0)==0,2491),i0(e,(t[e+944>>2]|0)==0,2545),n=e+948|0,r=t[n>>2]|0,o=e+952|0,s=t[o>>2]|0,(s|0)!=(r|0)&&(t[o>>2]=s+(~((s+-4-r|0)>>>2)<<2)),io(n),n=e+976|0,r=t[n>>2]|0,vn(e|0,8104,1e3)|0,c[r+2>>0]|0&&(t[e+4>>2]=2,t[e+12>>2]=4),t[n>>2]=r}function i0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;s=h,h=h+16|0,o=s,n||(t[o>>2]=r,wn(e,5,3197,o)),h=s}function Rs(){return t[2276]|0}function a0(){var e=0;return e=uh(20)|0,Hu((e|0)!=0,2592),t[2277]=(t[2277]|0)+1,t[e>>2]=t[239],t[e+4>>2]=t[240],t[e+8>>2]=t[241],t[e+12>>2]=t[242],t[e+16>>2]=t[243],e|0}function Hu(e,n){e=e|0,n=n|0;var r=0,o=0;o=h,h=h+16|0,r=o,e||(t[r>>2]=n,wn(0,5,3197,r)),h=o}function V0(e){e=e|0,sh(e),t[2277]=(t[2277]|0)+-1}function bu(e,n){e=e|0,n=n|0;var r=0;n?(i0(e,(fi(e)|0)==0,2629),r=1):(r=0,n=0),t[e+964>>2]=n,t[e+988>>2]=r}function Ns(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,l=o+8|0,s=o+4|0,d=o,t[s>>2]=n,i0(e,(t[n+944>>2]|0)==0,2709),i0(e,(t[e+964>>2]|0)==0,2763),bo(e),n=e+948|0,t[d>>2]=(t[n>>2]|0)+(r<<2),t[l>>2]=t[d>>2],P0(n,l,s)|0,t[(t[s>>2]|0)+944>>2]=e,ln(e),h=o}function bo(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;if(r=fi(e)|0,r|0?(t[(e0(e,0)|0)+944>>2]|0)!=(e|0):0){o=t[(t[e+976>>2]|0)+12>>2]|0,s=e+948|0,l=(o|0)==0,n=0;do d=t[(t[s>>2]|0)+(n<<2)>>2]|0,_=Wi(d)|0,t[(t[s>>2]|0)+(n<<2)>>2]=_,t[_+944>>2]=e,l||Q4[o&15](d,_,e,n),n=n+1|0;while((n|0)!=(r|0))}}function P0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0;Pe=h,h=h+64|0,P=Pe+52|0,_=Pe+48|0,q=Pe+28|0,we=Pe+24|0,le=Pe+20|0,ie=Pe,o=t[e>>2]|0,l=o,n=o+((t[n>>2]|0)-l>>2<<2)|0,o=e+4|0,s=t[o>>2]|0,d=e+8|0;do if(s>>>0<(t[d>>2]|0)>>>0){if((n|0)==(s|0)){t[n>>2]=t[r>>2],t[o>>2]=(t[o>>2]|0)+4;break}Qn(e,n,s,n+4|0),n>>>0<=r>>>0&&(r=(t[o>>2]|0)>>>0>r>>>0?r+4|0:r),t[n>>2]=t[r>>2]}else{o=(s-l>>2)+1|0,s=Q0(e)|0,s>>>0>>0&&$n(e),T=t[e>>2]|0,k=(t[d>>2]|0)-T|0,l=k>>1,z(ie,k>>2>>>0>>1>>>0?l>>>0>>0?o:l:s,n-T>>2,e+8|0),T=ie+8|0,o=t[T>>2]|0,l=ie+12|0,k=t[l>>2]|0,d=k,y=o;do if((o|0)==(k|0)){if(k=ie+4|0,o=t[k>>2]|0,ke=t[ie>>2]|0,s=ke,o>>>0<=ke>>>0){o=d-s>>1,o=(o|0)==0?1:o,z(q,o,o>>>2,t[ie+16>>2]|0),t[we>>2]=t[k>>2],t[le>>2]=t[T>>2],t[_>>2]=t[we>>2],t[P>>2]=t[le>>2],s0(q,_,P),o=t[ie>>2]|0,t[ie>>2]=t[q>>2],t[q>>2]=o,o=q+4|0,ke=t[k>>2]|0,t[k>>2]=t[o>>2],t[o>>2]=ke,o=q+8|0,ke=t[T>>2]|0,t[T>>2]=t[o>>2],t[o>>2]=ke,o=q+12|0,ke=t[l>>2]|0,t[l>>2]=t[o>>2],t[o>>2]=ke,Or(q),o=t[T>>2]|0;break}l=o,d=((l-s>>2)+1|0)/-2|0,_=o+(d<<2)|0,s=y-l|0,l=s>>2,l&&(Y1(_|0,o|0,s|0)|0,o=t[k>>2]|0),ke=_+(l<<2)|0,t[T>>2]=ke,t[k>>2]=o+(d<<2),o=ke}while(0);t[o>>2]=t[r>>2],t[T>>2]=(t[T>>2]|0)+4,n=nn(e,ie,n)|0,Or(ie)}while(0);return h=Pe,n|0}function ln(e){e=e|0;var n=0;do{if(n=e+984|0,c[n>>0]|0)break;c[n>>0]=1,D[e+504>>2]=w(J),e=t[e+944>>2]|0}while((e|0)!=0)}function lf(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function nr(e){return e=e|0,t[e+944>>2]|0}function rr(e){e=e|0,i0(e,(t[e+964>>2]|0)!=0,2832),ln(e)}function Go(e){return e=e|0,(c[e+984>>0]|0)!=0|0}function Gu(e,n){e=e|0,n=n|0,fL(e,n,400)|0&&(vn(e|0,n|0,400)|0,ln(e))}function yl(e){e=e|0;var n=tt;return n=w(D[e+44>>2]),e=gt(n)|0,w(e?w(0):n)}function cu(e){e=e|0;var n=tt;return n=w(D[e+48>>2]),gt(n)|0&&(n=c[(t[e+976>>2]|0)+2>>0]|0?w(1):w(0)),w(n)}function Bs(e,n){e=e|0,n=n|0,t[e+980>>2]=n}function Vu(e){return e=e|0,t[e+980>>2]|0}function M0(e,n){e=e|0,n=n|0;var r=0;r=e+4|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function au(e){return e=e|0,t[e+4>>2]|0}function Lr(e,n){e=e|0,n=n|0;var r=0;r=e+8|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function F(e){return e=e|0,t[e+8>>2]|0}function R(e,n){e=e|0,n=n|0;var r=0;r=e+12|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function U(e){return e=e|0,t[e+12>>2]|0}function H(e,n){e=e|0,n=n|0;var r=0;r=e+16|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function fe(e){return e=e|0,t[e+16>>2]|0}function ue(e,n){e=e|0,n=n|0;var r=0;r=e+20|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function de(e){return e=e|0,t[e+20>>2]|0}function W(e,n){e=e|0,n=n|0;var r=0;r=e+24|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function ve(e){return e=e|0,t[e+24>>2]|0}function Fe(e,n){e=e|0,n=n|0;var r=0;r=e+28|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function Ge(e){return e=e|0,t[e+28>>2]|0}function K(e,n){e=e|0,n=n|0;var r=0;r=e+32|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function xe(e){return e=e|0,t[e+32>>2]|0}function je(e,n){e=e|0,n=n|0;var r=0;r=e+36|0,(t[r>>2]|0)!=(n|0)&&(t[r>>2]=n,ln(e))}function Xe(e){return e=e|0,t[e+36>>2]|0}function rt(e,n){e=e|0,n=w(n);var r=0;r=e+40|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function st(e,n){e=e|0,n=w(n);var r=0;r=e+44|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function xt(e,n){e=e|0,n=w(n);var r=0;r=e+48|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function wt(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+52|0,s=e+56|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function lt(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+52|0,r=e+56|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function Rt(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+52|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function yn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function sn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+132+(n<<3)|0,n=e+132+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function ar(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+132+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function rn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Hn(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+60+(n<<3)|0,n=e+60+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function d0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+60+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function Cr(e,n){e=e|0,n=n|0;var r=0;r=e+60+(n<<3)+4|0,(t[r>>2]|0)!=3&&(D[e+60+(n<<3)>>2]=w(J),t[r>>2]=3,ln(e))}function He(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Qe(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=l?0:2,s=e+204+(n<<3)|0,n=e+204+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function Ne(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=n+204+(r<<3)|0,n=t[o+4>>2]|0,r=e,t[r>>2]=t[o>>2],t[r+4>>2]=n}function ft(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0,l=0;l=gt(r)|0,o=(l^1)&1,s=e+276+(n<<3)|0,n=e+276+(n<<3)+4|0,(l|w(D[s>>2])==r?(t[n>>2]|0)==(o|0):0)||(D[s>>2]=r,t[n>>2]=o,ln(e))}function St(e,n){return e=e|0,n=n|0,w(D[e+276+(n<<3)>>2])}function Qt(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+348|0,s=e+352|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Cn(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+348|0,r=e+352|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function bn(e){e=e|0;var n=0;n=e+352|0,(t[n>>2]|0)!=3&&(D[e+348>>2]=w(J),t[n>>2]=3,ln(e))}function p0(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+348|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function h0(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+356|0,s=e+360|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function ci(e,n){e=e|0,n=w(n);var r=0,o=0;o=e+356|0,r=e+360|0,(w(D[o>>2])==n?(t[r>>2]|0)==2:0)||(D[o>>2]=n,o=gt(n)|0,t[r>>2]=o?3:2,ln(e))}function xi(e){e=e|0;var n=0;n=e+360|0,(t[n>>2]|0)!=3&&(D[e+356>>2]=w(J),t[n>>2]=3,ln(e))}function E0(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+356|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function qr(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+364|0,s=e+368|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Eo(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+364|0,s=e+368|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function So(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+364|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function wl(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+372|0,s=e+376|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function js(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+372|0,s=e+376|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Dl(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+372|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function du(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+380|0,s=e+384|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Yu(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+380|0,s=e+384|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Us(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+380|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function oo(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=(l^1)&1,o=e+388|0,s=e+392|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function Hi(e,n){e=e|0,n=w(n);var r=0,o=0,s=0,l=0;l=gt(n)|0,r=l?0:2,o=e+388|0,s=e+392|0,(l|w(D[o>>2])==n?(t[s>>2]|0)==(r|0):0)||(D[o>>2]=n,t[s>>2]=r,ln(e))}function qs(e,n){e=e|0,n=n|0;var r=0,o=0;o=n+388|0,r=t[o+4>>2]|0,n=e,t[n>>2]=t[o>>2],t[n+4>>2]=r}function F0(e,n){e=e|0,n=w(n);var r=0;r=e+396|0,w(D[r>>2])!=n&&(D[r>>2]=n,ln(e))}function Gr(e){return e=e|0,w(D[e+396>>2])}function ir(e){return e=e|0,w(D[e+400>>2])}function L0(e){return e=e|0,w(D[e+404>>2])}function Y0(e){return e=e|0,w(D[e+408>>2])}function Co(e){return e=e|0,w(D[e+412>>2])}function $u(e){return e=e|0,w(D[e+416>>2])}function Vo(e){return e=e|0,w(D[e+420>>2])}function Rr(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+424+(n<<2)>>2])}function Jn(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+448+(n<<2)>>2])}function ai(e,n){switch(e=e|0,n=n|0,i0(e,(n|0)<6,2918),n|0){case 0:{n=(t[e+496>>2]|0)==2?5:4;break}case 2:{n=(t[e+496>>2]|0)==2?4:5;break}default:}return w(D[e+472+(n<<2)>>2])}function o0(e,n){e=e|0,n=n|0;var r=0,o=tt;return r=t[e+4>>2]|0,(r|0)==(t[n+4>>2]|0)?r?(o=w(D[e>>2]),e=w(Ot(w(o-w(D[n>>2]))))>2]=0,t[o+4>>2]=0,t[o+8>>2]=0,Ru(o|0,e|0,n|0,0),wn(e,3,(c[o+11>>0]|0)<0?t[o>>2]|0:o,r),ML(o),h=r}function $0(e,n,r,o){e=w(e),n=w(n),r=r|0,o=o|0;var s=tt;e=w(e*n),s=w(V4(e,w(1)));do if(Vr(s,w(0))|0)e=w(e-s);else{if(e=w(e-s),Vr(s,w(1))|0){e=w(e+w(1));break}if(r){e=w(e+w(1));break}o||(s>w(.5)?s=w(1):(o=Vr(s,w(.5))|0,s=w(o?1:0)),e=w(e+s))}while(0);return w(e/n)}function K0(e,n,r,o,s,l,d,_,y,k,T,P,q){e=e|0,n=w(n),r=r|0,o=w(o),s=s|0,l=w(l),d=d|0,_=w(_),y=w(y),k=w(k),T=w(T),P=w(P),q=q|0;var we=0,le=tt,ie=tt,Pe=tt,ke=tt,qe=tt,pe=tt;return y>2]),le!=w(0)):0)?(Pe=w($0(n,le,0,0)),ke=w($0(o,le,0,0)),ie=w($0(l,le,0,0)),le=w($0(_,le,0,0))):(ie=l,Pe=n,le=_,ke=o),(s|0)==(e|0)?we=Vr(ie,Pe)|0:we=0,(d|0)==(r|0)?q=Vr(le,ke)|0:q=0,((we?0:(qe=w(n-T),!(ae(e,qe,y)|0)))?!(Be(e,qe,s,y)|0):0)?we=Ie(e,qe,s,l,y)|0:we=1,((q?0:(pe=w(o-P),!(ae(r,pe,k)|0)))?!(Be(r,pe,d,k)|0):0)?q=Ie(r,pe,d,_,k)|0:q=1,q=we&q),q|0}function ae(e,n,r){return e=e|0,n=w(n),r=w(r),(e|0)==1?e=Vr(n,r)|0:e=0,e|0}function Be(e,n,r,o){return e=e|0,n=w(n),r=r|0,o=w(o),(e|0)==2&(r|0)==0?n>=o?e=1:e=Vr(n,o)|0:e=0,e|0}function Ie(e,n,r,o,s){return e=e|0,n=w(n),r=r|0,o=w(o),s=w(s),(e|0)==2&(r|0)==2&o>n?s<=n?e=1:e=Vr(n,s)|0:e=0,e|0}function ht(e,n,r,o,s,l,d,_,y,k,T){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=l|0,d=w(d),_=w(_),y=y|0,k=k|0,T=T|0;var P=0,q=0,we=0,le=0,ie=tt,Pe=tt,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=tt,Ki=tt,Xi=tt,Ji=0,Ro=0;zt=h,h=h+160|0,It=zt+152|0,Ht=zt+120|0,Ln=zt+104|0,pe=zt+72|0,le=zt+56|0,vt=zt+8|0,qe=zt,_e=(t[2279]|0)+1|0,t[2279]=_e,gn=e+984|0,((c[gn>>0]|0)!=0?(t[e+512>>2]|0)!=(t[2278]|0):0)?ke=4:(t[e+516>>2]|0)==(o|0)?Pn=0:ke=4,(ke|0)==4&&(t[e+520>>2]=0,t[e+924>>2]=-1,t[e+928>>2]=-1,D[e+932>>2]=w(-1),D[e+936>>2]=w(-1),Pn=1);e:do if(t[e+964>>2]|0)if(ie=w(mt(e,2,d)),Pe=w(mt(e,0,d)),P=e+916|0,Xi=w(D[P>>2]),Ki=w(D[e+920>>2]),Dr=w(D[e+932>>2]),K0(s,n,l,r,t[e+924>>2]|0,Xi,t[e+928>>2]|0,Ki,Dr,w(D[e+936>>2]),ie,Pe,T)|0)ke=22;else if(we=t[e+520>>2]|0,!we)ke=21;else for(q=0;;){if(P=e+524+(q*24|0)|0,Dr=w(D[P>>2]),Ki=w(D[e+524+(q*24|0)+4>>2]),Xi=w(D[e+524+(q*24|0)+16>>2]),K0(s,n,l,r,t[e+524+(q*24|0)+8>>2]|0,Dr,t[e+524+(q*24|0)+12>>2]|0,Ki,Xi,w(D[e+524+(q*24|0)+20>>2]),ie,Pe,T)|0){ke=22;break e}if(q=q+1|0,q>>>0>=we>>>0){ke=21;break}}else{if(y){if(P=e+916|0,!(Vr(w(D[P>>2]),n)|0)){ke=21;break}if(!(Vr(w(D[e+920>>2]),r)|0)){ke=21;break}if((t[e+924>>2]|0)!=(s|0)){ke=21;break}P=(t[e+928>>2]|0)==(l|0)?P:0,ke=22;break}if(we=t[e+520>>2]|0,!we)ke=21;else for(q=0;;){if(P=e+524+(q*24|0)|0,((Vr(w(D[P>>2]),n)|0?Vr(w(D[e+524+(q*24|0)+4>>2]),r)|0:0)?(t[e+524+(q*24|0)+8>>2]|0)==(s|0):0)?(t[e+524+(q*24|0)+12>>2]|0)==(l|0):0){ke=22;break e}if(q=q+1|0,q>>>0>=we>>>0){ke=21;break}}}while(0);do if((ke|0)==21)c[11697]|0?(P=0,ke=28):(P=0,ke=31);else if((ke|0)==22){if(q=(c[11697]|0)!=0,!((P|0)!=0&(Pn^1)))if(q){ke=28;break}else{ke=31;break}le=P+16|0,t[e+908>>2]=t[le>>2],we=P+20|0,t[e+912>>2]=t[we>>2],(c[11698]|0)==0|q^1||(t[qe>>2]=Gn(_e)|0,t[qe+4>>2]=_e,wn(e,4,2972,qe),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),s=$t(s,y)|0,l=$t(l,y)|0,Ro=+w(D[le>>2]),Ji=+w(D[we>>2]),t[vt>>2]=s,t[vt+4>>2]=l,L[vt+8>>3]=+n,L[vt+16>>3]=+r,L[vt+24>>3]=Ro,L[vt+32>>3]=Ji,t[vt+40>>2]=k,wn(e,4,2989,vt))}while(0);return(ke|0)==28&&(q=Gn(_e)|0,t[le>>2]=q,t[le+4>>2]=_e,t[le+8>>2]=Pn?3047:11699,wn(e,4,3038,le),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),vt=$t(s,y)|0,ke=$t(l,y)|0,t[pe>>2]=vt,t[pe+4>>2]=ke,L[pe+8>>3]=+n,L[pe+16>>3]=+r,t[pe+24>>2]=k,wn(e,4,3049,pe),ke=31),(ke|0)==31&&(X0(e,n,r,o,s,l,d,_,y,T),c[11697]|0&&(q=t[2279]|0,vt=Gn(q)|0,t[Ln>>2]=vt,t[Ln+4>>2]=q,t[Ln+8>>2]=Pn?3047:11699,wn(e,4,3083,Ln),q=t[e+972>>2]|0,q|0&&Nl[q&127](e),vt=$t(s,y)|0,Ln=$t(l,y)|0,Ji=+w(D[e+908>>2]),Ro=+w(D[e+912>>2]),t[Ht>>2]=vt,t[Ht+4>>2]=Ln,L[Ht+8>>3]=Ji,L[Ht+16>>3]=Ro,t[Ht+24>>2]=k,wn(e,4,3092,Ht)),t[e+516>>2]=o,P||(q=e+520|0,P=t[q>>2]|0,(P|0)==16&&(c[11697]|0&&wn(e,4,3124,It),t[q>>2]=0,P=0),y?P=e+916|0:(t[q>>2]=P+1,P=e+524+(P*24|0)|0),D[P>>2]=n,D[P+4>>2]=r,t[P+8>>2]=s,t[P+12>>2]=l,t[P+16>>2]=t[e+908>>2],t[P+20>>2]=t[e+912>>2],P=0)),y&&(t[e+416>>2]=t[e+908>>2],t[e+420>>2]=t[e+912>>2],c[e+985>>0]=1,c[gn>>0]=0),t[2279]=(t[2279]|0)+-1,t[e+512>>2]=t[2278],h=zt,Pn|(P|0)==0|0}function mt(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(Tr(e,n,r)),w(o+w(R0(e,n,r)))}function wn(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=h,h=h+16|0,s=l,t[s>>2]=o,e?o=t[e+976>>2]|0:o=0,Ku(o,e,n,r,s),h=l}function Gn(e){return e=e|0,(e>>>0>60?3201:3201+(60-e)|0)|0}function $t(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+32|0,r=s+12|0,o=s,t[r>>2]=t[254],t[r+4>>2]=t[255],t[r+8>>2]=t[256],t[o>>2]=t[257],t[o+4>>2]=t[258],t[o+8>>2]=t[259],(e|0)>2?e=11699:e=t[(n?o:r)+(e<<2)>>2]|0,h=s,e|0}function X0(e,n,r,o,s,l,d,_,y,k){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=l|0,d=w(d),_=w(_),y=y|0,k=k|0;var T=0,P=0,q=0,we=0,le=tt,ie=tt,Pe=tt,ke=tt,qe=tt,pe=tt,_e=tt,vt=0,Ln=0,Ht=0,It=tt,gn=tt,Pn=0,zt=tt,Dr=0,Ki=0,Xi=0,Ji=0,Ro=0,kf=0,Af=0,Cu=0,Of=0,Js=0,Qs=0,If=0,Pf=0,Mf=0,Kn=0,Tu=0,Ff=0,us=0,Lf=tt,Rf=tt,Zs=tt,el=tt,ss=tt,Fi=0,nu=0,go=0,xu=0,jl=0,Ul=tt,tl=tt,ql=tt,zl=tt,Li=tt,Di=tt,ku=0,xr=tt,Wl=tt,Qi=tt,ls=tt,Zi=tt,fs=tt,Hl=0,bl=0,cs=tt,Ri=tt,Au=0,Gl=0,Vl=0,Yl=0,En=tt,br=0,Ei=0,eo=0,Ni=0,xn=0,Vt=0,Ou=0,kt=tt,$l=0,Qr=0;Ou=h,h=h+16|0,Fi=Ou+12|0,nu=Ou+8|0,go=Ou+4|0,xu=Ou,i0(e,(s|0)==0|(gt(n)|0)^1,3326),i0(e,(l|0)==0|(gt(r)|0)^1,3406),Ei=so(e,o)|0,t[e+496>>2]=Ei,xn=N0(2,Ei)|0,Vt=N0(0,Ei)|0,D[e+440>>2]=w(Tr(e,xn,d)),D[e+444>>2]=w(R0(e,xn,d)),D[e+428>>2]=w(Tr(e,Vt,d)),D[e+436>>2]=w(R0(e,Vt,d)),D[e+464>>2]=w(C0(e,xn)),D[e+468>>2]=w(di(e,xn)),D[e+452>>2]=w(C0(e,Vt)),D[e+460>>2]=w(di(e,Vt)),D[e+488>>2]=w(u0(e,xn,d)),D[e+492>>2]=w(v0(e,xn,d)),D[e+476>>2]=w(u0(e,Vt,d)),D[e+484>>2]=w(v0(e,Vt,d));do if(t[e+964>>2]|0)To(e,n,r,s,l,d,_);else{if(eo=e+948|0,Ni=(t[e+952>>2]|0)-(t[eo>>2]|0)>>2,!Ni){pu(e,n,r,s,l,d,_);break}if(y?0:Sl(e,n,r,s,l,d,_)|0)break;bo(e),Tu=e+508|0,c[Tu>>0]=0,xn=N0(t[e+4>>2]|0,Ei)|0,Vt=Cl(xn,Ei)|0,br=Nr(xn)|0,Ff=t[e+8>>2]|0,Gl=e+28|0,us=(t[Gl>>2]|0)!=0,Zi=br?d:_,cs=br?_:d,Lf=w(B0(e,xn,d)),Rf=w(hu(e,xn,d)),le=w(B0(e,Vt,d)),fs=w(Fn(e,xn,d)),Ri=w(Fn(e,Vt,d)),Ht=br?s:l,Au=br?l:s,En=br?fs:Ri,qe=br?Ri:fs,ls=w(mt(e,2,d)),ke=w(mt(e,0,d)),ie=w(w(Tn(e+364|0,d))-En),Pe=w(w(Tn(e+380|0,d))-En),pe=w(w(Tn(e+372|0,_))-qe),_e=w(w(Tn(e+388|0,_))-qe),Zs=br?ie:pe,el=br?Pe:_e,ls=w(n-ls),n=w(ls-En),gt(n)|0?En=n:En=w(Ur(w(cc(n,Pe)),ie)),Wl=w(r-ke),n=w(Wl-qe),gt(n)|0?Qi=n:Qi=w(Ur(w(cc(n,_e)),pe)),ie=br?En:Qi,xr=br?Qi:En;e:do if((Ht|0)==1)for(o=0,P=0;;){if(T=e0(e,P)|0,!o)(w(Br(T))>w(0)?w(zr(T))>w(0):0)?o=T:o=0;else if(pi(T)|0){we=0;break e}if(P=P+1|0,P>>>0>=Ni>>>0){we=o;break}}else we=0;while(0);vt=we+500|0,Ln=we+504|0,o=0,T=0,n=w(0),q=0;do{if(P=t[(t[eo>>2]|0)+(q<<2)>>2]|0,(t[P+36>>2]|0)==1)lo(P),c[P+985>>0]=1,c[P+984>>0]=0;else{$r(P),y&&Yo(P,so(P,Ei)|0,ie,xr,En);do if((t[P+24>>2]|0)!=1)if((P|0)==(we|0)){t[vt>>2]=t[2278],D[Ln>>2]=w(0);break}else{wr(e,P,En,s,Qi,En,Qi,l,Ei,k);break}else T|0&&(t[T+960>>2]=P),t[P+960>>2]=0,T=P,o=(o|0)==0?P:o;while(0);Di=w(D[P+504>>2]),n=w(n+w(Di+w(mt(P,xn,En))))}q=q+1|0}while((q|0)!=(Ni|0));for(Xi=n>ie,ku=us&((Ht|0)==2&Xi)?1:Ht,Dr=(Au|0)==1,Ro=Dr&(y^1),kf=(ku|0)==1,Af=(ku|0)==2,Cu=976+(xn<<2)|0,Of=(Au|2|0)==2,Mf=Dr&(us^1),Js=1040+(Vt<<2)|0,Qs=1040+(xn<<2)|0,If=976+(Vt<<2)|0,Pf=(Au|0)!=1,Xi=us&((Ht|0)!=0&Xi),Ki=e+976|0,Dr=Dr^1,n=ie,Pn=0,Ji=0,Di=w(0),ss=w(0);;){e:do if(Pn>>>0>>0)for(Ln=t[eo>>2]|0,q=0,_e=w(0),pe=w(0),Pe=w(0),ie=w(0),P=0,T=0,we=Pn;;){if(vt=t[Ln+(we<<2)>>2]|0,(t[vt+36>>2]|0)!=1?(t[vt+940>>2]=Ji,(t[vt+24>>2]|0)!=1):0){if(ke=w(mt(vt,xn,En)),Kn=t[Cu>>2]|0,r=w(Tn(vt+380+(Kn<<3)|0,Zi)),qe=w(D[vt+504>>2]),r=w(cc(r,qe)),r=w(Ur(w(Tn(vt+364+(Kn<<3)|0,Zi)),r)),us&(q|0)!=0&w(ke+w(pe+r))>n){l=q,ke=_e,Ht=we;break e}ke=w(ke+r),r=w(pe+ke),ke=w(_e+ke),pi(vt)|0&&(Pe=w(Pe+w(Br(vt))),ie=w(ie-w(qe*w(zr(vt))))),T|0&&(t[T+960>>2]=vt),t[vt+960>>2]=0,q=q+1|0,T=vt,P=(P|0)==0?vt:P}else ke=_e,r=pe;if(we=we+1|0,we>>>0>>0)_e=ke,pe=r;else{l=q,Ht=we;break}}else l=0,ke=w(0),Pe=w(0),ie=w(0),P=0,Ht=Pn;while(0);Kn=Pe>w(0)&Pew(0)&ieel&((gt(el)|0)^1))n=el,Kn=51;else if(c[(t[Ki>>2]|0)+3>>0]|0)Kn=51;else{if(It!=w(0)?w(Br(e))!=w(0):0){Kn=53;break}n=ke,Kn=53}while(0);if((Kn|0)==51&&(Kn=0,gt(n)|0?Kn=53:(gn=w(n-ke),zt=n)),(Kn|0)==53&&(Kn=0,ke>2]|0,we=gnw(0),pe=w(gn/It),Pe=w(0),ke=w(0),n=w(0),T=P;do r=w(Tn(T+380+(q<<3)|0,Zi)),ie=w(Tn(T+364+(q<<3)|0,Zi)),ie=w(cc(r,w(Ur(ie,w(D[T+504>>2]))))),we?(r=w(ie*w(zr(T))),(r!=w(-0)?(kt=w(ie-w(qe*r)),Ul=w(kn(T,xn,kt,zt,En)),kt!=Ul):0)&&(Pe=w(Pe-w(Ul-ie)),n=w(n+r))):((vt?(tl=w(Br(T)),tl!=w(0)):0)?(kt=w(ie+w(pe*tl)),ql=w(kn(T,xn,kt,zt,En)),kt!=ql):0)&&(Pe=w(Pe-w(ql-ie)),ke=w(ke-tl)),T=t[T+960>>2]|0;while((T|0)!=0);if(n=w(_e+n),ie=w(gn+Pe),jl)n=w(0);else{qe=w(It+ke),we=t[Cu>>2]|0,vt=iew(0),qe=w(ie/qe),n=w(0);do{kt=w(Tn(P+380+(we<<3)|0,Zi)),Pe=w(Tn(P+364+(we<<3)|0,Zi)),Pe=w(cc(kt,w(Ur(Pe,w(D[P+504>>2]))))),vt?(kt=w(Pe*w(zr(P))),ie=w(-kt),kt!=w(-0)?(kt=w(pe*ie),ie=w(kn(P,xn,w(Pe+(Ln?ie:kt)),zt,En))):ie=Pe):(q?(zl=w(Br(P)),zl!=w(0)):0)?ie=w(kn(P,xn,w(Pe+w(qe*zl)),zt,En)):ie=Pe,n=w(n-w(ie-Pe)),ke=w(mt(P,xn,En)),r=w(mt(P,Vt,En)),ie=w(ie+ke),D[nu>>2]=ie,t[xu>>2]=1,Pe=w(D[P+396>>2]);e:do if(gt(Pe)|0){T=gt(xr)|0;do if(!T){if(Xi|(m0(P,Vt,xr)|0|Dr)||(T0(e,P)|0)!=4||(t[(hi(P,Vt)|0)+4>>2]|0)==3||(t[(Ai(P,Vt)|0)+4>>2]|0)==3)break;D[Fi>>2]=xr,t[go>>2]=1;break e}while(0);if(m0(P,Vt,xr)|0){T=t[P+992+(t[If>>2]<<2)>>2]|0,kt=w(r+w(Tn(T,xr))),D[Fi>>2]=kt,T=Pf&(t[T+4>>2]|0)==2,t[go>>2]=((gt(kt)|0|T)^1)&1;break}else{D[Fi>>2]=xr,t[go>>2]=T?0:2;break}}else kt=w(ie-ke),It=w(kt/Pe),kt=w(Pe*kt),t[go>>2]=1,D[Fi>>2]=w(r+(br?It:kt));while(0);Kt(P,xn,zt,En,xu,nu),Kt(P,Vt,xr,En,go,Fi);do if(m0(P,Vt,xr)|0?0:(T0(e,P)|0)==4){if((t[(hi(P,Vt)|0)+4>>2]|0)==3){T=0;break}T=(t[(Ai(P,Vt)|0)+4>>2]|0)!=3}else T=0;while(0);kt=w(D[nu>>2]),It=w(D[Fi>>2]),$l=t[xu>>2]|0,Qr=t[go>>2]|0,ht(P,br?kt:It,br?It:kt,Ei,br?$l:Qr,br?Qr:$l,En,Qi,y&(T^1),3488,k)|0,c[Tu>>0]=c[Tu>>0]|c[P+508>>0],P=t[P+960>>2]|0}while((P|0)!=0)}}else n=w(0);if(n=w(gn+n),Qr=n>0]=Qr|C[Tu>>0],Af&n>w(0)?(T=t[Cu>>2]|0,((t[e+364+(T<<3)+4>>2]|0)!=0?(Li=w(Tn(e+364+(T<<3)|0,Zi)),Li>=w(0)):0)?ie=w(Ur(w(0),w(Li-w(zt-n)))):ie=w(0)):ie=n,vt=Pn>>>0>>0,vt){we=t[eo>>2]|0,q=Pn,T=0;do P=t[we+(q<<2)>>2]|0,t[P+24>>2]|0||(T=((t[(hi(P,xn)|0)+4>>2]|0)==3&1)+T|0,T=T+((t[(Ai(P,xn)|0)+4>>2]|0)==3&1)|0),q=q+1|0;while((q|0)!=(Ht|0));T?(ke=w(0),r=w(0)):Kn=101}else Kn=101;e:do if((Kn|0)==101)switch(Kn=0,Ff|0){case 1:{T=0,ke=w(ie*w(.5)),r=w(0);break e}case 2:{T=0,ke=ie,r=w(0);break e}case 3:{if(l>>>0<=1){T=0,ke=w(0),r=w(0);break e}r=w((l+-1|0)>>>0),T=0,ke=w(0),r=w(w(Ur(ie,w(0)))/r);break e}case 5:{r=w(ie/w((l+1|0)>>>0)),T=0,ke=r;break e}case 4:{r=w(ie/w(l>>>0)),T=0,ke=w(r*w(.5));break e}default:{T=0,ke=w(0),r=w(0);break e}}while(0);if(n=w(Lf+ke),vt){Pe=w(ie/w(T|0)),q=t[eo>>2]|0,P=Pn,ie=w(0);do{T=t[q+(P<<2)>>2]|0;e:do if((t[T+36>>2]|0)!=1){switch(t[T+24>>2]|0){case 1:{if(X(T,xn)|0){if(!y)break e;kt=w(Y(T,xn,zt)),kt=w(kt+w(C0(e,xn))),kt=w(kt+w(Tr(T,xn,En))),D[T+400+(t[Qs>>2]<<2)>>2]=kt;break e}break}case 0:if(Qr=(t[(hi(T,xn)|0)+4>>2]|0)==3,kt=w(Pe+n),n=Qr?kt:n,y&&(Qr=T+400+(t[Qs>>2]<<2)|0,D[Qr>>2]=w(n+w(D[Qr>>2]))),Qr=(t[(Ai(T,xn)|0)+4>>2]|0)==3,kt=w(Pe+n),n=Qr?kt:n,Ro){kt=w(r+w(mt(T,xn,En))),ie=xr,n=w(n+w(kt+w(D[T+504>>2])));break e}else{n=w(n+w(r+w(ye(T,xn,En)))),ie=w(Ur(ie,w(ye(T,Vt,En))));break e}default:}y&&(kt=w(ke+w(C0(e,xn))),Qr=T+400+(t[Qs>>2]<<2)|0,D[Qr>>2]=w(kt+w(D[Qr>>2])))}while(0);P=P+1|0}while((P|0)!=(Ht|0))}else ie=w(0);if(r=w(Rf+n),Of?ke=w(w(kn(e,Vt,w(Ri+ie),cs,d))-Ri):ke=xr,Pe=w(w(kn(e,Vt,w(Ri+(Mf?xr:ie)),cs,d))-Ri),vt&y){P=Pn;do{q=t[(t[eo>>2]|0)+(P<<2)>>2]|0;do if((t[q+36>>2]|0)!=1){if((t[q+24>>2]|0)==1){if(X(q,Vt)|0){if(kt=w(Y(q,Vt,xr)),kt=w(kt+w(C0(e,Vt))),kt=w(kt+w(Tr(q,Vt,En))),T=t[Js>>2]|0,D[q+400+(T<<2)>>2]=kt,!(gt(kt)|0))break}else T=t[Js>>2]|0;kt=w(C0(e,Vt)),D[q+400+(T<<2)>>2]=w(kt+w(Tr(q,Vt,En)));break}T=T0(e,q)|0;do if((T|0)==4){if((t[(hi(q,Vt)|0)+4>>2]|0)==3){Kn=139;break}if((t[(Ai(q,Vt)|0)+4>>2]|0)==3){Kn=139;break}if(m0(q,Vt,xr)|0){n=le;break}$l=t[q+908+(t[Cu>>2]<<2)>>2]|0,t[Fi>>2]=$l,n=w(D[q+396>>2]),Qr=gt(n)|0,ie=(t[j>>2]=$l,w(D[j>>2])),Qr?n=Pe:(gn=w(mt(q,Vt,En)),kt=w(ie/n),n=w(n*ie),n=w(gn+(br?kt:n))),D[nu>>2]=n,D[Fi>>2]=w(w(mt(q,xn,En))+ie),t[go>>2]=1,t[xu>>2]=1,Kt(q,xn,zt,En,go,Fi),Kt(q,Vt,xr,En,xu,nu),n=w(D[Fi>>2]),gn=w(D[nu>>2]),kt=br?n:gn,n=br?gn:n,Qr=((gt(kt)|0)^1)&1,ht(q,kt,n,Ei,Qr,((gt(n)|0)^1)&1,En,Qi,1,3493,k)|0,n=le}else Kn=139;while(0);e:do if((Kn|0)==139){Kn=0,n=w(ke-w(ye(q,Vt,En)));do if((t[(hi(q,Vt)|0)+4>>2]|0)==3){if((t[(Ai(q,Vt)|0)+4>>2]|0)!=3)break;n=w(le+w(Ur(w(0),w(n*w(.5)))));break e}while(0);if((t[(Ai(q,Vt)|0)+4>>2]|0)==3){n=le;break}if((t[(hi(q,Vt)|0)+4>>2]|0)==3){n=w(le+w(Ur(w(0),n)));break}switch(T|0){case 1:{n=le;break e}case 2:{n=w(le+w(n*w(.5)));break e}default:{n=w(le+n);break e}}}while(0);kt=w(Di+n),Qr=q+400+(t[Js>>2]<<2)|0,D[Qr>>2]=w(kt+w(D[Qr>>2]))}while(0);P=P+1|0}while((P|0)!=(Ht|0))}if(Di=w(Di+Pe),ss=w(Ur(ss,r)),l=Ji+1|0,Ht>>>0>=Ni>>>0)break;n=zt,Pn=Ht,Ji=l}do if(y){if(T=l>>>0>1,T?0:!(he(e)|0))break;if(!(gt(xr)|0)){n=w(xr-Di);e:do switch(t[e+12>>2]|0){case 3:{le=w(le+n),pe=w(0);break}case 2:{le=w(le+w(n*w(.5))),pe=w(0);break}case 4:{xr>Di?pe=w(n/w(l>>>0)):pe=w(0);break}case 7:if(xr>Di){le=w(le+w(n/w(l<<1>>>0))),pe=w(n/w(l>>>0)),pe=T?pe:w(0);break e}else{le=w(le+w(n*w(.5))),pe=w(0);break e}case 6:{pe=w(n/w(Ji>>>0)),pe=xr>Di&T?pe:w(0);break}default:pe=w(0)}while(0);if(l|0)for(vt=1040+(Vt<<2)|0,Ln=976+(Vt<<2)|0,we=0,P=0;;){e:do if(P>>>0>>0)for(ie=w(0),Pe=w(0),n=w(0),q=P;;){T=t[(t[eo>>2]|0)+(q<<2)>>2]|0;do if((t[T+36>>2]|0)!=1?(t[T+24>>2]|0)==0:0){if((t[T+940>>2]|0)!=(we|0))break e;if(We(T,Vt)|0&&(kt=w(D[T+908+(t[Ln>>2]<<2)>>2]),n=w(Ur(n,w(kt+w(mt(T,Vt,En)))))),(T0(e,T)|0)!=5)break;Li=w(et(T)),Li=w(Li+w(Tr(T,0,En))),kt=w(D[T+912>>2]),kt=w(w(kt+w(mt(T,0,En)))-Li),Li=w(Ur(Pe,Li)),kt=w(Ur(ie,kt)),ie=kt,Pe=Li,n=w(Ur(n,w(Li+kt)))}while(0);if(T=q+1|0,T>>>0>>0)q=T;else{q=T;break}}else Pe=w(0),n=w(0),q=P;while(0);if(qe=w(pe+n),r=le,le=w(le+qe),P>>>0>>0){ke=w(r+Pe),T=P;do{P=t[(t[eo>>2]|0)+(T<<2)>>2]|0;e:do if((t[P+36>>2]|0)!=1?(t[P+24>>2]|0)==0:0)switch(T0(e,P)|0){case 1:{kt=w(r+w(Tr(P,Vt,En))),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 3:{kt=w(w(le-w(R0(P,Vt,En)))-w(D[P+908+(t[Ln>>2]<<2)>>2])),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 2:{kt=w(r+w(w(qe-w(D[P+908+(t[Ln>>2]<<2)>>2]))*w(.5))),D[P+400+(t[vt>>2]<<2)>>2]=kt;break e}case 4:{if(kt=w(r+w(Tr(P,Vt,En))),D[P+400+(t[vt>>2]<<2)>>2]=kt,m0(P,Vt,xr)|0||(br?(ie=w(D[P+908>>2]),n=w(ie+w(mt(P,xn,En))),Pe=qe):(Pe=w(D[P+912>>2]),Pe=w(Pe+w(mt(P,Vt,En))),n=qe,ie=w(D[P+908>>2])),Vr(n,ie)|0?Vr(Pe,w(D[P+912>>2]))|0:0))break e;ht(P,n,Pe,Ei,1,1,En,Qi,1,3501,k)|0;break e}case 5:{D[P+404>>2]=w(w(ke-w(et(P)))+w(Y(P,0,xr)));break e}default:break e}while(0);T=T+1|0}while((T|0)!=(q|0))}if(we=we+1|0,(we|0)==(l|0))break;P=q}}}while(0);if(D[e+908>>2]=w(kn(e,2,ls,d,d)),D[e+912>>2]=w(kn(e,0,Wl,_,d)),((ku|0)!=0?(Hl=t[e+32>>2]|0,bl=(ku|0)==2,!(bl&(Hl|0)!=2)):0)?bl&(Hl|0)==2&&(n=w(fs+zt),n=w(Ur(w(cc(n,w(Dt(e,xn,ss,Zi)))),fs)),Kn=198):(n=w(kn(e,xn,ss,Zi,d)),Kn=198),(Kn|0)==198&&(D[e+908+(t[976+(xn<<2)>>2]<<2)>>2]=n),((Au|0)!=0?(Vl=t[e+32>>2]|0,Yl=(Au|0)==2,!(Yl&(Vl|0)!=2)):0)?Yl&(Vl|0)==2&&(n=w(Ri+xr),n=w(Ur(w(cc(n,w(Dt(e,Vt,w(Ri+Di),cs)))),Ri)),Kn=204):(n=w(kn(e,Vt,w(Ri+Di),cs,d)),Kn=204),(Kn|0)==204&&(D[e+908+(t[976+(Vt<<2)>>2]<<2)>>2]=n),y){if((t[Gl>>2]|0)==2){P=976+(Vt<<2)|0,q=1040+(Vt<<2)|0,T=0;do we=e0(e,T)|0,t[we+24>>2]|0||($l=t[P>>2]|0,kt=w(D[e+908+($l<<2)>>2]),Qr=we+400+(t[q>>2]<<2)|0,kt=w(kt-w(D[Qr>>2])),D[Qr>>2]=w(kt-w(D[we+908+($l<<2)>>2]))),T=T+1|0;while((T|0)!=(Ni|0))}if(o|0){T=br?ku:s;do bt(e,o,En,T,Qi,Ei,k),o=t[o+960>>2]|0;while((o|0)!=0)}if(T=(xn|2|0)==3,P=(Vt|2|0)==3,T|P){o=0;do q=t[(t[eo>>2]|0)+(o<<2)>>2]|0,(t[q+36>>2]|0)!=1&&(T&&Zt(e,q,xn),P&&Zt(e,q,Vt)),o=o+1|0;while((o|0)!=(Ni|0))}}}while(0);h=Ou}function ki(e,n){e=e|0,n=w(n);var r=0;li(e,n>=w(0),3147),r=n==w(0),D[e+4>>2]=r?w(0):n}function Yr(e,n,r,o){e=e|0,n=w(n),r=w(r),o=o|0;var s=tt,l=tt,d=0,_=0,y=0;t[2278]=(t[2278]|0)+1,$r(e),m0(e,2,n)|0?(s=w(Tn(t[e+992>>2]|0,n)),y=1,s=w(s+w(mt(e,2,n)))):(s=w(Tn(e+380|0,n)),s>=w(0)?y=2:(y=((gt(n)|0)^1)&1,s=n)),m0(e,0,r)|0?(l=w(Tn(t[e+996>>2]|0,r)),_=1,l=w(l+w(mt(e,0,n)))):(l=w(Tn(e+388|0,r)),l>=w(0)?_=2:(_=((gt(r)|0)^1)&1,l=r)),d=e+976|0,(ht(e,s,l,o,y,_,n,r,1,3189,t[d>>2]|0)|0?(Yo(e,t[e+496>>2]|0,n,r,n),bi(e,w(D[(t[d>>2]|0)+4>>2]),w(0),w(0)),c[11696]|0):0)&&ff(e,7)}function $r(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;_=h,h=h+32|0,d=_+24|0,l=_+16|0,o=_+8|0,s=_,r=0;do n=e+380+(r<<3)|0,((t[e+380+(r<<3)+4>>2]|0)!=0?(y=n,k=t[y+4>>2]|0,T=o,t[T>>2]=t[y>>2],t[T+4>>2]=k,T=e+364+(r<<3)|0,k=t[T+4>>2]|0,y=s,t[y>>2]=t[T>>2],t[y+4>>2]=k,t[l>>2]=t[o>>2],t[l+4>>2]=t[o+4>>2],t[d>>2]=t[s>>2],t[d+4>>2]=t[s+4>>2],o0(l,d)|0):0)||(n=e+348+(r<<3)|0),t[e+992+(r<<2)>>2]=n,r=r+1|0;while((r|0)!=2);h=_}function m0(e,n,r){e=e|0,n=n|0,r=w(r);var o=0;switch(e=t[e+992+(t[976+(n<<2)>>2]<<2)>>2]|0,t[e+4>>2]|0){case 0:case 3:{e=0;break}case 1:{w(D[e>>2])>2])>2]|0){case 2:{n=w(w(w(D[e>>2])*n)/w(100));break}case 1:{n=w(D[e>>2]);break}default:n=w(J)}return w(n)}function Yo(e,n,r,o,s){e=e|0,n=n|0,r=w(r),o=w(o),s=w(s);var l=0,d=tt;n=t[e+944>>2]|0?n:1,l=N0(t[e+4>>2]|0,n)|0,n=Cl(l,n)|0,r=w(Wr(e,l,r)),o=w(Wr(e,n,o)),d=w(r+w(Tr(e,l,s))),D[e+400+(t[1040+(l<<2)>>2]<<2)>>2]=d,r=w(r+w(R0(e,l,s))),D[e+400+(t[1e3+(l<<2)>>2]<<2)>>2]=r,r=w(o+w(Tr(e,n,s))),D[e+400+(t[1040+(n<<2)>>2]<<2)>>2]=r,s=w(o+w(R0(e,n,s))),D[e+400+(t[1e3+(n<<2)>>2]<<2)>>2]=s}function bi(e,n,r,o){e=e|0,n=w(n),r=w(r),o=w(o);var s=0,l=0,d=tt,_=tt,y=0,k=0,T=tt,P=0,q=tt,we=tt,le=tt,ie=tt;if(n!=w(0)&&(s=e+400|0,ie=w(D[s>>2]),l=e+404|0,le=w(D[l>>2]),P=e+416|0,we=w(D[P>>2]),k=e+420|0,d=w(D[k>>2]),q=w(ie+r),T=w(le+o),o=w(q+we),_=w(T+d),y=(t[e+988>>2]|0)==1,D[s>>2]=w($0(ie,n,0,y)),D[l>>2]=w($0(le,n,0,y)),r=w(V4(w(we*n),w(1))),Vr(r,w(0))|0?l=0:l=(Vr(r,w(1))|0)^1,r=w(V4(w(d*n),w(1))),Vr(r,w(0))|0?s=0:s=(Vr(r,w(1))|0)^1,ie=w($0(o,n,y&l,y&(l^1))),D[P>>2]=w(ie-w($0(q,n,0,y))),ie=w($0(_,n,y&s,y&(s^1))),D[k>>2]=w(ie-w($0(T,n,0,y))),l=(t[e+952>>2]|0)-(t[e+948>>2]|0)>>2,l|0)){s=0;do bi(e0(e,s)|0,n,q,T),s=s+1|0;while((s|0)!=(l|0))}}function or(e,n,r,o,s){switch(e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,r|0){case 5:case 0:{e=q8(t[489]|0,o,s)|0;break}default:e=AL(o,s)|0}return e|0}function zs(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;s=h,h=h+16|0,l=s,t[l>>2]=o,Ku(e,0,n,r,l),h=s}function Ku(e,n,r,o,s){if(e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,e=e|0?e:956,sD[t[e+8>>2]&1](e,n,r,o,s)|0,(r|0)==5)_n();else return}function J0(e,n,r){e=e|0,n=n|0,r=r|0,c[e+n>>0]=r&1}function af(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(S0(e,o),El(e,t[n>>2]|0,t[r>>2]|0,o))}function S0(e,n){e=e|0,n=n|0;var r=0;if((Q0(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function El(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function Q0(e){return e=e|0,1073741823}function Tr(e,n,r){return e=e|0,n=n|0,r=w(r),(Nr(n)|0?(t[e+96>>2]|0)!=0:0)?e=e+92|0:e=en(e+60|0,t[1040+(n<<2)>>2]|0,992)|0,w(uo(e,r))}function R0(e,n,r){return e=e|0,n=n|0,r=w(r),(Nr(n)|0?(t[e+104>>2]|0)!=0:0)?e=e+100|0:e=en(e+60|0,t[1e3+(n<<2)>>2]|0,992)|0,w(uo(e,r))}function Nr(e){return e=e|0,(e|1|0)==3|0}function uo(e,n){return e=e|0,n=w(n),(t[e+4>>2]|0)==3?n=w(0):n=w(Tn(e,n)),w(n)}function so(e,n){return e=e|0,n=n|0,e=t[e>>2]|0,((e|0)==0?(n|0)>1?n:1:e)|0}function N0(e,n){e=e|0,n=n|0;var r=0;e:do if((n|0)==2){switch(e|0){case 2:{e=3;break e}case 3:break;default:{r=4;break e}}e=2}else r=4;while(0);return e|0}function C0(e,n){e=e|0,n=n|0;var r=tt;return((Nr(n)|0?(t[e+312>>2]|0)!=0:0)?(r=w(D[e+308>>2]),r>=w(0)):0)||(r=w(Ur(w(D[(en(e+276|0,t[1040+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function di(e,n){e=e|0,n=n|0;var r=tt;return((Nr(n)|0?(t[e+320>>2]|0)!=0:0)?(r=w(D[e+316>>2]),r>=w(0)):0)||(r=w(Ur(w(D[(en(e+276|0,t[1e3+(n<<2)>>2]|0,992)|0)>>2]),w(0)))),w(r)}function u0(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return((Nr(n)|0?(t[e+240>>2]|0)!=0:0)?(o=w(Tn(e+236|0,r)),o>=w(0)):0)||(o=w(Ur(w(Tn(en(e+204|0,t[1040+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(o)}function v0(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return((Nr(n)|0?(t[e+248>>2]|0)!=0:0)?(o=w(Tn(e+244|0,r)),o>=w(0)):0)||(o=w(Ur(w(Tn(en(e+204|0,t[1e3+(n<<2)>>2]|0,992)|0,r)),w(0)))),w(o)}function To(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=tt,y=tt,k=tt,T=tt,P=tt,q=tt,we=0,le=0,ie=0;ie=h,h=h+16|0,we=ie,le=e+964|0,i0(e,(t[le>>2]|0)!=0,3519),_=w(Fn(e,2,n)),y=w(Fn(e,0,n)),k=w(mt(e,2,n)),T=w(mt(e,0,n)),gt(n)|0?P=n:P=w(Ur(w(0),w(w(n-k)-_))),gt(r)|0?q=r:q=w(Ur(w(0),w(w(r-T)-y))),(o|0)==1&(s|0)==1?(D[e+908>>2]=w(kn(e,2,w(n-k),l,l)),n=w(kn(e,0,w(r-T),d,l))):(lD[t[le>>2]&1](we,e,P,o,q,s),P=w(_+w(D[we>>2])),q=w(n-k),D[e+908>>2]=w(kn(e,2,(o|2|0)==2?P:q,l,l)),q=w(y+w(D[we+4>>2])),n=w(r-T),n=w(kn(e,0,(s|2|0)==2?q:n,d,l))),D[e+912>>2]=n,h=ie}function pu(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=tt,y=tt,k=tt,T=tt;k=w(Fn(e,2,l)),_=w(Fn(e,0,l)),T=w(mt(e,2,l)),y=w(mt(e,0,l)),n=w(n-T),D[e+908>>2]=w(kn(e,2,(o|2|0)==2?k:n,l,l)),r=w(r-y),D[e+912>>2]=w(kn(e,0,(s|2|0)==2?_:r,d,l))}function Sl(e,n,r,o,s,l,d){e=e|0,n=w(n),r=w(r),o=o|0,s=s|0,l=w(l),d=w(d);var _=0,y=tt,k=tt;return _=(o|0)==2,((n<=w(0)&_?0:!(r<=w(0)&(s|0)==2))?!((o|0)==1&(s|0)==1):0)?e=0:(y=w(mt(e,0,l)),k=w(mt(e,2,l)),_=n>2]=w(kn(e,2,_?w(0):n,l,l)),n=w(r-y),_=r>2]=w(kn(e,0,_?w(0):n,d,l)),e=1),e|0}function Cl(e,n){return e=e|0,n=n|0,qt(e)|0?e=N0(2,n)|0:e=0,e|0}function B0(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(u0(e,n,r)),w(r+w(C0(e,n)))}function hu(e,n,r){return e=e|0,n=n|0,r=w(r),r=w(v0(e,n,r)),w(r+w(di(e,n)))}function Fn(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(B0(e,n,r)),w(o+w(hu(e,n,r)))}function pi(e){return e=e|0,t[e+24>>2]|0?e=0:w(Br(e))!=w(0)?e=1:e=w(zr(e))!=w(0),e|0}function Br(e){e=e|0;var n=tt;if(t[e+944>>2]|0){if(n=w(D[e+44>>2]),gt(n)|0)return n=w(D[e+40>>2]),e=n>w(0)&((gt(n)|0)^1),w(e?n:w(0))}else n=w(0);return w(n)}function zr(e){e=e|0;var n=tt,r=0,o=tt;do if(t[e+944>>2]|0){if(n=w(D[e+48>>2]),gt(n)|0){if(r=c[(t[e+976>>2]|0)+2>>0]|0,r<<24>>24==0?(o=w(D[e+40>>2]),o>24?w(1):w(0)}}else n=w(0);while(0);return w(n)}function lo(e){e=e|0;var n=0,r=0;if(pa(e+400|0,0,540)|0,c[e+985>>0]=1,bo(e),r=fi(e)|0,r|0){n=e+948|0,e=0;do lo(t[(t[n>>2]|0)+(e<<2)>>2]|0),e=e+1|0;while((e|0)!=(r|0))}}function wr(e,n,r,o,s,l,d,_,y,k){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=w(l),d=w(d),_=_|0,y=y|0,k=k|0;var T=0,P=tt,q=0,we=0,le=tt,ie=tt,Pe=0,ke=tt,qe=0,pe=tt,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0,Ki=0;Dr=h,h=h+16|0,Ln=Dr+12|0,Ht=Dr+8|0,It=Dr+4|0,gn=Dr,zt=N0(t[e+4>>2]|0,y)|0,_e=Nr(zt)|0,P=w(Tn(Ut(n)|0,_e?l:d)),vt=m0(n,2,l)|0,Pn=m0(n,0,d)|0;do if(gt(P)|0?0:!(gt(_e?r:s)|0)){if(T=n+504|0,!(gt(w(D[T>>2]))|0)&&(!(fn(t[n+976>>2]|0,0)|0)||(t[n+500>>2]|0)==(t[2278]|0)))break;D[T>>2]=w(Ur(P,w(Fn(n,zt,l))))}else q=7;while(0);do if((q|0)==7){if(qe=_e^1,!(qe|vt^1)){d=w(Tn(t[n+992>>2]|0,l)),D[n+504>>2]=w(Ur(d,w(Fn(n,2,l))));break}if(!(_e|Pn^1)){d=w(Tn(t[n+996>>2]|0,d)),D[n+504>>2]=w(Ur(d,w(Fn(n,0,l))));break}D[Ln>>2]=w(J),D[Ht>>2]=w(J),t[It>>2]=0,t[gn>>2]=0,ke=w(mt(n,2,l)),pe=w(mt(n,0,l)),vt?(le=w(ke+w(Tn(t[n+992>>2]|0,l))),D[Ln>>2]=le,t[It>>2]=1,we=1):(we=0,le=w(J)),Pn?(P=w(pe+w(Tn(t[n+996>>2]|0,d))),D[Ht>>2]=P,t[gn>>2]=1,T=1):(T=0,P=w(J)),q=t[e+32>>2]|0,_e&(q|0)==2?q=2:(gt(le)|0?!(gt(r)|0):0)&&(D[Ln>>2]=r,t[It>>2]=2,we=2,le=r),(((q|0)==2&qe?0:gt(P)|0)?!(gt(s)|0):0)&&(D[Ht>>2]=s,t[gn>>2]=2,T=2,P=s),ie=w(D[n+396>>2]),Pe=gt(ie)|0;do if(Pe)q=we;else{if((we|0)==1&qe){D[Ht>>2]=w(w(le-ke)/ie),t[gn>>2]=1,T=1,q=1;break}_e&(T|0)==1?(D[Ln>>2]=w(ie*w(P-pe)),t[It>>2]=1,T=1,q=1):q=we}while(0);Ki=gt(r)|0,we=(T0(e,n)|0)!=4,(_e|vt|((o|0)!=1|Ki)|(we|(q|0)==1)?0:(D[Ln>>2]=r,t[It>>2]=1,!Pe))&&(D[Ht>>2]=w(w(r-ke)/ie),t[gn>>2]=1,T=1),(Pn|qe|((_|0)!=1|(gt(s)|0))|(we|(T|0)==1)?0:(D[Ht>>2]=s,t[gn>>2]=1,!Pe))&&(D[Ln>>2]=w(ie*w(s-pe)),t[It>>2]=1),Kt(n,2,l,l,It,Ln),Kt(n,0,d,l,gn,Ht),r=w(D[Ln>>2]),s=w(D[Ht>>2]),ht(n,r,s,y,t[It>>2]|0,t[gn>>2]|0,l,d,0,3565,k)|0,d=w(D[n+908+(t[976+(zt<<2)>>2]<<2)>>2]),D[n+504>>2]=w(Ur(d,w(Fn(n,zt,l))))}while(0);t[n+500>>2]=t[2278],h=Dr}function kn(e,n,r,o,s){return e=e|0,n=n|0,r=w(r),o=w(o),s=w(s),o=w(Dt(e,n,r,o)),w(Ur(o,w(Fn(e,n,s))))}function T0(e,n){return e=e|0,n=n|0,n=n+20|0,n=t[((t[n>>2]|0)==0?e+16|0:n)>>2]|0,((n|0)==5?qt(t[e+4>>2]|0)|0:0)&&(n=1),n|0}function hi(e,n){return e=e|0,n=n|0,(Nr(n)|0?(t[e+96>>2]|0)!=0:0)?n=4:n=t[1040+(n<<2)>>2]|0,e+60+(n<<3)|0}function Ai(e,n){return e=e|0,n=n|0,(Nr(n)|0?(t[e+104>>2]|0)!=0:0)?n=5:n=t[1e3+(n<<2)>>2]|0,e+60+(n<<3)|0}function Kt(e,n,r,o,s,l){switch(e=e|0,n=n|0,r=w(r),o=w(o),s=s|0,l=l|0,r=w(Tn(e+380+(t[976+(n<<2)>>2]<<3)|0,r)),r=w(r+w(mt(e,n,o))),t[s>>2]|0){case 2:case 1:{s=gt(r)|0,o=w(D[l>>2]),D[l>>2]=s|o>2]=2,D[l>>2]=r);break}default:}}function X(e,n){return e=e|0,n=n|0,e=e+132|0,(Nr(n)|0?(t[(en(e,4,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(en(e,t[1040+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function Y(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0;return e=e+132|0,(Nr(n)|0?(o=en(e,4,948)|0,(t[o+4>>2]|0)!=0):0)?s=4:(o=en(e,t[1040+(n<<2)>>2]|0,948)|0,t[o+4>>2]|0?s=4:r=w(0)),(s|0)==4&&(r=w(Tn(o,r))),w(r)}function ye(e,n,r){e=e|0,n=n|0,r=w(r);var o=tt;return o=w(D[e+908+(t[976+(n<<2)>>2]<<2)>>2]),o=w(o+w(Tr(e,n,r))),w(o+w(R0(e,n,r)))}function he(e){e=e|0;var n=0,r=0,o=0;e:do if(qt(t[e+4>>2]|0)|0)n=0;else if((t[e+16>>2]|0)!=5)if(r=fi(e)|0,!r)n=0;else for(n=0;;){if(o=e0(e,n)|0,(t[o+24>>2]|0)==0?(t[o+20>>2]|0)==5:0){n=1;break e}if(n=n+1|0,n>>>0>=r>>>0){n=0;break}}else n=1;while(0);return n|0}function We(e,n){e=e|0,n=n|0;var r=tt;return r=w(D[e+908+(t[976+(n<<2)>>2]<<2)>>2]),r>=w(0)&((gt(r)|0)^1)|0}function et(e){e=e|0;var n=tt,r=0,o=0,s=0,l=0,d=0,_=0,y=tt;if(r=t[e+968>>2]|0,r)y=w(D[e+908>>2]),n=w(D[e+912>>2]),n=w(rD[r&0](e,y,n)),i0(e,(gt(n)|0)^1,3573);else{l=fi(e)|0;do if(l|0){for(r=0,s=0;;){if(o=e0(e,s)|0,t[o+940>>2]|0){d=8;break}if((t[o+24>>2]|0)!=1)if(_=(T0(e,o)|0)==5,_){r=o;break}else r=(r|0)==0?o:r;if(s=s+1|0,s>>>0>=l>>>0){d=8;break}}if((d|0)==8&&!r)break;return n=w(et(r)),w(n+w(D[r+404>>2]))}while(0);n=w(D[e+912>>2])}return w(n)}function Dt(e,n,r,o){e=e|0,n=n|0,r=w(r),o=w(o);var s=tt,l=0;return qt(n)|0?(n=1,l=3):Nr(n)|0?(n=0,l=3):(o=w(J),s=w(J)),(l|0)==3&&(s=w(Tn(e+364+(n<<3)|0,o)),o=w(Tn(e+380+(n<<3)|0,o))),l=o=w(0)&((gt(o)|0)^1)),r=l?o:r,l=s>=w(0)&((gt(s)|0)^1)&r>2]|0,l)|0,le=Cl(Pe,l)|0,ie=Nr(Pe)|0,P=w(mt(n,2,r)),q=w(mt(n,0,r)),m0(n,2,r)|0?_=w(P+w(Tn(t[n+992>>2]|0,r))):(X(n,2)|0?_t(n,2)|0:0)?(_=w(D[e+908>>2]),y=w(C0(e,2)),y=w(_-w(y+w(di(e,2)))),_=w(Y(n,2,r)),_=w(kn(n,2,w(y-w(_+w(_r(n,2,r)))),r,r))):_=w(J),m0(n,0,s)|0?y=w(q+w(Tn(t[n+996>>2]|0,s))):(X(n,0)|0?_t(n,0)|0:0)?(y=w(D[e+912>>2]),qe=w(C0(e,0)),qe=w(y-w(qe+w(di(e,0)))),y=w(Y(n,0,s)),y=w(kn(n,0,w(qe-w(y+w(_r(n,0,s)))),s,r))):y=w(J),k=gt(_)|0,T=gt(y)|0;do if(k^T?(we=w(D[n+396>>2]),!(gt(we)|0)):0)if(k){_=w(P+w(w(y-q)*we));break}else{qe=w(q+w(w(_-P)/we)),y=T?qe:y;break}while(0);T=gt(_)|0,k=gt(y)|0,T|k&&(pe=(T^1)&1,o=r>w(0)&((o|0)!=0&T),_=ie?_:o?r:_,ht(n,_,y,l,ie?pe:o?2:pe,T&(k^1)&1,_,y,0,3623,d)|0,_=w(D[n+908>>2]),_=w(_+w(mt(n,2,r))),y=w(D[n+912>>2]),y=w(y+w(mt(n,0,r)))),ht(n,_,y,l,1,1,_,y,1,3635,d)|0,(_t(n,Pe)|0?!(X(n,Pe)|0):0)?(pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),qe=w(qe-w(di(e,Pe))),qe=w(qe-w(R0(n,Pe,r))),qe=w(qe-w(_r(n,Pe,ie?r:s))),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe):ke=21;do if((ke|0)==21){if(X(n,Pe)|0?0:(t[e+8>>2]|0)==1){pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(w(qe-w(D[n+908+(pe<<2)>>2]))*w(.5)),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe;break}(X(n,Pe)|0?0:(t[e+8>>2]|0)==2)&&(pe=t[976+(Pe<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),D[n+400+(t[1040+(Pe<<2)>>2]<<2)>>2]=qe)}while(0);(_t(n,le)|0?!(X(n,le)|0):0)?(pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),qe=w(qe-w(di(e,le))),qe=w(qe-w(R0(n,le,r))),qe=w(qe-w(_r(n,le,ie?s:r))),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe):ke=30;do if((ke|0)==30?!(X(n,le)|0):0){if((T0(e,n)|0)==2){pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(w(qe-w(D[n+908+(pe<<2)>>2]))*w(.5)),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe;break}pe=(T0(e,n)|0)==3,pe^(t[e+28>>2]|0)==2&&(pe=t[976+(le<<2)>>2]|0,qe=w(D[e+908+(pe<<2)>>2]),qe=w(qe-w(D[n+908+(pe<<2)>>2])),D[n+400+(t[1040+(le<<2)>>2]<<2)>>2]=qe)}while(0)}function Zt(e,n,r){e=e|0,n=n|0,r=r|0;var o=tt,s=0;s=t[976+(r<<2)>>2]|0,o=w(D[n+908+(s<<2)>>2]),o=w(w(D[e+908+(s<<2)>>2])-o),o=w(o-w(D[n+400+(t[1040+(r<<2)>>2]<<2)>>2])),D[n+400+(t[1e3+(r<<2)>>2]<<2)>>2]=o}function qt(e){return e=e|0,(e|1|0)==1|0}function Ut(e){e=e|0;var n=tt;switch(t[e+56>>2]|0){case 0:case 3:{n=w(D[e+40>>2]),n>w(0)&((gt(n)|0)^1)?e=c[(t[e+976>>2]|0)+2>>0]|0?1056:992:e=1056;break}default:e=e+52|0}return e|0}function fn(e,n){return e=e|0,n=n|0,(c[e+n>>0]|0)!=0|0}function _t(e,n){return e=e|0,n=n|0,e=e+132|0,(Nr(n)|0?(t[(en(e,5,948)|0)+4>>2]|0)!=0:0)?e=1:e=(t[(en(e,t[1e3+(n<<2)>>2]|0,948)|0)+4>>2]|0)!=0,e|0}function _r(e,n,r){e=e|0,n=n|0,r=w(r);var o=0,s=0;return e=e+132|0,(Nr(n)|0?(o=en(e,5,948)|0,(t[o+4>>2]|0)!=0):0)?s=4:(o=en(e,t[1e3+(n<<2)>>2]|0,948)|0,t[o+4>>2]|0?s=4:r=w(0)),(s|0)==4&&(r=w(Tn(o,r))),w(r)}function Wr(e,n,r){return e=e|0,n=n|0,r=w(r),X(e,n)|0?r=w(Y(e,n,r)):r=w(-w(_r(e,n,r))),w(r)}function Ar(e){return e=w(e),D[j>>2]=e,t[j>>2]|0|0}function z(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function dr(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Or(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function Qn(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;if(d=e+4|0,_=t[d>>2]|0,s=_-o|0,l=s>>2,e=n+(l<<2)|0,e>>>0>>0){o=_;do t[o>>2]=t[e>>2],e=e+4|0,o=(t[d>>2]|0)+4|0,t[d>>2]=o;while(e>>>0>>0)}l|0&&Y1(_+(0-l<<2)|0,n|0,s|0)|0}function nn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0;return _=n+4|0,y=t[_>>2]|0,s=t[e>>2]|0,d=r,l=d-s|0,o=y+(0-(l>>2)<<2)|0,t[_>>2]=o,(l|0)>0&&vn(o|0,s|0,l|0)|0,s=e+4|0,l=n+8|0,o=(t[s>>2]|0)-d|0,(o|0)>0&&(vn(t[l>>2]|0,r|0,o|0)|0,t[l>>2]=(t[l>>2]|0)+(o>>>2<<2)),d=t[e>>2]|0,t[e>>2]=t[_>>2],t[_>>2]=d,d=t[s>>2]|0,t[s>>2]=t[l>>2],t[l>>2]=d,d=e+8|0,r=n+12|0,e=t[d>>2]|0,t[d>>2]=t[r>>2],t[r>>2]=e,t[n>>2]=t[_>>2],y|0}function s0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;if(d=t[n>>2]|0,l=t[r>>2]|0,(d|0)!=(l|0)){s=e+8|0,r=((l+-4-d|0)>>>2)+1|0,e=d,o=t[s>>2]|0;do t[o>>2]=t[e>>2],o=(t[s>>2]|0)+4|0,t[s>>2]=o,e=e+4|0;while((e|0)!=(l|0));t[n>>2]=d+(r<<2)}}function t0(){_l()}function g0(){var e=0;return e=Tt(4)|0,Kr(e),e|0}function Kr(e){e=e|0,t[e>>2]=a0()|0}function _0(e){e=e|0,e|0&&(Gi(e),Ve(e))}function Gi(e){e=e|0,V0(t[e>>2]|0)}function fo(e,n,r){e=e|0,n=n|0,r=r|0,J0(t[e>>2]|0,n,r)}function x0(e,n){e=e|0,n=w(n),ki(t[e>>2]|0,n)}function Xu(e,n){return e=e|0,n=n|0,fn(t[e>>2]|0,n)|0}function Z0(){var e=0;return e=Tt(8)|0,df(e,0),e|0}function df(e,n){e=e|0,n=n|0,n?n=I0(t[n>>2]|0)|0:n=qu()|0,t[e>>2]=n,t[e+4>>2]=0,Bs(n,e)}function Ba(e){e=e|0;var n=0;return n=Tt(8)|0,df(n,e),n|0}function Oc(e){e=e|0,e|0&&(mu(e),Ve(e))}function mu(e){e=e|0;var n=0;Wu(t[e>>2]|0),n=e+4|0,e=t[n>>2]|0,t[n>>2]=0,e|0&&(Ju(e),Ve(e))}function Ju(e){e=e|0,ei(e)}function ei(e){e=e|0,e=t[e>>2]|0,e|0&&ju(e|0)}function Yf(e){return e=e|0,Vu(e)|0}function pf(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(Ju(n),Ve(n)),Do(t[e>>2]|0)}function ja(e,n){e=e|0,n=n|0,Gu(t[e>>2]|0,t[n>>2]|0)}function Ua(e,n){e=e|0,n=n|0,W(t[e>>2]|0,n)}function Ic(e,n,r){e=e|0,n=n|0,r=+r,yn(t[e>>2]|0,n,w(r))}function vu(e,n,r){e=e|0,n=n|0,r=+r,sn(t[e>>2]|0,n,w(r))}function $f(e,n){e=e|0,n=n|0,R(t[e>>2]|0,n)}function gu(e,n){e=e|0,n=n|0,H(t[e>>2]|0,n)}function co(e,n){e=e|0,n=n|0,ue(t[e>>2]|0,n)}function qa(e,n){e=e|0,n=n|0,M0(t[e>>2]|0,n)}function Ws(e,n){e=e|0,n=n|0,Fe(t[e>>2]|0,n)}function za(e,n){e=e|0,n=n|0,Lr(t[e>>2]|0,n)}function Pc(e,n,r){e=e|0,n=n|0,r=+r,rn(t[e>>2]|0,n,w(r))}function Qu(e,n,r){e=e|0,n=n|0,r=+r,Hn(t[e>>2]|0,n,w(r))}function Mc(e,n){e=e|0,n=n|0,Cr(t[e>>2]|0,n)}function Fc(e,n){e=e|0,n=n|0,K(t[e>>2]|0,n)}function Lc(e,n){e=e|0,n=n|0,je(t[e>>2]|0,n)}function Kf(e,n){e=e|0,n=+n,rt(t[e>>2]|0,w(n))}function Tl(e,n){e=e|0,n=+n,wt(t[e>>2]|0,w(n))}function xl(e,n){e=e|0,n=+n,lt(t[e>>2]|0,w(n))}function hf(e,n){e=e|0,n=+n,st(t[e>>2]|0,w(n))}function xo(e,n){e=e|0,n=+n,xt(t[e>>2]|0,w(n))}function mf(e,n){e=e|0,n=+n,Qt(t[e>>2]|0,w(n))}function Wa(e,n){e=e|0,n=+n,Cn(t[e>>2]|0,w(n))}function ti(e){e=e|0,bn(t[e>>2]|0)}function Hs(e,n){e=e|0,n=+n,h0(t[e>>2]|0,w(n))}function mi(e,n){e=e|0,n=+n,ci(t[e>>2]|0,w(n))}function vi(e){e=e|0,xi(t[e>>2]|0)}function Xf(e,n){e=e|0,n=+n,qr(t[e>>2]|0,w(n))}function Rc(e,n){e=e|0,n=+n,Eo(t[e>>2]|0,w(n))}function Jf(e,n){e=e|0,n=+n,wl(t[e>>2]|0,w(n))}function ao(e,n){e=e|0,n=+n,js(t[e>>2]|0,w(n))}function $o(e,n){e=e|0,n=+n,du(t[e>>2]|0,w(n))}function kl(e,n){e=e|0,n=+n,Yu(t[e>>2]|0,w(n))}function Nc(e,n){e=e|0,n=+n,oo(t[e>>2]|0,w(n))}function Al(e,n){e=e|0,n=+n,Hi(t[e>>2]|0,w(n))}function vf(e,n){e=e|0,n=+n,F0(t[e>>2]|0,w(n))}function Qf(e,n,r){e=e|0,n=n|0,r=+r,ft(t[e>>2]|0,n,w(r))}function k0(e,n,r){e=e|0,n=n|0,r=+r,He(t[e>>2]|0,n,w(r))}function v(e,n,r){e=e|0,n=n|0,r=+r,Qe(t[e>>2]|0,n,w(r))}function m(e){return e=e|0,ve(t[e>>2]|0)|0}function S(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,ar(s,t[n>>2]|0,r),O(e,s),h=o}function O(e,n){e=e|0,n=n|0,M(e,t[n+4>>2]|0,+w(D[n>>2]))}function M(e,n,r){e=e|0,n=n|0,r=+r,t[e>>2]=n,L[e+8>>3]=r}function b(e){return e=e|0,U(t[e>>2]|0)|0}function ee(e){return e=e|0,fe(t[e>>2]|0)|0}function Ye(e){return e=e|0,de(t[e>>2]|0)|0}function Ze(e){return e=e|0,au(t[e>>2]|0)|0}function ut(e){return e=e|0,Ge(t[e>>2]|0)|0}function In(e){return e=e|0,F(t[e>>2]|0)|0}function A0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,d0(s,t[n>>2]|0,r),O(e,s),h=o}function jr(e){return e=e|0,xe(t[e>>2]|0)|0}function gi(e){return e=e|0,Xe(t[e>>2]|0)|0}function po(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Rt(o,t[n>>2]|0),O(e,o),h=r}function _i(e){return e=e|0,+ +w(yl(t[e>>2]|0))}function Re(e){return e=e|0,+ +w(cu(t[e>>2]|0))}function Ce(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,p0(o,t[n>>2]|0),O(e,o),h=r}function ze(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,E0(o,t[n>>2]|0),O(e,o),h=r}function Et(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,So(o,t[n>>2]|0),O(e,o),h=r}function on(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Dl(o,t[n>>2]|0),O(e,o),h=r}function sr(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Us(o,t[n>>2]|0),O(e,o),h=r}function mn(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,qs(o,t[n>>2]|0),O(e,o),h=r}function pr(e){return e=e|0,+ +w(Gr(t[e>>2]|0))}function Hr(e,n){return e=e|0,n=n|0,+ +w(St(t[e>>2]|0,n))}function Vn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,Ne(s,t[n>>2]|0,r),O(e,s),h=o}function ni(e,n,r){e=e|0,n=n|0,r=r|0,Ns(t[e>>2]|0,t[n>>2]|0,r)}function Zf(e,n){e=e|0,n=n|0,D0(t[e>>2]|0,t[n>>2]|0)}function Pm(e){return e=e|0,fi(t[e>>2]|0)|0}function Ha(e){return e=e|0,e=nr(t[e>>2]|0)|0,e?e=Yf(e)|0:e=0,e|0}function vd(e,n){return e=e|0,n=n|0,e=e0(t[e>>2]|0,n)|0,e?e=Yf(e)|0:e=0,e|0}function gd(e,n){e=e|0,n=n|0;var r=0,o=0;o=Tt(4)|0,ba(o,n),r=e+4|0,n=t[r>>2]|0,t[r>>2]=o,n|0&&(Ju(n),Ve(n)),bu(t[e>>2]|0,1)}function ba(e,n){e=e|0,n=n|0,Oo(e,n)}function Bc(e,n,r,o,s,l){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=l|0;var d=0,_=0;d=h,h=h+16|0,_=d,Mm(_,Vu(n)|0,+r,o,+s,l),D[e>>2]=w(+L[_>>3]),D[e+4>>2]=w(+L[_+8>>3]),h=d}function Mm(e,n,r,o,s,l){e=e|0,n=n|0,r=+r,o=o|0,s=+s,l=l|0;var d=0,_=0,y=0,k=0,T=0;d=h,h=h+32|0,T=d+8|0,k=d+20|0,y=d,_=d+16|0,L[T>>3]=r,t[k>>2]=o,L[y>>3]=s,t[_>>2]=l,_d(e,t[n+4>>2]|0,T,k,y,_),h=d}function _d(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0;d=h,h=h+16|0,_=d,Zo(_),n=Oi(n)|0,Fm(e,n,+L[r>>3],t[o>>2]|0,+L[s>>3],t[l>>2]|0),eu(_),h=d}function Oi(e){return e=e|0,t[e>>2]|0}function Fm(e,n,r,o,s,l){e=e|0,n=n|0,r=+r,o=o|0,s=+s,l=l|0;var d=0;d=ko(yd()|0)|0,r=+Ko(r),o=jc(o)|0,s=+Ko(s),Ga(e,ro(0,d|0,n|0,+r,o|0,+s,jc(l)|0)|0)}function yd(){var e=0;return c[7608]|0||(Ed(9120),e=7608,t[e>>2]=1,t[e+4>>2]=0),9120}function ko(e){return e=e|0,t[e+8>>2]|0}function Ko(e){return e=+e,+ +Ol(e)}function jc(e){return e=e|0,Dd(e)|0}function Ga(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+32|0,r=s,o=n,o&1?(Lm(r,0),c0(o|0,r|0)|0,Va(e,r),Wn(r)):(t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]),h=s}function Lm(e,n){e=e|0,n=n|0,wd(e,n),t[e+8>>2]=0,c[e+24>>0]=0}function Va(e,n){e=e|0,n=n|0,n=n+8|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2]}function Wn(e){e=e|0,c[e+24>>0]=0}function wd(e,n){e=e|0,n=n|0,t[e>>2]=n}function Dd(e){return e=e|0,e|0}function Ol(e){return e=+e,+e}function Ed(e){e=e|0,Ao(e,Rm()|0,4)}function Rm(){return 1064}function Ao(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=hl(n|0,r+1|0)|0}function Oo(e,n){e=e|0,n=n|0,n=t[n>>2]|0,t[e>>2]=n,qi(n|0)}function Nm(e){e=e|0;var n=0,r=0;r=e+4|0,n=t[r>>2]|0,t[r>>2]=0,n|0&&(Ju(n),Ve(n)),bu(t[e>>2]|0,0)}function Uc(e){e=e|0,rr(t[e>>2]|0)}function Ya(e){return e=e|0,Go(t[e>>2]|0)|0}function Sd(e,n,r,o){e=e|0,n=+n,r=+r,o=o|0,Yr(t[e>>2]|0,w(n),w(r),o)}function Cd(e){return e=e|0,+ +w(ir(t[e>>2]|0))}function ho(e){return e=e|0,+ +w(Y0(t[e>>2]|0))}function bs(e){return e=e|0,+ +w(L0(t[e>>2]|0))}function $a(e){return e=e|0,+ +w(Co(t[e>>2]|0))}function Td(e){return e=e|0,+ +w($u(t[e>>2]|0))}function qc(e){return e=e|0,+ +w(Vo(t[e>>2]|0))}function xd(e,n){e=e|0,n=n|0,L[e>>3]=+w(ir(t[n>>2]|0)),L[e+8>>3]=+w(Y0(t[n>>2]|0)),L[e+16>>3]=+w(L0(t[n>>2]|0)),L[e+24>>3]=+w(Co(t[n>>2]|0)),L[e+32>>3]=+w($u(t[n>>2]|0)),L[e+40>>3]=+w(Vo(t[n>>2]|0))}function Ka(e,n){return e=e|0,n=n|0,+ +w(Rr(t[e>>2]|0,n))}function kd(e,n){return e=e|0,n=n|0,+ +w(Jn(t[e>>2]|0,n))}function Xa(e,n){return e=e|0,n=n|0,+ +w(ai(t[e>>2]|0,n))}function Ja(){return Rs()|0}function Gs(){Bm(),Vs(),Ad(),Od(),Qa(),jm()}function Bm(){hO(11713,4938,1)}function Vs(){FA(10448)}function Ad(){hA(10408)}function Od(){Bk(10324)}function Qa(){Gx(10096)}function jm(){Um(9132)}function Um(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0,Ki=0,Xi=0,Ji=0,Ro=0,kf=0,Af=0,Cu=0,Of=0,Js=0,Qs=0,If=0,Pf=0,Mf=0,Kn=0,Tu=0,Ff=0,us=0,Lf=0,Rf=0,Zs=0,el=0,ss=0,Fi=0,nu=0,go=0,xu=0,jl=0,Ul=0,tl=0,ql=0,zl=0,Li=0,Di=0,ku=0,xr=0,Wl=0,Qi=0,ls=0,Zi=0,fs=0,Hl=0,bl=0,cs=0,Ri=0,Au=0,Gl=0,Vl=0,Yl=0,En=0,br=0,Ei=0,eo=0,Ni=0,xn=0,Vt=0,Ou=0;n=h,h=h+672|0,r=n+656|0,Ou=n+648|0,Vt=n+640|0,xn=n+632|0,Ni=n+624|0,eo=n+616|0,Ei=n+608|0,br=n+600|0,En=n+592|0,Yl=n+584|0,Vl=n+576|0,Gl=n+568|0,Au=n+560|0,Ri=n+552|0,cs=n+544|0,bl=n+536|0,Hl=n+528|0,fs=n+520|0,Zi=n+512|0,ls=n+504|0,Qi=n+496|0,Wl=n+488|0,xr=n+480|0,ku=n+472|0,Di=n+464|0,Li=n+456|0,zl=n+448|0,ql=n+440|0,tl=n+432|0,Ul=n+424|0,jl=n+416|0,xu=n+408|0,go=n+400|0,nu=n+392|0,Fi=n+384|0,ss=n+376|0,el=n+368|0,Zs=n+360|0,Rf=n+352|0,Lf=n+344|0,us=n+336|0,Ff=n+328|0,Tu=n+320|0,Kn=n+312|0,Mf=n+304|0,Pf=n+296|0,If=n+288|0,Qs=n+280|0,Js=n+272|0,Of=n+264|0,Cu=n+256|0,Af=n+248|0,kf=n+240|0,Ro=n+232|0,Ji=n+224|0,Xi=n+216|0,Ki=n+208|0,Dr=n+200|0,zt=n+192|0,Pn=n+184|0,gn=n+176|0,It=n+168|0,Ht=n+160|0,Ln=n+152|0,vt=n+144|0,_e=n+136|0,pe=n+128|0,qe=n+120|0,ke=n+112|0,Pe=n+104|0,ie=n+96|0,le=n+88|0,we=n+80|0,q=n+72|0,P=n+64|0,T=n+56|0,k=n+48|0,y=n+40|0,_=n+32|0,d=n+24|0,l=n+16|0,s=n+8|0,o=n,qm(e,3646),Id(e,3651,2)|0,Pd(e,3665,2)|0,zm(e,3682,18)|0,t[Ou>>2]=19,t[Ou+4>>2]=0,t[r>>2]=t[Ou>>2],t[r+4>>2]=t[Ou+4>>2],gf(e,3690,r)|0,t[Vt>>2]=1,t[Vt+4>>2]=0,t[r>>2]=t[Vt>>2],t[r+4>>2]=t[Vt+4>>2],Md(e,3696,r)|0,t[xn>>2]=2,t[xn+4>>2]=0,t[r>>2]=t[xn>>2],t[r+4>>2]=t[xn+4>>2],Xr(e,3706,r)|0,t[Ni>>2]=1,t[Ni+4>>2]=0,t[r>>2]=t[Ni>>2],t[r+4>>2]=t[Ni+4>>2],yi(e,3722,r)|0,t[eo>>2]=2,t[eo+4>>2]=0,t[r>>2]=t[eo>>2],t[r+4>>2]=t[eo+4>>2],yi(e,3734,r)|0,t[Ei>>2]=3,t[Ei+4>>2]=0,t[r>>2]=t[Ei>>2],t[r+4>>2]=t[Ei+4>>2],Xr(e,3753,r)|0,t[br>>2]=4,t[br+4>>2]=0,t[r>>2]=t[br>>2],t[r+4>>2]=t[br+4>>2],Xr(e,3769,r)|0,t[En>>2]=5,t[En+4>>2]=0,t[r>>2]=t[En>>2],t[r+4>>2]=t[En+4>>2],Xr(e,3783,r)|0,t[Yl>>2]=6,t[Yl+4>>2]=0,t[r>>2]=t[Yl>>2],t[r+4>>2]=t[Yl+4>>2],Xr(e,3796,r)|0,t[Vl>>2]=7,t[Vl+4>>2]=0,t[r>>2]=t[Vl>>2],t[r+4>>2]=t[Vl+4>>2],Xr(e,3813,r)|0,t[Gl>>2]=8,t[Gl+4>>2]=0,t[r>>2]=t[Gl>>2],t[r+4>>2]=t[Gl+4>>2],Xr(e,3825,r)|0,t[Au>>2]=3,t[Au+4>>2]=0,t[r>>2]=t[Au>>2],t[r+4>>2]=t[Au+4>>2],yi(e,3843,r)|0,t[Ri>>2]=4,t[Ri+4>>2]=0,t[r>>2]=t[Ri>>2],t[r+4>>2]=t[Ri+4>>2],yi(e,3853,r)|0,t[cs>>2]=9,t[cs+4>>2]=0,t[r>>2]=t[cs>>2],t[r+4>>2]=t[cs+4>>2],Xr(e,3870,r)|0,t[bl>>2]=10,t[bl+4>>2]=0,t[r>>2]=t[bl>>2],t[r+4>>2]=t[bl+4>>2],Xr(e,3884,r)|0,t[Hl>>2]=11,t[Hl+4>>2]=0,t[r>>2]=t[Hl>>2],t[r+4>>2]=t[Hl+4>>2],Xr(e,3896,r)|0,t[fs>>2]=1,t[fs+4>>2]=0,t[r>>2]=t[fs>>2],t[r+4>>2]=t[fs+4>>2],j0(e,3907,r)|0,t[Zi>>2]=2,t[Zi+4>>2]=0,t[r>>2]=t[Zi>>2],t[r+4>>2]=t[Zi+4>>2],j0(e,3915,r)|0,t[ls>>2]=3,t[ls+4>>2]=0,t[r>>2]=t[ls>>2],t[r+4>>2]=t[ls+4>>2],j0(e,3928,r)|0,t[Qi>>2]=4,t[Qi+4>>2]=0,t[r>>2]=t[Qi>>2],t[r+4>>2]=t[Qi+4>>2],j0(e,3948,r)|0,t[Wl>>2]=5,t[Wl+4>>2]=0,t[r>>2]=t[Wl>>2],t[r+4>>2]=t[Wl+4>>2],j0(e,3960,r)|0,t[xr>>2]=6,t[xr+4>>2]=0,t[r>>2]=t[xr>>2],t[r+4>>2]=t[xr+4>>2],j0(e,3974,r)|0,t[ku>>2]=7,t[ku+4>>2]=0,t[r>>2]=t[ku>>2],t[r+4>>2]=t[ku+4>>2],j0(e,3983,r)|0,t[Di>>2]=20,t[Di+4>>2]=0,t[r>>2]=t[Di>>2],t[r+4>>2]=t[Di+4>>2],gf(e,3999,r)|0,t[Li>>2]=8,t[Li+4>>2]=0,t[r>>2]=t[Li>>2],t[r+4>>2]=t[Li+4>>2],j0(e,4012,r)|0,t[zl>>2]=9,t[zl+4>>2]=0,t[r>>2]=t[zl>>2],t[r+4>>2]=t[zl+4>>2],j0(e,4022,r)|0,t[ql>>2]=21,t[ql+4>>2]=0,t[r>>2]=t[ql>>2],t[r+4>>2]=t[ql+4>>2],gf(e,4039,r)|0,t[tl>>2]=10,t[tl+4>>2]=0,t[r>>2]=t[tl>>2],t[r+4>>2]=t[tl+4>>2],j0(e,4053,r)|0,t[Ul>>2]=11,t[Ul+4>>2]=0,t[r>>2]=t[Ul>>2],t[r+4>>2]=t[Ul+4>>2],j0(e,4065,r)|0,t[jl>>2]=12,t[jl+4>>2]=0,t[r>>2]=t[jl>>2],t[r+4>>2]=t[jl+4>>2],j0(e,4084,r)|0,t[xu>>2]=13,t[xu+4>>2]=0,t[r>>2]=t[xu>>2],t[r+4>>2]=t[xu+4>>2],j0(e,4097,r)|0,t[go>>2]=14,t[go+4>>2]=0,t[r>>2]=t[go>>2],t[r+4>>2]=t[go+4>>2],j0(e,4117,r)|0,t[nu>>2]=15,t[nu+4>>2]=0,t[r>>2]=t[nu>>2],t[r+4>>2]=t[nu+4>>2],j0(e,4129,r)|0,t[Fi>>2]=16,t[Fi+4>>2]=0,t[r>>2]=t[Fi>>2],t[r+4>>2]=t[Fi+4>>2],j0(e,4148,r)|0,t[ss>>2]=17,t[ss+4>>2]=0,t[r>>2]=t[ss>>2],t[r+4>>2]=t[ss+4>>2],j0(e,4161,r)|0,t[el>>2]=18,t[el+4>>2]=0,t[r>>2]=t[el>>2],t[r+4>>2]=t[el+4>>2],j0(e,4181,r)|0,t[Zs>>2]=5,t[Zs+4>>2]=0,t[r>>2]=t[Zs>>2],t[r+4>>2]=t[Zs+4>>2],yi(e,4196,r)|0,t[Rf>>2]=6,t[Rf+4>>2]=0,t[r>>2]=t[Rf>>2],t[r+4>>2]=t[Rf+4>>2],yi(e,4206,r)|0,t[Lf>>2]=7,t[Lf+4>>2]=0,t[r>>2]=t[Lf>>2],t[r+4>>2]=t[Lf+4>>2],yi(e,4217,r)|0,t[us>>2]=3,t[us+4>>2]=0,t[r>>2]=t[us>>2],t[r+4>>2]=t[us+4>>2],Zu(e,4235,r)|0,t[Ff>>2]=1,t[Ff+4>>2]=0,t[r>>2]=t[Ff>>2],t[r+4>>2]=t[Ff+4>>2],_f(e,4251,r)|0,t[Tu>>2]=4,t[Tu+4>>2]=0,t[r>>2]=t[Tu>>2],t[r+4>>2]=t[Tu+4>>2],Zu(e,4263,r)|0,t[Kn>>2]=5,t[Kn+4>>2]=0,t[r>>2]=t[Kn>>2],t[r+4>>2]=t[Kn+4>>2],Zu(e,4279,r)|0,t[Mf>>2]=6,t[Mf+4>>2]=0,t[r>>2]=t[Mf>>2],t[r+4>>2]=t[Mf+4>>2],Zu(e,4293,r)|0,t[Pf>>2]=7,t[Pf+4>>2]=0,t[r>>2]=t[Pf>>2],t[r+4>>2]=t[Pf+4>>2],Zu(e,4306,r)|0,t[If>>2]=8,t[If+4>>2]=0,t[r>>2]=t[If>>2],t[r+4>>2]=t[If+4>>2],Zu(e,4323,r)|0,t[Qs>>2]=9,t[Qs+4>>2]=0,t[r>>2]=t[Qs>>2],t[r+4>>2]=t[Qs+4>>2],Zu(e,4335,r)|0,t[Js>>2]=2,t[Js+4>>2]=0,t[r>>2]=t[Js>>2],t[r+4>>2]=t[Js+4>>2],_f(e,4353,r)|0,t[Of>>2]=12,t[Of+4>>2]=0,t[r>>2]=t[Of>>2],t[r+4>>2]=t[Of+4>>2],Io(e,4363,r)|0,t[Cu>>2]=1,t[Cu+4>>2]=0,t[r>>2]=t[Cu>>2],t[r+4>>2]=t[Cu+4>>2],_u(e,4376,r)|0,t[Af>>2]=2,t[Af+4>>2]=0,t[r>>2]=t[Af>>2],t[r+4>>2]=t[Af+4>>2],_u(e,4388,r)|0,t[kf>>2]=13,t[kf+4>>2]=0,t[r>>2]=t[kf>>2],t[r+4>>2]=t[kf+4>>2],Io(e,4402,r)|0,t[Ro>>2]=14,t[Ro+4>>2]=0,t[r>>2]=t[Ro>>2],t[r+4>>2]=t[Ro+4>>2],Io(e,4411,r)|0,t[Ji>>2]=15,t[Ji+4>>2]=0,t[r>>2]=t[Ji>>2],t[r+4>>2]=t[Ji+4>>2],Io(e,4421,r)|0,t[Xi>>2]=16,t[Xi+4>>2]=0,t[r>>2]=t[Xi>>2],t[r+4>>2]=t[Xi+4>>2],Io(e,4433,r)|0,t[Ki>>2]=17,t[Ki+4>>2]=0,t[r>>2]=t[Ki>>2],t[r+4>>2]=t[Ki+4>>2],Io(e,4446,r)|0,t[Dr>>2]=18,t[Dr+4>>2]=0,t[r>>2]=t[Dr>>2],t[r+4>>2]=t[Dr+4>>2],Io(e,4458,r)|0,t[zt>>2]=3,t[zt+4>>2]=0,t[r>>2]=t[zt>>2],t[r+4>>2]=t[zt+4>>2],_u(e,4471,r)|0,t[Pn>>2]=1,t[Pn+4>>2]=0,t[r>>2]=t[Pn>>2],t[r+4>>2]=t[Pn+4>>2],ec(e,4486,r)|0,t[gn>>2]=10,t[gn+4>>2]=0,t[r>>2]=t[gn>>2],t[r+4>>2]=t[gn+4>>2],Zu(e,4496,r)|0,t[It>>2]=11,t[It+4>>2]=0,t[r>>2]=t[It>>2],t[r+4>>2]=t[It+4>>2],Zu(e,4508,r)|0,t[Ht>>2]=3,t[Ht+4>>2]=0,t[r>>2]=t[Ht>>2],t[r+4>>2]=t[Ht+4>>2],_f(e,4519,r)|0,t[Ln>>2]=4,t[Ln+4>>2]=0,t[r>>2]=t[Ln>>2],t[r+4>>2]=t[Ln+4>>2],Wm(e,4530,r)|0,t[vt>>2]=19,t[vt+4>>2]=0,t[r>>2]=t[vt>>2],t[r+4>>2]=t[vt+4>>2],Fd(e,4542,r)|0,t[_e>>2]=12,t[_e+4>>2]=0,t[r>>2]=t[_e>>2],t[r+4>>2]=t[_e+4>>2],yf(e,4554,r)|0,t[pe>>2]=13,t[pe+4>>2]=0,t[r>>2]=t[pe>>2],t[r+4>>2]=t[pe+4>>2],tc(e,4568,r)|0,t[qe>>2]=2,t[qe+4>>2]=0,t[r>>2]=t[qe>>2],t[r+4>>2]=t[qe+4>>2],Hm(e,4578,r)|0,t[ke>>2]=20,t[ke+4>>2]=0,t[r>>2]=t[ke>>2],t[r+4>>2]=t[ke+4>>2],Ld(e,4587,r)|0,t[Pe>>2]=22,t[Pe+4>>2]=0,t[r>>2]=t[Pe>>2],t[r+4>>2]=t[Pe+4>>2],gf(e,4602,r)|0,t[ie>>2]=23,t[ie+4>>2]=0,t[r>>2]=t[ie>>2],t[r+4>>2]=t[ie+4>>2],gf(e,4619,r)|0,t[le>>2]=14,t[le+4>>2]=0,t[r>>2]=t[le>>2],t[r+4>>2]=t[le+4>>2],Rd(e,4629,r)|0,t[we>>2]=1,t[we+4>>2]=0,t[r>>2]=t[we>>2],t[r+4>>2]=t[we+4>>2],zc(e,4637,r)|0,t[q>>2]=4,t[q+4>>2]=0,t[r>>2]=t[q>>2],t[r+4>>2]=t[q+4>>2],_u(e,4653,r)|0,t[P>>2]=5,t[P+4>>2]=0,t[r>>2]=t[P>>2],t[r+4>>2]=t[P+4>>2],_u(e,4669,r)|0,t[T>>2]=6,t[T+4>>2]=0,t[r>>2]=t[T>>2],t[r+4>>2]=t[T+4>>2],_u(e,4686,r)|0,t[k>>2]=7,t[k+4>>2]=0,t[r>>2]=t[k>>2],t[r+4>>2]=t[k+4>>2],_u(e,4701,r)|0,t[y>>2]=8,t[y+4>>2]=0,t[r>>2]=t[y>>2],t[r+4>>2]=t[y+4>>2],_u(e,4719,r)|0,t[_>>2]=9,t[_+4>>2]=0,t[r>>2]=t[_>>2],t[r+4>>2]=t[_+4>>2],_u(e,4736,r)|0,t[d>>2]=21,t[d+4>>2]=0,t[r>>2]=t[d>>2],t[r+4>>2]=t[d+4>>2],Nd(e,4754,r)|0,t[l>>2]=2,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],ec(e,4772,r)|0,t[s>>2]=3,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],ec(e,4790,r)|0,t[o>>2]=4,t[o+4>>2]=0,t[r>>2]=t[o>>2],t[r+4>>2]=t[o+4>>2],ec(e,4808,r)|0,h=n}function qm(e,n){e=e|0,n=n|0;var r=0;r=Nx()|0,t[e>>2]=r,Bx(r,n),Cf(t[e>>2]|0)}function Id(e,n,r){return e=e|0,n=n|0,r=r|0,Ex(e,Zn(n)|0,r,0),e|0}function Pd(e,n,r){return e=e|0,n=n|0,r=r|0,ux(e,Zn(n)|0,r,0),e|0}function zm(e,n,r){return e=e|0,n=n|0,r=r|0,V9(e,Zn(n)|0,r,0),e|0}function gf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],I9(e,n,s),h=o,e|0}function Md(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],vo(e,n,s),h=o,e|0}function Xr(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],a(e,n,s),h=o,e|0}function yi(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],n4(e,n,s),h=o,e|0}function j0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],b_(e,n,s),h=o,e|0}function Zu(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],L_(e,n,s),h=o,e|0}function _f(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Hp(e,n,s),h=o,e|0}function Io(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],e_(e,n,s),h=o,e|0}function _u(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ip(e,n,s),h=o,e|0}function ec(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ng(e,n,s),h=o,e|0}function Wm(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],l0(e,n,s),h=o,e|0}function Fd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],hg(e,n,s),h=o,e|0}function yf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],sg(e,n,s),h=o,e|0}function tc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Kv(e,n,s),h=o,e|0}function Hm(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],y1(e,n,s),h=o,e|0}function Ld(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],wv(e,n,s),h=o,e|0}function Rd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],fv(e,n,s),h=o,e|0}function zc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Gd(e,n,s),h=o,e|0}function Nd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Wc(e,n,s),h=o,e|0}function Wc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Hc(e,r,s,1),h=o}function Zn(e){return e=e|0,e|0}function Hc(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Za()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Bd(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,bc(l,o)|0,o),h=s}function Za(){var e=0,n=0;if(c[7616]|0||(yu(9136),Bt(24,9136,Q|0)|0,n=7616,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9136)|0)){e=9136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));yu(9136)}return 9136}function Bd(e){return e=e|0,0}function bc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Za()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],n1(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jd(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ur(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0;d=h,h=h+32|0,q=d+24|0,P=d+20|0,y=d+16|0,T=d+12|0,k=d+8|0,_=d+4|0,we=d,t[P>>2]=n,t[y>>2]=r,t[T>>2]=o,t[k>>2]=s,t[_>>2]=l,l=e+28|0,t[we>>2]=t[l>>2],t[q>>2]=t[we>>2],e1(e+24|0,q,P,T,k,y,_)|0,t[l>>2]=t[t[l>>2]>>2],h=d}function e1(e,n,r,o,s,l,d){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,e=bm(n)|0,n=Tt(24)|0,t1(n+4|0,t[r>>2]|0,t[o>>2]|0,t[s>>2]|0,t[l>>2]|0,t[d>>2]|0),t[n>>2]=t[e>>2],t[e>>2]=n,n|0}function bm(e){return e=e|0,t[e>>2]|0}function t1(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=o,t[e+12>>2]=s,t[e+16>>2]=l}function Lt(e,n){return e=e|0,n=n|0,n|e|0}function n1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Gm(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Ud(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],n1(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Vm(e,_),Ym(_),h=k;return}}function Gm(e){return e=e|0,357913941}function Ud(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Vm(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ym(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function yu(e){e=e|0,Gc(e)}function r1(e){e=e|0,i1(e+24|0)}function Dn(e){return e=e|0,t[e>>2]|0}function i1(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Gc(e){e=e|0;var n=0;n=An()|0,Nn(e,2,3,n,cn()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function An(){return 9228}function cn(){return 1140}function Vc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Il(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=$m(n,o)|0,h=r,n|0}function Nn(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,t[e>>2]=n,t[e+4>>2]=r,t[e+8>>2]=o,t[e+12>>2]=s,t[e+16>>2]=l}function Il(e){return e=e|0,(t[(Za()|0)+24>>2]|0)+(e*12|0)|0}function $m(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+48|0,o=s,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Bl[r&31](o,e),o=o1(o)|0,h=s,o|0}function o1(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(u1()|0)|0,o?(s1(n,o),l1(r,n),qd(e,r),e=f1(n)|0):e=zd(e)|0,h=s,e|0}function u1(){var e=0;return c[7632]|0||(nc(9184),Bt(25,9184,Q|0)|0,e=7632,t[e>>2]=1,t[e+4>>2]=0),9184}function U0(e){return e=e|0,t[e+36>>2]|0}function s1(e,n){e=e|0,n=n|0,t[e>>2]=n,t[e+4>>2]=e,t[e+8>>2]=0}function l1(e,n){e=e|0,n=n|0,t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=0}function qd(e,n){e=e|0,n=n|0,Ii(n,e,e+8|0,e+16|0,e+24|0,e+32|0,e+40|0)|0}function f1(e){return e=e|0,t[(t[e+4>>2]|0)+8>>2]|0}function zd(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0;y=h,h=h+16|0,r=y+4|0,o=y,s=Qo(8)|0,l=s,d=Tt(48)|0,_=d,n=_+48|0;do t[_>>2]=t[e>>2],_=_+4|0,e=e+4|0;while((_|0)<(n|0));return n=l+4|0,t[n>>2]=d,_=Tt(8)|0,d=t[n>>2]|0,t[o>>2]=0,t[r>>2]=t[o>>2],Wd(_,d,r),t[s>>2]=_,h=y,l|0}function Wd(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1092,t[r+12>>2]=n,t[e+4>>2]=r}function Km(e){e=e|0,da(e),Ve(e)}function Xm(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function es(e){e=e|0,Ve(e)}function Ii(e,n,r,o,s,l,d){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,l=c1(t[e>>2]|0,n,r,o,s,l,d)|0,d=e+4|0,t[(t[d>>2]|0)+8>>2]=l,t[(t[d>>2]|0)+8>>2]|0}function c1(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0;var _=0,y=0;return _=h,h=h+16|0,y=_,Zo(y),e=Oi(e)|0,d=Jm(e,+L[n>>3],+L[r>>3],+L[o>>3],+L[s>>3],+L[l>>3],+L[d>>3])|0,eu(y),h=_,d|0}function Jm(e,n,r,o,s,l,d){e=e|0,n=+n,r=+r,o=+o,s=+s,l=+l,d=+d;var _=0;return _=ko(a1()|0)|0,n=+Ko(n),r=+Ko(r),o=+Ko(o),s=+Ko(s),l=+Ko(l),xs(0,_|0,e|0,+n,+r,+o,+s,+l,+ +Ko(d))|0}function a1(){var e=0;return c[7624]|0||(Qm(9172),e=7624,t[e>>2]=1,t[e+4>>2]=0),9172}function Qm(e){e=e|0,Ao(e,Zm()|0,6)}function Zm(){return 1112}function nc(e){e=e|0,Ys(e)}function Hd(e){e=e|0,d1(e+24|0),bd(e+16|0)}function d1(e){e=e|0,tv(e)}function bd(e){e=e|0,ev(e)}function ev(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function tv(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function Ys(e){e=e|0;var n=0;t[e+16>>2]=0,t[e+20>>2]=0,n=e+24|0,t[n>>2]=0,t[e+28>>2]=n,t[e+36>>2]=0,c[e+40>>0]=0,c[e+41>>0]=0}function Gd(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Vd(e,r,s,0),h=o}function Vd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=p1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=h1(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Yd(l,o)|0,o),h=s}function p1(){var e=0,n=0;if(c[7640]|0||(Xo(9232),Bt(26,9232,Q|0)|0,n=7640,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9232)|0)){e=9232,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Xo(9232)}return 9232}function h1(e){return e=e|0,0}function Yd(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=p1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],wf(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(m1(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function wf(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function m1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=$d(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Kd(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],wf(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Yc(e,_),Xd(_),h=k;return}}function $d(e){return e=e|0,357913941}function Kd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Yc(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Xd(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Xo(e){e=e|0,Jd(e)}function Pl(e){e=e|0,nv(e+24|0)}function nv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Jd(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,rv()|0,3),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rv(){return 1144}function iv(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+16|0,d=l+8|0,_=l,y=ov(e)|0,e=t[y+4>>2]|0,t[_>>2]=t[y>>2],t[_+4>>2]=e,t[d>>2]=t[_>>2],t[d+4>>2]=t[_+4>>2],uv(n,d,r,o,s),h=l}function ov(e){return e=e|0,(t[(p1()|0)+24>>2]|0)+(e*12|0)|0}function uv(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0;var l=0,d=0,_=0,y=0,k=0;k=h,h=h+16|0,d=k+2|0,_=k+1|0,y=k,l=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(l=t[(t[e>>2]|0)+l>>2]|0),wu(d,r),r=+Du(d,r),wu(_,o),o=+Du(_,o),ts(y,s),y=ns(y,s)|0,iD[l&1](e,r,o,y),h=k}function wu(e,n){e=e|0,n=+n}function Du(e,n){return e=e|0,n=+n,+ +lv(n)}function ts(e,n){e=e|0,n=n|0}function ns(e,n){return e=e|0,n=n|0,sv(n)|0}function sv(e){return e=e|0,e|0}function lv(e){return e=+e,+e}function fv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Qd(e,r,s,1),h=o}function Qd(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=$c()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Zd(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,cv(l,o)|0,o),h=s}function $c(){var e=0,n=0;if(c[7648]|0||(np(9268),Bt(27,9268,Q|0)|0,n=7648,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9268)|0)){e=9268,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));np(9268)}return 9268}function Zd(e){return e=e|0,0}function cv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=$c()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ep(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(av(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ep(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function av(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=tp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,dv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ep(l,o,r),t[y>>2]=(t[y>>2]|0)+12,pv(e,_),hv(_),h=k;return}}function tp(e){return e=e|0,357913941}function dv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function pv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function hv(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function np(e){e=e|0,Po(e)}function mv(e){e=e|0,vv(e+24|0)}function vv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Po(e){e=e|0;var n=0;n=An()|0,Nn(e,2,4,n,gv()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gv(){return 1160}function _v(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=yv(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=rp(n,o)|0,h=r,n|0}function yv(e){return e=e|0,(t[($c()|0)+24>>2]|0)+(e*12|0)|0}function rp(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),ip(dc[r&31](e)|0)|0}function ip(e){return e=e|0,e&1|0}function wv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Dv(e,r,s,0),h=o}function Dv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=v1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=g1(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Ev(l,o)|0,o),h=s}function v1(){var e=0,n=0;if(c[7656]|0||(up(9304),Bt(28,9304,Q|0)|0,n=7656,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9304)|0)){e=9304,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));up(9304)}return 9304}function g1(e){return e=e|0,0}function Ev(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=v1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],op(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Sv(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function op(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Sv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Cv(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Tv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],op(l,o,r),t[y>>2]=(t[y>>2]|0)+12,xv(e,_),kv(_),h=k;return}}function Cv(e){return e=e|0,357913941}function Tv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function xv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function kv(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function up(e){e=e|0,Iv(e)}function Av(e){e=e|0,Ov(e+24|0)}function Ov(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Iv(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,Pv()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Pv(){return 1164}function Mv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=Fv(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Lv(n,s,r),h=o}function Fv(e){return e=e|0,(t[(v1()|0)+24>>2]|0)+(e*12|0)|0}function Lv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),$s(s,r),r=Ks(s,r)|0,Bl[o&31](e,r),Xs(s),h=l}function $s(e,n){e=e|0,n=n|0,Rv(e,n)}function Ks(e,n){return e=e|0,n=n|0,e|0}function Xs(e){e=e|0,Ju(e)}function Rv(e,n){e=e|0,n=n|0,_1(e,n)}function _1(e,n){e=e|0,n=n|0,t[e>>2]=n}function y1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],sp(e,r,s,0),h=o}function sp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=w1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Nv(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Bv(l,o)|0,o),h=s}function w1(){var e=0,n=0;if(c[7664]|0||(cp(9340),Bt(29,9340,Q|0)|0,n=7664,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9340)|0)){e=9340,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));cp(9340)}return 9340}function Nv(e){return e=e|0,0}function Bv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=w1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],lp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jv(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function lp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Uv(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,qv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],lp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,zv(e,_),fp(_),h=k;return}}function Uv(e){return e=e|0,357913941}function qv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function zv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function fp(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function cp(e){e=e|0,Hv(e)}function Kc(e){e=e|0,Wv(e+24|0)}function Wv(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Hv(e){e=e|0;var n=0;n=An()|0,Nn(e,2,4,n,bv()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function bv(){return 1180}function Gv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=Vv(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=Yv(n,s,r)|0,h=o,r|0}function Vv(e){return e=e|0,(t[(w1()|0)+24>>2]|0)+(e*12|0)|0}function Yv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),Ml(s,r),s=Fl(s,r)|0,s=Xc(J4[o&15](e,s)|0)|0,h=l,s|0}function Ml(e,n){e=e|0,n=n|0}function Fl(e,n){return e=e|0,n=n|0,$v(n)|0}function Xc(e){return e=e|0,e|0}function $v(e){return e=e|0,e|0}function Kv(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Xv(e,r,s,0),h=o}function Xv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=D1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Jv(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Qv(l,o)|0,o),h=s}function D1(){var e=0,n=0;if(c[7672]|0||(hp(9376),Bt(30,9376,Q|0)|0,n=7672,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9376)|0)){e=9376,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));hp(9376)}return 9376}function Jv(e){return e=e|0,0}function Qv(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=D1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ap(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(dp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ap(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function dp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=pp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Zv(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ap(l,o,r),t[y>>2]=(t[y>>2]|0)+12,eg(e,_),tg(_),h=k;return}}function pp(e){return e=e|0,357913941}function Zv(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function eg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function tg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function hp(e){e=e|0,rg(e)}function Jc(e){e=e|0,ng(e+24|0)}function ng(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function rg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,mp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function mp(){return 1196}function ig(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=og(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=ug(n,o)|0,h=r,n|0}function og(e){return e=e|0,(t[(D1()|0)+24>>2]|0)+(e*12|0)|0}function ug(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Xc(dc[r&31](e)|0)|0}function sg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],lg(e,r,s,1),h=o}function lg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=fg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,cg(l,o)|0,o),h=s}function E1(){var e=0,n=0;if(c[7680]|0||(C1(9412),Bt(31,9412,Q|0)|0,n=7680,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9412)|0)){e=9412,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));C1(9412)}return 9412}function fg(e){return e=e|0,0}function cg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],rc(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(ag(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function rc(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function ag(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=vp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,gp(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],rc(l,o,r),t[y>>2]=(t[y>>2]|0)+12,S1(e,_),_p(_),h=k;return}}function vp(e){return e=e|0,357913941}function gp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function S1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function _p(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function C1(e){e=e|0,dg(e)}function yp(e){e=e|0,wp(e+24|0)}function wp(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function dg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,Dp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Dp(){return 1200}function pg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Qc(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=Zc(n,o)|0,h=r,n|0}function Qc(e){return e=e|0,(t[(E1()|0)+24>>2]|0)+(e*12|0)|0}function Zc(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),ea(dc[r&31](e)|0)|0}function ea(e){return e=e|0,e|0}function hg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],T1(e,r,s,0),h=o}function T1(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=ta()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=mg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,vg(l,o)|0,o),h=s}function ta(){var e=0,n=0;if(c[7688]|0||(Sp(9448),Bt(32,9448,Q|0)|0,n=7688,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9448)|0)){e=9448,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Sp(9448)}return 9448}function mg(e){return e=e|0,0}function vg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=ta()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Ep(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(gg(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Ep(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function gg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=_g(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,yg(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Ep(l,o,r),t[y>>2]=(t[y>>2]|0)+12,wg(e,_),Dg(_),h=k;return}}function _g(e){return e=e|0,357913941}function yg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function wg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Dg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Sp(e){e=e|0,Cg(e)}function Eg(e){e=e|0,Sg(e+24|0)}function Sg(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Cg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,Mo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Mo(){return 1204}function Tg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=xg(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Ll(n,s,r),h=o}function xg(e){return e=e|0,(t[(ta()|0)+24>>2]|0)+(e*12|0)|0}function Ll(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),On(s,r),s=x1(s,r)|0,Bl[o&31](e,s),h=l}function On(e,n){e=e|0,n=n|0}function x1(e,n){return e=e|0,n=n|0,Vi(n)|0}function Vi(e){return e=e|0,e|0}function l0(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],kg(e,r,s,0),h=o}function kg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Eu()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Ag(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Og(l,o)|0,o),h=s}function Eu(){var e=0,n=0;if(c[7696]|0||(A1(9484),Bt(33,9484,Q|0)|0,n=7696,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9484)|0)){e=9484,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));A1(9484)}return 9484}function Ag(e){return e=e|0,0}function Og(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Eu()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Cp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Ig(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Cp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Ig(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Pg(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,k1(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Cp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Mg(e,_),rs(_),h=k;return}}function Pg(e){return e=e|0,357913941}function k1(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Mg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function rs(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function A1(e){e=e|0,n0(e)}function na(e){e=e|0,Jr(e+24|0)}function Jr(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function n0(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,Tp()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Tp(){return 1212}function Fg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=Lg(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],Rg(n,l,r,o),h=s}function Lg(e){return e=e|0,(t[(Eu()|0)+24>>2]|0)+(e*12|0)|0}function Rg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),On(l,r),l=x1(l,r)|0,Ml(d,o),d=Fl(d,o)|0,X1[s&15](e,l,d),h=_}function Ng(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Bg(e,r,s,1),h=o}function Bg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=O1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=xp(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,ic(l,o)|0,o),h=s}function O1(){var e=0,n=0;if(c[7704]|0||(Ap(9520),Bt(34,9520,Q|0)|0,n=7704,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9520)|0)){e=9520,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ap(9520)}return 9520}function xp(e){return e=e|0,0}function ic(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=O1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],ra(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(jg(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function ra(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function jg(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=kp(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,ia(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],ra(l,o,r),t[y>>2]=(t[y>>2]|0)+12,mo(e,_),Df(_),h=k;return}}function kp(e){return e=e|0,357913941}function ia(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function mo(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Df(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Ap(e){e=e|0,zg(e)}function Ug(e){e=e|0,qg(e+24|0)}function qg(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function zg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,Wg()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Wg(){return 1224}function Op(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;return s=h,h=h+16|0,l=s+8|0,d=s,_=is(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],o=+jn(n,l,r),h=s,+o}function is(e){return e=e|0,(t[(O1()|0)+24>>2]|0)+(e*12|0)|0}function jn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,d=+Ol(+uD[o&7](e,s)),h=l,+d}function Ip(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Fo(e,r,s,1),h=o}function Fo(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=oa()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=Hg(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,yr(l,o)|0,o),h=s}function oa(){var e=0,n=0;if(c[7712]|0||(Fp(9556),Bt(35,9556,Q|0)|0,n=7712,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9556)|0)){e=9556,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fp(9556)}return 9556}function Hg(e){return e=e|0,0}function yr(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=oa()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Pp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Mp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Pp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Mp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=ua(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,bg(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Pp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Gg(e,_),Vg(_),h=k;return}}function ua(e){return e=e|0,357913941}function bg(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Gg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Vg(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Fp(e){e=e|0,Kg(e)}function Yg(e){e=e|0,$g(e+24|0)}function $g(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Kg(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,Xg()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Xg(){return 1232}function Jg(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=Qg(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=+Zg(n,s),h=o,+r}function Qg(e){return e=e|0,(t[(oa()|0)+24>>2]|0)+(e*12|0)|0}function Zg(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),+ +Ol(+oD[r&15](e))}function e_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],t_(e,r,s,1),h=o}function t_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=oc()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=n_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,I1(l,o)|0,o),h=s}function oc(){var e=0,n=0;if(c[7720]|0||(Rp(9592),Bt(36,9592,Q|0)|0,n=7720,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9592)|0)){e=9592,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Rp(9592)}return 9592}function n_(e){return e=e|0,0}function I1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=oc()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Lp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(r_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Lp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function r_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=i_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,q0(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Lp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,Yi(e,_),o_(_),h=k;return}}function i_(e){return e=e|0,357913941}function q0(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function Yi(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function o_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Rp(e){e=e|0,s_(e)}function u_(e){e=e|0,Np(e+24|0)}function Np(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function s_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,7,n,l_()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function l_(){return 1276}function f_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=Bp(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=c_(n,o)|0,h=r,n|0}function Bp(e){return e=e|0,(t[(oc()|0)+24>>2]|0)+(e*12|0)|0}function c_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;return s=h,h=h+16|0,o=s,r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Bl[r&31](o,e),o=jp(o)|0,h=s,o|0}function jp(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(Up()|0)|0,o?(s1(n,o),l1(r,n),qp(e,r),e=f1(n)|0):e=zp(e)|0,h=s,e|0}function Up(){var e=0;return c[7736]|0||(Wp(9640),Bt(25,9640,Q|0)|0,e=7736,t[e>>2]=1,t[e+4>>2]=0),9640}function qp(e,n){e=e|0,n=n|0,Ef(n,e,e+8|0)|0}function zp(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(16)|0,t[_>>2]=t[e>>2],t[_+4>>2]=t[e+4>>2],t[_+8>>2]=t[e+8>>2],t[_+12>>2]=t[e+12>>2],l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],P1(e,l,s),t[o>>2]=e,h=r,n|0}function P1(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1244,t[r+12>>2]=n,t[e+4>>2]=r}function a_(e){e=e|0,da(e),Ve(e)}function d_(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function p_(e){e=e|0,Ve(e)}function Ef(e,n,r){return e=e|0,n=n|0,r=r|0,n=h_(t[e>>2]|0,n,r)|0,r=e+4|0,t[(t[r>>2]|0)+8>>2]=n,t[(t[r>>2]|0)+8>>2]|0}function h_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;return o=h,h=h+16|0,s=o,Zo(s),e=Oi(e)|0,r=m_(e,t[n>>2]|0,+L[r>>3])|0,eu(s),h=o,r|0}function m_(e,n,r){e=e|0,n=n|0,r=+r;var o=0;return o=ko(v_()|0)|0,n=jc(n)|0,dl(0,o|0,e|0,n|0,+ +Ko(r))|0}function v_(){var e=0;return c[7728]|0||(g_(9628),e=7728,t[e>>2]=1,t[e+4>>2]=0),9628}function g_(e){e=e|0,Ao(e,__()|0,2)}function __(){return 1264}function Wp(e){e=e|0,Ys(e)}function Hp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],y_(e,r,s,1),h=o}function y_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=M1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=w_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,D_(l,o)|0,o),h=s}function M1(){var e=0,n=0;if(c[7744]|0||(Gp(9684),Bt(37,9684,Q|0)|0,n=7744,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9684)|0)){e=9684,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gp(9684)}return 9684}function w_(e){return e=e|0,0}function D_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=M1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],bp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(E_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function bp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function E_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=S_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,C_(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],bp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,T_(e,_),x_(_),h=k;return}}function S_(e){return e=e|0,357913941}function C_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function T_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function x_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Gp(e){e=e|0,O_(e)}function k_(e){e=e|0,A_(e+24|0)}function A_(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function O_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,5,n,I_()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function I_(){return 1280}function P_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=M_(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=F_(n,s,r)|0,h=o,r|0}function M_(e){return e=e|0,(t[(M1()|0)+24>>2]|0)+(e*12|0)|0}function F_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return d=h,h=h+32|0,s=d,l=d+16|0,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(l,r),l=ns(l,r)|0,X1[o&15](s,e,l),l=jp(s)|0,h=d,l|0}function L_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],R_(e,r,s,1),h=o}function R_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=F1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=N_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,B_(l,o)|0,o),h=s}function F1(){var e=0,n=0;if(c[7752]|0||(Kp(9720),Bt(38,9720,Q|0)|0,n=7752,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9720)|0)){e=9720,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Kp(9720)}return 9720}function N_(e){return e=e|0,0}function B_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=F1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Vp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(j_(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Vp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function j_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=L1(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Yp(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Vp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,$p(e,_),U_(_),h=k;return}}function L1(e){return e=e|0,357913941}function Yp(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function $p(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function U_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Kp(e){e=e|0,z_(e)}function q_(e){e=e|0,R1(e+24|0)}function R1(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function z_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,W_()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function W_(){return 1288}function H_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;return r=h,h=h+16|0,o=r+8|0,s=r,l=$i(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],n=N1(n,o)|0,h=r,n|0}function $i(e){return e=e|0,(t[(F1()|0)+24>>2]|0)+(e*12|0)|0}function N1(e,n){e=e|0,n=n|0;var r=0;return r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Dd(dc[r&31](e)|0)|0}function b_(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],G_(e,r,s,0),h=o}function G_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=B1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=V_(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,j1(l,o)|0,o),h=s}function B1(){var e=0,n=0;if(c[7760]|0||(q1(9756),Bt(39,9756,Q|0)|0,n=7760,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9756)|0)){e=9756,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));q1(9756)}return 9756}function V_(e){return e=e|0,0}function j1(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=B1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Xp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(U1(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Xp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function U1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=Y_(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,$_(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Xp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,K_(e,_),X_(_),h=k;return}}function Y_(e){return e=e|0,357913941}function $_(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function K_(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function X_(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function q1(e){e=e|0,Z_(e)}function J_(e){e=e|0,Q_(e+24|0)}function Q_(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function Z_(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,z1()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function z1(){return 1292}function W1(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=e4(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],t4(n,s,r),h=o}function e4(e){return e=e|0,(t[(B1()|0)+24>>2]|0)+(e*12|0)|0}function t4(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),wu(s,r),r=+Du(s,r),nD[o&31](e,r),h=l}function n4(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r4(e,r,s,0),h=o}function r4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=H1()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=i4(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,o4(l,o)|0,o),h=s}function H1(){var e=0,n=0;if(c[7768]|0||(Qp(9792),Bt(40,9792,Q|0)|0,n=7768,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9792)|0)){e=9792,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Qp(9792)}return 9792}function i4(e){return e=e|0,0}function o4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=H1()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Jp(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(u4(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Jp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function u4(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=s4(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,l4(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Jp(l,o,r),t[y>>2]=(t[y>>2]|0)+12,f4(e,_),c4(_),h=k;return}}function s4(e){return e=e|0,357913941}function l4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function f4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function c4(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Qp(e){e=e|0,p4(e)}function a4(e){e=e|0,d4(e+24|0)}function d4(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function p4(e){e=e|0;var n=0;n=An()|0,Nn(e,2,1,n,h4()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function h4(){return 1300}function m4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=v4(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],g4(n,l,r,o),h=s}function v4(e){return e=e|0,(t[(H1()|0)+24>>2]|0)+(e*12|0)|0}function g4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),ts(l,r),l=ns(l,r)|0,wu(d,o),o=+Du(d,o),cD[s&15](e,l,o),h=_}function a(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],p(e,r,s,0),h=o}function p(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=I(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,B(l,o)|0,o),h=s}function E(){var e=0,n=0;if(c[7776]|0||(nt(9828),Bt(41,9828,Q|0)|0,n=7776,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9828)|0)){e=9828,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));nt(9828)}return 9828}function I(e){return e=e|0,0}function B(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],G(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(te(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function G(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function te(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=se(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,Ee(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],G(l,o,r),t[y>>2]=(t[y>>2]|0)+12,$e(e,_),Ke(_),h=k;return}}function se(e){return e=e|0,357913941}function Ee(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function $e(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ke(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function nt(e){e=e|0,an(e)}function Ct(e){e=e|0,Gt(e+24|0)}function Gt(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function an(e){e=e|0;var n=0;n=An()|0,Nn(e,2,7,n,qn()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function qn(){return 1312}function dn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=Yn(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],er(n,s,r),h=o}function Yn(e){return e=e|0,(t[(E()|0)+24>>2]|0)+(e*12|0)|0}function er(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,Bl[o&31](e,s),h=l}function vo(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Pi(e,r,s,0),h=o}function Pi(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=Mi()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=f0(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,Jo(l,o)|0,o),h=s}function Mi(){var e=0,n=0;if(c[7784]|0||(kw(9864),Bt(42,9864,Q|0)|0,n=7784,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9864)|0)){e=9864,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));kw(9864)}return 9864}function f0(e){return e=e|0,0}function Jo(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=Mi()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Su(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(Zp(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Su(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function Zp(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=v9(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,g9(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Su(l,o,r),t[y>>2]=(t[y>>2]|0)+12,_9(e,_),y9(_),h=k;return}}function v9(e){return e=e|0,357913941}function g9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function _9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function y9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function kw(e){e=e|0,E9(e)}function w9(e){e=e|0,D9(e+24|0)}function D9(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function E9(e){e=e|0;var n=0;n=An()|0,Nn(e,2,8,n,S9()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function S9(){return 1320}function C9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=T9(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],x9(n,s,r),h=o}function T9(e){return e=e|0,(t[(Mi()|0)+24>>2]|0)+(e*12|0)|0}function x9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),k9(s,r),s=A9(s,r)|0,Bl[o&31](e,s),h=l}function k9(e,n){e=e|0,n=n|0}function A9(e,n){return e=e|0,n=n|0,O9(n)|0}function O9(e){return e=e|0,e|0}function I9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],P9(e,r,s,0),h=o}function P9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=_4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=M9(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,F9(l,o)|0,o),h=s}function _4(){var e=0,n=0;if(c[7792]|0||(Ow(9900),Bt(43,9900,Q|0)|0,n=7792,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9900)|0)){e=9900,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Ow(9900)}return 9900}function M9(e){return e=e|0,0}function F9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=_4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Aw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(L9(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Aw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function L9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=R9(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,N9(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Aw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,B9(e,_),j9(_),h=k;return}}function R9(e){return e=e|0,357913941}function N9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function B9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function j9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Ow(e){e=e|0,z9(e)}function U9(e){e=e|0,q9(e+24|0)}function q9(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function z9(e){e=e|0;var n=0;n=An()|0,Nn(e,2,22,n,W9()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function W9(){return 1344}function H9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0;r=h,h=h+16|0,o=r+8|0,s=r,l=b9(e)|0,e=t[l+4>>2]|0,t[s>>2]=t[l>>2],t[s+4>>2]=e,t[o>>2]=t[s>>2],t[o+4>>2]=t[s+4>>2],G9(n,o),h=r}function b9(e){return e=e|0,(t[(_4()|0)+24>>2]|0)+(e*12|0)|0}function G9(e,n){e=e|0,n=n|0;var r=0;r=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(r=t[(t[e>>2]|0)+r>>2]|0),Nl[r&127](e)}function V9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=y4()|0,e=Y9(r)|0,ur(l,n,s,e,$9(r,o)|0,o)}function y4(){var e=0,n=0;if(c[7800]|0||(Pw(9936),Bt(44,9936,Q|0)|0,n=7800,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9936)|0)){e=9936,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Pw(9936)}return 9936}function Y9(e){return e=e|0,e|0}function $9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=y4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Iw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(K9(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Iw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function K9(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=X9(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,J9(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Iw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,Q9(e,s),Z9(s),h=_;return}}function X9(e){return e=e|0,536870911}function J9(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function Q9(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Z9(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Pw(e){e=e|0,nx(e)}function ex(e){e=e|0,tx(e+24|0)}function tx(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function nx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,23,n,Mo()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function rx(e,n){e=e|0,n=n|0,ox(t[(ix(e)|0)>>2]|0,n)}function ix(e){return e=e|0,(t[(y4()|0)+24>>2]|0)+(e<<3)|0}function ox(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,On(o,n),n=x1(o,n)|0,Nl[e&127](n),h=r}function ux(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=w4()|0,e=sx(r)|0,ur(l,n,s,e,lx(r,o)|0,o)}function w4(){var e=0,n=0;if(c[7808]|0||(Fw(9972),Bt(45,9972,Q|0)|0,n=7808,t[n>>2]=1,t[n+4>>2]=0),!(Dn(9972)|0)){e=9972,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Fw(9972)}return 9972}function sx(e){return e=e|0,e|0}function lx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=w4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Mw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(fx(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Mw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function fx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=cx(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,ax(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Mw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,dx(e,s),px(s),h=_;return}}function cx(e){return e=e|0,536870911}function ax(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function dx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function px(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Fw(e){e=e|0,vx(e)}function hx(e){e=e|0,mx(e+24|0)}function mx(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function vx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,9,n,gx()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function gx(){return 1348}function _x(e,n){return e=e|0,n=n|0,wx(t[(yx(e)|0)>>2]|0,n)|0}function yx(e){return e=e|0,(t[(w4()|0)+24>>2]|0)+(e<<3)|0}function wx(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Lw(o,n),n=Rw(o,n)|0,n=Xc(dc[e&31](n)|0)|0,h=r,n|0}function Lw(e,n){e=e|0,n=n|0}function Rw(e,n){return e=e|0,n=n|0,Dx(n)|0}function Dx(e){return e=e|0,e|0}function Ex(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=D4()|0,e=Sx(r)|0,ur(l,n,s,e,Cx(r,o)|0,o)}function D4(){var e=0,n=0;if(c[7816]|0||(Bw(10008),Bt(46,10008,Q|0)|0,n=7816,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10008)|0)){e=10008,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Bw(10008)}return 10008}function Sx(e){return e=e|0,e|0}function Cx(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=D4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Nw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(Tx(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Nw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function Tx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=xx(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,kx(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Nw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,Ax(e,s),Ox(s),h=_;return}}function xx(e){return e=e|0,536870911}function kx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function Ax(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function Ox(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Bw(e){e=e|0,Mx(e)}function Ix(e){e=e|0,Px(e+24|0)}function Px(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function Mx(e){e=e|0;var n=0;n=An()|0,Nn(e,1,15,n,mp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Fx(e){return e=e|0,Rx(t[(Lx(e)|0)>>2]|0)|0}function Lx(e){return e=e|0,(t[(D4()|0)+24>>2]|0)+(e<<3)|0}function Rx(e){return e=e|0,Xc(ph[e&7]()|0)|0}function Nx(){var e=0;return c[7832]|0||(bx(10052),Bt(25,10052,Q|0)|0,e=7832,t[e>>2]=1,t[e+4>>2]=0),10052}function Bx(e,n){e=e|0,n=n|0,t[e>>2]=jx()|0,t[e+4>>2]=Ux()|0,t[e+12>>2]=n,t[e+8>>2]=qx()|0,t[e+32>>2]=2}function jx(){return 11709}function Ux(){return 1188}function qx(){return eh()|0}function zx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(Wx(r),Ve(r)):n|0&&(mu(n),Ve(n))}function Sf(e,n){return e=e|0,n=n|0,n&e|0}function Wx(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function eh(){var e=0;return c[7824]|0||(t[2511]=Hx()|0,t[2512]=0,e=7824,t[e>>2]=1,t[e+4>>2]=0),10044}function Hx(){return 0}function bx(e){e=e|0,Ys(e)}function Gx(e){e=e|0;var n=0,r=0,o=0,s=0,l=0;n=h,h=h+32|0,r=n+24|0,l=n+16|0,s=n+8|0,o=n,Vx(e,4827),Yx(e,4834,3)|0,$x(e,3682,47)|0,t[l>>2]=9,t[l+4>>2]=0,t[r>>2]=t[l>>2],t[r+4>>2]=t[l+4>>2],Kx(e,4841,r)|0,t[s>>2]=1,t[s+4>>2]=0,t[r>>2]=t[s>>2],t[r+4>>2]=t[s+4>>2],Xx(e,4871,r)|0,t[o>>2]=10,t[o+4>>2]=0,t[r>>2]=t[o>>2],t[r+4>>2]=t[o+4>>2],Jx(e,4891,r)|0,h=n}function Vx(e,n){e=e|0,n=n|0;var r=0;r=Ok()|0,t[e>>2]=r,Ik(r,n),Cf(t[e>>2]|0)}function Yx(e,n,r){return e=e|0,n=n|0,r=r|0,pk(e,Zn(n)|0,r,0),e|0}function $x(e,n,r){return e=e|0,n=n|0,r=r|0,Q7(e,Zn(n)|0,r,0),e|0}function Kx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],F7(e,n,s),h=o,e|0}function Xx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],h7(e,n,s),h=o,e|0}function Jx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=t[r+4>>2]|0,t[l>>2]=t[r>>2],t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Qx(e,n,s),h=o,e|0}function Qx(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],Zx(e,r,s,1),h=o}function Zx(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=E4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=e7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,t7(l,o)|0,o),h=s}function E4(){var e=0,n=0;if(c[7840]|0||(Uw(10100),Bt(48,10100,Q|0)|0,n=7840,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10100)|0)){e=10100,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Uw(10100)}return 10100}function e7(e){return e=e|0,0}function t7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=E4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],jw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(n7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function jw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function n7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=r7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,i7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],jw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,o7(e,_),u7(_),h=k;return}}function r7(e){return e=e|0,357913941}function i7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function o7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function u7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Uw(e){e=e|0,f7(e)}function s7(e){e=e|0,l7(e+24|0)}function l7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function f7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,6,n,c7()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function c7(){return 1364}function a7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;return o=h,h=h+16|0,s=o+8|0,l=o,d=d7(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],r=p7(n,s,r)|0,h=o,r|0}function d7(e){return e=e|0,(t[(E4()|0)+24>>2]|0)+(e*12|0)|0}function p7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),ts(s,r),s=ns(s,r)|0,s=ip(J4[o&15](e,s)|0)|0,h=l,s|0}function h7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],m7(e,r,s,0),h=o}function m7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=S4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=v7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,g7(l,o)|0,o),h=s}function S4(){var e=0,n=0;if(c[7848]|0||(zw(10136),Bt(49,10136,Q|0)|0,n=7848,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10136)|0)){e=10136,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));zw(10136)}return 10136}function v7(e){return e=e|0,0}function g7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=S4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],qw(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(_7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function qw(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function _7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=y7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,w7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],qw(l,o,r),t[y>>2]=(t[y>>2]|0)+12,D7(e,_),E7(_),h=k;return}}function y7(e){return e=e|0,357913941}function w7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function D7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function E7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function zw(e){e=e|0,T7(e)}function S7(e){e=e|0,C7(e+24|0)}function C7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function T7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,9,n,x7()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function x7(){return 1372}function k7(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,s=o+8|0,l=o,d=A7(e)|0,e=t[d+4>>2]|0,t[l>>2]=t[d>>2],t[l+4>>2]=e,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],O7(n,s,r),h=o}function A7(e){return e=e|0,(t[(S4()|0)+24>>2]|0)+(e*12|0)|0}function O7(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=tt;l=h,h=h+16|0,s=l,o=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(o=t[(t[e>>2]|0)+o>>2]|0),I7(s,r),d=w(P7(s,r)),tD[o&1](e,d),h=l}function I7(e,n){e=e|0,n=+n}function P7(e,n){return e=e|0,n=+n,w(M7(n))}function M7(e){return e=+e,w(e)}function F7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,s=o+8|0,l=o,_=t[r>>2]|0,d=t[r+4>>2]|0,r=Zn(n)|0,t[l>>2]=_,t[l+4>>2]=d,t[s>>2]=t[l>>2],t[s+4>>2]=t[l+4>>2],L7(e,r,s,0),h=o}function L7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0,y=0,k=0,T=0;s=h,h=h+32|0,l=s+16|0,T=s+8|0,_=s,k=t[r>>2]|0,y=t[r+4>>2]|0,d=t[e>>2]|0,e=C4()|0,t[T>>2]=k,t[T+4>>2]=y,t[l>>2]=t[T>>2],t[l+4>>2]=t[T+4>>2],r=R7(l)|0,t[_>>2]=k,t[_+4>>2]=y,t[l>>2]=t[_>>2],t[l+4>>2]=t[_+4>>2],ur(d,n,e,r,N7(l,o)|0,o),h=s}function C4(){var e=0,n=0;if(c[7856]|0||(Hw(10172),Bt(50,10172,Q|0)|0,n=7856,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10172)|0)){e=10172,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Hw(10172)}return 10172}function R7(e){return e=e|0,0}function N7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0;return T=h,h=h+32|0,s=T+24|0,d=T+16|0,_=T,y=T+8|0,l=t[e>>2]|0,o=t[e+4>>2]|0,t[_>>2]=l,t[_+4>>2]=o,P=C4()|0,k=P+24|0,e=Lt(n,4)|0,t[y>>2]=e,n=P+28|0,r=t[n>>2]|0,r>>>0<(t[P+32>>2]|0)>>>0?(t[d>>2]=l,t[d+4>>2]=o,t[s>>2]=t[d>>2],t[s+4>>2]=t[d+4>>2],Ww(r,s,e),e=(t[n>>2]|0)+12|0,t[n>>2]=e):(B7(k,_,y),e=t[n>>2]|0),h=T,((e-(t[k>>2]|0)|0)/12|0)+-1|0}function Ww(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=t[n+4>>2]|0,t[e>>2]=t[n>>2],t[e+4>>2]=o,t[e+8>>2]=r}function B7(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;if(k=h,h=h+48|0,o=k+32|0,d=k+24|0,_=k,y=e+4|0,s=(((t[y>>2]|0)-(t[e>>2]|0)|0)/12|0)+1|0,l=j7(e)|0,l>>>0>>0)$n(e);else{T=t[e>>2]|0,q=((t[e+8>>2]|0)-T|0)/12|0,P=q<<1,U7(_,q>>>0>>1>>>0?P>>>0>>0?s:P:l,((t[y>>2]|0)-T|0)/12|0,e+8|0),y=_+8|0,l=t[y>>2]|0,s=t[n+4>>2]|0,r=t[r>>2]|0,t[d>>2]=t[n>>2],t[d+4>>2]=s,t[o>>2]=t[d>>2],t[o+4>>2]=t[d+4>>2],Ww(l,o,r),t[y>>2]=(t[y>>2]|0)+12,q7(e,_),z7(_),h=k;return}}function j7(e){return e=e|0,357913941}function U7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>357913941)_n();else{s=Tt(n*12|0)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r*12|0)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n*12|0)}function q7(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(((s|0)/-12|0)*12|0)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function z7(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~(((o+-12-n|0)>>>0)/12|0)*12|0)),e=t[e>>2]|0,e|0&&Ve(e)}function Hw(e){e=e|0,b7(e)}function W7(e){e=e|0,H7(e+24|0)}function H7(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~(((n+-12-o|0)>>>0)/12|0)*12|0)),Ve(r))}function b7(e){e=e|0;var n=0;n=An()|0,Nn(e,2,3,n,G7()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function G7(){return 1380}function V7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+8|0,d=s,_=Y7(e)|0,e=t[_+4>>2]|0,t[d>>2]=t[_>>2],t[d+4>>2]=e,t[l>>2]=t[d>>2],t[l+4>>2]=t[d+4>>2],$7(n,l,r,o),h=s}function Y7(e){return e=e|0,(t[(C4()|0)+24>>2]|0)+(e*12|0)|0}function $7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;_=h,h=h+16|0,l=_+1|0,d=_,s=t[n>>2]|0,n=t[n+4>>2]|0,e=e+(n>>1)|0,n&1&&(s=t[(t[e>>2]|0)+s>>2]|0),ts(l,r),l=ns(l,r)|0,K7(d,o),d=X7(d,o)|0,X1[s&15](e,l,d),h=_}function K7(e,n){e=e|0,n=n|0}function X7(e,n){return e=e|0,n=n|0,J7(n)|0}function J7(e){return e=e|0,(e|0)!=0|0}function Q7(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=T4()|0,e=Z7(r)|0,ur(l,n,s,e,ek(r,o)|0,o)}function T4(){var e=0,n=0;if(c[7864]|0||(Gw(10208),Bt(51,10208,Q|0)|0,n=7864,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10208)|0)){e=10208,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Gw(10208)}return 10208}function Z7(e){return e=e|0,e|0}function ek(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=T4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(bw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(tk(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function bw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function tk(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=nk(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,rk(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,bw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,ik(e,s),ok(s),h=_;return}}function nk(e){return e=e|0,536870911}function rk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function ik(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function ok(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Gw(e){e=e|0,lk(e)}function uk(e){e=e|0,sk(e+24|0)}function sk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function lk(e){e=e|0;var n=0;n=An()|0,Nn(e,1,24,n,fk()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fk(){return 1392}function ck(e,n){e=e|0,n=n|0,dk(t[(ak(e)|0)>>2]|0,n)}function ak(e){return e=e|0,(t[(T4()|0)+24>>2]|0)+(e<<3)|0}function dk(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,Lw(o,n),n=Rw(o,n)|0,Nl[e&127](n),h=r}function pk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=x4()|0,e=hk(r)|0,ur(l,n,s,e,mk(r,o)|0,o)}function x4(){var e=0,n=0;if(c[7872]|0||(Yw(10244),Bt(52,10244,Q|0)|0,n=7872,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10244)|0)){e=10244,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));Yw(10244)}return 10244}function hk(e){return e=e|0,e|0}function mk(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=x4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(Vw(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(vk(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function Vw(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function vk(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=gk(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,_k(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,Vw(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,yk(e,s),wk(s),h=_;return}}function gk(e){return e=e|0,536870911}function _k(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function yk(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function wk(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function Yw(e){e=e|0,Sk(e)}function Dk(e){e=e|0,Ek(e+24|0)}function Ek(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function Sk(e){e=e|0;var n=0;n=An()|0,Nn(e,1,16,n,Ck()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Ck(){return 1400}function Tk(e){return e=e|0,kk(t[(xk(e)|0)>>2]|0)|0}function xk(e){return e=e|0,(t[(x4()|0)+24>>2]|0)+(e<<3)|0}function kk(e){return e=e|0,Ak(ph[e&7]()|0)|0}function Ak(e){return e=e|0,e|0}function Ok(){var e=0;return c[7880]|0||(Nk(10280),Bt(25,10280,Q|0)|0,e=7880,t[e>>2]=1,t[e+4>>2]=0),10280}function Ik(e,n){e=e|0,n=n|0,t[e>>2]=Pk()|0,t[e+4>>2]=Mk()|0,t[e+12>>2]=n,t[e+8>>2]=Fk()|0,t[e+32>>2]=4}function Pk(){return 11711}function Mk(){return 1356}function Fk(){return eh()|0}function Lk(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(Rk(r),Ve(r)):n|0&&(Gi(n),Ve(n))}function Rk(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function Nk(e){e=e|0,Ys(e)}function Bk(e){e=e|0,jk(e,4920),Uk(e)|0,qk(e)|0}function jk(e,n){e=e|0,n=n|0;var r=0;r=Up()|0,t[e>>2]=r,sA(r,n),Cf(t[e>>2]|0)}function Uk(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,Jk()|0),e|0}function qk(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,zk()|0),e|0}function zk(){var e=0;return c[7888]|0||($w(10328),Bt(53,10328,Q|0)|0,e=7888,t[e>>2]=1,t[e+4>>2]=0),Dn(10328)|0||$w(10328),10328}function uc(e,n){e=e|0,n=n|0,ur(e,0,n,0,0,0)}function $w(e){e=e|0,bk(e),sc(e,10)}function Wk(e){e=e|0,Hk(e+24|0)}function Hk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function bk(e){e=e|0;var n=0;n=An()|0,Nn(e,5,1,n,$k()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function Gk(e,n,r){e=e|0,n=n|0,r=+r,Vk(e,n,r)}function sc(e,n){e=e|0,n=n|0,t[e+20>>2]=n}function Vk(e,n,r){e=e|0,n=n|0,r=+r;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+16|0,l=o+8|0,_=o+13|0,s=o,d=o+12|0,ts(_,n),t[l>>2]=ns(_,n)|0,wu(d,r),L[s>>3]=+Du(d,r),Yk(e,l,s),h=o}function Yk(e,n,r){e=e|0,n=n|0,r=r|0,M(e+8|0,t[n>>2]|0,+L[r>>3]),c[e+24>>0]=1}function $k(){return 1404}function Kk(e,n){return e=e|0,n=+n,Xk(e,n)|0}function Xk(e,n){e=e|0,n=+n;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+16|0,l=o+4|0,d=o+8|0,_=o,s=Qo(8)|0,r=s,y=Tt(16)|0,ts(l,e),e=ns(l,e)|0,wu(d,n),M(y,e,+Du(d,n)),d=r+4|0,t[d>>2]=y,e=Tt(8)|0,d=t[d>>2]|0,t[_>>2]=0,t[l>>2]=t[_>>2],P1(e,d,l),t[s>>2]=e,h=o,r|0}function Jk(){var e=0;return c[7896]|0||(Kw(10364),Bt(54,10364,Q|0)|0,e=7896,t[e>>2]=1,t[e+4>>2]=0),Dn(10364)|0||Kw(10364),10364}function Kw(e){e=e|0,eA(e),sc(e,55)}function Qk(e){e=e|0,Zk(e+24|0)}function Zk(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function eA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,4,n,iA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function tA(e){e=e|0,nA(e)}function nA(e){e=e|0,rA(e)}function rA(e){e=e|0,Xw(e+8|0),c[e+24>>0]=1}function Xw(e){e=e|0,t[e>>2]=0,L[e+8>>3]=0}function iA(){return 1424}function oA(){return uA()|0}function uA(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,o=Tt(16)|0,Xw(o),l=e+4|0,t[l>>2]=o,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],P1(o,l,s),t[r>>2]=o,h=n,e|0}function sA(e,n){e=e|0,n=n|0,t[e>>2]=lA()|0,t[e+4>>2]=fA()|0,t[e+12>>2]=n,t[e+8>>2]=cA()|0,t[e+32>>2]=5}function lA(){return 11710}function fA(){return 1416}function cA(){return th()|0}function aA(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(dA(r),Ve(r)):n|0&&Ve(n)}function dA(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function th(){var e=0;return c[7904]|0||(t[2600]=pA()|0,t[2601]=0,e=7904,t[e>>2]=1,t[e+4>>2]=0),10400}function pA(){return t[357]|0}function hA(e){e=e|0,mA(e,4926),vA(e)|0}function mA(e,n){e=e|0,n=n|0;var r=0;r=u1()|0,t[e>>2]=r,kA(r,n),Cf(t[e>>2]|0)}function vA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,gA()|0),e|0}function gA(){var e=0;return c[7912]|0||(Jw(10412),Bt(56,10412,Q|0)|0,e=7912,t[e>>2]=1,t[e+4>>2]=0),Dn(10412)|0||Jw(10412),10412}function Jw(e){e=e|0,wA(e),sc(e,57)}function _A(e){e=e|0,yA(e+24|0)}function yA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function wA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,5,n,CA()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function DA(e){e=e|0,EA(e)}function EA(e){e=e|0,SA(e)}function SA(e){e=e|0;var n=0,r=0;n=e+8|0,r=n+48|0;do t[n>>2]=0,n=n+4|0;while((n|0)<(r|0));c[e+56>>0]=1}function CA(){return 1432}function TA(){return xA()|0}function xA(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0,_=0;d=h,h=h+16|0,e=d+4|0,n=d,r=Qo(8)|0,o=r,s=Tt(48)|0,l=s,_=l+48|0;do t[l>>2]=0,l=l+4|0;while((l|0)<(_|0));return l=o+4|0,t[l>>2]=s,_=Tt(8)|0,l=t[l>>2]|0,t[n>>2]=0,t[e>>2]=t[n>>2],Wd(_,l,e),t[r>>2]=_,h=d,o|0}function kA(e,n){e=e|0,n=n|0,t[e>>2]=AA()|0,t[e+4>>2]=OA()|0,t[e+12>>2]=n,t[e+8>>2]=IA()|0,t[e+32>>2]=6}function AA(){return 11704}function OA(){return 1436}function IA(){return th()|0}function PA(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(MA(r),Ve(r)):n|0&&Ve(n)}function MA(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function FA(e){e=e|0,LA(e,4933),RA(e)|0,NA(e)|0}function LA(e,n){e=e|0,n=n|0;var r=0;r=uO()|0,t[e>>2]=r,sO(r,n),Cf(t[e>>2]|0)}function RA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,XA()|0),e|0}function NA(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,BA()|0),e|0}function BA(){var e=0;return c[7920]|0||(Qw(10452),Bt(58,10452,Q|0)|0,e=7920,t[e>>2]=1,t[e+4>>2]=0),Dn(10452)|0||Qw(10452),10452}function Qw(e){e=e|0,qA(e),sc(e,1)}function jA(e){e=e|0,UA(e+24|0)}function UA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function qA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,1,n,bA()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function zA(e,n,r){e=e|0,n=+n,r=+r,WA(e,n,r)}function WA(e,n,r){e=e|0,n=+n,r=+r;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,l=o+8|0,_=o+17|0,s=o,d=o+16|0,wu(_,n),L[l>>3]=+Du(_,n),wu(d,r),L[s>>3]=+Du(d,r),HA(e,l,s),h=o}function HA(e,n,r){e=e|0,n=n|0,r=r|0,Zw(e+8|0,+L[n>>3],+L[r>>3]),c[e+24>>0]=1}function Zw(e,n,r){e=e|0,n=+n,r=+r,L[e>>3]=n,L[e+8>>3]=r}function bA(){return 1472}function GA(e,n){return e=+e,n=+n,VA(e,n)|0}function VA(e,n){e=+e,n=+n;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+16|0,d=o+4|0,_=o+8|0,y=o,s=Qo(8)|0,r=s,l=Tt(16)|0,wu(d,e),e=+Du(d,e),wu(_,n),Zw(l,e,+Du(_,n)),_=r+4|0,t[_>>2]=l,l=Tt(8)|0,_=t[_>>2]|0,t[y>>2]=0,t[d>>2]=t[y>>2],e8(l,_,d),t[s>>2]=l,h=o,r|0}function e8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1452,t[r+12>>2]=n,t[e+4>>2]=r}function YA(e){e=e|0,da(e),Ve(e)}function $A(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function KA(e){e=e|0,Ve(e)}function XA(){var e=0;return c[7928]|0||(t8(10488),Bt(59,10488,Q|0)|0,e=7928,t[e>>2]=1,t[e+4>>2]=0),Dn(10488)|0||t8(10488),10488}function t8(e){e=e|0,ZA(e),sc(e,60)}function JA(e){e=e|0,QA(e+24|0)}function QA(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function ZA(e){e=e|0;var n=0;n=An()|0,Nn(e,5,6,n,rO()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function eO(e){e=e|0,tO(e)}function tO(e){e=e|0,nO(e)}function nO(e){e=e|0,n8(e+8|0),c[e+24>>0]=1}function n8(e){e=e|0,t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,t[e+12>>2]=0}function rO(){return 1492}function iO(){return oO()|0}function oO(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,o=Tt(16)|0,n8(o),l=e+4|0,t[l>>2]=o,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],e8(o,l,s),t[r>>2]=o,h=n,e|0}function uO(){var e=0;return c[7936]|0||(pO(10524),Bt(25,10524,Q|0)|0,e=7936,t[e>>2]=1,t[e+4>>2]=0),10524}function sO(e,n){e=e|0,n=n|0,t[e>>2]=lO()|0,t[e+4>>2]=fO()|0,t[e+12>>2]=n,t[e+8>>2]=cO()|0,t[e+32>>2]=7}function lO(){return 11700}function fO(){return 1484}function cO(){return th()|0}function aO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(dO(r),Ve(r)):n|0&&Ve(n)}function dO(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function pO(e){e=e|0,Ys(e)}function hO(e,n,r){e=e|0,n=n|0,r=r|0,e=Zn(n)|0,n=mO(r)|0,r=vO(r,0)|0,VO(e,n,r,k4()|0,0)}function mO(e){return e=e|0,e|0}function vO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=k4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(i8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(SO(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function k4(){var e=0,n=0;if(c[7944]|0||(r8(10568),Bt(61,10568,Q|0)|0,n=7944,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10568)|0)){e=10568,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));r8(10568)}return 10568}function r8(e){e=e|0,yO(e)}function gO(e){e=e|0,_O(e+24|0)}function _O(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function yO(e){e=e|0;var n=0;n=An()|0,Nn(e,1,17,n,Dp()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wO(e){return e=e|0,EO(t[(DO(e)|0)>>2]|0)|0}function DO(e){return e=e|0,(t[(k4()|0)+24>>2]|0)+(e<<3)|0}function EO(e){return e=e|0,ea(ph[e&7]()|0)|0}function i8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function SO(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=CO(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,TO(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,i8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,xO(e,s),kO(s),h=_;return}}function CO(e){return e=e|0,536870911}function TO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function xO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function kO(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function AO(){OO()}function OO(){IO(10604)}function IO(e){e=e|0,PO(e,4955)}function PO(e,n){e=e|0,n=n|0;var r=0;r=MO()|0,t[e>>2]=r,FO(r,n),Cf(t[e>>2]|0)}function MO(){var e=0;return c[7952]|0||(WO(10612),Bt(25,10612,Q|0)|0,e=7952,t[e>>2]=1,t[e+4>>2]=0),10612}function FO(e,n){e=e|0,n=n|0,t[e>>2]=BO()|0,t[e+4>>2]=jO()|0,t[e+12>>2]=n,t[e+8>>2]=UO()|0,t[e+32>>2]=8}function Cf(e){e=e|0;var n=0,r=0;n=h,h=h+16|0,r=n,sa()|0,t[r>>2]=e,LO(10608,r),h=n}function sa(){return c[11714]|0||(t[2652]=0,Bt(62,10608,Q|0)|0,c[11714]=1),10608}function LO(e,n){e=e|0,n=n|0;var r=0;r=Tt(8)|0,t[r+4>>2]=t[n>>2],t[r>>2]=t[e>>2],t[e>>2]=r}function RO(e){e=e|0,NO(e)}function NO(e){e=e|0;var n=0,r=0;if(n=t[e>>2]|0,n|0)do r=n,n=t[n>>2]|0,Ve(r);while((n|0)!=0);t[e>>2]=0}function BO(){return 11715}function jO(){return 1496}function UO(){return eh()|0}function qO(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(zO(r),Ve(r)):n|0&&Ve(n)}function zO(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function WO(e){e=e|0,Ys(e)}function HO(e,n){e=e|0,n=n|0;var r=0,o=0;sa()|0,r=t[2652]|0;e:do if(r|0){for(;o=t[r+4>>2]|0,!(o|0?(U8(A4(o)|0,e)|0)==0:0);)if(r=t[r>>2]|0,!r)break e;bO(o,n)}while(0)}function A4(e){return e=e|0,t[e+12>>2]|0}function bO(e,n){e=e|0,n=n|0;var r=0;e=e+36|0,r=t[e>>2]|0,r|0&&(Ju(r),Ve(r)),r=Tt(4)|0,ba(r,n),t[e>>2]=r}function O4(){return c[11716]|0||(t[2664]=0,Bt(63,10656,Q|0)|0,c[11716]=1),10656}function o8(){var e=0;return c[11717]|0?e=t[2665]|0:(GO(),t[2665]=1504,c[11717]=1,e=1504),e|0}function GO(){c[11740]|0||(c[11718]=Lt(Lt(8,0)|0,0)|0,c[11719]=Lt(Lt(0,0)|0,0)|0,c[11720]=Lt(Lt(0,16)|0,0)|0,c[11721]=Lt(Lt(8,0)|0,0)|0,c[11722]=Lt(Lt(0,0)|0,0)|0,c[11723]=Lt(Lt(8,0)|0,0)|0,c[11724]=Lt(Lt(0,0)|0,0)|0,c[11725]=Lt(Lt(8,0)|0,0)|0,c[11726]=Lt(Lt(0,0)|0,0)|0,c[11727]=Lt(Lt(8,0)|0,0)|0,c[11728]=Lt(Lt(0,0)|0,0)|0,c[11729]=Lt(Lt(0,0)|0,32)|0,c[11730]=Lt(Lt(0,0)|0,32)|0,c[11740]=1)}function u8(){return 1572}function VO(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0;l=h,h=h+32|0,T=l+16|0,k=l+12|0,y=l+8|0,_=l+4|0,d=l,t[T>>2]=e,t[k>>2]=n,t[y>>2]=r,t[_>>2]=o,t[d>>2]=s,O4()|0,YO(10656,T,k,y,_,d),h=l}function YO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0;d=Tt(24)|0,t1(d+4|0,t[n>>2]|0,t[r>>2]|0,t[o>>2]|0,t[s>>2]|0,t[l>>2]|0),t[d>>2]=t[e>>2],t[e>>2]=d}function s8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0;if(qe=h,h=h+32|0,le=qe+20|0,ie=qe+8|0,Pe=qe+4|0,ke=qe,n=t[n>>2]|0,n|0){we=le+4|0,y=le+8|0,k=ie+4|0,T=ie+8|0,P=ie+8|0,q=le+8|0;do{if(d=n+4|0,_=I4(d)|0,_|0){if(s=b1(_)|0,t[le>>2]=0,t[we>>2]=0,t[y>>2]=0,o=(G1(_)|0)+1|0,$O(le,o),o|0)for(;o=o+-1|0,os(ie,t[s>>2]|0),l=t[we>>2]|0,l>>>0<(t[q>>2]|0)>>>0?(t[l>>2]=t[ie>>2],t[we>>2]=(t[we>>2]|0)+4):P4(le,ie),o;)s=s+4|0;o=V1(_)|0,t[ie>>2]=0,t[k>>2]=0,t[T>>2]=0;e:do if(t[o>>2]|0)for(s=0,l=0;;){if((s|0)==(l|0)?KO(ie,o):(t[s>>2]=t[o>>2],t[k>>2]=(t[k>>2]|0)+4),o=o+4|0,!(t[o>>2]|0))break e;s=t[k>>2]|0,l=t[P>>2]|0}while(0);t[Pe>>2]=nh(d)|0,t[ke>>2]=Dn(_)|0,XO(r,e,Pe,ke,le,ie),M4(ie),Rl(le)}n=t[n>>2]|0}while((n|0)!=0)}h=qe}function I4(e){return e=e|0,t[e+12>>2]|0}function b1(e){return e=e|0,t[e+12>>2]|0}function G1(e){return e=e|0,t[e+16>>2]|0}function $O(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+32|0,r=s,o=t[e>>2]|0,(t[e+8>>2]|0)-o>>2>>>0>>0&&(m8(r,n,(t[e+4>>2]|0)-o>>2,e+8|0),v8(e,r),g8(r)),h=s}function P4(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;if(d=h,h=h+32|0,r=d,o=e+4|0,s=((t[o>>2]|0)-(t[e>>2]|0)>>2)+1|0,l=h8(e)|0,l>>>0>>0)$n(e);else{_=t[e>>2]|0,k=(t[e+8>>2]|0)-_|0,y=k>>1,m8(r,k>>2>>>0>>1>>>0?y>>>0>>0?s:y:l,(t[o>>2]|0)-_>>2,e+8|0),l=r+8|0,t[t[l>>2]>>2]=t[n>>2],t[l>>2]=(t[l>>2]|0)+4,v8(e,r),g8(r),h=d;return}}function V1(e){return e=e|0,t[e+8>>2]|0}function KO(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;if(d=h,h=h+32|0,r=d,o=e+4|0,s=((t[o>>2]|0)-(t[e>>2]|0)>>2)+1|0,l=p8(e)|0,l>>>0>>0)$n(e);else{_=t[e>>2]|0,k=(t[e+8>>2]|0)-_|0,y=k>>1,mI(r,k>>2>>>0>>1>>>0?y>>>0>>0?s:y:l,(t[o>>2]|0)-_>>2,e+8|0),l=r+8|0,t[t[l>>2]>>2]=t[n>>2],t[l>>2]=(t[l>>2]|0)+4,vI(e,r),gI(r),h=d;return}}function nh(e){return e=e|0,t[e>>2]|0}function XO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,JO(e,n,r,o,s,l)}function M4(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function Rl(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-4-o|0)>>>2)<<2)),Ve(r))}function JO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+48|0,T=d+40|0,_=d+32|0,P=d+24|0,y=d+12|0,k=d,Zo(_),e=Oi(e)|0,t[P>>2]=t[n>>2],r=t[r>>2]|0,o=t[o>>2]|0,F4(y,s),QO(k,l),t[T>>2]=t[P>>2],ZO(e,T,r,o,y,k),M4(k),Rl(y),eu(_),h=d}function F4(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(pI(e,o),hI(e,t[n>>2]|0,t[r>>2]|0,o))}function QO(e,n){e=e|0,n=n|0;var r=0,o=0;t[e>>2]=0,t[e+4>>2]=0,t[e+8>>2]=0,r=n+4|0,o=(t[r>>2]|0)-(t[n>>2]|0)>>2,o|0&&(aI(e,o),dI(e,t[n>>2]|0,t[r>>2]|0,o))}function ZO(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+32|0,T=d+28|0,P=d+24|0,_=d+12|0,y=d,k=ko(eI()|0)|0,t[P>>2]=t[n>>2],t[T>>2]=t[P>>2],n=lc(T)|0,r=l8(r)|0,o=L4(o)|0,t[_>>2]=t[s>>2],T=s+4|0,t[_+4>>2]=t[T>>2],P=s+8|0,t[_+8>>2]=t[P>>2],t[P>>2]=0,t[T>>2]=0,t[s>>2]=0,s=R4(_)|0,t[y>>2]=t[l>>2],T=l+4|0,t[y+4>>2]=t[T>>2],P=l+8|0,t[y+8>>2]=t[P>>2],t[P>>2]=0,t[T>>2]=0,t[l>>2]=0,qo(0,k|0,e|0,n|0,r|0,o|0,s|0,tI(y)|0)|0,M4(y),Rl(_),h=d}function eI(){var e=0;return c[7968]|0||(fI(10708),e=7968,t[e>>2]=1,t[e+4>>2]=0),10708}function lc(e){return e=e|0,c8(e)|0}function l8(e){return e=e|0,f8(e)|0}function L4(e){return e=e|0,ea(e)|0}function R4(e){return e=e|0,rI(e)|0}function tI(e){return e=e|0,nI(e)|0}function nI(e){e=e|0;var n=0,r=0,o=0;if(o=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=o>>2,o=Qo(o+4|0)|0,t[o>>2]=r,r|0){n=0;do t[o+4+(n<<2)>>2]=f8(t[(t[e>>2]|0)+(n<<2)>>2]|0)|0,n=n+1|0;while((n|0)!=(r|0))}return o|0}function f8(e){return e=e|0,e|0}function rI(e){e=e|0;var n=0,r=0,o=0;if(o=(t[e+4>>2]|0)-(t[e>>2]|0)|0,r=o>>2,o=Qo(o+4|0)|0,t[o>>2]=r,r|0){n=0;do t[o+4+(n<<2)>>2]=c8((t[e>>2]|0)+(n<<2)|0)|0,n=n+1|0;while((n|0)!=(r|0))}return o|0}function c8(e){e=e|0;var n=0,r=0,o=0,s=0;return s=h,h=h+32|0,n=s+12|0,r=s,o=U0(a8()|0)|0,o?(s1(n,o),l1(r,n),UF(e,r),e=f1(n)|0):e=iI(e)|0,h=s,e|0}function a8(){var e=0;return c[7960]|0||(lI(10664),Bt(25,10664,Q|0)|0,e=7960,t[e>>2]=1,t[e+4>>2]=0),10664}function iI(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(4)|0,t[_>>2]=t[e>>2],l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],d8(e,l,s),t[o>>2]=e,h=r,n|0}function d8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1656,t[r+12>>2]=n,t[e+4>>2]=r}function oI(e){e=e|0,da(e),Ve(e)}function uI(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function sI(e){e=e|0,Ve(e)}function lI(e){e=e|0,Ys(e)}function fI(e){e=e|0,Ao(e,cI()|0,5)}function cI(){return 1676}function aI(e,n){e=e|0,n=n|0;var r=0;if((p8(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function dI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function p8(e){return e=e|0,1073741823}function pI(e,n){e=e|0,n=n|0;var r=0;if((h8(e)|0)>>>0>>0&&$n(e),n>>>0>1073741823)_n();else{r=Tt(n<<2)|0,t[e+4>>2]=r,t[e>>2]=r,t[e+8>>2]=r+(n<<2);return}}function hI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,o=e+4|0,e=r-n|0,(e|0)>0&&(vn(t[o>>2]|0,n|0,e|0)|0,t[o>>2]=(t[o>>2]|0)+(e>>>2<<2))}function h8(e){return e=e|0,1073741823}function mI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function vI(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function gI(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function m8(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>1073741823)_n();else{s=Tt(n<<2)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<2)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<2)}function v8(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>2)<<2)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function g8(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-4-n|0)>>>2)<<2)),e=t[e>>2]|0,e|0&&Ve(e)}function _I(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;if(ie=h,h=h+32|0,T=ie+20|0,P=ie+12|0,k=ie+16|0,q=ie+4|0,we=ie,le=ie+8|0,_=o8()|0,l=t[_>>2]|0,d=t[l>>2]|0,d|0)for(y=t[_+8>>2]|0,_=t[_+4>>2]|0;os(T,d),yI(e,T,_,y),l=l+4|0,d=t[l>>2]|0,d;)y=y+1|0,_=_+1|0;if(l=u8()|0,d=t[l>>2]|0,d|0)do os(T,d),t[P>>2]=t[l+4>>2],wI(n,T,P),l=l+8|0,d=t[l>>2]|0;while((d|0)!=0);if(l=t[(sa()|0)>>2]|0,l|0)do n=t[l+4>>2]|0,os(T,t[(la(n)|0)>>2]|0),t[P>>2]=A4(n)|0,DI(r,T,P),l=t[l>>2]|0;while((l|0)!=0);if(os(k,0),l=O4()|0,t[T>>2]=t[k>>2],s8(T,l,s),l=t[(sa()|0)>>2]|0,l|0){e=T+4|0,n=T+8|0,r=T+8|0;do{if(y=t[l+4>>2]|0,os(P,t[(la(y)|0)>>2]|0),EI(q,_8(y)|0),d=t[q>>2]|0,d|0){t[T>>2]=0,t[e>>2]=0,t[n>>2]=0;do os(we,t[(la(t[d+4>>2]|0)|0)>>2]|0),_=t[e>>2]|0,_>>>0<(t[r>>2]|0)>>>0?(t[_>>2]=t[we>>2],t[e>>2]=(t[e>>2]|0)+4):P4(T,we),d=t[d>>2]|0;while((d|0)!=0);SI(o,P,T),Rl(T)}t[le>>2]=t[P>>2],k=y8(y)|0,t[T>>2]=t[le>>2],s8(T,k,s),bd(q),l=t[l>>2]|0}while((l|0)!=0)}h=ie}function yI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,RI(e,n,r,o)}function wI(e,n,r){e=e|0,n=n|0,r=r|0,LI(e,n,r)}function la(e){return e=e|0,e|0}function DI(e,n,r){e=e|0,n=n|0,r=r|0,II(e,n,r)}function _8(e){return e=e|0,e+16|0}function EI(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;if(l=h,h=h+16|0,s=l+8|0,r=l,t[e>>2]=0,o=t[n>>2]|0,t[s>>2]=o,t[r>>2]=e,r=OI(r)|0,o|0){if(o=Tt(12)|0,d=(w8(s)|0)+4|0,e=t[d+4>>2]|0,n=o+4|0,t[n>>2]=t[d>>2],t[n+4>>2]=e,n=t[t[s>>2]>>2]|0,t[s>>2]=n,!n)e=o;else for(n=o;e=Tt(12)|0,y=(w8(s)|0)+4|0,_=t[y+4>>2]|0,d=e+4|0,t[d>>2]=t[y>>2],t[d+4>>2]=_,t[n>>2]=e,d=t[t[s>>2]>>2]|0,t[s>>2]=d,d;)n=e;t[e>>2]=t[r>>2],t[r>>2]=o}h=l}function SI(e,n,r){e=e|0,n=n|0,r=r|0,CI(e,n,r)}function y8(e){return e=e|0,e+24|0}function CI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,d=o+24|0,s=o+16|0,_=o+12|0,l=o,Zo(s),e=Oi(e)|0,t[_>>2]=t[n>>2],F4(l,r),t[d>>2]=t[_>>2],TI(e,d,l),Rl(l),eu(s),h=o}function TI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=h,h=h+32|0,d=o+16|0,_=o+12|0,s=o,l=ko(xI()|0)|0,t[_>>2]=t[n>>2],t[d>>2]=t[_>>2],n=lc(d)|0,t[s>>2]=t[r>>2],d=r+4|0,t[s+4>>2]=t[d>>2],_=r+8|0,t[s+8>>2]=t[_>>2],t[_>>2]=0,t[d>>2]=0,t[r>>2]=0,Ts(0,l|0,e|0,n|0,R4(s)|0)|0,Rl(s),h=o}function xI(){var e=0;return c[7976]|0||(kI(10720),e=7976,t[e>>2]=1,t[e+4>>2]=0),10720}function kI(e){e=e|0,Ao(e,AI()|0,2)}function AI(){return 1732}function OI(e){return e=e|0,t[e>>2]|0}function w8(e){return e=e|0,t[e>>2]|0}function II(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+32|0,l=o+16|0,s=o+8|0,d=o,Zo(s),e=Oi(e)|0,t[d>>2]=t[n>>2],r=t[r>>2]|0,t[l>>2]=t[d>>2],D8(e,l,r),eu(s),h=o}function D8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+16|0,l=o+4|0,d=o,s=ko(PI()|0)|0,t[d>>2]=t[n>>2],t[l>>2]=t[d>>2],n=lc(l)|0,Ts(0,s|0,e|0,n|0,l8(r)|0)|0,h=o}function PI(){var e=0;return c[7984]|0||(MI(10732),e=7984,t[e>>2]=1,t[e+4>>2]=0),10732}function MI(e){e=e|0,Ao(e,FI()|0,2)}function FI(){return 1744}function LI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;o=h,h=h+32|0,l=o+16|0,s=o+8|0,d=o,Zo(s),e=Oi(e)|0,t[d>>2]=t[n>>2],r=t[r>>2]|0,t[l>>2]=t[d>>2],D8(e,l,r),eu(s),h=o}function RI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+32|0,d=s+16|0,l=s+8|0,_=s,Zo(l),e=Oi(e)|0,t[_>>2]=t[n>>2],r=c[r>>0]|0,o=c[o>>0]|0,t[d>>2]=t[_>>2],NI(e,d,r,o),eu(l),h=s}function NI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,d=s+4|0,_=s,l=ko(BI()|0)|0,t[_>>2]=t[n>>2],t[d>>2]=t[_>>2],n=lc(d)|0,r=fa(r)|0,Bu(0,l|0,e|0,n|0,r|0,fa(o)|0)|0,h=s}function BI(){var e=0;return c[7992]|0||(UI(10744),e=7992,t[e>>2]=1,t[e+4>>2]=0),10744}function fa(e){return e=e|0,jI(e)|0}function jI(e){return e=e|0,e&255|0}function UI(e){e=e|0,Ao(e,qI()|0,3)}function qI(){return 1756}function zI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;switch(q=h,h=h+32|0,_=q+8|0,y=q+4|0,k=q+20|0,T=q,_1(e,0),o=jF(n)|0,t[_>>2]=0,P=_+4|0,t[P>>2]=0,t[_+8>>2]=0,o<<24>>24){case 0:{c[k>>0]=0,WI(y,r,k),rh(e,y)|0,ei(y);break}case 8:{P=z4(n)|0,c[k>>0]=8,os(T,t[P+4>>2]|0),HI(y,r,k,T,P+8|0),rh(e,y)|0,ei(y);break}case 9:{if(l=z4(n)|0,n=t[l+4>>2]|0,n|0)for(d=_+8|0,s=l+12|0;n=n+-1|0,os(y,t[s>>2]|0),o=t[P>>2]|0,o>>>0<(t[d>>2]|0)>>>0?(t[o>>2]=t[y>>2],t[P>>2]=(t[P>>2]|0)+4):P4(_,y),n;)s=s+4|0;c[k>>0]=9,os(T,t[l+8>>2]|0),bI(y,r,k,T,_),rh(e,y)|0,ei(y);break}default:P=z4(n)|0,c[k>>0]=o,os(T,t[P+4>>2]|0),GI(y,r,k,T),rh(e,y)|0,ei(y)}Rl(_),h=q}function WI(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;o=h,h=h+16|0,s=o,Zo(s),n=Oi(n)|0,iP(e,n,c[r>>0]|0),eu(s),h=o}function rh(e,n){e=e|0,n=n|0;var r=0;return r=t[e>>2]|0,r|0&&ju(r|0),t[e>>2]=t[n>>2],t[n>>2]=0,e|0}function HI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+32|0,_=l+16|0,d=l+8|0,y=l,Zo(d),n=Oi(n)|0,r=c[r>>0]|0,t[y>>2]=t[o>>2],s=t[s>>2]|0,t[_>>2]=t[y>>2],eP(e,n,r,_,s),eu(d),h=l}function bI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0;l=h,h=h+32|0,y=l+24|0,d=l+16|0,k=l+12|0,_=l,Zo(d),n=Oi(n)|0,r=c[r>>0]|0,t[k>>2]=t[o>>2],F4(_,s),t[y>>2]=t[k>>2],XI(e,n,r,y,_),Rl(_),eu(d),h=l}function GI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+32|0,d=s+16|0,l=s+8|0,_=s,Zo(l),n=Oi(n)|0,r=c[r>>0]|0,t[_>>2]=t[o>>2],t[d>>2]=t[_>>2],VI(e,n,r,d),eu(l),h=s}function VI(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0,d=0,_=0;s=h,h=h+16|0,l=s+4|0,_=s,d=ko(YI()|0)|0,r=fa(r)|0,t[_>>2]=t[o>>2],t[l>>2]=t[_>>2],ih(e,Ts(0,d|0,n|0,r|0,lc(l)|0)|0),h=s}function YI(){var e=0;return c[8e3]|0||($I(10756),e=8e3,t[e>>2]=1,t[e+4>>2]=0),10756}function ih(e,n){e=e|0,n=n|0,_1(e,n)}function $I(e){e=e|0,Ao(e,KI()|0,2)}function KI(){return 1772}function XI(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0;l=h,h=h+32|0,y=l+16|0,k=l+12|0,d=l,_=ko(JI()|0)|0,r=fa(r)|0,t[k>>2]=t[o>>2],t[y>>2]=t[k>>2],o=lc(y)|0,t[d>>2]=t[s>>2],y=s+4|0,t[d+4>>2]=t[y>>2],k=s+8|0,t[d+8>>2]=t[k>>2],t[k>>2]=0,t[y>>2]=0,t[s>>2]=0,ih(e,Bu(0,_|0,n|0,r|0,o|0,R4(d)|0)|0),Rl(d),h=l}function JI(){var e=0;return c[8008]|0||(QI(10768),e=8008,t[e>>2]=1,t[e+4>>2]=0),10768}function QI(e){e=e|0,Ao(e,ZI()|0,3)}function ZI(){return 1784}function eP(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0;l=h,h=h+16|0,_=l+4|0,y=l,d=ko(tP()|0)|0,r=fa(r)|0,t[y>>2]=t[o>>2],t[_>>2]=t[y>>2],o=lc(_)|0,ih(e,Bu(0,d|0,n|0,r|0,o|0,L4(s)|0)|0),h=l}function tP(){var e=0;return c[8016]|0||(nP(10780),e=8016,t[e>>2]=1,t[e+4>>2]=0),10780}function nP(e){e=e|0,Ao(e,rP()|0,3)}function rP(){return 1800}function iP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;o=ko(oP()|0)|0,ih(e,sf(0,o|0,n|0,fa(r)|0)|0)}function oP(){var e=0;return c[8024]|0||(uP(10792),e=8024,t[e>>2]=1,t[e+4>>2]=0),10792}function uP(e){e=e|0,Ao(e,sP()|0,1)}function sP(){return 1816}function lP(){fP(),cP(),aP()}function fP(){t[2702]=K8(65536)|0}function cP(){PP(10856)}function aP(){dP(10816)}function dP(e){e=e|0,pP(e,5044),hP(e)|0}function pP(e,n){e=e|0,n=n|0;var r=0;r=a8()|0,t[e>>2]=r,TP(r,n),Cf(t[e>>2]|0)}function hP(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,mP()|0),e|0}function mP(){var e=0;return c[8032]|0||(E8(10820),Bt(64,10820,Q|0)|0,e=8032,t[e>>2]=1,t[e+4>>2]=0),Dn(10820)|0||E8(10820),10820}function E8(e){e=e|0,_P(e),sc(e,25)}function vP(e){e=e|0,gP(e+24|0)}function gP(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function _P(e){e=e|0;var n=0;n=An()|0,Nn(e,5,18,n,EP()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function yP(e,n){e=e|0,n=n|0,wP(e,n)}function wP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;r=h,h=h+16|0,o=r,s=r+4|0,Ml(s,n),t[o>>2]=Fl(s,n)|0,DP(e,o),h=r}function DP(e,n){e=e|0,n=n|0,S8(e+4|0,t[n>>2]|0),c[e+8>>0]=1}function S8(e,n){e=e|0,n=n|0,t[e>>2]=n}function EP(){return 1824}function SP(e){return e=e|0,CP(e)|0}function CP(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0;return r=h,h=h+16|0,s=r+4|0,d=r,o=Qo(8)|0,n=o,_=Tt(4)|0,Ml(s,e),S8(_,Fl(s,e)|0),l=n+4|0,t[l>>2]=_,e=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],d8(e,l,s),t[o>>2]=e,h=r,n|0}function Qo(e){e=e|0;var n=0,r=0;return e=e+7&-8,(e>>>0<=32768?(n=t[2701]|0,e>>>0<=(65536-n|0)>>>0):0)?(r=(t[2702]|0)+n|0,t[2701]=n+e,e=r):(e=K8(e+8|0)|0,t[e>>2]=t[2703],t[2703]=e,e=e+8|0),e|0}function TP(e,n){e=e|0,n=n|0,t[e>>2]=xP()|0,t[e+4>>2]=kP()|0,t[e+12>>2]=n,t[e+8>>2]=AP()|0,t[e+32>>2]=9}function xP(){return 11744}function kP(){return 1832}function AP(){return th()|0}function OP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(IP(r),Ve(r)):n|0&&Ve(n)}function IP(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function PP(e){e=e|0,MP(e,5052),FP(e)|0,LP(e,5058,26)|0,RP(e,5069,1)|0,NP(e,5077,10)|0,BP(e,5087,19)|0,jP(e,5094,27)|0}function MP(e,n){e=e|0,n=n|0;var r=0;r=IF()|0,t[e>>2]=r,PF(r,n),Cf(t[e>>2]|0)}function FP(e){e=e|0;var n=0;return n=t[e>>2]|0,uc(n,vF()|0),e|0}function LP(e,n,r){return e=e|0,n=n|0,r=r|0,QM(e,Zn(n)|0,r,0),e|0}function RP(e,n,r){return e=e|0,n=n|0,r=r|0,BM(e,Zn(n)|0,r,0),e|0}function NP(e,n,r){return e=e|0,n=n|0,r=r|0,mM(e,Zn(n)|0,r,0),e|0}function BP(e,n,r){return e=e|0,n=n|0,r=r|0,eM(e,Zn(n)|0,r,0),e|0}function C8(e,n){e=e|0,n=n|0;var r=0,o=0;e:for(;;){for(r=t[2703]|0;;){if((r|0)==(n|0))break e;if(o=t[r>>2]|0,t[2703]=o,!r)r=o;else break}Ve(r)}t[2701]=e}function jP(e,n,r){return e=e|0,n=n|0,r=r|0,UP(e,Zn(n)|0,r,0),e|0}function UP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=N4()|0,e=qP(r)|0,ur(l,n,s,e,zP(r,o)|0,o)}function N4(){var e=0,n=0;if(c[8040]|0||(x8(10860),Bt(65,10860,Q|0)|0,n=8040,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10860)|0)){e=10860,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));x8(10860)}return 10860}function qP(e){return e=e|0,e|0}function zP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=N4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(T8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(WP(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function T8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function WP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=HP(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,bP(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,T8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,GP(e,s),VP(s),h=_;return}}function HP(e){return e=e|0,536870911}function bP(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function GP(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function VP(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function x8(e){e=e|0,KP(e)}function YP(e){e=e|0,$P(e+24|0)}function $P(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function KP(e){e=e|0;var n=0;n=An()|0,Nn(e,1,11,n,XP()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function XP(){return 1840}function JP(e,n,r){e=e|0,n=n|0,r=r|0,ZP(t[(QP(e)|0)>>2]|0,n,r)}function QP(e){return e=e|0,(t[(N4()|0)+24>>2]|0)+(e<<3)|0}function ZP(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;o=h,h=h+16|0,l=o+1|0,s=o,Ml(l,n),n=Fl(l,n)|0,Ml(s,r),r=Fl(s,r)|0,Bl[e&31](n,r),h=o}function eM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=B4()|0,e=tM(r)|0,ur(l,n,s,e,nM(r,o)|0,o)}function B4(){var e=0,n=0;if(c[8048]|0||(A8(10896),Bt(66,10896,Q|0)|0,n=8048,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10896)|0)){e=10896,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));A8(10896)}return 10896}function tM(e){return e=e|0,e|0}function nM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=B4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(k8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(rM(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function k8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function rM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=iM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,oM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,k8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,uM(e,s),sM(s),h=_;return}}function iM(e){return e=e|0,536870911}function oM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function uM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function sM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function A8(e){e=e|0,cM(e)}function lM(e){e=e|0,fM(e+24|0)}function fM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function cM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,11,n,aM()|0,1),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function aM(){return 1852}function dM(e,n){return e=e|0,n=n|0,hM(t[(pM(e)|0)>>2]|0,n)|0}function pM(e){return e=e|0,(t[(B4()|0)+24>>2]|0)+(e<<3)|0}function hM(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Ml(o,n),n=Fl(o,n)|0,n=ea(dc[e&31](n)|0)|0,h=r,n|0}function mM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=j4()|0,e=vM(r)|0,ur(l,n,s,e,gM(r,o)|0,o)}function j4(){var e=0,n=0;if(c[8056]|0||(I8(10932),Bt(67,10932,Q|0)|0,n=8056,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10932)|0)){e=10932,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));I8(10932)}return 10932}function vM(e){return e=e|0,e|0}function gM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=j4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(O8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(_M(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function O8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function _M(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=yM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,wM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,O8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,DM(e,s),EM(s),h=_;return}}function yM(e){return e=e|0,536870911}function wM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function DM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function EM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function I8(e){e=e|0,TM(e)}function SM(e){e=e|0,CM(e+24|0)}function CM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function TM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,7,n,xM()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function xM(){return 1860}function kM(e,n,r){return e=e|0,n=n|0,r=r|0,OM(t[(AM(e)|0)>>2]|0,n,r)|0}function AM(e){return e=e|0,(t[(j4()|0)+24>>2]|0)+(e<<3)|0}function OM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0;return o=h,h=h+32|0,d=o+12|0,l=o+8|0,_=o,y=o+16|0,s=o+4|0,IM(y,n),PM(_,y,n),$s(s,r),r=Ks(s,r)|0,t[d>>2]=t[_>>2],X1[e&15](l,d,r),r=MM(l)|0,ei(l),Xs(s),h=o,r|0}function IM(e,n){e=e|0,n=n|0}function PM(e,n,r){e=e|0,n=n|0,r=r|0,FM(e,r)}function MM(e){return e=e|0,Oi(e)|0}function FM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0;s=h,h=h+16|0,r=s,o=n,o&1?(LM(r,0),c0(o|0,r|0)|0,RM(e,r),NM(r)):t[e>>2]=t[n>>2],h=s}function LM(e,n){e=e|0,n=n|0,wd(e,n),t[e+4>>2]=0,c[e+8>>0]=0}function RM(e,n){e=e|0,n=n|0,t[e>>2]=t[n+4>>2]}function NM(e){e=e|0,c[e+8>>0]=0}function BM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=U4()|0,e=jM(r)|0,ur(l,n,s,e,UM(r,o)|0,o)}function U4(){var e=0,n=0;if(c[8064]|0||(M8(10968),Bt(68,10968,Q|0)|0,n=8064,t[n>>2]=1,t[n+4>>2]=0),!(Dn(10968)|0)){e=10968,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));M8(10968)}return 10968}function jM(e){return e=e|0,e|0}function UM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=U4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(P8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(qM(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function P8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function qM(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=zM(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,WM(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,P8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,HM(e,s),bM(s),h=_;return}}function zM(e){return e=e|0,536870911}function WM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function HM(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function bM(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function M8(e){e=e|0,YM(e)}function GM(e){e=e|0,VM(e+24|0)}function VM(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function YM(e){e=e|0;var n=0;n=An()|0,Nn(e,1,1,n,$M()|0,5),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function $M(){return 1872}function KM(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,JM(t[(XM(e)|0)>>2]|0,n,r,o,s,l)}function XM(e){return e=e|0,(t[(U4()|0)+24>>2]|0)+(e<<3)|0}function JM(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0;d=h,h=h+32|0,_=d+16|0,y=d+12|0,k=d+8|0,T=d+4|0,P=d,$s(_,n),n=Ks(_,n)|0,$s(y,r),r=Ks(y,r)|0,$s(k,o),o=Ks(k,o)|0,$s(T,s),s=Ks(T,s)|0,$s(P,l),l=Ks(P,l)|0,eD[e&1](n,r,o,s,l),Xs(P),Xs(T),Xs(k),Xs(y),Xs(_),h=d}function QM(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;l=t[e>>2]|0,s=q4()|0,e=ZM(r)|0,ur(l,n,s,e,eF(r,o)|0,o)}function q4(){var e=0,n=0;if(c[8072]|0||(L8(11004),Bt(69,11004,Q|0)|0,n=8072,t[n>>2]=1,t[n+4>>2]=0),!(Dn(11004)|0)){e=11004,n=e+36|0;do t[e>>2]=0,e=e+4|0;while((e|0)<(n|0));L8(11004)}return 11004}function ZM(e){return e=e|0,e|0}function eF(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0,_=0,y=0;return _=h,h=h+16|0,s=_,l=_+4|0,t[s>>2]=e,y=q4()|0,d=y+24|0,n=Lt(n,4)|0,t[l>>2]=n,r=y+28|0,o=t[r>>2]|0,o>>>0<(t[y+32>>2]|0)>>>0?(F8(o,e,n),n=(t[r>>2]|0)+8|0,t[r>>2]=n):(tF(d,s,l),n=t[r>>2]|0),h=_,(n-(t[d>>2]|0)>>3)+-1|0}function F8(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,t[e+4>>2]=r}function tF(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0;if(_=h,h=h+32|0,s=_,l=e+4|0,d=((t[l>>2]|0)-(t[e>>2]|0)>>3)+1|0,o=nF(e)|0,o>>>0>>0)$n(e);else{y=t[e>>2]|0,T=(t[e+8>>2]|0)-y|0,k=T>>2,rF(s,T>>3>>>0>>1>>>0?k>>>0>>0?d:k:o,(t[l>>2]|0)-y>>3,e+8|0),d=s+8|0,F8(t[d>>2]|0,t[n>>2]|0,t[r>>2]|0),t[d>>2]=(t[d>>2]|0)+8,iF(e,s),oF(s),h=_;return}}function nF(e){return e=e|0,536870911}function rF(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0;t[e+12>>2]=0,t[e+16>>2]=o;do if(n)if(n>>>0>536870911)_n();else{s=Tt(n<<3)|0;break}else s=0;while(0);t[e>>2]=s,o=s+(r<<3)|0,t[e+8>>2]=o,t[e+4>>2]=o,t[e+12>>2]=s+(n<<3)}function iF(e,n){e=e|0,n=n|0;var r=0,o=0,s=0,l=0,d=0;o=t[e>>2]|0,d=e+4|0,l=n+4|0,s=(t[d>>2]|0)-o|0,r=(t[l>>2]|0)+(0-(s>>3)<<3)|0,t[l>>2]=r,(s|0)>0?(vn(r|0,o|0,s|0)|0,o=l,r=t[l>>2]|0):o=l,l=t[e>>2]|0,t[e>>2]=r,t[o>>2]=l,l=n+8|0,s=t[d>>2]|0,t[d>>2]=t[l>>2],t[l>>2]=s,l=e+8|0,d=n+12|0,e=t[l>>2]|0,t[l>>2]=t[d>>2],t[d>>2]=e,t[n>>2]=t[o>>2]}function oF(e){e=e|0;var n=0,r=0,o=0;n=t[e+4>>2]|0,r=e+8|0,o=t[r>>2]|0,(o|0)!=(n|0)&&(t[r>>2]=o+(~((o+-8-n|0)>>>3)<<3)),e=t[e>>2]|0,e|0&&Ve(e)}function L8(e){e=e|0,lF(e)}function uF(e){e=e|0,sF(e+24|0)}function sF(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function lF(e){e=e|0;var n=0;n=An()|0,Nn(e,1,12,n,fF()|0,2),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function fF(){return 1896}function cF(e,n,r){e=e|0,n=n|0,r=r|0,dF(t[(aF(e)|0)>>2]|0,n,r)}function aF(e){return e=e|0,(t[(q4()|0)+24>>2]|0)+(e<<3)|0}function dF(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;o=h,h=h+16|0,l=o+4|0,s=o,pF(l,n),n=hF(l,n)|0,$s(s,r),r=Ks(s,r)|0,Bl[e&31](n,r),Xs(s),h=o}function pF(e,n){e=e|0,n=n|0}function hF(e,n){return e=e|0,n=n|0,mF(n)|0}function mF(e){return e=e|0,e|0}function vF(){var e=0;return c[8080]|0||(R8(11040),Bt(70,11040,Q|0)|0,e=8080,t[e>>2]=1,t[e+4>>2]=0),Dn(11040)|0||R8(11040),11040}function R8(e){e=e|0,yF(e),sc(e,71)}function gF(e){e=e|0,_F(e+24|0)}function _F(e){e=e|0;var n=0,r=0,o=0;r=t[e>>2]|0,o=r,r|0&&(e=e+4|0,n=t[e>>2]|0,(n|0)!=(r|0)&&(t[e>>2]=n+(~((n+-8-o|0)>>>3)<<3)),Ve(r))}function yF(e){e=e|0;var n=0;n=An()|0,Nn(e,5,7,n,SF()|0,0),t[e+24>>2]=0,t[e+28>>2]=0,t[e+32>>2]=0}function wF(e){e=e|0,DF(e)}function DF(e){e=e|0,EF(e)}function EF(e){e=e|0,c[e+8>>0]=1}function SF(){return 1936}function CF(){return TF()|0}function TF(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0;return n=h,h=h+16|0,s=n+4|0,d=n,r=Qo(8)|0,e=r,l=e+4|0,t[l>>2]=Tt(1)|0,o=Tt(8)|0,l=t[l>>2]|0,t[d>>2]=0,t[s>>2]=t[d>>2],xF(o,l,s),t[r>>2]=o,h=n,e|0}function xF(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]=n,r=Tt(16)|0,t[r+4>>2]=0,t[r+8>>2]=0,t[r>>2]=1916,t[r+12>>2]=n,t[e+4>>2]=r}function kF(e){e=e|0,da(e),Ve(e)}function AF(e){e=e|0,e=t[e+12>>2]|0,e|0&&Ve(e)}function OF(e){e=e|0,Ve(e)}function IF(){var e=0;return c[8088]|0||(BF(11076),Bt(25,11076,Q|0)|0,e=8088,t[e>>2]=1,t[e+4>>2]=0),11076}function PF(e,n){e=e|0,n=n|0,t[e>>2]=MF()|0,t[e+4>>2]=FF()|0,t[e+12>>2]=n,t[e+8>>2]=LF()|0,t[e+32>>2]=10}function MF(){return 11745}function FF(){return 1940}function LF(){return eh()|0}function RF(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,(Sf(o,896)|0)==512?r|0&&(NF(r),Ve(r)):n|0&&Ve(n)}function NF(e){e=e|0,e=t[e+4>>2]|0,e|0&&Tf(e)}function BF(e){e=e|0,Ys(e)}function os(e,n){e=e|0,n=n|0,t[e>>2]=n}function z4(e){return e=e|0,t[e>>2]|0}function jF(e){return e=e|0,c[t[e>>2]>>0]|0}function UF(e,n){e=e|0,n=n|0;var r=0,o=0;r=h,h=h+16|0,o=r,t[o>>2]=t[e>>2],qF(n,o)|0,h=r}function qF(e,n){e=e|0,n=n|0;var r=0;return r=zF(t[e>>2]|0,n)|0,n=e+4|0,t[(t[n>>2]|0)+8>>2]=r,t[(t[n>>2]|0)+8>>2]|0}function zF(e,n){e=e|0,n=n|0;var r=0,o=0;return r=h,h=h+16|0,o=r,Zo(o),e=Oi(e)|0,n=WF(e,t[n>>2]|0)|0,eu(o),h=r,n|0}function Zo(e){e=e|0,t[e>>2]=t[2701],t[e+4>>2]=t[2703]}function WF(e,n){e=e|0,n=n|0;var r=0;return r=ko(HF()|0)|0,sf(0,r|0,e|0,L4(n)|0)|0}function eu(e){e=e|0,C8(t[e>>2]|0,t[e+4>>2]|0)}function HF(){var e=0;return c[8096]|0||(bF(11120),e=8096,t[e>>2]=1,t[e+4>>2]=0),11120}function bF(e){e=e|0,Ao(e,GF()|0,1)}function GF(){return 1948}function VF(){YF()}function YF(){var e=0,n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;if(le=h,h=h+16|0,T=le+4|0,P=le,si(65536,10804,t[2702]|0,10812),r=o8()|0,n=t[r>>2]|0,e=t[n>>2]|0,e|0)for(o=t[r+8>>2]|0,r=t[r+4>>2]|0;As(e|0,C[r>>0]|0|0,c[o>>0]|0),n=n+4|0,e=t[n>>2]|0,e;)o=o+1|0,r=r+1|0;if(e=u8()|0,n=t[e>>2]|0,n|0)do uu(n|0,t[e+4>>2]|0),e=e+8|0,n=t[e>>2]|0;while((n|0)!=0);uu($F()|0,5167),k=sa()|0,e=t[k>>2]|0;e:do if(e|0){do KF(t[e+4>>2]|0),e=t[e>>2]|0;while((e|0)!=0);if(e=t[k>>2]|0,e|0){y=k;do{for(;s=e,e=t[e>>2]|0,s=t[s+4>>2]|0,!!(XF(s)|0);)if(t[P>>2]=y,t[T>>2]=t[P>>2],JF(k,T)|0,!e)break e;if(QF(s),y=t[y>>2]|0,n=N8(s)|0,l=Wo()|0,d=h,h=h+((1*(n<<2)|0)+15&-16)|0,_=h,h=h+((1*(n<<2)|0)+15&-16)|0,n=t[(_8(s)|0)>>2]|0,n|0)for(r=d,o=_;t[r>>2]=t[(la(t[n+4>>2]|0)|0)>>2],t[o>>2]=t[n+8>>2],n=t[n>>2]|0,n;)r=r+4|0,o=o+4|0;ie=la(s)|0,n=ZF(s)|0,r=N8(s)|0,o=eL(s)|0,Is(ie|0,n|0,d|0,_|0,r|0,o|0,A4(s)|0),b0(l|0)}while((e|0)!=0)}}while(0);if(e=t[(O4()|0)>>2]|0,e|0)do ie=e+4|0,k=I4(ie)|0,s=V1(k)|0,l=b1(k)|0,d=(G1(k)|0)+1|0,_=oh(k)|0,y=B8(ie)|0,k=Dn(k)|0,T=nh(ie)|0,P=W4(ie)|0,zo(0,s|0,l|0,d|0,_|0,y|0,k|0,T|0,P|0,H4(ie)|0),e=t[e>>2]|0;while((e|0)!=0);e=t[(sa()|0)>>2]|0;e:do if(e|0){t:for(;;){if(n=t[e+4>>2]|0,n|0?(q=t[(la(n)|0)>>2]|0,we=t[(y8(n)|0)>>2]|0,we|0):0){r=we;do{n=r+4|0,o=I4(n)|0;n:do if(o|0)switch(Dn(o)|0){case 0:break t;case 4:case 3:case 2:{_=V1(o)|0,y=b1(o)|0,k=(G1(o)|0)+1|0,T=oh(o)|0,P=Dn(o)|0,ie=nh(n)|0,zo(q|0,_|0,y|0,k|0,T|0,0,P|0,ie|0,W4(n)|0,H4(n)|0);break n}case 1:{d=V1(o)|0,_=b1(o)|0,y=(G1(o)|0)+1|0,k=oh(o)|0,T=B8(n)|0,P=Dn(o)|0,ie=nh(n)|0,zo(q|0,d|0,_|0,y|0,k|0,T|0,P|0,ie|0,W4(n)|0,H4(n)|0);break n}case 5:{k=V1(o)|0,T=b1(o)|0,P=(G1(o)|0)+1|0,ie=oh(o)|0,zo(q|0,k|0,T|0,P|0,ie|0,tL(o)|0,Dn(o)|0,0,0,0);break n}default:break n}while(0);r=t[r>>2]|0}while((r|0)!=0)}if(e=t[e>>2]|0,!e)break e}_n()}while(0);uf(),h=le}function $F(){return 11703}function KF(e){e=e|0,c[e+40>>0]=0}function XF(e){return e=e|0,(c[e+40>>0]|0)!=0|0}function JF(e,n){return e=e|0,n=n|0,n=nL(n)|0,e=t[n>>2]|0,t[n>>2]=t[e>>2],Ve(e),t[n>>2]|0}function QF(e){e=e|0,c[e+40>>0]=1}function N8(e){return e=e|0,t[e+20>>2]|0}function ZF(e){return e=e|0,t[e+8>>2]|0}function eL(e){return e=e|0,t[e+32>>2]|0}function oh(e){return e=e|0,t[e+4>>2]|0}function B8(e){return e=e|0,t[e+4>>2]|0}function W4(e){return e=e|0,t[e+8>>2]|0}function H4(e){return e=e|0,t[e+16>>2]|0}function tL(e){return e=e|0,t[e+20>>2]|0}function nL(e){return e=e|0,t[e>>2]|0}function uh(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0;vt=h,h=h+16|0,q=vt;do if(e>>>0<245){if(k=e>>>0<11?16:e+11&-8,e=k>>>3,P=t[2783]|0,r=P>>>e,r&3|0)return n=(r&1^1)+e|0,e=11172+(n<<1<<2)|0,r=e+8|0,o=t[r>>2]|0,s=o+8|0,l=t[s>>2]|0,(e|0)==(l|0)?t[2783]=P&~(1<>2]=e,t[r>>2]=l),_e=n<<3,t[o+4>>2]=_e|3,_e=o+_e+4|0,t[_e>>2]=t[_e>>2]|1,_e=s,h=vt,_e|0;if(T=t[2785]|0,k>>>0>T>>>0){if(r|0)return n=2<>>12&16,n=n>>>d,r=n>>>5&8,n=n>>>r,s=n>>>2&4,n=n>>>s,e=n>>>1&2,n=n>>>e,o=n>>>1&1,o=(r|d|s|e|o)+(n>>>o)|0,n=11172+(o<<1<<2)|0,e=n+8|0,s=t[e>>2]|0,d=s+8|0,r=t[d>>2]|0,(n|0)==(r|0)?(e=P&~(1<>2]=n,t[e>>2]=r,e=P),l=(o<<3)-k|0,t[s+4>>2]=k|3,o=s+k|0,t[o+4>>2]=l|1,t[o+l>>2]=l,T|0&&(s=t[2788]|0,n=T>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=s,t[n+12>>2]=s,t[s+8>>2]=n,t[s+12>>2]=r),t[2785]=l,t[2788]=o,_e=d,h=vt,_e|0;if(_=t[2784]|0,_){if(r=(_&0-_)+-1|0,d=r>>>12&16,r=r>>>d,l=r>>>5&8,r=r>>>l,y=r>>>2&4,r=r>>>y,o=r>>>1&2,r=r>>>o,e=r>>>1&1,e=t[11436+((l|d|y|o|e)+(r>>>e)<<2)>>2]|0,r=(t[e+4>>2]&-8)-k|0,o=t[e+16+(((t[e+16>>2]|0)==0&1)<<2)>>2]|0,!o)y=e,l=r;else{do d=(t[o+4>>2]&-8)-k|0,y=d>>>0>>0,r=y?d:r,e=y?o:e,o=t[o+16+(((t[o+16>>2]|0)==0&1)<<2)>>2]|0;while((o|0)!=0);y=e,l=r}if(d=y+k|0,y>>>0>>0){s=t[y+24>>2]|0,n=t[y+12>>2]|0;do if((n|0)==(y|0)){if(e=y+20|0,n=t[e>>2]|0,!n&&(e=y+16|0,n=t[e>>2]|0,!n)){r=0;break}for(;;){if(r=n+20|0,o=t[r>>2]|0,o|0){n=o,e=r;continue}if(r=n+16|0,o=t[r>>2]|0,o)n=o,e=r;else break}t[e>>2]=0,r=n}else r=t[y+8>>2]|0,t[r+12>>2]=n,t[n+8>>2]=r,r=n;while(0);do if(s|0){if(n=t[y+28>>2]|0,e=11436+(n<<2)|0,(y|0)==(t[e>>2]|0)){if(t[e>>2]=r,!r){t[2784]=_&~(1<>2]|0)!=(y|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=s,n=t[y+16>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),n=t[y+20>>2]|0,n|0&&(t[r+20>>2]=n,t[n+24>>2]=r)}while(0);return l>>>0<16?(_e=l+k|0,t[y+4>>2]=_e|3,_e=y+_e+4|0,t[_e>>2]=t[_e>>2]|1):(t[y+4>>2]=k|3,t[d+4>>2]=l|1,t[d+l>>2]=l,T|0&&(o=t[2788]|0,n=T>>>3,r=11172+(n<<1<<2)|0,n=1<>2]|0):(t[2783]=P|n,n=r,e=r+8|0),t[e>>2]=o,t[n+12>>2]=o,t[o+8>>2]=n,t[o+12>>2]=r),t[2785]=l,t[2788]=d),_e=y+8|0,h=vt,_e|0}else P=k}else P=k}else P=k}else if(e>>>0<=4294967231)if(e=e+11|0,k=e&-8,y=t[2784]|0,y){o=0-k|0,e=e>>>8,e?k>>>0>16777215?_=31:(P=(e+1048320|0)>>>16&8,pe=e<>>16&4,pe=pe<>>16&2,_=14-(T|P|_)+(pe<<_>>>15)|0,_=k>>>(_+7|0)&1|_<<1):_=0,r=t[11436+(_<<2)>>2]|0;e:do if(!r)r=0,e=0,pe=57;else for(e=0,d=k<<((_|0)==31?0:25-(_>>>1)|0),l=0;;){if(s=(t[r+4>>2]&-8)-k|0,s>>>0>>0)if(s)e=r,o=s;else{e=r,o=0,s=r,pe=61;break e}if(s=t[r+20>>2]|0,r=t[r+16+(d>>>31<<2)>>2]|0,l=(s|0)==0|(s|0)==(r|0)?l:s,s=(r|0)==0,s){r=l,pe=57;break}else d=d<<((s^1)&1)}while(0);if((pe|0)==57){if((r|0)==0&(e|0)==0){if(e=2<<_,e=y&(e|0-e),!e){P=k;break}P=(e&0-e)+-1|0,d=P>>>12&16,P=P>>>d,l=P>>>5&8,P=P>>>l,_=P>>>2&4,P=P>>>_,T=P>>>1&2,P=P>>>T,r=P>>>1&1,e=0,r=t[11436+((l|d|_|T|r)+(P>>>r)<<2)>>2]|0}r?(s=r,pe=61):(_=e,d=o)}if((pe|0)==61)for(;;)if(pe=0,r=(t[s+4>>2]&-8)-k|0,P=r>>>0>>0,r=P?r:o,e=P?s:e,s=t[s+16+(((t[s+16>>2]|0)==0&1)<<2)>>2]|0,s)o=r,pe=61;else{_=e,d=r;break}if((_|0)!=0?d>>>0<((t[2785]|0)-k|0)>>>0:0){if(l=_+k|0,_>>>0>=l>>>0)return _e=0,h=vt,_e|0;s=t[_+24>>2]|0,n=t[_+12>>2]|0;do if((n|0)==(_|0)){if(e=_+20|0,n=t[e>>2]|0,!n&&(e=_+16|0,n=t[e>>2]|0,!n)){n=0;break}for(;;){if(r=n+20|0,o=t[r>>2]|0,o|0){n=o,e=r;continue}if(r=n+16|0,o=t[r>>2]|0,o)n=o,e=r;else break}t[e>>2]=0}else _e=t[_+8>>2]|0,t[_e+12>>2]=n,t[n+8>>2]=_e;while(0);do if(s){if(e=t[_+28>>2]|0,r=11436+(e<<2)|0,(_|0)==(t[r>>2]|0)){if(t[r>>2]=n,!n){o=y&~(1<>2]|0)!=(_|0)&1)<<2)>>2]=n,!n){o=y;break}t[n+24>>2]=s,e=t[_+16>>2]|0,e|0&&(t[n+16>>2]=e,t[e+24>>2]=n),e=t[_+20>>2]|0,e&&(t[n+20>>2]=e,t[e+24>>2]=n),o=y}else o=y;while(0);do if(d>>>0>=16){if(t[_+4>>2]=k|3,t[l+4>>2]=d|1,t[l+d>>2]=d,n=d>>>3,d>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=l,t[n+12>>2]=l,t[l+8>>2]=n,t[l+12>>2]=r;break}if(n=d>>>8,n?d>>>0>16777215?n=31:(pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,n=14-(qe|pe|n)+(_e<>>15)|0,n=d>>>(n+7|0)&1|n<<1):n=0,r=11436+(n<<2)|0,t[l+28>>2]=n,e=l+16|0,t[e+4>>2]=0,t[e>>2]=0,e=1<>2]=l,t[l+24>>2]=r,t[l+12>>2]=l,t[l+8>>2]=l;break}for(e=d<<((n|0)==31?0:25-(n>>>1)|0),r=t[r>>2]|0;;){if((t[r+4>>2]&-8|0)==(d|0)){pe=97;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=96;break}}if((pe|0)==96){t[o>>2]=l,t[l+24>>2]=r,t[l+12>>2]=l,t[l+8>>2]=l;break}else if((pe|0)==97){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=l,t[pe>>2]=l,t[l+8>>2]=_e,t[l+12>>2]=r,t[l+24>>2]=0;break}}else _e=d+k|0,t[_+4>>2]=_e|3,_e=_+_e+4|0,t[_e>>2]=t[_e>>2]|1;while(0);return _e=_+8|0,h=vt,_e|0}else P=k}else P=k;else P=-1;while(0);if(r=t[2785]|0,r>>>0>=P>>>0)return n=r-P|0,e=t[2788]|0,n>>>0>15?(_e=e+P|0,t[2788]=_e,t[2785]=n,t[_e+4>>2]=n|1,t[_e+n>>2]=n,t[e+4>>2]=P|3):(t[2785]=0,t[2788]=0,t[e+4>>2]=r|3,_e=e+r+4|0,t[_e>>2]=t[_e>>2]|1),_e=e+8|0,h=vt,_e|0;if(d=t[2786]|0,d>>>0>P>>>0)return qe=d-P|0,t[2786]=qe,_e=t[2789]|0,pe=_e+P|0,t[2789]=pe,t[pe+4>>2]=qe|1,t[_e+4>>2]=P|3,_e=_e+8|0,h=vt,_e|0;if(t[2901]|0?e=t[2903]|0:(t[2903]=4096,t[2902]=4096,t[2904]=-1,t[2905]=-1,t[2906]=0,t[2894]=0,e=q&-16^1431655768,t[q>>2]=e,t[2901]=e,e=4096),_=P+48|0,y=P+47|0,l=e+y|0,s=0-e|0,k=l&s,k>>>0<=P>>>0||(e=t[2893]|0,e|0?(T=t[2891]|0,q=T+k|0,q>>>0<=T>>>0|q>>>0>e>>>0):0))return _e=0,h=vt,_e|0;e:do if(t[2894]&4)n=0,pe=133;else{r=t[2789]|0;t:do if(r){for(o=11580;e=t[o>>2]|0,!(e>>>0<=r>>>0?(ie=o+4|0,(e+(t[ie>>2]|0)|0)>>>0>r>>>0):0);)if(e=t[o+8>>2]|0,e)o=e;else{pe=118;break t}if(n=l-d&s,n>>>0<2147483647)if(e=xf(n|0)|0,(e|0)==((t[o>>2]|0)+(t[ie>>2]|0)|0)){if((e|0)!=(-1|0)){d=n,l=e,pe=135;break e}}else o=e,pe=126;else n=0}else pe=118;while(0);do if((pe|0)==118)if(r=xf(0)|0,(r|0)!=(-1|0)?(n=r,we=t[2902]|0,le=we+-1|0,n=((le&n|0)==0?0:(le+n&0-we)-n|0)+k|0,we=t[2891]|0,le=n+we|0,n>>>0>P>>>0&n>>>0<2147483647):0){if(ie=t[2893]|0,ie|0?le>>>0<=we>>>0|le>>>0>ie>>>0:0){n=0;break}if(e=xf(n|0)|0,(e|0)==(r|0)){d=n,l=r,pe=135;break e}else o=e,pe=126}else n=0;while(0);do if((pe|0)==126){if(r=0-n|0,!(_>>>0>n>>>0&(n>>>0<2147483647&(o|0)!=(-1|0))))if((o|0)==(-1|0)){n=0;break}else{d=n,l=o,pe=135;break e}if(e=t[2903]|0,e=y-n+e&0-e,e>>>0>=2147483647){d=n,l=o,pe=135;break e}if((xf(e|0)|0)==(-1|0)){xf(r|0)|0,n=0;break}else{d=e+n|0,l=o,pe=135;break e}}while(0);t[2894]=t[2894]|4,pe=133}while(0);if((((pe|0)==133?k>>>0<2147483647:0)?(qe=xf(k|0)|0,ie=xf(0)|0,Pe=ie-qe|0,ke=Pe>>>0>(P+40|0)>>>0,!((qe|0)==(-1|0)|ke^1|qe>>>0>>0&((qe|0)!=(-1|0)&(ie|0)!=(-1|0))^1)):0)&&(d=ke?Pe:n,l=qe,pe=135),(pe|0)==135){n=(t[2891]|0)+d|0,t[2891]=n,n>>>0>(t[2892]|0)>>>0&&(t[2892]=n),y=t[2789]|0;do if(y){for(n=11580;;){if(e=t[n>>2]|0,r=n+4|0,o=t[r>>2]|0,(l|0)==(e+o|0)){pe=145;break}if(s=t[n+8>>2]|0,s)n=s;else break}if(((pe|0)==145?(t[n+12>>2]&8|0)==0:0)?y>>>0>>0&y>>>0>=e>>>0:0){t[r>>2]=o+d,_e=y+8|0,_e=(_e&7|0)==0?0:0-_e&7,pe=y+_e|0,_e=(t[2786]|0)+(d-_e)|0,t[2789]=pe,t[2786]=_e,t[pe+4>>2]=_e|1,t[pe+_e+4>>2]=40,t[2790]=t[2905];break}for(l>>>0<(t[2787]|0)>>>0&&(t[2787]=l),r=l+d|0,n=11580;;){if((t[n>>2]|0)==(r|0)){pe=153;break}if(e=t[n+8>>2]|0,e)n=e;else break}if((pe|0)==153?(t[n+12>>2]&8|0)==0:0){t[n>>2]=l,T=n+4|0,t[T>>2]=(t[T>>2]|0)+d,T=l+8|0,T=l+((T&7|0)==0?0:0-T&7)|0,n=r+8|0,n=r+((n&7|0)==0?0:0-n&7)|0,k=T+P|0,_=n-T-P|0,t[T+4>>2]=P|3;do if((n|0)!=(y|0)){if((n|0)==(t[2788]|0)){_e=(t[2785]|0)+_|0,t[2785]=_e,t[2788]=k,t[k+4>>2]=_e|1,t[k+_e>>2]=_e;break}if(e=t[n+4>>2]|0,(e&3|0)==1){d=e&-8,o=e>>>3;e:do if(e>>>0<256)if(e=t[n+8>>2]|0,r=t[n+12>>2]|0,(r|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=r,t[r+8>>2]=e;break}else{l=t[n+24>>2]|0,e=t[n+12>>2]|0;do if((e|0)==(n|0)){if(o=n+16|0,r=o+4|0,e=t[r>>2]|0,!e)if(e=t[o>>2]|0,e)r=o;else{e=0;break}for(;;){if(o=e+20|0,s=t[o>>2]|0,s|0){e=s,r=o;continue}if(o=e+16|0,s=t[o>>2]|0,s)e=s,r=o;else break}t[r>>2]=0}else _e=t[n+8>>2]|0,t[_e+12>>2]=e,t[e+8>>2]=_e;while(0);if(!l)break;r=t[n+28>>2]|0,o=11436+(r<<2)|0;do if((n|0)!=(t[o>>2]|0)){if(t[l+16+(((t[l+16>>2]|0)!=(n|0)&1)<<2)>>2]=e,!e)break e}else{if(t[o>>2]=e,e|0)break;t[2784]=t[2784]&~(1<>2]=l,r=n+16|0,o=t[r>>2]|0,o|0&&(t[e+16>>2]=o,t[o+24>>2]=e),r=t[r+4>>2]|0,!r)break;t[e+20>>2]=r,t[r+24>>2]=e}while(0);n=n+d|0,s=d+_|0}else s=_;if(n=n+4|0,t[n>>2]=t[n>>2]&-2,t[k+4>>2]=s|1,t[k+s>>2]=s,n=s>>>3,s>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=k,t[n+12>>2]=k,t[k+8>>2]=n,t[k+12>>2]=r;break}n=s>>>8;do if(!n)n=0;else{if(s>>>0>16777215){n=31;break}pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,n=14-(qe|pe|n)+(_e<>>15)|0,n=s>>>(n+7|0)&1|n<<1}while(0);if(o=11436+(n<<2)|0,t[k+28>>2]=n,e=k+16|0,t[e+4>>2]=0,t[e>>2]=0,e=t[2784]|0,r=1<>2]=k,t[k+24>>2]=o,t[k+12>>2]=k,t[k+8>>2]=k;break}for(e=s<<((n|0)==31?0:25-(n>>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){pe=194;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=193;break}}if((pe|0)==193){t[o>>2]=k,t[k+24>>2]=r,t[k+12>>2]=k,t[k+8>>2]=k;break}else if((pe|0)==194){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=k,t[pe>>2]=k,t[k+8>>2]=_e,t[k+12>>2]=r,t[k+24>>2]=0;break}}else _e=(t[2786]|0)+_|0,t[2786]=_e,t[2789]=k,t[k+4>>2]=_e|1;while(0);return _e=T+8|0,h=vt,_e|0}for(n=11580;e=t[n>>2]|0,!(e>>>0<=y>>>0?(_e=e+(t[n+4>>2]|0)|0,_e>>>0>y>>>0):0);)n=t[n+8>>2]|0;s=_e+-47|0,e=s+8|0,e=s+((e&7|0)==0?0:0-e&7)|0,s=y+16|0,e=e>>>0>>0?y:e,n=e+8|0,r=l+8|0,r=(r&7|0)==0?0:0-r&7,pe=l+r|0,r=d+-40-r|0,t[2789]=pe,t[2786]=r,t[pe+4>>2]=r|1,t[pe+r+4>>2]=40,t[2790]=t[2905],r=e+4|0,t[r>>2]=27,t[n>>2]=t[2895],t[n+4>>2]=t[2896],t[n+8>>2]=t[2897],t[n+12>>2]=t[2898],t[2895]=l,t[2896]=d,t[2898]=0,t[2897]=n,n=e+24|0;do pe=n,n=n+4|0,t[n>>2]=7;while((pe+8|0)>>>0<_e>>>0);if((e|0)!=(y|0)){if(l=e-y|0,t[r>>2]=t[r>>2]&-2,t[y+4>>2]=l|1,t[e>>2]=l,n=l>>>3,l>>>0<256){r=11172+(n<<1<<2)|0,e=t[2783]|0,n=1<>2]|0):(t[2783]=e|n,n=r,e=r+8|0),t[e>>2]=y,t[n+12>>2]=y,t[y+8>>2]=n,t[y+12>>2]=r;break}if(n=l>>>8,n?l>>>0>16777215?r=31:(pe=(n+1048320|0)>>>16&8,_e=n<>>16&4,_e=_e<>>16&2,r=14-(qe|pe|r)+(_e<>>15)|0,r=l>>>(r+7|0)&1|r<<1):r=0,o=11436+(r<<2)|0,t[y+28>>2]=r,t[y+20>>2]=0,t[s>>2]=0,n=t[2784]|0,e=1<>2]=y,t[y+24>>2]=o,t[y+12>>2]=y,t[y+8>>2]=y;break}for(e=l<<((r|0)==31?0:25-(r>>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(l|0)){pe=216;break}if(o=r+16+(e>>>31<<2)|0,n=t[o>>2]|0,n)e=e<<1,r=n;else{pe=215;break}}if((pe|0)==215){t[o>>2]=y,t[y+24>>2]=r,t[y+12>>2]=y,t[y+8>>2]=y;break}else if((pe|0)==216){pe=r+8|0,_e=t[pe>>2]|0,t[_e+12>>2]=y,t[pe>>2]=y,t[y+8>>2]=_e,t[y+12>>2]=r,t[y+24>>2]=0;break}}}else{_e=t[2787]|0,(_e|0)==0|l>>>0<_e>>>0&&(t[2787]=l),t[2895]=l,t[2896]=d,t[2898]=0,t[2792]=t[2901],t[2791]=-1,n=0;do _e=11172+(n<<1<<2)|0,t[_e+12>>2]=_e,t[_e+8>>2]=_e,n=n+1|0;while((n|0)!=32);_e=l+8|0,_e=(_e&7|0)==0?0:0-_e&7,pe=l+_e|0,_e=d+-40-_e|0,t[2789]=pe,t[2786]=_e,t[pe+4>>2]=_e|1,t[pe+_e+4>>2]=40,t[2790]=t[2905]}while(0);if(n=t[2786]|0,n>>>0>P>>>0)return qe=n-P|0,t[2786]=qe,_e=t[2789]|0,pe=_e+P|0,t[2789]=pe,t[pe+4>>2]=qe|1,t[_e+4>>2]=P|3,_e=_e+8|0,h=vt,_e|0}return t[(ca()|0)>>2]=12,_e=0,h=vt,_e|0}function sh(e){e=e|0;var n=0,r=0,o=0,s=0,l=0,d=0,_=0,y=0;if(!!e){r=e+-8|0,s=t[2787]|0,e=t[e+-4>>2]|0,n=e&-8,y=r+n|0;do if(e&1)_=r,d=r;else{if(o=t[r>>2]|0,!(e&3)||(d=r+(0-o)|0,l=o+n|0,d>>>0>>0))return;if((d|0)==(t[2788]|0)){if(e=y+4|0,n=t[e>>2]|0,(n&3|0)!=3){_=d,n=l;break}t[2785]=l,t[e>>2]=n&-2,t[d+4>>2]=l|1,t[d+l>>2]=l;return}if(r=o>>>3,o>>>0<256)if(e=t[d+8>>2]|0,n=t[d+12>>2]|0,(n|0)==(e|0)){t[2783]=t[2783]&~(1<>2]=n,t[n+8>>2]=e,_=d,n=l;break}s=t[d+24>>2]|0,e=t[d+12>>2]|0;do if((e|0)==(d|0)){if(r=d+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{e=0;break}for(;;){if(r=e+20|0,o=t[r>>2]|0,o|0){e=o,n=r;continue}if(r=e+16|0,o=t[r>>2]|0,o)e=o,n=r;else break}t[n>>2]=0}else _=t[d+8>>2]|0,t[_+12>>2]=e,t[e+8>>2]=_;while(0);if(s){if(n=t[d+28>>2]|0,r=11436+(n<<2)|0,(d|0)==(t[r>>2]|0)){if(t[r>>2]=e,!e){t[2784]=t[2784]&~(1<>2]|0)!=(d|0)&1)<<2)>>2]=e,!e){_=d,n=l;break}t[e+24>>2]=s,n=d+16|0,r=t[n>>2]|0,r|0&&(t[e+16>>2]=r,t[r+24>>2]=e),n=t[n+4>>2]|0,n?(t[e+20>>2]=n,t[n+24>>2]=e,_=d,n=l):(_=d,n=l)}else _=d,n=l}while(0);if(!(d>>>0>=y>>>0)&&(e=y+4|0,o=t[e>>2]|0,!!(o&1))){if(o&2)t[e>>2]=o&-2,t[_+4>>2]=n|1,t[d+n>>2]=n,s=n;else{if(e=t[2788]|0,(y|0)==(t[2789]|0)){if(y=(t[2786]|0)+n|0,t[2786]=y,t[2789]=_,t[_+4>>2]=y|1,(_|0)!=(e|0))return;t[2788]=0,t[2785]=0;return}if((y|0)==(e|0)){y=(t[2785]|0)+n|0,t[2785]=y,t[2788]=d,t[_+4>>2]=y|1,t[d+y>>2]=y;return}s=(o&-8)+n|0,r=o>>>3;do if(o>>>0<256)if(n=t[y+8>>2]|0,e=t[y+12>>2]|0,(e|0)==(n|0)){t[2783]=t[2783]&~(1<>2]=e,t[e+8>>2]=n;break}else{l=t[y+24>>2]|0,e=t[y+12>>2]|0;do if((e|0)==(y|0)){if(r=y+16|0,n=r+4|0,e=t[n>>2]|0,!e)if(e=t[r>>2]|0,e)n=r;else{r=0;break}for(;;){if(r=e+20|0,o=t[r>>2]|0,o|0){e=o,n=r;continue}if(r=e+16|0,o=t[r>>2]|0,o)e=o,n=r;else break}t[n>>2]=0,r=e}else r=t[y+8>>2]|0,t[r+12>>2]=e,t[e+8>>2]=r,r=e;while(0);if(l|0){if(e=t[y+28>>2]|0,n=11436+(e<<2)|0,(y|0)==(t[n>>2]|0)){if(t[n>>2]=r,!r){t[2784]=t[2784]&~(1<>2]|0)!=(y|0)&1)<<2)>>2]=r,!r)break;t[r+24>>2]=l,e=y+16|0,n=t[e>>2]|0,n|0&&(t[r+16>>2]=n,t[n+24>>2]=r),e=t[e+4>>2]|0,e|0&&(t[r+20>>2]=e,t[e+24>>2]=r)}}while(0);if(t[_+4>>2]=s|1,t[d+s>>2]=s,(_|0)==(t[2788]|0)){t[2785]=s;return}}if(e=s>>>3,s>>>0<256){r=11172+(e<<1<<2)|0,n=t[2783]|0,e=1<>2]|0):(t[2783]=n|e,e=r,n=r+8|0),t[n>>2]=_,t[e+12>>2]=_,t[_+8>>2]=e,t[_+12>>2]=r;return}e=s>>>8,e?s>>>0>16777215?e=31:(d=(e+1048320|0)>>>16&8,y=e<>>16&4,y=y<>>16&2,e=14-(l|d|e)+(y<>>15)|0,e=s>>>(e+7|0)&1|e<<1):e=0,o=11436+(e<<2)|0,t[_+28>>2]=e,t[_+20>>2]=0,t[_+16>>2]=0,n=t[2784]|0,r=1<>>1)|0),r=t[o>>2]|0;;){if((t[r+4>>2]&-8|0)==(s|0)){e=73;break}if(o=r+16+(n>>>31<<2)|0,e=t[o>>2]|0,e)n=n<<1,r=e;else{e=72;break}}if((e|0)==72){t[o>>2]=_,t[_+24>>2]=r,t[_+12>>2]=_,t[_+8>>2]=_;break}else if((e|0)==73){d=r+8|0,y=t[d>>2]|0,t[y+12>>2]=_,t[d>>2]=_,t[_+8>>2]=y,t[_+12>>2]=r,t[_+24>>2]=0;break}}else t[2784]=n|r,t[o>>2]=_,t[_+24>>2]=o,t[_+12>>2]=_,t[_+8>>2]=_;while(0);if(y=(t[2791]|0)+-1|0,t[2791]=y,!y)e=11588;else return;for(;e=t[e>>2]|0,e;)e=e+8|0;t[2791]=-1}}}function rL(){return 11628}function iL(e){e=e|0;var n=0,r=0;return n=h,h=h+16|0,r=n,t[r>>2]=sL(t[e+60>>2]|0)|0,e=lh(Ms(6,r|0)|0)|0,h=n,e|0}function j8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0;P=h,h=h+48|0,k=P+16|0,l=P,s=P+32|0,_=e+28|0,o=t[_>>2]|0,t[s>>2]=o,y=e+20|0,o=(t[y>>2]|0)-o|0,t[s+4>>2]=o,t[s+8>>2]=n,t[s+12>>2]=r,o=o+r|0,d=e+60|0,t[l>>2]=t[d>>2],t[l+4>>2]=s,t[l+8>>2]=2,l=lh(G0(146,l|0)|0)|0;e:do if((o|0)!=(l|0)){for(n=2;!((l|0)<0);)if(o=o-l|0,we=t[s+4>>2]|0,q=l>>>0>we>>>0,s=q?s+8|0:s,n=(q<<31>>31)+n|0,we=l-(q?we:0)|0,t[s>>2]=(t[s>>2]|0)+we,q=s+4|0,t[q>>2]=(t[q>>2]|0)-we,t[k>>2]=t[d>>2],t[k+4>>2]=s,t[k+8>>2]=n,l=lh(G0(146,k|0)|0)|0,(o|0)==(l|0)){T=3;break e}t[e+16>>2]=0,t[_>>2]=0,t[y>>2]=0,t[e>>2]=t[e>>2]|32,(n|0)==2?r=0:r=r-(t[s+4>>2]|0)|0}else T=3;while(0);return(T|0)==3&&(we=t[e+44>>2]|0,t[e+16>>2]=we+(t[e+48>>2]|0),t[_>>2]=we,t[y>>2]=we),h=P,r|0}function oL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;return s=h,h=h+32|0,l=s,o=s+20|0,t[l>>2]=t[e+60>>2],t[l+4>>2]=0,t[l+8>>2]=n,t[l+12>>2]=o,t[l+16>>2]=r,(lh(Uu(140,l|0)|0)|0)<0?(t[o>>2]=-1,e=-1):e=t[o>>2]|0,h=s,e|0}function lh(e){return e=e|0,e>>>0>4294963200&&(t[(ca()|0)>>2]=0-e,e=-1),e|0}function ca(){return(uL()|0)+64|0}function uL(){return b4()|0}function b4(){return 2084}function sL(e){return e=e|0,e|0}function lL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;return s=h,h=h+32|0,o=s,t[e+36>>2]=1,((t[e>>2]&64|0)==0?(t[o>>2]=t[e+60>>2],t[o+4>>2]=21523,t[o+8>>2]=s+16,su(54,o|0)|0):0)&&(c[e+75>>0]=-1),o=j8(e,n,r)|0,h=s,o|0}function U8(e,n){e=e|0,n=n|0;var r=0,o=0;if(r=c[e>>0]|0,o=c[n>>0]|0,r<<24>>24==0?1:r<<24>>24!=o<<24>>24)e=o;else{do e=e+1|0,n=n+1|0,r=c[e>>0]|0,o=c[n>>0]|0;while(!(r<<24>>24==0?1:r<<24>>24!=o<<24>>24));e=o}return(r&255)-(e&255)|0}function fL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0;e:do if(!r)e=0;else{for(;o=c[e>>0]|0,s=c[n>>0]|0,o<<24>>24==s<<24>>24;)if(r=r+-1|0,r)e=e+1|0,n=n+1|0;else{e=0;break e}e=(o&255)-(s&255)|0}while(0);return e|0}function q8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0;ie=h,h=h+224|0,T=ie+120|0,P=ie+80|0,we=ie,le=ie+136|0,o=P,s=o+40|0;do t[o>>2]=0,o=o+4|0;while((o|0)<(s|0));return t[T>>2]=t[r>>2],(G4(0,n,T,we,P)|0)<0?r=-1:((t[e+76>>2]|0)>-1?q=cL(e)|0:q=0,r=t[e>>2]|0,k=r&32,(c[e+74>>0]|0)<1&&(t[e>>2]=r&-33),o=e+48|0,t[o>>2]|0?r=G4(e,n,T,we,P)|0:(s=e+44|0,l=t[s>>2]|0,t[s>>2]=le,d=e+28|0,t[d>>2]=le,_=e+20|0,t[_>>2]=le,t[o>>2]=80,y=e+16|0,t[y>>2]=le+80,r=G4(e,n,T,we,P)|0,l&&(dh[t[e+36>>2]&7](e,0,0)|0,r=(t[_>>2]|0)==0?-1:r,t[s>>2]=l,t[o>>2]=0,t[y>>2]=0,t[d>>2]=0,t[_>>2]=0)),o=t[e>>2]|0,t[e>>2]=o|k,q|0&&aL(e),r=(o&32|0)==0?r:-1),h=ie,r|0}function G4(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0;zt=h,h=h+64|0,Ht=zt+16|0,It=zt,vt=zt+24|0,gn=zt+8|0,Pn=zt+20|0,t[Ht>>2]=n,qe=(e|0)!=0,pe=vt+40|0,_e=pe,vt=vt+39|0,Ln=gn+4|0,d=0,l=0,T=0;e:for(;;){do if((l|0)>-1)if((d|0)>(2147483647-l|0)){t[(ca()|0)>>2]=75,l=-1;break}else{l=d+l|0;break}while(0);if(d=c[n>>0]|0,d<<24>>24)_=n;else{ke=87;break}t:for(;;){switch(d<<24>>24){case 37:{d=_,ke=9;break t}case 0:{d=_;break t}default:}Pe=_+1|0,t[Ht>>2]=Pe,d=c[Pe>>0]|0,_=Pe}t:do if((ke|0)==9)for(;;){if(ke=0,(c[_+1>>0]|0)!=37)break t;if(d=d+1|0,_=_+2|0,t[Ht>>2]=_,(c[_>>0]|0)==37)ke=9;else break}while(0);if(d=d-n|0,qe&&ri(e,n,d),d|0){n=_;continue}y=_+1|0,d=(c[y>>0]|0)+-48|0,d>>>0<10?(Pe=(c[_+2>>0]|0)==36,ie=Pe?d:-1,T=Pe?1:T,y=Pe?_+3|0:y):ie=-1,t[Ht>>2]=y,d=c[y>>0]|0,_=(d<<24>>24)+-32|0;t:do if(_>>>0<32)for(k=0,P=d;;){if(d=1<<_,!(d&75913)){d=P;break t}if(k=d|k,y=y+1|0,t[Ht>>2]=y,d=c[y>>0]|0,_=(d<<24>>24)+-32|0,_>>>0>=32)break;P=d}else k=0;while(0);if(d<<24>>24==42){if(_=y+1|0,d=(c[_>>0]|0)+-48|0,d>>>0<10?(c[y+2>>0]|0)==36:0)t[s+(d<<2)>>2]=10,d=t[o+((c[_>>0]|0)+-48<<3)>>2]|0,T=1,y=y+3|0;else{if(T|0){l=-1;break}qe?(T=(t[r>>2]|0)+(4-1)&~(4-1),d=t[T>>2]|0,t[r>>2]=T+4,T=0,y=_):(d=0,T=0,y=_)}t[Ht>>2]=y,Pe=(d|0)<0,d=Pe?0-d|0:d,k=Pe?k|8192:k}else{if(d=z8(Ht)|0,(d|0)<0){l=-1;break}y=t[Ht>>2]|0}do if((c[y>>0]|0)==46){if((c[y+1>>0]|0)!=42){t[Ht>>2]=y+1,_=z8(Ht)|0,y=t[Ht>>2]|0;break}if(P=y+2|0,_=(c[P>>0]|0)+-48|0,_>>>0<10?(c[y+3>>0]|0)==36:0){t[s+(_<<2)>>2]=10,_=t[o+((c[P>>0]|0)+-48<<3)>>2]|0,y=y+4|0,t[Ht>>2]=y;break}if(T|0){l=-1;break e}qe?(Pe=(t[r>>2]|0)+(4-1)&~(4-1),_=t[Pe>>2]|0,t[r>>2]=Pe+4):_=0,t[Ht>>2]=P,y=P}else _=-1;while(0);for(le=0;;){if(((c[y>>0]|0)+-65|0)>>>0>57){l=-1;break e}if(Pe=y+1|0,t[Ht>>2]=Pe,P=c[(c[y>>0]|0)+-65+(5178+(le*58|0))>>0]|0,q=P&255,(q+-1|0)>>>0<8)le=q,y=Pe;else break}if(!(P<<24>>24)){l=-1;break}we=(ie|0)>-1;do if(P<<24>>24==19)if(we){l=-1;break e}else ke=49;else{if(we){t[s+(ie<<2)>>2]=q,we=o+(ie<<3)|0,ie=t[we+4>>2]|0,ke=It,t[ke>>2]=t[we>>2],t[ke+4>>2]=ie,ke=49;break}if(!qe){l=0;break e}W8(It,q,r)}while(0);if((ke|0)==49?(ke=0,!qe):0){d=0,n=Pe;continue}y=c[y>>0]|0,y=(le|0)!=0&(y&15|0)==3?y&-33:y,we=k&-65537,ie=(k&8192|0)==0?k:we;t:do switch(y|0){case 110:switch((le&255)<<24>>24){case 0:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 1:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 2:{d=t[It>>2]|0,t[d>>2]=l,t[d+4>>2]=((l|0)<0)<<31>>31,d=0,n=Pe;continue e}case 3:{g[t[It>>2]>>1]=l,d=0,n=Pe;continue e}case 4:{c[t[It>>2]>>0]=l,d=0,n=Pe;continue e}case 6:{t[t[It>>2]>>2]=l,d=0,n=Pe;continue e}case 7:{d=t[It>>2]|0,t[d>>2]=l,t[d+4>>2]=((l|0)<0)<<31>>31,d=0,n=Pe;continue e}default:{d=0,n=Pe;continue e}}case 112:{y=120,_=_>>>0>8?_:8,n=ie|8,ke=61;break}case 88:case 120:{n=ie,ke=61;break}case 111:{y=It,n=t[y>>2]|0,y=t[y+4>>2]|0,q=pL(n,y,pe)|0,we=_e-q|0,k=0,P=5642,_=(ie&8|0)==0|(_|0)>(we|0)?_:we+1|0,we=ie,ke=67;break}case 105:case 100:if(y=It,n=t[y>>2]|0,y=t[y+4>>2]|0,(y|0)<0){n=fh(0,0,n|0,y|0)|0,y=be,k=It,t[k>>2]=n,t[k+4>>2]=y,k=1,P=5642,ke=66;break t}else{k=(ie&2049|0)!=0&1,P=(ie&2048|0)==0?(ie&1|0)==0?5642:5644:5643,ke=66;break t}case 117:{y=It,k=0,P=5642,n=t[y>>2]|0,y=t[y+4>>2]|0,ke=66;break}case 99:{c[vt>>0]=t[It>>2],n=vt,k=0,P=5642,q=pe,y=1,_=we;break}case 109:{y=hL(t[(ca()|0)>>2]|0)|0,ke=71;break}case 115:{y=t[It>>2]|0,y=y|0?y:5652,ke=71;break}case 67:{t[gn>>2]=t[It>>2],t[Ln>>2]=0,t[It>>2]=gn,q=-1,y=gn,ke=75;break}case 83:{n=t[It>>2]|0,_?(q=_,y=n,ke=75):(wi(e,32,d,0,ie),n=0,ke=84);break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{d=vL(e,+L[It>>3],d,_,ie,y)|0,n=Pe;continue e}default:k=0,P=5642,q=pe,y=_,_=ie}while(0);t:do if((ke|0)==61)ie=It,le=t[ie>>2]|0,ie=t[ie+4>>2]|0,q=dL(le,ie,pe,y&32)|0,P=(n&8|0)==0|(le|0)==0&(ie|0)==0,k=P?0:2,P=P?5642:5642+(y>>4)|0,we=n,n=le,y=ie,ke=67;else if((ke|0)==66)q=aa(n,y,pe)|0,we=ie,ke=67;else if((ke|0)==71)ke=0,ie=mL(y,0,_)|0,le=(ie|0)==0,n=y,k=0,P=5642,q=le?y+_|0:ie,y=le?_:ie-y|0,_=we;else if((ke|0)==75){for(ke=0,P=y,n=0,_=0;k=t[P>>2]|0,!(!k||(_=H8(Pn,k)|0,(_|0)<0|_>>>0>(q-n|0)>>>0));)if(n=_+n|0,q>>>0>n>>>0)P=P+4|0;else break;if((_|0)<0){l=-1;break e}if(wi(e,32,d,n,ie),!n)n=0,ke=84;else for(k=0;;){if(_=t[y>>2]|0,!_){ke=84;break t}if(_=H8(Pn,_)|0,k=_+k|0,(k|0)>(n|0)){ke=84;break t}if(ri(e,Pn,_),k>>>0>=n>>>0){ke=84;break}else y=y+4|0}}while(0);if((ke|0)==67)ke=0,y=(n|0)!=0|(y|0)!=0,ie=(_|0)!=0|y,y=((y^1)&1)+(_e-q)|0,n=ie?q:pe,q=pe,y=ie?(_|0)>(y|0)?_:y:_,_=(_|0)>-1?we&-65537:we;else if((ke|0)==84){ke=0,wi(e,32,d,n,ie^8192),d=(d|0)>(n|0)?d:n,n=Pe;continue}le=q-n|0,we=(y|0)<(le|0)?le:y,ie=we+k|0,d=(d|0)<(ie|0)?ie:d,wi(e,32,d,ie,_),ri(e,P,k),wi(e,48,d,ie,_^65536),wi(e,48,we,le,0),ri(e,n,le),wi(e,32,d,ie,_^8192),n=Pe}e:do if((ke|0)==87&&!e)if(!T)l=0;else{for(l=1;n=t[s+(l<<2)>>2]|0,!!n;)if(W8(o+(l<<3)|0,n,r),l=l+1|0,(l|0)>=10){l=1;break e}for(;;){if(t[s+(l<<2)>>2]|0){l=-1;break e}if(l=l+1|0,(l|0)>=10){l=1;break}}}while(0);return h=zt,l|0}function cL(e){return e=e|0,0}function aL(e){e=e|0}function ri(e,n,r){e=e|0,n=n|0,r=r|0,t[e>>2]&32||TL(n,r,e)|0}function z8(e){e=e|0;var n=0,r=0,o=0;if(r=t[e>>2]|0,o=(c[r>>0]|0)+-48|0,o>>>0<10){n=0;do n=o+(n*10|0)|0,r=r+1|0,t[e>>2]=r,o=(c[r>>0]|0)+-48|0;while(o>>>0<10)}else n=0;return n|0}function W8(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;e:do if(n>>>0<=20)do switch(n|0){case 9:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,t[e>>2]=n;break e}case 10:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,o=e,t[o>>2]=n,t[o+4>>2]=((n|0)<0)<<31>>31;break e}case 11:{o=(t[r>>2]|0)+(4-1)&~(4-1),n=t[o>>2]|0,t[r>>2]=o+4,o=e,t[o>>2]=n,t[o+4>>2]=0;break e}case 12:{o=(t[r>>2]|0)+(8-1)&~(8-1),n=o,s=t[n>>2]|0,n=t[n+4>>2]|0,t[r>>2]=o+8,o=e,t[o>>2]=s,t[o+4>>2]=n;break e}case 13:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,o=(o&65535)<<16>>16,s=e,t[s>>2]=o,t[s+4>>2]=((o|0)<0)<<31>>31;break e}case 14:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,s=e,t[s>>2]=o&65535,t[s+4>>2]=0;break e}case 15:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,o=(o&255)<<24>>24,s=e,t[s>>2]=o,t[s+4>>2]=((o|0)<0)<<31>>31;break e}case 16:{s=(t[r>>2]|0)+(4-1)&~(4-1),o=t[s>>2]|0,t[r>>2]=s+4,s=e,t[s>>2]=o&255,t[s+4>>2]=0;break e}case 17:{s=(t[r>>2]|0)+(8-1)&~(8-1),l=+L[s>>3],t[r>>2]=s+8,L[e>>3]=l;break e}case 18:{s=(t[r>>2]|0)+(8-1)&~(8-1),l=+L[s>>3],t[r>>2]=s+8,L[e>>3]=l;break e}default:break e}while(0);while(0)}function dL(e,n,r,o){if(e=e|0,n=n|0,r=r|0,o=o|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,c[r>>0]=C[5694+(e&15)>>0]|0|o,e=ch(e|0,n|0,4)|0,n=be;while(!((e|0)==0&(n|0)==0));return r|0}function pL(e,n,r){if(e=e|0,n=n|0,r=r|0,!((e|0)==0&(n|0)==0))do r=r+-1|0,c[r>>0]=e&7|48,e=ch(e|0,n|0,3)|0,n=be;while(!((e|0)==0&(n|0)==0));return r|0}function aa(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;if(n>>>0>0|(n|0)==0&e>>>0>4294967295){for(;o=K4(e|0,n|0,10,0)|0,r=r+-1|0,c[r>>0]=o&255|48,o=e,e=$4(e|0,n|0,10,0)|0,n>>>0>9|(n|0)==9&o>>>0>4294967295;)n=be;n=e}else n=e;if(n)for(;r=r+-1|0,c[r>>0]=(n>>>0)%10|0|48,!(n>>>0<10);)n=(n>>>0)/10|0;return r|0}function hL(e){return e=e|0,DL(e,t[(wL()|0)+188>>2]|0)|0}function mL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;l=n&255,o=(r|0)!=0;e:do if(o&(e&3|0)!=0)for(s=n&255;;){if((c[e>>0]|0)==s<<24>>24){d=6;break e}if(e=e+1|0,r=r+-1|0,o=(r|0)!=0,!(o&(e&3|0)!=0)){d=5;break}}else d=5;while(0);(d|0)==5&&(o?d=6:r=0);e:do if((d|0)==6&&(s=n&255,(c[e>>0]|0)!=s<<24>>24)){o=Un(l,16843009)|0;t:do if(r>>>0>3){for(;l=t[e>>2]^o,!((l&-2139062144^-2139062144)&l+-16843009|0);)if(e=e+4|0,r=r+-4|0,r>>>0<=3){d=11;break t}}else d=11;while(0);if((d|0)==11&&!r){r=0;break}for(;;){if((c[e>>0]|0)==s<<24>>24)break e;if(e=e+1|0,r=r+-1|0,!r){r=0;break}}}while(0);return(r|0?e:0)|0}function wi(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0;if(d=h,h=h+256|0,l=d,(r|0)>(o|0)&(s&73728|0)==0){if(s=r-o|0,pa(l|0,n|0,(s>>>0<256?s:256)|0)|0,s>>>0>255){n=r-o|0;do ri(e,l,256),s=s+-256|0;while(s>>>0>255);s=n&255}ri(e,l,s)}h=d}function H8(e,n){return e=e|0,n=n|0,e?e=_L(e,n,0)|0:e=0,e|0}function vL(e,n,r,o,s,l){e=e|0,n=+n,r=r|0,o=o|0,s=s|0,l=l|0;var d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0,ie=0,Pe=0,ke=0,qe=0,pe=0,_e=0,vt=0,Ln=0,Ht=0,It=0,gn=0,Pn=0,zt=0,Dr=0;Dr=h,h=h+560|0,y=Dr+8|0,Pe=Dr,zt=Dr+524|0,Pn=zt,k=Dr+512|0,t[Pe>>2]=0,gn=k+12|0,b8(n)|0,(be|0)<0?(n=-n,Ht=1,Ln=5659):(Ht=(s&2049|0)!=0&1,Ln=(s&2048|0)==0?(s&1|0)==0?5660:5665:5662),b8(n)|0,It=be&2146435072;do if(It>>>0<2146435072|(It|0)==2146435072&0<0){if(we=+gL(n,Pe)*2,d=we!=0,d&&(t[Pe>>2]=(t[Pe>>2]|0)+-1),qe=l|32,(qe|0)==97){le=l&32,q=(le|0)==0?Ln:Ln+9|0,P=Ht|2,d=12-o|0;do if(o>>>0>11|(d|0)==0)n=we;else{n=8;do d=d+-1|0,n=n*16;while((d|0)!=0);if((c[q>>0]|0)==45){n=-(n+(-we-n));break}else{n=we+n-n;break}}while(0);_=t[Pe>>2]|0,d=(_|0)<0?0-_|0:_,d=aa(d,((d|0)<0)<<31>>31,gn)|0,(d|0)==(gn|0)&&(d=k+11|0,c[d>>0]=48),c[d+-1>>0]=(_>>31&2)+43,T=d+-2|0,c[T>>0]=l+15,k=(o|0)<1,y=(s&8|0)==0,d=zt;do It=~~n,_=d+1|0,c[d>>0]=C[5694+It>>0]|le,n=(n-+(It|0))*16,((_-Pn|0)==1?!(y&(k&n==0)):0)?(c[_>>0]=46,d=d+2|0):d=_;while(n!=0);It=d-Pn|0,Pn=gn-T|0,gn=(o|0)!=0&(It+-2|0)<(o|0)?o+2|0:It,d=Pn+P+gn|0,wi(e,32,r,d,s),ri(e,q,P),wi(e,48,r,d,s^65536),ri(e,zt,It),wi(e,48,gn-It|0,0,0),ri(e,T,Pn),wi(e,32,r,d,s^8192);break}_=(o|0)<0?6:o,d?(d=(t[Pe>>2]|0)+-28|0,t[Pe>>2]=d,n=we*268435456):(n=we,d=t[Pe>>2]|0),It=(d|0)<0?y:y+288|0,y=It;do _e=~~n>>>0,t[y>>2]=_e,y=y+4|0,n=(n-+(_e>>>0))*1e9;while(n!=0);if((d|0)>0)for(k=It,P=y;;){if(T=(d|0)<29?d:29,d=P+-4|0,d>>>0>=k>>>0){y=0;do pe=X8(t[d>>2]|0,0,T|0)|0,pe=Y4(pe|0,be|0,y|0,0)|0,_e=be,ke=K4(pe|0,_e|0,1e9,0)|0,t[d>>2]=ke,y=$4(pe|0,_e|0,1e9,0)|0,d=d+-4|0;while(d>>>0>=k>>>0);y&&(k=k+-4|0,t[k>>2]=y)}for(y=P;!(y>>>0<=k>>>0);)if(d=y+-4|0,!(t[d>>2]|0))y=d;else break;if(d=(t[Pe>>2]|0)-T|0,t[Pe>>2]=d,(d|0)>0)P=y;else break}else k=It;if((d|0)<0){o=((_+25|0)/9|0)+1|0,ie=(qe|0)==102;do{if(le=0-d|0,le=(le|0)<9?le:9,k>>>0>>0){T=(1<>>le,q=0,d=k;do _e=t[d>>2]|0,t[d>>2]=(_e>>>le)+q,q=Un(_e&T,P)|0,d=d+4|0;while(d>>>0>>0);d=(t[k>>2]|0)==0?k+4|0:k,q?(t[y>>2]=q,k=d,d=y+4|0):(k=d,d=y)}else k=(t[k>>2]|0)==0?k+4|0:k,d=y;y=ie?It:k,y=(d-y>>2|0)>(o|0)?y+(o<<2)|0:d,d=(t[Pe>>2]|0)+le|0,t[Pe>>2]=d}while((d|0)<0);d=k,o=y}else d=k,o=y;if(_e=It,d>>>0>>0){if(y=(_e-d>>2)*9|0,T=t[d>>2]|0,T>>>0>=10){k=10;do k=k*10|0,y=y+1|0;while(T>>>0>=k>>>0)}}else y=0;if(ie=(qe|0)==103,ke=(_|0)!=0,k=_-((qe|0)!=102?y:0)+((ke&ie)<<31>>31)|0,(k|0)<(((o-_e>>2)*9|0)+-9|0)){if(k=k+9216|0,le=It+4+(((k|0)/9|0)+-1024<<2)|0,k=((k|0)%9|0)+1|0,(k|0)<9){T=10;do T=T*10|0,k=k+1|0;while((k|0)!=9)}else T=10;if(P=t[le>>2]|0,q=(P>>>0)%(T>>>0)|0,k=(le+4|0)==(o|0),k&(q|0)==0)k=le;else if(we=(((P>>>0)/(T>>>0)|0)&1|0)==0?9007199254740992:9007199254740994,pe=(T|0)/2|0,n=q>>>0>>0?.5:k&(q|0)==(pe|0)?1:1.5,Ht&&(pe=(c[Ln>>0]|0)==45,n=pe?-n:n,we=pe?-we:we),k=P-q|0,t[le>>2]=k,we+n!=we){if(pe=k+T|0,t[le>>2]=pe,pe>>>0>999999999)for(y=le;k=y+-4|0,t[y>>2]=0,k>>>0>>0&&(d=d+-4|0,t[d>>2]=0),pe=(t[k>>2]|0)+1|0,t[k>>2]=pe,pe>>>0>999999999;)y=k;else k=le;if(y=(_e-d>>2)*9|0,P=t[d>>2]|0,P>>>0>=10){T=10;do T=T*10|0,y=y+1|0;while(P>>>0>=T>>>0)}}else k=le;k=k+4|0,k=o>>>0>k>>>0?k:o,pe=d}else k=o,pe=d;for(qe=k;;){if(qe>>>0<=pe>>>0){Pe=0;break}if(d=qe+-4|0,!(t[d>>2]|0))qe=d;else{Pe=1;break}}o=0-y|0;do if(ie)if(d=((ke^1)&1)+_|0,(d|0)>(y|0)&(y|0)>-5?(T=l+-1|0,_=d+-1-y|0):(T=l+-2|0,_=d+-1|0),d=s&8,d)le=d;else{if(Pe?(vt=t[qe+-4>>2]|0,(vt|0)!=0):0)if((vt>>>0)%10|0)k=0;else{k=0,d=10;do d=d*10|0,k=k+1|0;while(!((vt>>>0)%(d>>>0)|0|0))}else k=9;if(d=((qe-_e>>2)*9|0)+-9|0,(T|32|0)==102){le=d-k|0,le=(le|0)>0?le:0,_=(_|0)<(le|0)?_:le,le=0;break}else{le=d+y-k|0,le=(le|0)>0?le:0,_=(_|0)<(le|0)?_:le,le=0;break}}else T=l,le=s&8;while(0);if(ie=_|le,P=(ie|0)!=0&1,q=(T|32|0)==102,q)ke=0,d=(y|0)>0?y:0;else{if(d=(y|0)<0?o:y,d=aa(d,((d|0)<0)<<31>>31,gn)|0,k=gn,(k-d|0)<2)do d=d+-1|0,c[d>>0]=48;while((k-d|0)<2);c[d+-1>>0]=(y>>31&2)+43,d=d+-2|0,c[d>>0]=T,ke=d,d=k-d|0}if(d=Ht+1+_+P+d|0,wi(e,32,r,d,s),ri(e,Ln,Ht),wi(e,48,r,d,s^65536),q){T=pe>>>0>It>>>0?It:pe,le=zt+9|0,P=le,q=zt+8|0,k=T;do{if(y=aa(t[k>>2]|0,0,le)|0,(k|0)==(T|0))(y|0)==(le|0)&&(c[q>>0]=48,y=q);else if(y>>>0>zt>>>0){pa(zt|0,48,y-Pn|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}ri(e,y,P-y|0),k=k+4|0}while(k>>>0<=It>>>0);if(ie|0&&ri(e,5710,1),k>>>0>>0&(_|0)>0)for(;;){if(y=aa(t[k>>2]|0,0,le)|0,y>>>0>zt>>>0){pa(zt|0,48,y-Pn|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}if(ri(e,y,(_|0)<9?_:9),k=k+4|0,y=_+-9|0,k>>>0>>0&(_|0)>9)_=y;else{_=y;break}}wi(e,48,_+9|0,9,0)}else{if(ie=Pe?qe:pe+4|0,(_|0)>-1){Pe=zt+9|0,le=(le|0)==0,o=Pe,P=0-Pn|0,q=zt+8|0,T=pe;do{y=aa(t[T>>2]|0,0,Pe)|0,(y|0)==(Pe|0)&&(c[q>>0]=48,y=q);do if((T|0)==(pe|0)){if(k=y+1|0,ri(e,y,1),le&(_|0)<1){y=k;break}ri(e,5710,1),y=k}else{if(y>>>0<=zt>>>0)break;pa(zt|0,48,y+P|0)|0;do y=y+-1|0;while(y>>>0>zt>>>0)}while(0);Pn=o-y|0,ri(e,y,(_|0)>(Pn|0)?Pn:_),_=_-Pn|0,T=T+4|0}while(T>>>0>>0&(_|0)>-1)}wi(e,48,_+18|0,18,0),ri(e,ke,gn-ke|0)}wi(e,32,r,d,s^8192)}else zt=(l&32|0)!=0,d=Ht+3|0,wi(e,32,r,d,s&-65537),ri(e,Ln,Ht),ri(e,n!=n|!1?zt?5686:5690:zt?5678:5682,3),wi(e,32,r,d,s^8192);while(0);return h=Dr,((d|0)<(r|0)?r:d)|0}function b8(e){e=+e;var n=0;return L[j>>3]=e,n=t[j>>2]|0,be=t[j+4>>2]|0,n|0}function gL(e,n){return e=+e,n=n|0,+ +G8(e,n)}function G8(e,n){e=+e,n=n|0;var r=0,o=0,s=0;switch(L[j>>3]=e,r=t[j>>2]|0,o=t[j+4>>2]|0,s=ch(r|0,o|0,52)|0,s&2047){case 0:{e!=0?(e=+G8(e*18446744073709552e3,n),r=(t[n>>2]|0)+-64|0):r=0,t[n>>2]=r;break}case 2047:break;default:t[n>>2]=(s&2047)+-1022,t[j>>2]=r,t[j+4>>2]=o&-2146435073|1071644672,e=+L[j>>3]}return+e}function _L(e,n,r){e=e|0,n=n|0,r=r|0;do if(e){if(n>>>0<128){c[e>>0]=n,e=1;break}if(!(t[t[(yL()|0)+188>>2]>>2]|0))if((n&-128|0)==57216){c[e>>0]=n,e=1;break}else{t[(ca()|0)>>2]=84,e=-1;break}if(n>>>0<2048){c[e>>0]=n>>>6|192,c[e+1>>0]=n&63|128,e=2;break}if(n>>>0<55296|(n&-8192|0)==57344){c[e>>0]=n>>>12|224,c[e+1>>0]=n>>>6&63|128,c[e+2>>0]=n&63|128,e=3;break}if((n+-65536|0)>>>0<1048576){c[e>>0]=n>>>18|240,c[e+1>>0]=n>>>12&63|128,c[e+2>>0]=n>>>6&63|128,c[e+3>>0]=n&63|128,e=4;break}else{t[(ca()|0)>>2]=84,e=-1;break}}else e=1;while(0);return e|0}function yL(){return b4()|0}function wL(){return b4()|0}function DL(e,n){e=e|0,n=n|0;var r=0,o=0;for(o=0;;){if((C[5712+o>>0]|0)==(e|0)){e=2;break}if(r=o+1|0,(r|0)==87){r=5800,o=87,e=5;break}else o=r}if((e|0)==2&&(o?(r=5800,e=5):r=5800),(e|0)==5)for(;;){do e=r,r=r+1|0;while((c[e>>0]|0)!=0);if(o=o+-1|0,o)e=5;else break}return EL(r,t[n+20>>2]|0)|0}function EL(e,n){return e=e|0,n=n|0,SL(e,n)|0}function SL(e,n){return e=e|0,n=n|0,n?n=CL(t[n>>2]|0,t[n+4>>2]|0,e)|0:n=0,(n|0?n:e)|0}function CL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0;q=(t[e>>2]|0)+1794895138|0,l=fc(t[e+8>>2]|0,q)|0,o=fc(t[e+12>>2]|0,q)|0,s=fc(t[e+16>>2]|0,q)|0;e:do if((l>>>0>>2>>>0?(P=n-(l<<2)|0,o>>>0

    >>0&s>>>0

    >>0):0)?((s|o)&3|0)==0:0){for(P=o>>>2,T=s>>>2,k=0;;){if(_=l>>>1,y=k+_|0,d=y<<1,s=d+P|0,o=fc(t[e+(s<<2)>>2]|0,q)|0,s=fc(t[e+(s+1<<2)>>2]|0,q)|0,!(s>>>0>>0&o>>>0<(n-s|0)>>>0)){o=0;break e}if(c[e+(s+o)>>0]|0){o=0;break e}if(o=U8(r,e+s|0)|0,!o)break;if(o=(o|0)<0,(l|0)==1){o=0;break e}else k=o?k:y,l=o?_:l-_|0}o=d+T|0,s=fc(t[e+(o<<2)>>2]|0,q)|0,o=fc(t[e+(o+1<<2)>>2]|0,q)|0,o>>>0>>0&s>>>0<(n-o|0)>>>0?o=(c[e+(o+s)>>0]|0)==0?e+o|0:0:o=0}else o=0;while(0);return o|0}function fc(e,n){e=e|0,n=n|0;var r=0;return r=Z8(e|0)|0,((n|0)==0?e:r)|0}function TL(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0,_=0;o=r+16|0,s=t[o>>2]|0,s?l=5:xL(r)|0?o=0:(s=t[o>>2]|0,l=5);e:do if((l|0)==5){if(_=r+20|0,d=t[_>>2]|0,o=d,(s-d|0)>>>0>>0){o=dh[t[r+36>>2]&7](r,e,n)|0;break}t:do if((c[r+75>>0]|0)>-1){for(d=n;;){if(!d){l=0,s=e;break t}if(s=d+-1|0,(c[e+s>>0]|0)==10)break;d=s}if(o=dh[t[r+36>>2]&7](r,e,d)|0,o>>>0>>0)break e;l=d,s=e+d|0,n=n-d|0,o=t[_>>2]|0}else l=0,s=e;while(0);vn(o|0,s|0,n|0)|0,t[_>>2]=(t[_>>2]|0)+n,o=l+n|0}while(0);return o|0}function xL(e){e=e|0;var n=0,r=0;return n=e+74|0,r=c[n>>0]|0,c[n>>0]=r+255|r,n=t[e>>2]|0,n&8?(t[e>>2]=n|32,e=-1):(t[e+8>>2]=0,t[e+4>>2]=0,r=t[e+44>>2]|0,t[e+28>>2]=r,t[e+20>>2]=r,t[e+16>>2]=r+(t[e+48>>2]|0),e=0),e|0}function Ur(e,n){e=w(e),n=w(n);var r=0,o=0;r=V8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(o=V8(n)|0,(o&2147483647)>>>0<=2139095040)if((o^r|0)<0){e=(r|0)<0?n:e;break}else{e=e>2]=e,t[j>>2]|0|0}function cc(e,n){e=w(e),n=w(n);var r=0,o=0;r=Y8(e)|0;do if((r&2147483647)>>>0<=2139095040){if(o=Y8(n)|0,(o&2147483647)>>>0<=2139095040)if((o^r|0)<0){e=(r|0)<0?e:n;break}else{e=e>2]=e,t[j>>2]|0|0}function V4(e,n){e=w(e),n=w(n);var r=0,o=0,s=0,l=0,d=0,_=0,y=0,k=0;l=(D[j>>2]=e,t[j>>2]|0),_=(D[j>>2]=n,t[j>>2]|0),r=l>>>23&255,d=_>>>23&255,y=l&-2147483648,s=_<<1;e:do if((s|0)!=0?!((r|0)==255|((kL(n)|0)&2147483647)>>>0>2139095040):0){if(o=l<<1,o>>>0<=s>>>0)return n=w(e*w(0)),w((o|0)==(s|0)?n:e);if(r)o=l&8388607|8388608;else{if(r=l<<9,(r|0)>-1){o=r,r=0;do r=r+-1|0,o=o<<1;while((o|0)>-1)}else r=0;o=l<<1-r}if(d)_=_&8388607|8388608;else{if(l=_<<9,(l|0)>-1){s=0;do s=s+-1|0,l=l<<1;while((l|0)>-1)}else s=0;d=s,_=_<<1-s}s=o-_|0,l=(s|0)>-1;t:do if((r|0)>(d|0)){for(;;){if(l)if(s)o=s;else break;if(o=o<<1,r=r+-1|0,s=o-_|0,l=(s|0)>-1,(r|0)<=(d|0))break t}n=w(e*w(0));break e}while(0);if(l)if(s)o=s;else{n=w(e*w(0));break}if(o>>>0<8388608)do o=o<<1,r=r+-1|0;while(o>>>0<8388608);(r|0)>0?r=o+-8388608|r<<23:r=o>>>(1-r|0),n=(t[j>>2]=r|y,w(D[j>>2]))}else k=3;while(0);return(k|0)==3&&(n=w(e*n),n=w(n/n)),w(n)}function kL(e){return e=w(e),D[j>>2]=e,t[j>>2]|0|0}function AL(e,n){return e=e|0,n=n|0,q8(t[582]|0,e,n)|0}function $n(e){e=e|0,_n()}function da(e){e=e|0}function OL(e,n){return e=e|0,n=n|0,0}function IL(e){return e=e|0,($8(e+4|0)|0)==-1?(Nl[t[(t[e>>2]|0)+8>>2]&127](e),e=1):e=0,e|0}function $8(e){e=e|0;var n=0;return n=t[e>>2]|0,t[e>>2]=n+-1,n+-1|0}function Tf(e){e=e|0,IL(e)|0&&PL(e)}function PL(e){e=e|0;var n=0;n=e+8|0,((t[n>>2]|0)!=0?($8(n)|0)!=-1:0)||Nl[t[(t[e>>2]|0)+16>>2]&127](e)}function Tt(e){e=e|0;var n=0;for(n=(e|0)==0?1:e;e=uh(n)|0,!(e|0);){if(e=FL()|0,!e){e=0;break}fD[e&0]()}return e|0}function K8(e){return e=e|0,Tt(e)|0}function Ve(e){e=e|0,sh(e)}function ML(e){e=e|0,(c[e+11>>0]|0)<0&&Ve(t[e>>2]|0)}function FL(){var e=0;return e=t[2923]|0,t[2923]=e+0,e|0}function LL(){}function fh(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,o=n-o-(r>>>0>e>>>0|0)>>>0,be=o,e-r>>>0|0|0}function Y4(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,r=e+r>>>0,be=n+o+(r>>>0>>0|0)>>>0,r|0|0}function pa(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0,d=0;if(l=e+r|0,n=n&255,(r|0)>=67){for(;e&3;)c[e>>0]=n,e=e+1|0;for(o=l&-4|0,s=o-64|0,d=n|n<<8|n<<16|n<<24;(e|0)<=(s|0);)t[e>>2]=d,t[e+4>>2]=d,t[e+8>>2]=d,t[e+12>>2]=d,t[e+16>>2]=d,t[e+20>>2]=d,t[e+24>>2]=d,t[e+28>>2]=d,t[e+32>>2]=d,t[e+36>>2]=d,t[e+40>>2]=d,t[e+44>>2]=d,t[e+48>>2]=d,t[e+52>>2]=d,t[e+56>>2]=d,t[e+60>>2]=d,e=e+64|0;for(;(e|0)<(o|0);)t[e>>2]=d,e=e+4|0}for(;(e|0)<(l|0);)c[e>>0]=n,e=e+1|0;return l-r|0}function X8(e,n,r){return e=e|0,n=n|0,r=r|0,(r|0)<32?(be=n<>>32-r,e<>>r,e>>>r|(n&(1<>>r-32|0)}function vn(e,n,r){e=e|0,n=n|0,r=r|0;var o=0,s=0,l=0;if((r|0)>=8192)return wo(e|0,n|0,r|0)|0;if(l=e|0,s=e+r|0,(e&3)==(n&3)){for(;e&3;){if(!r)return l|0;c[e>>0]=c[n>>0]|0,e=e+1|0,n=n+1|0,r=r-1|0}for(r=s&-4|0,o=r-64|0;(e|0)<=(o|0);)t[e>>2]=t[n>>2],t[e+4>>2]=t[n+4>>2],t[e+8>>2]=t[n+8>>2],t[e+12>>2]=t[n+12>>2],t[e+16>>2]=t[n+16>>2],t[e+20>>2]=t[n+20>>2],t[e+24>>2]=t[n+24>>2],t[e+28>>2]=t[n+28>>2],t[e+32>>2]=t[n+32>>2],t[e+36>>2]=t[n+36>>2],t[e+40>>2]=t[n+40>>2],t[e+44>>2]=t[n+44>>2],t[e+48>>2]=t[n+48>>2],t[e+52>>2]=t[n+52>>2],t[e+56>>2]=t[n+56>>2],t[e+60>>2]=t[n+60>>2],e=e+64|0,n=n+64|0;for(;(e|0)<(r|0);)t[e>>2]=t[n>>2],e=e+4|0,n=n+4|0}else for(r=s-4|0;(e|0)<(r|0);)c[e>>0]=c[n>>0]|0,c[e+1>>0]=c[n+1>>0]|0,c[e+2>>0]=c[n+2>>0]|0,c[e+3>>0]=c[n+3>>0]|0,e=e+4|0,n=n+4|0;for(;(e|0)<(s|0);)c[e>>0]=c[n>>0]|0,e=e+1|0,n=n+1|0;return l|0}function J8(e){e=e|0;var n=0;return n=c[ce+(e&255)>>0]|0,(n|0)<8?n|0:(n=c[ce+(e>>8&255)>>0]|0,(n|0)<8?n+8|0:(n=c[ce+(e>>16&255)>>0]|0,(n|0)<8?n+16|0:(c[ce+(e>>>24)>>0]|0)+24|0))}function Q8(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0;var l=0,d=0,_=0,y=0,k=0,T=0,P=0,q=0,we=0,le=0;if(T=e,y=n,k=y,d=r,q=o,_=q,!k)return l=(s|0)!=0,_?l?(t[s>>2]=e|0,t[s+4>>2]=n&0,q=0,s=0,be=q,s|0):(q=0,s=0,be=q,s|0):(l&&(t[s>>2]=(T>>>0)%(d>>>0),t[s+4>>2]=0),q=0,s=(T>>>0)/(d>>>0)>>>0,be=q,s|0);l=(_|0)==0;do if(d){if(!l){if(l=(cr(_|0)|0)-(cr(k|0)|0)|0,l>>>0<=31){P=l+1|0,_=31-l|0,n=l-31>>31,d=P,e=T>>>(P>>>0)&n|k<<_,n=k>>>(P>>>0)&n,l=0,_=T<<_;break}return s?(t[s>>2]=e|0,t[s+4>>2]=y|n&0,q=0,s=0,be=q,s|0):(q=0,s=0,be=q,s|0)}if(l=d-1|0,l&d|0){_=(cr(d|0)|0)+33-(cr(k|0)|0)|0,le=64-_|0,P=32-_|0,y=P>>31,we=_-32|0,n=we>>31,d=_,e=P-1>>31&k>>>(we>>>0)|(k<>>(_>>>0))&n,n=n&k>>>(_>>>0),l=T<>>(we>>>0))&y|T<>31;break}return s|0&&(t[s>>2]=l&T,t[s+4>>2]=0),(d|0)==1?(we=y|n&0,le=e|0|0,be=we,le|0):(le=J8(d|0)|0,we=k>>>(le>>>0)|0,le=k<<32-le|T>>>(le>>>0)|0,be=we,le|0)}else{if(l)return s|0&&(t[s>>2]=(k>>>0)%(d>>>0),t[s+4>>2]=0),we=0,le=(k>>>0)/(d>>>0)>>>0,be=we,le|0;if(!T)return s|0&&(t[s>>2]=0,t[s+4>>2]=(k>>>0)%(_>>>0)),we=0,le=(k>>>0)/(_>>>0)>>>0,be=we,le|0;if(l=_-1|0,!(l&_))return s|0&&(t[s>>2]=e|0,t[s+4>>2]=l&k|n&0),we=0,le=k>>>((J8(_|0)|0)>>>0),be=we,le|0;if(l=(cr(_|0)|0)-(cr(k|0)|0)|0,l>>>0<=30){n=l+1|0,_=31-l|0,d=n,e=k<<_|T>>>(n>>>0),n=k>>>(n>>>0),l=0,_=T<<_;break}return s?(t[s>>2]=e|0,t[s+4>>2]=y|n&0,we=0,le=0,be=we,le|0):(we=0,le=0,be=we,le|0)}while(0);if(!d)k=_,y=0,_=0;else{P=r|0|0,T=q|o&0,k=Y4(P|0,T|0,-1,-1)|0,r=be,y=_,_=0;do o=y,y=l>>>31|y<<1,l=_|l<<1,o=e<<1|o>>>31|0,q=e>>>31|n<<1|0,fh(k|0,r|0,o|0,q|0)|0,le=be,we=le>>31|((le|0)<0?-1:0)<<1,_=we&1,e=fh(o|0,q|0,we&P|0,(((le|0)<0?-1:0)>>31|((le|0)<0?-1:0)<<1)&T|0)|0,n=be,d=d-1|0;while((d|0)!=0);k=y,y=0}return d=0,s|0&&(t[s>>2]=e,t[s+4>>2]=n),we=(l|0)>>>31|(k|d)<<1|(d<<1|l>>>31)&0|y,le=(l<<1|0>>>31)&-2|_,be=we,le|0}function $4(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,Q8(e,n,r,o,0)|0}function xf(e){e=e|0;var n=0,r=0;return r=e+15&-16|0,n=t[N>>2]|0,e=n+r|0,(r|0)>0&(e|0)<(n|0)|(e|0)<0?(vr()|0,Os(12),-1):(t[N>>2]=e,((e|0)>(Xn()|0)?(Bn()|0)==0:0)?(t[N>>2]=n,Os(12),-1):n|0)}function Y1(e,n,r){e=e|0,n=n|0,r=r|0;var o=0;if((n|0)<(e|0)&(e|0)<(n+r|0)){for(o=e,n=n+r|0,e=e+r|0;(r|0)>0;)e=e-1|0,n=n-1|0,r=r-1|0,c[e>>0]=c[n>>0]|0;e=o}else vn(e,n,r)|0;return e|0}function K4(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0;var s=0,l=0;return l=h,h=h+16|0,s=l|0,Q8(e,n,r,o,s)|0,h=l,be=t[s+4>>2]|0,t[s>>2]|0|0}function Z8(e){return e=e|0,(e&255)<<24|(e>>8&255)<<16|(e>>16&255)<<8|e>>>24|0}function RL(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,eD[e&1](n|0,r|0,o|0,s|0,l|0)}function NL(e,n,r){e=e|0,n=n|0,r=w(r),tD[e&1](n|0,w(r))}function BL(e,n,r){e=e|0,n=n|0,r=+r,nD[e&31](n|0,+r)}function jL(e,n,r,o){return e=e|0,n=n|0,r=w(r),o=w(o),w(rD[e&0](n|0,w(r),w(o)))}function UL(e,n){e=e|0,n=n|0,Nl[e&127](n|0)}function qL(e,n,r){e=e|0,n=n|0,r=r|0,Bl[e&31](n|0,r|0)}function zL(e,n){return e=e|0,n=n|0,dc[e&31](n|0)|0}function WL(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0,iD[e&1](n|0,+r,+o,s|0)}function HL(e,n,r,o){e=e|0,n=n|0,r=+r,o=+o,CR[e&1](n|0,+r,+o)}function bL(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,dh[e&7](n|0,r|0,o|0)|0}function VL(e,n,r,o){return e=e|0,n=n|0,r=r|0,o=o|0,+TR[e&1](n|0,r|0,o|0)}function YL(e,n){return e=e|0,n=n|0,+oD[e&15](n|0)}function $L(e,n,r){return e=e|0,n=n|0,r=+r,xR[e&1](n|0,+r)|0}function KL(e,n,r){return e=e|0,n=n|0,r=r|0,J4[e&15](n|0,r|0)|0}function XL(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=+o,s=+s,l=l|0,kR[e&1](n|0,r|0,+o,+s,l|0)}function JL(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,d=d|0,AR[e&1](n|0,r|0,o|0,s|0,l|0,d|0)}function QL(e,n,r){return e=e|0,n=n|0,r=r|0,+uD[e&7](n|0,r|0)}function ZL(e){return e=e|0,ph[e&7]()|0}function eR(e,n,r,o,s,l){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,sD[e&1](n|0,r|0,o|0,s|0,l|0)|0}function tR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=+s,OR[e&1](n|0,r|0,o|0,+s)}function nR(e,n,r,o,s,l,d){e=e|0,n=n|0,r=r|0,o=w(o),s=s|0,l=w(l),d=d|0,lD[e&1](n|0,r|0,w(o),s|0,w(l),d|0)}function rR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,X1[e&15](n|0,r|0,o|0)}function iR(e){e=e|0,fD[e&0]()}function oR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o,cD[e&15](n|0,r|0,+o)}function uR(e,n,r){return e=e|0,n=+n,r=+r,IR[e&1](+n,+r)|0}function sR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,Q4[e&15](n|0,r|0,o|0,s|0)}function lR(e,n,r,o,s){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,pt(0)}function fR(e,n){e=e|0,n=w(n),pt(1)}function Lo(e,n){e=e|0,n=+n,pt(2)}function cR(e,n,r){return e=e|0,n=w(n),r=w(r),pt(3),tt}function tn(e){e=e|0,pt(4)}function $1(e,n){e=e|0,n=n|0,pt(5)}function tu(e){return e=e|0,pt(6),0}function aR(e,n,r,o){e=e|0,n=+n,r=+r,o=o|0,pt(7)}function dR(e,n,r){e=e|0,n=+n,r=+r,pt(8)}function pR(e,n,r){return e=e|0,n=n|0,r=r|0,pt(9),0}function hR(e,n,r){return e=e|0,n=n|0,r=r|0,pt(10),0}function ac(e){return e=e|0,pt(11),0}function mR(e,n){return e=e|0,n=+n,pt(12),0}function K1(e,n){return e=e|0,n=n|0,pt(13),0}function vR(e,n,r,o,s){e=e|0,n=n|0,r=+r,o=+o,s=s|0,pt(14)}function gR(e,n,r,o,s,l){e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,l=l|0,pt(15)}function X4(e,n){return e=e|0,n=n|0,pt(16),0}function _R(){return pt(17),0}function yR(e,n,r,o,s){return e=e|0,n=n|0,r=r|0,o=o|0,s=s|0,pt(18),0}function wR(e,n,r,o){e=e|0,n=n|0,r=r|0,o=+o,pt(19)}function DR(e,n,r,o,s,l){e=e|0,n=n|0,r=w(r),o=o|0,s=w(s),l=l|0,pt(20)}function ah(e,n,r){e=e|0,n=n|0,r=r|0,pt(21)}function ER(){pt(22)}function ha(e,n,r){e=e|0,n=n|0,r=+r,pt(23)}function SR(e,n){return e=+e,n=+n,pt(24),0}function ma(e,n,r,o){e=e|0,n=n|0,r=r|0,o=o|0,pt(25)}var eD=[lR,_I],tD=[fR,x0],nD=[Lo,Kf,Tl,xl,hf,xo,mf,Wa,Hs,mi,Xf,Rc,Jf,ao,$o,kl,Nc,Al,vf,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo,Lo],rD=[cR],Nl=[tn,da,Km,Xm,es,a_,d_,p_,YA,$A,KA,oI,uI,sI,kF,AF,OF,Sn,Oc,pf,ti,vi,Nm,Uc,r1,Hd,Pl,mv,Av,Kc,Jc,yp,Eg,na,Ug,Yg,u_,k_,q_,J_,a4,Ct,w9,U9,ex,hx,Ix,_0,s7,S7,W7,uk,Dk,Wk,Qk,tA,_A,DA,jA,JA,eO,gO,RO,d1,vP,YP,lM,SM,GM,uF,gF,wF,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn,tn],Bl=[$1,ja,Ua,$f,gu,co,qa,Ws,za,Mc,Fc,Lc,po,Ce,ze,Et,on,sr,mn,Zf,gd,xd,H9,rx,ck,yP,HO,C8,$1,$1,$1,$1],dc=[tu,iL,Ba,m,b,ee,Ye,Ze,ut,In,jr,gi,Pm,Ha,Ya,Fx,Tk,wO,SP,Qo,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu,tu],iD=[aR,Sd],CR=[dR,zA],dh=[pR,j8,oL,lL,Gv,P_,a7,kM],TR=[hR,Op],oD=[ac,_i,Re,pr,Cd,ho,bs,$a,Td,qc,ac,ac,ac,ac,ac,ac],xR=[mR,Kk],J4=[K1,OL,vd,Vc,_v,ig,pg,f_,H_,_x,Xu,dM,K1,K1,K1,K1],kR=[vR,iv],AR=[gR,KM],uD=[X4,Hr,Ka,kd,Xa,Jg,X4,X4],ph=[_R,Ja,Z0,g0,oA,TA,iO,CF],sD=[yR,or],OR=[wR,m4],lD=[DR,Bc],X1=[ah,S,A0,Vn,ni,Mv,Tg,dn,C9,fo,zI,JP,cF,ah,ah,ah],fD=[ER],cD=[ha,Ic,vu,Pc,Qu,Qf,k0,v,W1,k7,Gk,ha,ha,ha,ha,ha],IR=[SR,GA],Q4=[ma,Fg,zx,V7,Lk,aA,PA,aO,qO,OP,RF,ma,ma,ma,ma,ma];return{_llvm_bswap_i32:Z8,dynCall_idd:uR,dynCall_i:ZL,_i64Subtract:fh,___udivdi3:$4,dynCall_vif:NL,setThrew:vl,dynCall_viii:rR,_bitshift64Lshr:ch,_bitshift64Shl:X8,dynCall_vi:UL,dynCall_viiddi:XL,dynCall_diii:VL,dynCall_iii:KL,_memset:pa,_sbrk:xf,_memcpy:vn,__GLOBAL__sub_I_Yoga_cpp:t0,dynCall_vii:qL,___uremdi3:K4,dynCall_vid:BL,stackAlloc:zi,_nbind_init:VF,getTempRet0:fu,dynCall_di:YL,dynCall_iid:$L,setTempRet0:gl,_i64Add:Y4,dynCall_fiff:jL,dynCall_iiii:bL,_emscripten_get_global_libc:rL,dynCall_viid:oR,dynCall_viiid:tR,dynCall_viififi:nR,dynCall_ii:zL,__GLOBAL__sub_I_Binding_cc:lP,dynCall_viiii:sR,dynCall_iiiiii:eR,stackSave:lu,dynCall_viiiii:RL,__GLOBAL__sub_I_nbind_cc:Gs,dynCall_vidd:HL,_free:sh,runPostSets:LL,dynCall_viiiiii:JL,establishStackSpace:O0,_memmove:Y1,stackRestore:Ho,_malloc:uh,__GLOBAL__sub_I_common_cc:AO,dynCall_viddi:WL,dynCall_dii:QL,dynCall_v:iR}}(Module.asmGlobalArg,Module.asmLibraryArg,buffer),_llvm_bswap_i32=Module._llvm_bswap_i32=asm._llvm_bswap_i32,getTempRet0=Module.getTempRet0=asm.getTempRet0,___udivdi3=Module.___udivdi3=asm.___udivdi3,setThrew=Module.setThrew=asm.setThrew,_bitshift64Lshr=Module._bitshift64Lshr=asm._bitshift64Lshr,_bitshift64Shl=Module._bitshift64Shl=asm._bitshift64Shl,_memset=Module._memset=asm._memset,_sbrk=Module._sbrk=asm._sbrk,_memcpy=Module._memcpy=asm._memcpy,stackAlloc=Module.stackAlloc=asm.stackAlloc,___uremdi3=Module.___uremdi3=asm.___uremdi3,_nbind_init=Module._nbind_init=asm._nbind_init,_i64Subtract=Module._i64Subtract=asm._i64Subtract,setTempRet0=Module.setTempRet0=asm.setTempRet0,_i64Add=Module._i64Add=asm._i64Add,_emscripten_get_global_libc=Module._emscripten_get_global_libc=asm._emscripten_get_global_libc,__GLOBAL__sub_I_Yoga_cpp=Module.__GLOBAL__sub_I_Yoga_cpp=asm.__GLOBAL__sub_I_Yoga_cpp,__GLOBAL__sub_I_Binding_cc=Module.__GLOBAL__sub_I_Binding_cc=asm.__GLOBAL__sub_I_Binding_cc,stackSave=Module.stackSave=asm.stackSave,__GLOBAL__sub_I_nbind_cc=Module.__GLOBAL__sub_I_nbind_cc=asm.__GLOBAL__sub_I_nbind_cc,_free=Module._free=asm._free,runPostSets=Module.runPostSets=asm.runPostSets,establishStackSpace=Module.establishStackSpace=asm.establishStackSpace,_memmove=Module._memmove=asm._memmove,stackRestore=Module.stackRestore=asm.stackRestore,_malloc=Module._malloc=asm._malloc,__GLOBAL__sub_I_common_cc=Module.__GLOBAL__sub_I_common_cc=asm.__GLOBAL__sub_I_common_cc,dynCall_viiiii=Module.dynCall_viiiii=asm.dynCall_viiiii,dynCall_vif=Module.dynCall_vif=asm.dynCall_vif,dynCall_vid=Module.dynCall_vid=asm.dynCall_vid,dynCall_fiff=Module.dynCall_fiff=asm.dynCall_fiff,dynCall_vi=Module.dynCall_vi=asm.dynCall_vi,dynCall_vii=Module.dynCall_vii=asm.dynCall_vii,dynCall_ii=Module.dynCall_ii=asm.dynCall_ii,dynCall_viddi=Module.dynCall_viddi=asm.dynCall_viddi,dynCall_vidd=Module.dynCall_vidd=asm.dynCall_vidd,dynCall_iiii=Module.dynCall_iiii=asm.dynCall_iiii,dynCall_diii=Module.dynCall_diii=asm.dynCall_diii,dynCall_di=Module.dynCall_di=asm.dynCall_di,dynCall_iid=Module.dynCall_iid=asm.dynCall_iid,dynCall_iii=Module.dynCall_iii=asm.dynCall_iii,dynCall_viiddi=Module.dynCall_viiddi=asm.dynCall_viiddi,dynCall_viiiiii=Module.dynCall_viiiiii=asm.dynCall_viiiiii,dynCall_dii=Module.dynCall_dii=asm.dynCall_dii,dynCall_i=Module.dynCall_i=asm.dynCall_i,dynCall_iiiiii=Module.dynCall_iiiiii=asm.dynCall_iiiiii,dynCall_viiid=Module.dynCall_viiid=asm.dynCall_viiid,dynCall_viififi=Module.dynCall_viififi=asm.dynCall_viififi,dynCall_viii=Module.dynCall_viii=asm.dynCall_viii,dynCall_v=Module.dynCall_v=asm.dynCall_v,dynCall_viid=Module.dynCall_viid=asm.dynCall_viid,dynCall_idd=Module.dynCall_idd=asm.dynCall_idd,dynCall_viiii=Module.dynCall_viiii=asm.dynCall_viiii;Runtime.stackAlloc=Module.stackAlloc,Runtime.stackSave=Module.stackSave,Runtime.stackRestore=Module.stackRestore,Runtime.establishStackSpace=Module.establishStackSpace,Runtime.setTempRet0=Module.setTempRet0,Runtime.getTempRet0=Module.getTempRet0,Module.asm=asm;function ExitStatus(i){this.name="ExitStatus",this.message="Program terminated with exit("+i+")",this.status=i}ExitStatus.prototype=new Error,ExitStatus.prototype.constructor=ExitStatus;var initialStackTop,preloadStartTime=null,calledMain=!1;dependenciesFulfilled=function i(){Module.calledRun||run(),Module.calledRun||(dependenciesFulfilled=i)},Module.callMain=Module.callMain=function(u){u=u||[],ensureInitRuntime();var f=u.length+1;function c(){for(var x=0;x<4-1;x++)g.push(0)}var g=[allocate(intArrayFromString(Module.thisProgram),"i8",ALLOC_NORMAL)];c();for(var t=0;t0||(preRun(),runDependencies>0)||Module.calledRun)return;function u(){Module.calledRun||(Module.calledRun=!0,!ABORT&&(ensureInitRuntime(),preMain(),Module.onRuntimeInitialized&&Module.onRuntimeInitialized(),Module._main&&shouldRunNow&&Module.callMain(i),postRun()))}Module.setStatus?(Module.setStatus("Running..."),setTimeout(function(){setTimeout(function(){Module.setStatus("")},1),u()},1)):u()}Module.run=Module.run=run;function exit(i,u){u&&Module.noExitRuntime||(Module.noExitRuntime||(ABORT=!0,EXITSTATUS=i,STACKTOP=initialStackTop,exitRuntime(),Module.onExit&&Module.onExit(i)),ENVIRONMENT_IS_NODE&&process.exit(i),Module.quit(i,new ExitStatus(i)))}Module.exit=Module.exit=exit;var abortDecorators=[];function abort(i){Module.onAbort&&Module.onAbort(i),i!==void 0?(Module.print(i),Module.printErr(i),i=JSON.stringify(i)):i="",ABORT=!0,EXITSTATUS=1;var u=` -If this abort() is unexpected, build with -s ASSERTIONS=1 which can give more information.`,f="abort("+i+") at "+stackTrace()+u;throw abortDecorators&&abortDecorators.forEach(function(c){f=c(f,i)}),f}if(Module.abort=Module.abort=abort,Module.preInit)for(typeof Module.preInit=="function"&&(Module.preInit=[Module.preInit]);Module.preInit.length>0;)Module.preInit.pop()();var shouldRunNow=!0;Module.noInitialRun&&(shouldRunNow=!1),run()})});var hc=Me((hb,vE)=>{"use strict";var wN=hE(),DN=mE(),Py=!1,My=null;DN({},function(i,u){if(!Py){if(Py=!0,i)throw i;My=u}});if(!Py)throw new Error("Failed to load the yoga module - it needed to be loaded synchronously, but didn't");vE.exports=wN(My.bind,My.lib)});var _E=Me((mb,gE)=>{"use strict";gE.exports=({onlyFirst:i=!1}={})=>{let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,i?void 0:"g")}});var Fy=Me((vb,yE)=>{"use strict";var EN=_E();yE.exports=i=>typeof i=="string"?i.replace(EN(),""):i});var Ry=Me((gb,Ly)=>{"use strict";var wE=i=>Number.isNaN(i)?!1:i>=4352&&(i<=4447||i===9001||i===9002||11904<=i&&i<=12871&&i!==12351||12880<=i&&i<=19903||19968<=i&&i<=42182||43360<=i&&i<=43388||44032<=i&&i<=55203||63744<=i&&i<=64255||65040<=i&&i<=65049||65072<=i&&i<=65131||65281<=i&&i<=65376||65504<=i&&i<=65510||110592<=i&&i<=110593||127488<=i&&i<=127569||131072<=i&&i<=262141);Ly.exports=wE;Ly.exports.default=wE});var EE=Me((_b,DE)=>{"use strict";DE.exports=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F|\uD83D\uDC68(?:\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68\uD83C\uDFFB|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|[\u2695\u2696\u2708]\uFE0F|\uD83D[\uDC66\uDC67]|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708])\uFE0F|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C[\uDFFB-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)\uD83C\uDFFB|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB\uDFFC])|\uD83D\uDC69(?:\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D\uD83D\uDC69)(?:\uD83C[\uDFFB-\uDFFD])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83C\uDFF4\u200D\u2620)\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDF6\uD83C\uDDE6|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDBB\uDDD2-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5\uDEEB\uDEEC\uDEF4-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFA\uDFE0-\uDFEB]|\uD83E[\uDD0D-\uDD3A\uDD3C-\uDD45\uDD47-\uDD71\uDD73-\uDD76\uDD7A-\uDDA2\uDDA5-\uDDAA\uDDAE-\uDDCA\uDDCD-\uDDFF\uDE70-\uDE73\uDE78-\uDE7A\uDE80-\uDE82\uDE90-\uDE95])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g}});var Mh=Me((yb,Ny)=>{"use strict";var SN=Fy(),CN=Ry(),TN=EE(),SE=i=>{if(i=i.replace(TN()," "),typeof i!="string"||i.length===0)return 0;i=SN(i);let u=0;for(let f=0;f=127&&c<=159||c>=768&&c<=879||(c>65535&&f++,u+=CN(c)?2:1)}return u};Ny.exports=SE;Ny.exports.default=SE});var jy=Me((wb,By)=>{"use strict";var xN=Mh(),CE=i=>{let u=0;for(let f of i.split(` -`))u=Math.max(u,xN(f));return u};By.exports=CE;By.exports.default=CE});var TE=Me(a2=>{"use strict";var kN=a2&&a2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(a2,"__esModule",{value:!0});var AN=kN(jy()),Uy={};a2.default=i=>{if(i.length===0)return{width:0,height:0};if(Uy[i])return Uy[i];let u=AN.default(i),f=i.split(` -`).length;return Uy[i]={width:u,height:f},{width:u,height:f}}});var xE=Me(d2=>{"use strict";var ON=d2&&d2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(d2,"__esModule",{value:!0});var hr=ON(hc()),IN=(i,u)=>{"position"in u&&i.setPositionType(u.position==="absolute"?hr.default.POSITION_TYPE_ABSOLUTE:hr.default.POSITION_TYPE_RELATIVE)},PN=(i,u)=>{"marginLeft"in u&&i.setMargin(hr.default.EDGE_START,u.marginLeft||0),"marginRight"in u&&i.setMargin(hr.default.EDGE_END,u.marginRight||0),"marginTop"in u&&i.setMargin(hr.default.EDGE_TOP,u.marginTop||0),"marginBottom"in u&&i.setMargin(hr.default.EDGE_BOTTOM,u.marginBottom||0)},MN=(i,u)=>{"paddingLeft"in u&&i.setPadding(hr.default.EDGE_LEFT,u.paddingLeft||0),"paddingRight"in u&&i.setPadding(hr.default.EDGE_RIGHT,u.paddingRight||0),"paddingTop"in u&&i.setPadding(hr.default.EDGE_TOP,u.paddingTop||0),"paddingBottom"in u&&i.setPadding(hr.default.EDGE_BOTTOM,u.paddingBottom||0)},FN=(i,u)=>{var f;"flexGrow"in u&&i.setFlexGrow((f=u.flexGrow)!==null&&f!==void 0?f:0),"flexShrink"in u&&i.setFlexShrink(typeof u.flexShrink=="number"?u.flexShrink:1),"flexDirection"in u&&(u.flexDirection==="row"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_ROW),u.flexDirection==="row-reverse"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_ROW_REVERSE),u.flexDirection==="column"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_COLUMN),u.flexDirection==="column-reverse"&&i.setFlexDirection(hr.default.FLEX_DIRECTION_COLUMN_REVERSE)),"flexBasis"in u&&(typeof u.flexBasis=="number"?i.setFlexBasis(u.flexBasis):typeof u.flexBasis=="string"?i.setFlexBasisPercent(Number.parseInt(u.flexBasis,10)):i.setFlexBasis(NaN)),"alignItems"in u&&((u.alignItems==="stretch"||!u.alignItems)&&i.setAlignItems(hr.default.ALIGN_STRETCH),u.alignItems==="flex-start"&&i.setAlignItems(hr.default.ALIGN_FLEX_START),u.alignItems==="center"&&i.setAlignItems(hr.default.ALIGN_CENTER),u.alignItems==="flex-end"&&i.setAlignItems(hr.default.ALIGN_FLEX_END)),"alignSelf"in u&&((u.alignSelf==="auto"||!u.alignSelf)&&i.setAlignSelf(hr.default.ALIGN_AUTO),u.alignSelf==="flex-start"&&i.setAlignSelf(hr.default.ALIGN_FLEX_START),u.alignSelf==="center"&&i.setAlignSelf(hr.default.ALIGN_CENTER),u.alignSelf==="flex-end"&&i.setAlignSelf(hr.default.ALIGN_FLEX_END)),"justifyContent"in u&&((u.justifyContent==="flex-start"||!u.justifyContent)&&i.setJustifyContent(hr.default.JUSTIFY_FLEX_START),u.justifyContent==="center"&&i.setJustifyContent(hr.default.JUSTIFY_CENTER),u.justifyContent==="flex-end"&&i.setJustifyContent(hr.default.JUSTIFY_FLEX_END),u.justifyContent==="space-between"&&i.setJustifyContent(hr.default.JUSTIFY_SPACE_BETWEEN),u.justifyContent==="space-around"&&i.setJustifyContent(hr.default.JUSTIFY_SPACE_AROUND))},LN=(i,u)=>{var f,c;"width"in u&&(typeof u.width=="number"?i.setWidth(u.width):typeof u.width=="string"?i.setWidthPercent(Number.parseInt(u.width,10)):i.setWidthAuto()),"height"in u&&(typeof u.height=="number"?i.setHeight(u.height):typeof u.height=="string"?i.setHeightPercent(Number.parseInt(u.height,10)):i.setHeightAuto()),"minWidth"in u&&(typeof u.minWidth=="string"?i.setMinWidthPercent(Number.parseInt(u.minWidth,10)):i.setMinWidth((f=u.minWidth)!==null&&f!==void 0?f:0)),"minHeight"in u&&(typeof u.minHeight=="string"?i.setMinHeightPercent(Number.parseInt(u.minHeight,10)):i.setMinHeight((c=u.minHeight)!==null&&c!==void 0?c:0))},RN=(i,u)=>{"display"in u&&i.setDisplay(u.display==="flex"?hr.default.DISPLAY_FLEX:hr.default.DISPLAY_NONE)},NN=(i,u)=>{if("borderStyle"in u){let f=typeof u.borderStyle=="string"?1:0;i.setBorder(hr.default.EDGE_TOP,f),i.setBorder(hr.default.EDGE_BOTTOM,f),i.setBorder(hr.default.EDGE_LEFT,f),i.setBorder(hr.default.EDGE_RIGHT,f)}};d2.default=(i,u={})=>{IN(i,u),PN(i,u),MN(i,u),FN(i,u),LN(i,u),RN(i,u),NN(i,u)}});var AE=Me((Sb,kE)=>{"use strict";kE.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var qy=Me((Cb,OE)=>{var p2=AE(),IE={};for(let i of Object.keys(p2))IE[p2[i]]=i;var Xt={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};OE.exports=Xt;for(let i of Object.keys(Xt)){if(!("channels"in Xt[i]))throw new Error("missing channels property: "+i);if(!("labels"in Xt[i]))throw new Error("missing channel labels property: "+i);if(Xt[i].labels.length!==Xt[i].channels)throw new Error("channel and label counts mismatch: "+i);let{channels:u,labels:f}=Xt[i];delete Xt[i].channels,delete Xt[i].labels,Object.defineProperty(Xt[i],"channels",{value:u}),Object.defineProperty(Xt[i],"labels",{value:f})}Xt.rgb.hsl=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.min(u,f,c),t=Math.max(u,f,c),C=t-g,A,x;t===g?A=0:u===t?A=(f-c)/C:f===t?A=2+(c-u)/C:c===t&&(A=4+(u-f)/C),A=Math.min(A*60,360),A<0&&(A+=360);let D=(g+t)/2;return t===g?x=0:D<=.5?x=C/(t+g):x=C/(2-t-g),[A,x*100,D*100]};Xt.rgb.hsv=function(i){let u,f,c,g,t,C=i[0]/255,A=i[1]/255,x=i[2]/255,D=Math.max(C,A,x),L=D-Math.min(C,A,x),N=function(j){return(D-j)/6/L+1/2};return L===0?(g=0,t=0):(t=L/D,u=N(C),f=N(A),c=N(x),C===D?g=c-f:A===D?g=1/3+u-c:x===D&&(g=2/3+f-u),g<0?g+=1:g>1&&(g-=1)),[g*360,t*100,D*100]};Xt.rgb.hwb=function(i){let u=i[0],f=i[1],c=i[2],g=Xt.rgb.hsl(i)[0],t=1/255*Math.min(u,Math.min(f,c));return c=1-1/255*Math.max(u,Math.max(f,c)),[g,t*100,c*100]};Xt.rgb.cmyk=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.min(1-u,1-f,1-c),t=(1-u-g)/(1-g)||0,C=(1-f-g)/(1-g)||0,A=(1-c-g)/(1-g)||0;return[t*100,C*100,A*100,g*100]};function BN(i,u){return(i[0]-u[0])**2+(i[1]-u[1])**2+(i[2]-u[2])**2}Xt.rgb.keyword=function(i){let u=IE[i];if(u)return u;let f=Infinity,c;for(let g of Object.keys(p2)){let t=p2[g],C=BN(i,t);C.04045?((u+.055)/1.055)**2.4:u/12.92,f=f>.04045?((f+.055)/1.055)**2.4:f/12.92,c=c>.04045?((c+.055)/1.055)**2.4:c/12.92;let g=u*.4124+f*.3576+c*.1805,t=u*.2126+f*.7152+c*.0722,C=u*.0193+f*.1192+c*.9505;return[g*100,t*100,C*100]};Xt.rgb.lab=function(i){let u=Xt.rgb.xyz(i),f=u[0],c=u[1],g=u[2];f/=95.047,c/=100,g/=108.883,f=f>.008856?f**(1/3):7.787*f+16/116,c=c>.008856?c**(1/3):7.787*c+16/116,g=g>.008856?g**(1/3):7.787*g+16/116;let t=116*c-16,C=500*(f-c),A=200*(c-g);return[t,C,A]};Xt.hsl.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100,g,t,C;if(f===0)return C=c*255,[C,C,C];c<.5?g=c*(1+f):g=c+f-c*f;let A=2*c-g,x=[0,0,0];for(let D=0;D<3;D++)t=u+1/3*-(D-1),t<0&&t++,t>1&&t--,6*t<1?C=A+(g-A)*6*t:2*t<1?C=g:3*t<2?C=A+(g-A)*(2/3-t)*6:C=A,x[D]=C*255;return x};Xt.hsl.hsv=function(i){let u=i[0],f=i[1]/100,c=i[2]/100,g=f,t=Math.max(c,.01);c*=2,f*=c<=1?c:2-c,g*=t<=1?t:2-t;let C=(c+f)/2,A=c===0?2*g/(t+g):2*f/(c+f);return[u,A*100,C*100]};Xt.hsv.rgb=function(i){let u=i[0]/60,f=i[1]/100,c=i[2]/100,g=Math.floor(u)%6,t=u-Math.floor(u),C=255*c*(1-f),A=255*c*(1-f*t),x=255*c*(1-f*(1-t));switch(c*=255,g){case 0:return[c,x,C];case 1:return[A,c,C];case 2:return[C,c,x];case 3:return[C,A,c];case 4:return[x,C,c];case 5:return[c,C,A]}};Xt.hsv.hsl=function(i){let u=i[0],f=i[1]/100,c=i[2]/100,g=Math.max(c,.01),t,C;C=(2-f)*c;let A=(2-f)*g;return t=f*g,t/=A<=1?A:2-A,t=t||0,C/=2,[u,t*100,C*100]};Xt.hwb.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100,g=f+c,t;g>1&&(f/=g,c/=g);let C=Math.floor(6*u),A=1-c;t=6*u-C,(C&1)!=0&&(t=1-t);let x=f+t*(A-f),D,L,N;switch(C){default:case 6:case 0:D=A,L=x,N=f;break;case 1:D=x,L=A,N=f;break;case 2:D=f,L=A,N=x;break;case 3:D=f,L=x,N=A;break;case 4:D=x,L=f,N=A;break;case 5:D=A,L=f,N=x;break}return[D*255,L*255,N*255]};Xt.cmyk.rgb=function(i){let u=i[0]/100,f=i[1]/100,c=i[2]/100,g=i[3]/100,t=1-Math.min(1,u*(1-g)+g),C=1-Math.min(1,f*(1-g)+g),A=1-Math.min(1,c*(1-g)+g);return[t*255,C*255,A*255]};Xt.xyz.rgb=function(i){let u=i[0]/100,f=i[1]/100,c=i[2]/100,g,t,C;return g=u*3.2406+f*-1.5372+c*-.4986,t=u*-.9689+f*1.8758+c*.0415,C=u*.0557+f*-.204+c*1.057,g=g>.0031308?1.055*g**(1/2.4)-.055:g*12.92,t=t>.0031308?1.055*t**(1/2.4)-.055:t*12.92,C=C>.0031308?1.055*C**(1/2.4)-.055:C*12.92,g=Math.min(Math.max(0,g),1),t=Math.min(Math.max(0,t),1),C=Math.min(Math.max(0,C),1),[g*255,t*255,C*255]};Xt.xyz.lab=function(i){let u=i[0],f=i[1],c=i[2];u/=95.047,f/=100,c/=108.883,u=u>.008856?u**(1/3):7.787*u+16/116,f=f>.008856?f**(1/3):7.787*f+16/116,c=c>.008856?c**(1/3):7.787*c+16/116;let g=116*f-16,t=500*(u-f),C=200*(f-c);return[g,t,C]};Xt.lab.xyz=function(i){let u=i[0],f=i[1],c=i[2],g,t,C;t=(u+16)/116,g=f/500+t,C=t-c/200;let A=t**3,x=g**3,D=C**3;return t=A>.008856?A:(t-16/116)/7.787,g=x>.008856?x:(g-16/116)/7.787,C=D>.008856?D:(C-16/116)/7.787,g*=95.047,t*=100,C*=108.883,[g,t,C]};Xt.lab.lch=function(i){let u=i[0],f=i[1],c=i[2],g;g=Math.atan2(c,f)*360/2/Math.PI,g<0&&(g+=360);let C=Math.sqrt(f*f+c*c);return[u,C,g]};Xt.lch.lab=function(i){let u=i[0],f=i[1],g=i[2]/360*2*Math.PI,t=f*Math.cos(g),C=f*Math.sin(g);return[u,t,C]};Xt.rgb.ansi16=function(i,u=null){let[f,c,g]=i,t=u===null?Xt.rgb.hsv(i)[2]:u;if(t=Math.round(t/50),t===0)return 30;let C=30+(Math.round(g/255)<<2|Math.round(c/255)<<1|Math.round(f/255));return t===2&&(C+=60),C};Xt.hsv.ansi16=function(i){return Xt.rgb.ansi16(Xt.hsv.rgb(i),i[2])};Xt.rgb.ansi256=function(i){let u=i[0],f=i[1],c=i[2];return u===f&&f===c?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(f/255*5)+Math.round(c/255*5)};Xt.ansi16.rgb=function(i){let u=i%10;if(u===0||u===7)return i>50&&(u+=3.5),u=u/10.5*255,[u,u,u];let f=(~~(i>50)+1)*.5,c=(u&1)*f*255,g=(u>>1&1)*f*255,t=(u>>2&1)*f*255;return[c,g,t]};Xt.ansi256.rgb=function(i){if(i>=232){let t=(i-232)*10+8;return[t,t,t]}i-=16;let u,f=Math.floor(i/36)/5*255,c=Math.floor((u=i%36)/6)/5*255,g=u%6/5*255;return[f,c,g]};Xt.rgb.hex=function(i){let f=(((Math.round(i[0])&255)<<16)+((Math.round(i[1])&255)<<8)+(Math.round(i[2])&255)).toString(16).toUpperCase();return"000000".substring(f.length)+f};Xt.hex.rgb=function(i){let u=i.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!u)return[0,0,0];let f=u[0];u[0].length===3&&(f=f.split("").map(A=>A+A).join(""));let c=parseInt(f,16),g=c>>16&255,t=c>>8&255,C=c&255;return[g,t,C]};Xt.rgb.hcg=function(i){let u=i[0]/255,f=i[1]/255,c=i[2]/255,g=Math.max(Math.max(u,f),c),t=Math.min(Math.min(u,f),c),C=g-t,A,x;return C<1?A=t/(1-C):A=0,C<=0?x=0:g===u?x=(f-c)/C%6:g===f?x=2+(c-u)/C:x=4+(u-f)/C,x/=6,x%=1,[x*360,C*100,A*100]};Xt.hsl.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=f<.5?2*u*f:2*u*(1-f),g=0;return c<1&&(g=(f-.5*c)/(1-c)),[i[0],c*100,g*100]};Xt.hsv.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=u*f,g=0;return c<1&&(g=(f-c)/(1-c)),[i[0],c*100,g*100]};Xt.hcg.rgb=function(i){let u=i[0]/360,f=i[1]/100,c=i[2]/100;if(f===0)return[c*255,c*255,c*255];let g=[0,0,0],t=u%1*6,C=t%1,A=1-C,x=0;switch(Math.floor(t)){case 0:g[0]=1,g[1]=C,g[2]=0;break;case 1:g[0]=A,g[1]=1,g[2]=0;break;case 2:g[0]=0,g[1]=1,g[2]=C;break;case 3:g[0]=0,g[1]=A,g[2]=1;break;case 4:g[0]=C,g[1]=0,g[2]=1;break;default:g[0]=1,g[1]=0,g[2]=A}return x=(1-f)*c,[(f*g[0]+x)*255,(f*g[1]+x)*255,(f*g[2]+x)*255]};Xt.hcg.hsv=function(i){let u=i[1]/100,f=i[2]/100,c=u+f*(1-u),g=0;return c>0&&(g=u/c),[i[0],g*100,c*100]};Xt.hcg.hsl=function(i){let u=i[1]/100,c=i[2]/100*(1-u)+.5*u,g=0;return c>0&&c<.5?g=u/(2*c):c>=.5&&c<1&&(g=u/(2*(1-c))),[i[0],g*100,c*100]};Xt.hcg.hwb=function(i){let u=i[1]/100,f=i[2]/100,c=u+f*(1-u);return[i[0],(c-u)*100,(1-c)*100]};Xt.hwb.hcg=function(i){let u=i[1]/100,f=i[2]/100,c=1-f,g=c-u,t=0;return g<1&&(t=(c-g)/(1-g)),[i[0],g*100,t*100]};Xt.apple.rgb=function(i){return[i[0]/65535*255,i[1]/65535*255,i[2]/65535*255]};Xt.rgb.apple=function(i){return[i[0]/255*65535,i[1]/255*65535,i[2]/255*65535]};Xt.gray.rgb=function(i){return[i[0]/100*255,i[0]/100*255,i[0]/100*255]};Xt.gray.hsl=function(i){return[0,0,i[0]]};Xt.gray.hsv=Xt.gray.hsl;Xt.gray.hwb=function(i){return[0,100,i[0]]};Xt.gray.cmyk=function(i){return[0,0,0,i[0]]};Xt.gray.lab=function(i){return[i[0],0,0]};Xt.gray.hex=function(i){let u=Math.round(i[0]/100*255)&255,c=((u<<16)+(u<<8)+u).toString(16).toUpperCase();return"000000".substring(c.length)+c};Xt.rgb.gray=function(i){return[(i[0]+i[1]+i[2])/3/255*100]}});var ME=Me((Tb,PE)=>{var Fh=qy();function jN(){let i={},u=Object.keys(Fh);for(let f=u.length,c=0;c{var zy=qy(),WN=ME(),Ca={},HN=Object.keys(zy);function bN(i){let u=function(...f){let c=f[0];return c==null?c:(c.length>1&&(f=c),i(f))};return"conversion"in i&&(u.conversion=i.conversion),u}function GN(i){let u=function(...f){let c=f[0];if(c==null)return c;c.length>1&&(f=c);let g=i(f);if(typeof g=="object")for(let t=g.length,C=0;C{Ca[i]={},Object.defineProperty(Ca[i],"channels",{value:zy[i].channels}),Object.defineProperty(Ca[i],"labels",{value:zy[i].labels});let u=WN(i);Object.keys(u).forEach(c=>{let g=u[c];Ca[i][c]=GN(g),Ca[i][c].raw=bN(g)})});FE.exports=Ca});var Rh=Me((kb,RE)=>{"use strict";var NE=(i,u)=>(...f)=>`[${i(...f)+u}m`,BE=(i,u)=>(...f)=>{let c=i(...f);return`[${38+u};5;${c}m`},jE=(i,u)=>(...f)=>{let c=i(...f);return`[${38+u};2;${c[0]};${c[1]};${c[2]}m`},Lh=i=>i,UE=(i,u,f)=>[i,u,f],Ta=(i,u,f)=>{Object.defineProperty(i,u,{get:()=>{let c=f();return Object.defineProperty(i,u,{value:c,enumerable:!0,configurable:!0}),c},enumerable:!0,configurable:!0})},Wy,xa=(i,u,f,c)=>{Wy===void 0&&(Wy=LE());let g=c?10:0,t={};for(let[C,A]of Object.entries(Wy)){let x=C==="ansi16"?"ansi":C;C===u?t[x]=i(f,g):typeof A=="object"&&(t[x]=i(A[u],g))}return t};function VN(){let i=new Map,u={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};u.color.gray=u.color.blackBright,u.bgColor.bgGray=u.bgColor.bgBlackBright,u.color.grey=u.color.blackBright,u.bgColor.bgGrey=u.bgColor.bgBlackBright;for(let[f,c]of Object.entries(u)){for(let[g,t]of Object.entries(c))u[g]={open:`[${t[0]}m`,close:`[${t[1]}m`},c[g]=u[g],i.set(t[0],t[1]);Object.defineProperty(u,f,{value:c,enumerable:!1})}return Object.defineProperty(u,"codes",{value:i,enumerable:!1}),u.color.close="",u.bgColor.close="",Ta(u.color,"ansi",()=>xa(NE,"ansi16",Lh,!1)),Ta(u.color,"ansi256",()=>xa(BE,"ansi256",Lh,!1)),Ta(u.color,"ansi16m",()=>xa(jE,"rgb",UE,!1)),Ta(u.bgColor,"ansi",()=>xa(NE,"ansi16",Lh,!0)),Ta(u.bgColor,"ansi256",()=>xa(BE,"ansi256",Lh,!0)),Ta(u.bgColor,"ansi16m",()=>xa(jE,"rgb",UE,!0)),u}Object.defineProperty(RE,"exports",{enumerable:!0,get:VN})});var WE=Me((Ab,qE)=>{"use strict";var h2=Mh(),YN=Fy(),$N=Rh(),Hy=new Set(["","\x9B"]),KN=39,zE=i=>`${Hy.values().next().value}[${i}m`,XN=i=>i.split(" ").map(u=>h2(u)),by=(i,u,f)=>{let c=[...u],g=!1,t=h2(YN(i[i.length-1]));for(let[C,A]of c.entries()){let x=h2(A);if(t+x<=f?i[i.length-1]+=A:(i.push(A),t=0),Hy.has(A))g=!0;else if(g&&A==="m"){g=!1;continue}g||(t+=x,t===f&&C0&&i.length>1&&(i[i.length-2]+=i.pop())},JN=i=>{let u=i.split(" "),f=u.length;for(;f>0&&!(h2(u[f-1])>0);)f--;return f===u.length?i:u.slice(0,f).join(" ")+u.slice(f).join("")},QN=(i,u,f={})=>{if(f.trim!==!1&&i.trim()==="")return"";let c="",g="",t,C=XN(i),A=[""];for(let[x,D]of i.split(" ").entries()){f.trim!==!1&&(A[A.length-1]=A[A.length-1].trimLeft());let L=h2(A[A.length-1]);if(x!==0&&(L>=u&&(f.wordWrap===!1||f.trim===!1)&&(A.push(""),L=0),(L>0||f.trim===!1)&&(A[A.length-1]+=" ",L++)),f.hard&&C[x]>u){let N=u-L,j=1+Math.floor((C[x]-N-1)/u);Math.floor((C[x]-1)/u)u&&L>0&&C[x]>0){if(f.wordWrap===!1&&Lu&&f.wordWrap===!1){by(A,D,u);continue}A[A.length-1]+=D}f.trim!==!1&&(A=A.map(JN)),c=A.join(` -`);for(let[x,D]of[...c].entries()){if(g+=D,Hy.has(D)){let N=parseFloat(/\d[^m]*/.exec(c.slice(x,x+4)));t=N===KN?null:N}let L=$N.codes.get(Number(t));t&&L&&(c[x+1]===` -`?g+=zE(L):D===` -`&&(g+=zE(t)))}return g};qE.exports=(i,u,f)=>String(i).normalize().replace(/\r\n/g,` -`).split(` -`).map(c=>QN(c,u,f)).join(` -`)});var GE=Me((Ob,HE)=>{"use strict";var bE="[\uD800-\uDBFF][\uDC00-\uDFFF]",ZN=i=>i&&i.exact?new RegExp(`^${bE}$`):new RegExp(bE,"g");HE.exports=ZN});var Gy=Me((Ib,VE)=>{"use strict";var eB=Ry(),tB=GE(),YE=Rh(),$E=["","\x9B"],Nh=i=>`${$E[0]}[${i}m`,KE=(i,u,f)=>{let c=[];i=[...i];for(let g of i){let t=g;g.match(";")&&(g=g.split(";")[0][0]+"0");let C=YE.codes.get(parseInt(g,10));if(C){let A=i.indexOf(C.toString());A>=0?i.splice(A,1):c.push(Nh(u?C:t))}else if(u){c.push(Nh(0));break}else c.push(Nh(t))}if(u&&(c=c.filter((g,t)=>c.indexOf(g)===t),f!==void 0)){let g=Nh(YE.codes.get(parseInt(f,10)));c=c.reduce((t,C)=>C===g?[C,...t]:[...t,C],[])}return c.join("")};VE.exports=(i,u,f)=>{let c=[...i.normalize()],g=[];f=typeof f=="number"?f:c.length;let t=!1,C,A=0,x="";for(let[D,L]of c.entries()){let N=!1;if($E.includes(L)){let j=/\d[^m]*/.exec(i.slice(D,D+18));C=j&&j.length>0?j[0]:void 0,Au&&A<=f)x+=L;else if(A===u&&!t&&C!==void 0)x=KE(g);else if(A>=f){x+=KE(g,!0,C);break}}return x}});var JE=Me((Pb,XE)=>{"use strict";var Bf=Gy(),nB=Mh();function Bh(i,u,f){if(i.charAt(u)===" ")return u;for(let c=1;c<=3;c++)if(f){if(i.charAt(u+c)===" ")return u+c}else if(i.charAt(u-c)===" ")return u-c;return u}XE.exports=(i,u,f)=>{f=dt({position:"end",preferTruncationOnSpace:!1},f);let{position:c,space:g,preferTruncationOnSpace:t}=f,C="\u2026",A=1;if(typeof i!="string")throw new TypeError(`Expected \`input\` to be a string, got ${typeof i}`);if(typeof u!="number")throw new TypeError(`Expected \`columns\` to be a number, got ${typeof u}`);if(u<1)return"";if(u===1)return C;let x=nB(i);if(x<=u)return i;if(c==="start"){if(t){let D=Bh(i,x-u+1,!0);return C+Bf(i,D,x).trim()}return g===!0&&(C+=" ",A=2),C+Bf(i,x-u+A,x)}if(c==="middle"){g===!0&&(C=" "+C+" ",A=3);let D=Math.floor(u/2);if(t){let L=Bh(i,D),N=Bh(i,x-(u-D)+1,!0);return Bf(i,0,L)+C+Bf(i,N,x).trim()}return Bf(i,0,D)+C+Bf(i,x-(u-D)+A,x)}if(c==="end"){if(t){let D=Bh(i,u-1);return Bf(i,0,D)+C}return g===!0&&(C=" "+C,A=2),Bf(i,0,u-A)+C}throw new Error(`Expected \`options.position\` to be either \`start\`, \`middle\` or \`end\`, got ${c}`)}});var Yy=Me(m2=>{"use strict";var QE=m2&&m2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(m2,"__esModule",{value:!0});var rB=QE(WE()),iB=QE(JE()),Vy={};m2.default=(i,u,f)=>{let c=i+String(u)+String(f);if(Vy[c])return Vy[c];let g=i;if(f==="wrap"&&(g=rB.default(i,u,{trim:!1,hard:!0})),f.startsWith("truncate")){let t="end";f==="truncate-middle"&&(t="middle"),f==="truncate-start"&&(t="start"),g=iB.default(i,u,{position:t})}return Vy[c]=g,g}});var Ky=Me($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});var ZE=i=>{let u="";if(i.childNodes.length>0)for(let f of i.childNodes){let c="";f.nodeName==="#text"?c=f.nodeValue:((f.nodeName==="ink-text"||f.nodeName==="ink-virtual-text")&&(c=ZE(f)),c.length>0&&typeof f.internal_transform=="function"&&(c=f.internal_transform(c))),u+=c}return u};$y.default=ZE});var Xy=Me(Zr=>{"use strict";var v2=Zr&&Zr.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Zr,"__esModule",{value:!0});Zr.setTextNodeValue=Zr.createTextNode=Zr.setStyle=Zr.setAttribute=Zr.removeChildNode=Zr.insertBeforeNode=Zr.appendChildNode=Zr.createNode=Zr.TEXT_NAME=void 0;var oB=v2(hc()),e6=v2(TE()),uB=v2(xE()),sB=v2(Yy()),lB=v2(Ky());Zr.TEXT_NAME="#text";Zr.createNode=i=>{var u;let f={nodeName:i,style:{},attributes:{},childNodes:[],parentNode:null,yogaNode:i==="ink-virtual-text"?void 0:oB.default.Node.create()};return i==="ink-text"&&((u=f.yogaNode)===null||u===void 0||u.setMeasureFunc(fB.bind(null,f))),f};Zr.appendChildNode=(i,u)=>{var f;u.parentNode&&Zr.removeChildNode(u.parentNode,u),u.parentNode=i,i.childNodes.push(u),u.yogaNode&&((f=i.yogaNode)===null||f===void 0||f.insertChild(u.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.insertBeforeNode=(i,u,f)=>{var c,g;u.parentNode&&Zr.removeChildNode(u.parentNode,u),u.parentNode=i;let t=i.childNodes.indexOf(f);if(t>=0){i.childNodes.splice(t,0,u),u.yogaNode&&((c=i.yogaNode)===null||c===void 0||c.insertChild(u.yogaNode,t));return}i.childNodes.push(u),u.yogaNode&&((g=i.yogaNode)===null||g===void 0||g.insertChild(u.yogaNode,i.yogaNode.getChildCount())),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.removeChildNode=(i,u)=>{var f,c;u.yogaNode&&((c=(f=u.parentNode)===null||f===void 0?void 0:f.yogaNode)===null||c===void 0||c.removeChild(u.yogaNode)),u.parentNode=null;let g=i.childNodes.indexOf(u);g>=0&&i.childNodes.splice(g,1),(i.nodeName==="ink-text"||i.nodeName==="ink-virtual-text")&&jh(i)};Zr.setAttribute=(i,u,f)=>{i.attributes[u]=f};Zr.setStyle=(i,u)=>{i.style=u,i.yogaNode&&uB.default(i.yogaNode,u)};Zr.createTextNode=i=>{let u={nodeName:"#text",nodeValue:i,yogaNode:void 0,parentNode:null,style:{}};return Zr.setTextNodeValue(u,i),u};var fB=function(i,u){var f,c;let g=i.nodeName==="#text"?i.nodeValue:lB.default(i),t=e6.default(g);if(t.width<=u||t.width>=1&&u>0&&u<1)return t;let C=(c=(f=i.style)===null||f===void 0?void 0:f.textWrap)!==null&&c!==void 0?c:"wrap",A=sB.default(g,u,C);return e6.default(A)},t6=i=>{var u;if(!(!i||!i.parentNode))return(u=i.yogaNode)!==null&&u!==void 0?u:t6(i.parentNode)},jh=i=>{let u=t6(i);u==null||u.markDirty()};Zr.setTextNodeValue=(i,u)=>{typeof u!="string"&&(u=String(u)),i.nodeValue=u,jh(i)}});var mc=Me((Rb,n6)=>{"use strict";n6.exports={BINARY_TYPES:["nodebuffer","arraybuffer","fragments"],GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),EMPTY_BUFFER:Buffer.alloc(0),NOOP:()=>{}}});var g2=Me((Nb,Jy)=>{"use strict";var{EMPTY_BUFFER:cB}=mc();function r6(i,u){if(i.length===0)return cB;if(i.length===1)return i[0];let f=Buffer.allocUnsafe(u),c=0;for(let g=0;g{"use strict";var l6=Symbol("kDone"),Qy=Symbol("kRun"),f6=class{constructor(u){this[l6]=()=>{this.pending--,this[Qy]()},this.concurrency=u||Infinity,this.jobs=[],this.pending=0}add(u){this.jobs.push(u),this[Qy]()}[Qy](){if(this.pending!==this.concurrency&&this.jobs.length){let u=this.jobs.shift();this.pending++,u(this[l6])}}};s6.exports=f6});var w2=Me((jb,a6)=>{"use strict";var _2=require("zlib"),d6=g2(),aB=c6(),{kStatusCode:p6,NOOP:dB}=mc(),pB=Buffer.from([0,0,255,255]),qh=Symbol("permessage-deflate"),Xl=Symbol("total-length"),y2=Symbol("callback"),jf=Symbol("buffers"),Zy=Symbol("error"),zh,h6=class{constructor(u,f,c){if(this._maxPayload=c|0,this._options=u||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._isServer=!!f,this._deflate=null,this._inflate=null,this.params=null,!zh){let g=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;zh=new aB(g)}}static get extensionName(){return"permessage-deflate"}offer(){let u={};return this._options.serverNoContextTakeover&&(u.server_no_context_takeover=!0),this._options.clientNoContextTakeover&&(u.client_no_context_takeover=!0),this._options.serverMaxWindowBits&&(u.server_max_window_bits=this._options.serverMaxWindowBits),this._options.clientMaxWindowBits?u.client_max_window_bits=this._options.clientMaxWindowBits:this._options.clientMaxWindowBits==null&&(u.client_max_window_bits=!0),u}accept(u){return u=this.normalizeParams(u),this.params=this._isServer?this.acceptAsServer(u):this.acceptAsClient(u),this.params}cleanup(){if(this._inflate&&(this._inflate.close(),this._inflate=null),this._deflate){let u=this._deflate[y2];this._deflate.close(),this._deflate=null,u&&u(new Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(u){let f=this._options,c=u.find(g=>!(f.serverNoContextTakeover===!1&&g.server_no_context_takeover||g.server_max_window_bits&&(f.serverMaxWindowBits===!1||typeof f.serverMaxWindowBits=="number"&&f.serverMaxWindowBits>g.server_max_window_bits)||typeof f.clientMaxWindowBits=="number"&&!g.client_max_window_bits));if(!c)throw new Error("None of the extension offers can be accepted");return f.serverNoContextTakeover&&(c.server_no_context_takeover=!0),f.clientNoContextTakeover&&(c.client_no_context_takeover=!0),typeof f.serverMaxWindowBits=="number"&&(c.server_max_window_bits=f.serverMaxWindowBits),typeof f.clientMaxWindowBits=="number"?c.client_max_window_bits=f.clientMaxWindowBits:(c.client_max_window_bits===!0||f.clientMaxWindowBits===!1)&&delete c.client_max_window_bits,c}acceptAsClient(u){let f=u[0];if(this._options.clientNoContextTakeover===!1&&f.client_no_context_takeover)throw new Error('Unexpected parameter "client_no_context_takeover"');if(!f.client_max_window_bits)typeof this._options.clientMaxWindowBits=="number"&&(f.client_max_window_bits=this._options.clientMaxWindowBits);else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits=="number"&&f.client_max_window_bits>this._options.clientMaxWindowBits)throw new Error('Unexpected or invalid parameter "client_max_window_bits"');return f}normalizeParams(u){return u.forEach(f=>{Object.keys(f).forEach(c=>{let g=f[c];if(g.length>1)throw new Error(`Parameter "${c}" must have only a single value`);if(g=g[0],c==="client_max_window_bits"){if(g!==!0){let t=+g;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${c}": ${g}`);g=t}else if(!this._isServer)throw new TypeError(`Invalid value for parameter "${c}": ${g}`)}else if(c==="server_max_window_bits"){let t=+g;if(!Number.isInteger(t)||t<8||t>15)throw new TypeError(`Invalid value for parameter "${c}": ${g}`);g=t}else if(c==="client_no_context_takeover"||c==="server_no_context_takeover"){if(g!==!0)throw new TypeError(`Invalid value for parameter "${c}": ${g}`)}else throw new Error(`Unknown parameter "${c}"`);f[c]=g})}),u}decompress(u,f,c){zh.add(g=>{this._decompress(u,f,(t,C)=>{g(),c(t,C)})})}compress(u,f,c){zh.add(g=>{this._compress(u,f,(t,C)=>{g(),c(t,C)})})}_decompress(u,f,c){let g=this._isServer?"client":"server";if(!this._inflate){let t=`${g}_max_window_bits`,C=typeof this.params[t]!="number"?_2.Z_DEFAULT_WINDOWBITS:this.params[t];this._inflate=_2.createInflateRaw(zn(dt({},this._options.zlibInflateOptions),{windowBits:C})),this._inflate[qh]=this,this._inflate[Xl]=0,this._inflate[jf]=[],this._inflate.on("error",mB),this._inflate.on("data",m6)}this._inflate[y2]=c,this._inflate.write(u),f&&this._inflate.write(pB),this._inflate.flush(()=>{let t=this._inflate[Zy];if(t){this._inflate.close(),this._inflate=null,c(t);return}let C=d6.concat(this._inflate[jf],this._inflate[Xl]);this._inflate._readableState.endEmitted?(this._inflate.close(),this._inflate=null):(this._inflate[Xl]=0,this._inflate[jf]=[],f&&this.params[`${g}_no_context_takeover`]&&this._inflate.reset()),c(null,C)})}_compress(u,f,c){let g=this._isServer?"server":"client";if(!this._deflate){let t=`${g}_max_window_bits`,C=typeof this.params[t]!="number"?_2.Z_DEFAULT_WINDOWBITS:this.params[t];this._deflate=_2.createDeflateRaw(zn(dt({},this._options.zlibDeflateOptions),{windowBits:C})),this._deflate[Xl]=0,this._deflate[jf]=[],this._deflate.on("error",dB),this._deflate.on("data",hB)}this._deflate[y2]=c,this._deflate.write(u),this._deflate.flush(_2.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let t=d6.concat(this._deflate[jf],this._deflate[Xl]);f&&(t=t.slice(0,t.length-4)),this._deflate[y2]=null,this._deflate[Xl]=0,this._deflate[jf]=[],f&&this.params[`${g}_no_context_takeover`]&&this._deflate.reset(),c(null,t)})}};a6.exports=h6;function hB(i){this[jf].push(i),this[Xl]+=i.length}function m6(i){if(this[Xl]+=i.length,this[qh]._maxPayload<1||this[Xl]<=this[qh]._maxPayload){this[jf].push(i);return}this[Zy]=new RangeError("Max payload size exceeded"),this[Zy][p6]=1009,this.removeListener("data",m6),this.reset()}function mB(i){this[qh]._inflate=null,i[p6]=1007,this[y2](i)}});var t3=Me((Ub,e3)=>{"use strict";function v6(i){return i>=1e3&&i<=1014&&i!==1004&&i!==1005&&i!==1006||i>=3e3&&i<=4999}function g6(i){let u=i.length,f=0;for(;f=u||(i[f+1]&192)!=128||(i[f+2]&192)!=128||i[f]===224&&(i[f+1]&224)==128||i[f]===237&&(i[f+1]&224)==160)return!1;f+=3}else if((i[f]&248)==240){if(f+3>=u||(i[f+1]&192)!=128||(i[f+2]&192)!=128||(i[f+3]&192)!=128||i[f]===240&&(i[f+1]&240)==128||i[f]===244&&i[f+1]>143||i[f]>244)return!1;f+=4}else return!1;return!0}try{let i=require("utf-8-validate");typeof i=="object"&&(i=i.Validation.isValidUTF8),e3.exports={isValidStatusCode:v6,isValidUTF8(u){return u.length<150?g6(u):i(u)}}}catch(i){e3.exports={isValidStatusCode:v6,isValidUTF8:g6}}});var i3=Me((qb,_6)=>{"use strict";var{Writable:vB}=require("stream"),y6=w2(),{BINARY_TYPES:gB,EMPTY_BUFFER:_B,kStatusCode:yB,kWebSocket:wB}=mc(),{concat:n3,toArrayBuffer:DB,unmask:EB}=g2(),{isValidStatusCode:SB,isValidUTF8:w6}=t3(),D2=0,D6=1,E6=2,S6=3,r3=4,CB=5,C6=class extends vB{constructor(u,f,c,g){super();this._binaryType=u||gB[0],this[wB]=void 0,this._extensions=f||{},this._isServer=!!c,this._maxPayload=g|0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._state=D2,this._loop=!1}_write(u,f,c){if(this._opcode===8&&this._state==D2)return c();this._bufferedBytes+=u.length,this._buffers.push(u),this.startLoop(c)}consume(u){if(this._bufferedBytes-=u,u===this._buffers[0].length)return this._buffers.shift();if(u=c.length?f.set(this._buffers.shift(),g):(f.set(new Uint8Array(c.buffer,c.byteOffset,u),g),this._buffers[0]=c.slice(u)),u-=c.length}while(u>0);return f}startLoop(u){let f;this._loop=!0;do switch(this._state){case D2:f=this.getInfo();break;case D6:f=this.getPayloadLength16();break;case E6:f=this.getPayloadLength64();break;case S6:this.getMask();break;case r3:f=this.getData(u);break;default:this._loop=!1;return}while(this._loop);u(f)}getInfo(){if(this._bufferedBytes<2){this._loop=!1;return}let u=this.consume(2);if((u[0]&48)!=0)return this._loop=!1,ii(RangeError,"RSV2 and RSV3 must be clear",!0,1002);let f=(u[0]&64)==64;if(f&&!this._extensions[y6.extensionName])return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(this._fin=(u[0]&128)==128,this._opcode=u[0]&15,this._payloadLength=u[1]&127,this._opcode===0){if(f)return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(!this._fragmented)return this._loop=!1,ii(RangeError,"invalid opcode 0",!0,1002);this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented)return this._loop=!1,ii(RangeError,`invalid opcode ${this._opcode}`,!0,1002);this._compressed=f}else if(this._opcode>7&&this._opcode<11){if(!this._fin)return this._loop=!1,ii(RangeError,"FIN must be set",!0,1002);if(f)return this._loop=!1,ii(RangeError,"RSV1 must be clear",!0,1002);if(this._payloadLength>125)return this._loop=!1,ii(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002)}else return this._loop=!1,ii(RangeError,`invalid opcode ${this._opcode}`,!0,1002);if(!this._fin&&!this._fragmented&&(this._fragmented=this._opcode),this._masked=(u[1]&128)==128,this._isServer){if(!this._masked)return this._loop=!1,ii(RangeError,"MASK must be set",!0,1002)}else if(this._masked)return this._loop=!1,ii(RangeError,"MASK must be clear",!0,1002);if(this._payloadLength===126)this._state=D6;else if(this._payloadLength===127)this._state=E6;else return this.haveLength()}getPayloadLength16(){if(this._bufferedBytes<2){this._loop=!1;return}return this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength()}getPayloadLength64(){if(this._bufferedBytes<8){this._loop=!1;return}let u=this.consume(8),f=u.readUInt32BE(0);return f>Math.pow(2,53-32)-1?(this._loop=!1,ii(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009)):(this._payloadLength=f*Math.pow(2,32)+u.readUInt32BE(4),this.haveLength())}haveLength(){if(this._payloadLength&&this._opcode<8&&(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0))return this._loop=!1,ii(RangeError,"Max payload size exceeded",!1,1009);this._masked?this._state=S6:this._state=r3}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=r3}getData(u){let f=_B;if(this._payloadLength){if(this._bufferedBytes7)return this.controlMessage(f);if(this._compressed){this._state=CB,this.decompress(f,u);return}return f.length&&(this._messageLength=this._totalPayloadLength,this._fragments.push(f)),this.dataMessage()}decompress(u,f){this._extensions[y6.extensionName].decompress(u,this._fin,(g,t)=>{if(g)return f(g);if(t.length){if(this._messageLength+=t.length,this._messageLength>this._maxPayload&&this._maxPayload>0)return f(ii(RangeError,"Max payload size exceeded",!1,1009));this._fragments.push(t)}let C=this.dataMessage();if(C)return f(C);this.startLoop(f)})}dataMessage(){if(this._fin){let u=this._messageLength,f=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let c;this._binaryType==="nodebuffer"?c=n3(f,u):this._binaryType==="arraybuffer"?c=DB(n3(f,u)):c=f,this.emit("message",c)}else{let c=n3(f,u);if(!w6(c))return this._loop=!1,ii(Error,"invalid UTF-8 sequence",!0,1007);this.emit("message",c.toString())}}this._state=D2}controlMessage(u){if(this._opcode===8)if(this._loop=!1,u.length===0)this.emit("conclude",1005,""),this.end();else{if(u.length===1)return ii(RangeError,"invalid payload length 1",!0,1002);{let f=u.readUInt16BE(0);if(!SB(f))return ii(RangeError,`invalid status code ${f}`,!0,1002);let c=u.slice(2);if(!w6(c))return ii(Error,"invalid UTF-8 sequence",!0,1007);this.emit("conclude",f,c.toString()),this.end()}}else this._opcode===9?this.emit("ping",u):this.emit("pong",u);this._state=D2}};_6.exports=C6;function ii(i,u,f,c){let g=new i(f?`Invalid WebSocket frame: ${u}`:u);return Error.captureStackTrace(g,ii),g[yB]=c,g}});var o3=Me((zb,T6)=>{"use strict";var{randomFillSync:TB}=require("crypto"),x6=w2(),{EMPTY_BUFFER:xB}=mc(),{isValidStatusCode:kB}=t3(),{mask:k6,toBuffer:Jl}=g2(),vc=Buffer.alloc(4),Ql=class{constructor(u,f){this._extensions=f||{},this._socket=u,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._deflating=!1,this._queue=[]}static frame(u,f){let c=f.mask&&f.readOnly,g=f.mask?6:2,t=u.length;u.length>=65536?(g+=8,t=127):u.length>125&&(g+=2,t=126);let C=Buffer.allocUnsafe(c?u.length+g:g);return C[0]=f.fin?f.opcode|128:f.opcode,f.rsv1&&(C[0]|=64),C[1]=t,t===126?C.writeUInt16BE(u.length,2):t===127&&(C.writeUInt32BE(0,2),C.writeUInt32BE(u.length,6)),f.mask?(TB(vc,0,4),C[1]|=128,C[g-4]=vc[0],C[g-3]=vc[1],C[g-2]=vc[2],C[g-1]=vc[3],c?(k6(u,vc,C,g,u.length),[C]):(k6(u,vc,u,0,u.length),[C,u])):[C,u]}close(u,f,c,g){let t;if(u===void 0)t=xB;else{if(typeof u!="number"||!kB(u))throw new TypeError("First argument must be a valid error code number");if(f===void 0||f==="")t=Buffer.allocUnsafe(2),t.writeUInt16BE(u,0);else{let C=Buffer.byteLength(f);if(C>123)throw new RangeError("The message must not be greater than 123 bytes");t=Buffer.allocUnsafe(2+C),t.writeUInt16BE(u,0),t.write(f,2)}}this._deflating?this.enqueue([this.doClose,t,c,g]):this.doClose(t,c,g)}doClose(u,f,c){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:8,mask:f,readOnly:!1}),c)}ping(u,f,c){let g=Jl(u);if(g.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPing,g,f,Jl.readOnly,c]):this.doPing(g,f,Jl.readOnly,c)}doPing(u,f,c,g){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:9,mask:f,readOnly:c}),g)}pong(u,f,c){let g=Jl(u);if(g.length>125)throw new RangeError("The data size must not be greater than 125 bytes");this._deflating?this.enqueue([this.doPong,g,f,Jl.readOnly,c]):this.doPong(g,f,Jl.readOnly,c)}doPong(u,f,c,g){this.sendFrame(Ql.frame(u,{fin:!0,rsv1:!1,opcode:10,mask:f,readOnly:c}),g)}send(u,f,c){let g=Jl(u),t=this._extensions[x6.extensionName],C=f.binary?2:1,A=f.compress;if(this._firstFragment?(this._firstFragment=!1,A&&t&&(A=g.length>=t._threshold),this._compress=A):(A=!1,C=0),f.fin&&(this._firstFragment=!0),t){let x={fin:f.fin,rsv1:A,opcode:C,mask:f.mask,readOnly:Jl.readOnly};this._deflating?this.enqueue([this.dispatch,g,this._compress,x,c]):this.dispatch(g,this._compress,x,c)}else this.sendFrame(Ql.frame(g,{fin:f.fin,rsv1:!1,opcode:C,mask:f.mask,readOnly:Jl.readOnly}),c)}dispatch(u,f,c,g){if(!f){this.sendFrame(Ql.frame(u,c),g);return}let t=this._extensions[x6.extensionName];this._bufferedBytes+=u.length,this._deflating=!0,t.compress(u,c.fin,(C,A)=>{if(this._socket.destroyed){let x=new Error("The socket was closed while data was being compressed");typeof g=="function"&&g(x);for(let D=0;D{"use strict";var E2=class{constructor(u,f){this.target=f,this.type=u}},O6=class extends E2{constructor(u,f){super("message",f);this.data=u}},I6=class extends E2{constructor(u,f,c){super("close",c);this.wasClean=c._closeFrameReceived&&c._closeFrameSent,this.reason=f,this.code=u}},P6=class extends E2{constructor(u){super("open",u)}},M6=class extends E2{constructor(u,f){super("error",f);this.message=u.message,this.error=u}},AB={addEventListener(i,u,f){if(typeof u!="function")return;function c(x){u.call(this,new O6(x,this))}function g(x,D){u.call(this,new I6(x,D,this))}function t(x){u.call(this,new M6(x,this))}function C(){u.call(this,new P6(this))}let A=f&&f.once?"once":"on";i==="message"?(c._listener=u,this[A](i,c)):i==="close"?(g._listener=u,this[A](i,g)):i==="error"?(t._listener=u,this[A](i,t)):i==="open"?(C._listener=u,this[A](i,C)):this[A](i,u)},removeEventListener(i,u){let f=this.listeners(i);for(let c=0;c{"use strict";var S2=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function rl(i,u,f){i[u]===void 0?i[u]=[f]:i[u].push(f)}function OB(i){let u=Object.create(null);if(i===void 0||i==="")return u;let f=Object.create(null),c=!1,g=!1,t=!1,C,A,x=-1,D=-1,L=0;for(;L{let f=i[u];return Array.isArray(f)||(f=[f]),f.map(c=>[u].concat(Object.keys(c).map(g=>{let t=c[g];return Array.isArray(t)||(t=[t]),t.map(C=>C===!0?g:`${g}=${C}`).join("; ")})).join("; ")).join(", ")}).join(", ")}L6.exports={format:IB,parse:OB}});var a3=Me((bb,R6)=>{"use strict";var PB=require("events"),MB=require("https"),FB=require("http"),N6=require("net"),LB=require("tls"),{randomBytes:RB,createHash:NB}=require("crypto"),{URL:s3}=require("url"),Uf=w2(),BB=i3(),jB=o3(),{BINARY_TYPES:B6,EMPTY_BUFFER:l3,GUID:UB,kStatusCode:qB,kWebSocket:No,NOOP:j6}=mc(),{addEventListener:zB,removeEventListener:WB}=F6(),{format:HB,parse:bB}=u3(),{toBuffer:GB}=g2(),U6=["CONNECTING","OPEN","CLOSING","CLOSED"],f3=[8,13],VB=30*1e3,mr=class extends PB{constructor(u,f,c){super();this._binaryType=B6[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage="",this._closeTimer=null,this._extensions={},this._protocol="",this._readyState=mr.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,u!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Array.isArray(f)?f=f.join(", "):typeof f=="object"&&f!==null&&(c=f,f=void 0),q6(this,u,f,c)):this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(u){!B6.includes(u)||(this._binaryType=u,this._receiver&&(this._receiver._binaryType=u))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(u,f,c){let g=new BB(this.binaryType,this._extensions,this._isServer,c);this._sender=new jB(u,this._extensions),this._receiver=g,this._socket=u,g[No]=this,u[No]=this,g.on("conclude",YB),g.on("drain",$B),g.on("error",KB),g.on("message",XB),g.on("ping",JB),g.on("pong",QB),u.setTimeout(0),u.setNoDelay(),f.length>0&&u.unshift(f),u.on("close",z6),u.on("data",Wh),u.on("end",W6),u.on("error",H6),this._readyState=mr.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=mr.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[Uf.extensionName]&&this._extensions[Uf.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=mr.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(u,f){if(this.readyState!==mr.CLOSED){if(this.readyState===mr.CONNECTING){let c="WebSocket was closed before the connection was established";return Zl(this,this._req,c)}if(this.readyState===mr.CLOSING){this._closeFrameSent&&this._closeFrameReceived&&this._socket.end();return}this._readyState=mr.CLOSING,this._sender.close(u,f,!this._isServer,c=>{c||(this._closeFrameSent=!0,this._closeFrameReceived&&this._socket.end())}),this._closeTimer=setTimeout(this._socket.destroy.bind(this._socket),VB)}}ping(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof u=="function"?(c=u,u=f=void 0):typeof f=="function"&&(c=f,f=void 0),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}f===void 0&&(f=!this._isServer),this._sender.ping(u||l3,f,c)}pong(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof u=="function"?(c=u,u=f=void 0):typeof f=="function"&&(c=f,f=void 0),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}f===void 0&&(f=!this._isServer),this._sender.pong(u||l3,f,c)}send(u,f,c){if(this.readyState===mr.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof f=="function"&&(c=f,f={}),typeof u=="number"&&(u=u.toString()),this.readyState!==mr.OPEN){c3(this,u,c);return}let g=dt({binary:typeof u!="string",mask:!this._isServer,compress:!0,fin:!0},f);this._extensions[Uf.extensionName]||(g.compress=!1),this._sender.send(u||l3,g,c)}terminate(){if(this.readyState!==mr.CLOSED){if(this.readyState===mr.CONNECTING){let u="WebSocket was closed before the connection was established";return Zl(this,this._req,u)}this._socket&&(this._readyState=mr.CLOSING,this._socket.destroy())}}};U6.forEach((i,u)=>{let f={enumerable:!0,value:u};Object.defineProperty(mr.prototype,i,f),Object.defineProperty(mr,i,f)});["binaryType","bufferedAmount","extensions","protocol","readyState","url"].forEach(i=>{Object.defineProperty(mr.prototype,i,{enumerable:!0})});["open","error","close","message"].forEach(i=>{Object.defineProperty(mr.prototype,`on${i}`,{configurable:!0,enumerable:!0,get(){let u=this.listeners(i);for(let f=0;f{Zl(i,j,"Opening handshake has timed out")}),j.on("error",$=>{j===null||j.aborted||(j=i._req=null,i._readyState=mr.CLOSING,i.emit("error",$),i.emitClose())}),j.on("response",$=>{let h=$.headers.location,re=$.statusCode;if(h&&g.followRedirects&&re>=300&&re<400){if(++i._redirects>g.maxRedirects){Zl(i,j,"Maximum redirects exceeded");return}j.abort();let ce=new s3(h,u);q6(i,ce,f,c)}else i.emit("unexpected-response",j,$)||Zl(i,j,`Unexpected server response: ${$.statusCode}`)}),j.on("upgrade",($,h,re)=>{if(i.emit("upgrade",$),i.readyState!==mr.CONNECTING)return;j=i._req=null;let ce=NB("sha1").update(D+UB).digest("base64");if($.headers["sec-websocket-accept"]!==ce){Zl(i,h,"Invalid Sec-WebSocket-Accept header");return}let Q=$.headers["sec-websocket-protocol"],oe=(f||"").split(/, */),Se;if(!f&&Q?Se="Server sent a subprotocol but none was requested":f&&!Q?Se="Server sent no subprotocol":Q&&!oe.includes(Q)&&(Se="Server sent an invalid subprotocol"),Se){Zl(i,h,Se);return}if(Q&&(i._protocol=Q),N)try{let me=bB($.headers["sec-websocket-extensions"]);me[Uf.extensionName]&&(N.accept(me[Uf.extensionName]),i._extensions[Uf.extensionName]=N)}catch(me){Zl(i,h,"Invalid Sec-WebSocket-Extensions header");return}i.setSocket(h,re,g.maxPayload)})}function ZB(i){return i.path=i.socketPath,N6.connect(i)}function ej(i){return i.path=void 0,!i.servername&&i.servername!==""&&(i.servername=N6.isIP(i.host)?"":i.host),LB.connect(i)}function Zl(i,u,f){i._readyState=mr.CLOSING;let c=new Error(f);Error.captureStackTrace(c,Zl),u.setHeader?(u.abort(),u.socket&&!u.socket.destroyed&&u.socket.destroy(),u.once("abort",i.emitClose.bind(i)),i.emit("error",c)):(u.destroy(c),u.once("error",i.emit.bind(i,"error")),u.once("close",i.emitClose.bind(i)))}function c3(i,u,f){if(u){let c=GB(u).length;i._socket?i._sender._bufferedBytes+=c:i._bufferedAmount+=c}if(f){let c=new Error(`WebSocket is not open: readyState ${i.readyState} (${U6[i.readyState]})`);f(c)}}function YB(i,u){let f=this[No];f._socket.removeListener("data",Wh),f._socket.resume(),f._closeFrameReceived=!0,f._closeMessage=u,f._closeCode=i,i===1005?f.close():f.close(i,u)}function $B(){this[No]._socket.resume()}function KB(i){let u=this[No];u._socket.removeListener("data",Wh),u._readyState=mr.CLOSING,u._closeCode=i[qB],u.emit("error",i),u._socket.destroy()}function b6(){this[No].emitClose()}function XB(i){this[No].emit("message",i)}function JB(i){let u=this[No];u.pong(i,!u._isServer,j6),u.emit("ping",i)}function QB(i){this[No].emit("pong",i)}function z6(){let i=this[No];this.removeListener("close",z6),this.removeListener("end",W6),i._readyState=mr.CLOSING,i._socket.read(),i._receiver.end(),this.removeListener("data",Wh),this[No]=void 0,clearTimeout(i._closeTimer),i._receiver._writableState.finished||i._receiver._writableState.errorEmitted?i.emitClose():(i._receiver.on("error",b6),i._receiver.on("finish",b6))}function Wh(i){this[No]._receiver.write(i)||this.pause()}function W6(){let i=this[No];i._readyState=mr.CLOSING,i._receiver.end(),this.end()}function H6(){let i=this[No];this.removeListener("error",H6),this.on("error",j6),i&&(i._readyState=mr.CLOSING,this.destroy())}});var $6=Me((Gb,G6)=>{"use strict";var{Duplex:tj}=require("stream");function V6(i){i.emit("close")}function nj(){!this.destroyed&&this._writableState.finished&&this.destroy()}function Y6(i){this.removeListener("error",Y6),this.destroy(),this.listenerCount("error")===0&&this.emit("error",i)}function rj(i,u){let f=!0;function c(){f&&i._socket.resume()}i.readyState===i.CONNECTING?i.once("open",function(){i._receiver.removeAllListeners("drain"),i._receiver.on("drain",c)}):(i._receiver.removeAllListeners("drain"),i._receiver.on("drain",c));let g=new tj(zn(dt({},u),{autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1}));return i.on("message",function(C){g.push(C)||(f=!1,i._socket.pause())}),i.once("error",function(C){g.destroyed||g.destroy(C)}),i.once("close",function(){g.destroyed||g.push(null)}),g._destroy=function(t,C){if(i.readyState===i.CLOSED){C(t),process.nextTick(V6,g);return}let A=!1;i.once("error",function(D){A=!0,C(D)}),i.once("close",function(){A||C(t),process.nextTick(V6,g)}),i.terminate()},g._final=function(t){if(i.readyState===i.CONNECTING){i.once("open",function(){g._final(t)});return}i._socket!==null&&(i._socket._writableState.finished?(t(),g._readableState.endEmitted&&g.destroy()):(i._socket.once("finish",function(){t()}),i.close()))},g._read=function(){i.readyState===i.OPEN&&!f&&(f=!0,i._receiver._writableState.needDrain||i._socket.resume())},g._write=function(t,C,A){if(i.readyState===i.CONNECTING){i.once("open",function(){g._write(t,C,A)});return}i.send(t,A)},g.on("end",nj),g.on("error",Y6),g}G6.exports=rj});var J6=Me((Vb,K6)=>{"use strict";var ij=require("events"),{createHash:oj}=require("crypto"),{createServer:uj,STATUS_CODES:d3}=require("http"),gc=w2(),sj=a3(),{format:lj,parse:fj}=u3(),{GUID:cj,kWebSocket:aj}=mc(),dj=/^[+/0-9A-Za-z]{22}==$/,X6=class extends ij{constructor(u,f){super();if(u=dt({maxPayload:100*1024*1024,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null},u),u.port==null&&!u.server&&!u.noServer)throw new TypeError('One of the "port", "server", or "noServer" options must be specified');if(u.port!=null?(this._server=uj((c,g)=>{let t=d3[426];g.writeHead(426,{"Content-Length":t.length,"Content-Type":"text/plain"}),g.end(t)}),this._server.listen(u.port,u.host,u.backlog,f)):u.server&&(this._server=u.server),this._server){let c=this.emit.bind(this,"connection");this._removeListeners=pj(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(g,t,C)=>{this.handleUpgrade(g,t,C,c)}})}u.perMessageDeflate===!0&&(u.perMessageDeflate={}),u.clientTracking&&(this.clients=new Set),this.options=u}address(){if(this.options.noServer)throw new Error('The server is operating in "noServer" mode');return this._server?this._server.address():null}close(u){if(u&&this.once("close",u),this.clients)for(let c of this.clients)c.terminate();let f=this._server;if(f&&(this._removeListeners(),this._removeListeners=this._server=null,this.options.port!=null)){f.close(()=>this.emit("close"));return}process.nextTick(hj,this)}shouldHandle(u){if(this.options.path){let f=u.url.indexOf("?");if((f!==-1?u.url.slice(0,f):u.url)!==this.options.path)return!1}return!0}handleUpgrade(u,f,c,g){f.on("error",p3);let t=u.headers["sec-websocket-key"]!==void 0?u.headers["sec-websocket-key"].trim():!1,C=+u.headers["sec-websocket-version"],A={};if(u.method!=="GET"||u.headers.upgrade.toLowerCase()!=="websocket"||!t||!dj.test(t)||C!==8&&C!==13||!this.shouldHandle(u))return Hh(f,400);if(this.options.perMessageDeflate){let x=new gc(this.options.perMessageDeflate,!0,this.options.maxPayload);try{let D=fj(u.headers["sec-websocket-extensions"]);D[gc.extensionName]&&(x.accept(D[gc.extensionName]),A[gc.extensionName]=x)}catch(D){return Hh(f,400)}}if(this.options.verifyClient){let x={origin:u.headers[`${C===8?"sec-websocket-origin":"origin"}`],secure:!!(u.socket.authorized||u.socket.encrypted),req:u};if(this.options.verifyClient.length===2){this.options.verifyClient(x,(D,L,N,j)=>{if(!D)return Hh(f,L||401,N,j);this.completeUpgrade(t,A,u,f,c,g)});return}if(!this.options.verifyClient(x))return Hh(f,401)}this.completeUpgrade(t,A,u,f,c,g)}completeUpgrade(u,f,c,g,t,C){if(!g.readable||!g.writable)return g.destroy();if(g[aj])throw new Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");let A=oj("sha1").update(u+cj).digest("base64"),x=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${A}`],D=new sj(null),L=c.headers["sec-websocket-protocol"];if(L&&(L=L.split(",").map(mj),this.options.handleProtocols?L=this.options.handleProtocols(L,c):L=L[0],L&&(x.push(`Sec-WebSocket-Protocol: ${L}`),D._protocol=L)),f[gc.extensionName]){let N=f[gc.extensionName].params,j=lj({[gc.extensionName]:[N]});x.push(`Sec-WebSocket-Extensions: ${j}`),D._extensions=f}this.emit("headers",x,c),g.write(x.concat(`\r -`).join(`\r -`)),g.removeListener("error",p3),D.setSocket(g,t,this.options.maxPayload),this.clients&&(this.clients.add(D),D.on("close",()=>this.clients.delete(D))),C(D,c)}};K6.exports=X6;function pj(i,u){for(let f of Object.keys(u))i.on(f,u[f]);return function(){for(let c of Object.keys(u))i.removeListener(c,u[c])}}function hj(i){i.emit("close")}function p3(){this.destroy()}function Hh(i,u,f,c){i.writable&&(f=f||d3[u],c=dt({Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(f)},c),i.write(`HTTP/1.1 ${u} ${d3[u]}\r -`+Object.keys(c).map(g=>`${g}: ${c[g]}`).join(`\r -`)+`\r -\r -`+f)),i.removeListener("error",p3),i.destroy()}function mj(i){return i.trim()}});var Z6=Me((Yb,Q6)=>{"use strict";var C2=a3();C2.createWebSocketStream=$6();C2.Server=J6();C2.Receiver=i3();C2.Sender=o3();Q6.exports=C2});var eS=Me(bh=>{"use strict";var vj=bh&&bh.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(bh,"__esModule",{value:!0});var gj=vj(Z6()),T2=global;T2.WebSocket||(T2.WebSocket=gj.default);T2.window||(T2.window=global);T2.window.__REACT_DEVTOOLS_COMPONENT_FILTERS__=[{type:1,value:7,isEnabled:!0},{type:2,value:"InternalApp",isEnabled:!0,isValid:!0},{type:2,value:"InternalAppContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdoutContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStderrContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalStdinContext",isEnabled:!0,isValid:!0},{type:2,value:"InternalFocusContext",isEnabled:!0,isValid:!0}]});var tS=Me((Gh,h3)=>{(function(i,u){typeof Gh=="object"&&typeof h3=="object"?h3.exports=u():typeof define=="function"&&define.amd?define([],u):typeof Gh=="object"?Gh.ReactDevToolsBackend=u():i.ReactDevToolsBackend=u()})(window,function(){return function(i){var u={};function f(c){if(u[c])return u[c].exports;var g=u[c]={i:c,l:!1,exports:{}};return i[c].call(g.exports,g,g.exports,f),g.l=!0,g.exports}return f.m=i,f.c=u,f.d=function(c,g,t){f.o(c,g)||Object.defineProperty(c,g,{enumerable:!0,get:t})},f.r=function(c){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(c,"__esModule",{value:!0})},f.t=function(c,g){if(1&g&&(c=f(c)),8&g||4&g&&typeof c=="object"&&c&&c.__esModule)return c;var t=Object.create(null);if(f.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:c}),2&g&&typeof c!="string")for(var C in c)f.d(t,C,function(A){return c[A]}.bind(null,C));return t},f.n=function(c){var g=c&&c.__esModule?function(){return c.default}:function(){return c};return f.d(g,"a",g),g},f.o=function(c,g){return Object.prototype.hasOwnProperty.call(c,g)},f.p="",f(f.s=20)}([function(i,u,f){"use strict";i.exports=f(12)},function(i,u,f){"use strict";var c=Object.getOwnPropertySymbols,g=Object.prototype.hasOwnProperty,t=Object.prototype.propertyIsEnumerable;function C(A){if(A==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(A)}i.exports=function(){try{if(!Object.assign)return!1;var A=new String("abc");if(A[5]="de",Object.getOwnPropertyNames(A)[0]==="5")return!1;for(var x={},D=0;D<10;D++)x["_"+String.fromCharCode(D)]=D;if(Object.getOwnPropertyNames(x).map(function(N){return x[N]}).join("")!=="0123456789")return!1;var L={};return"abcdefghijklmnopqrst".split("").forEach(function(N){L[N]=N}),Object.keys(Object.assign({},L)).join("")==="abcdefghijklmnopqrst"}catch(N){return!1}}()?Object.assign:function(A,x){for(var D,L,N=C(A),j=1;j=J||Ft<0||Nt&&it-At>=ot}function Z(){var it=ce();if(ge(it))return Ae(it);Ue=setTimeout(Z,function(Ft){var jt=J-(Ft-be);return Nt?re(jt,ot-(Ft-At)):jt}(it))}function Ae(it){return Ue=void 0,Je&&Oe?V(it):(Oe=Le=void 0,ct)}function at(){var it=ce(),Ft=ge(it);if(Oe=arguments,Le=this,be=it,Ft){if(Ue===void 0)return ne(be);if(Nt)return Ue=setTimeout(Z,J),V(be)}return Ue===void 0&&(Ue=setTimeout(Z,J)),ct}return J=me(J)||0,oe(Te)&&(Ot=!!Te.leading,ot=(Nt="maxWait"in Te)?h(me(Te.maxWait)||0,J):ot,Je="trailing"in Te?!!Te.trailing:Je),at.cancel=function(){Ue!==void 0&&clearTimeout(Ue),At=0,Oe=be=Le=Ue=void 0},at.flush=function(){return Ue===void 0?ct:Ae(ce())},at}function oe(De){var J=g(De);return!!De&&(J=="object"||J=="function")}function Se(De){return g(De)=="symbol"||function(J){return!!J&&g(J)=="object"}(De)&&$.call(De)=="[object Symbol]"}function me(De){if(typeof De=="number")return De;if(Se(De))return NaN;if(oe(De)){var J=typeof De.valueOf=="function"?De.valueOf():De;De=oe(J)?J+"":J}if(typeof De!="string")return De===0?De:+De;De=De.replace(t,"");var Te=A.test(De);return Te||x.test(De)?D(De.slice(2),Te?2:8):C.test(De)?NaN:+De}i.exports=function(De,J,Te){var Oe=!0,Le=!0;if(typeof De!="function")throw new TypeError("Expected a function");return oe(Te)&&(Oe="leading"in Te?!!Te.leading:Oe,Le="trailing"in Te?!!Te.trailing:Le),Q(De,J,{leading:Oe,maxWait:J,trailing:Le})}}).call(this,f(4))},function(i,u,f){(function(c){function g(V){return(g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(ne){return typeof ne}:function(ne){return ne&&typeof Symbol=="function"&&ne.constructor===Symbol&&ne!==Symbol.prototype?"symbol":typeof ne})(V)}var t;u=i.exports=h,t=(c===void 0?"undefined":g(c))==="object"&&c.env&&c.env.NODE_DEBUG&&/\bsemver\b/i.test(c.env.NODE_DEBUG)?function(){var V=Array.prototype.slice.call(arguments,0);V.unshift("SEMVER"),console.log.apply(console,V)}:function(){},u.SEMVER_SPEC_VERSION="2.0.0";var C=Number.MAX_SAFE_INTEGER||9007199254740991,A=u.re=[],x=u.src=[],D=u.tokens={},L=0;function N(V){D[V]=L++}N("NUMERICIDENTIFIER"),x[D.NUMERICIDENTIFIER]="0|[1-9]\\d*",N("NUMERICIDENTIFIERLOOSE"),x[D.NUMERICIDENTIFIERLOOSE]="[0-9]+",N("NONNUMERICIDENTIFIER"),x[D.NONNUMERICIDENTIFIER]="\\d*[a-zA-Z-][a-zA-Z0-9-]*",N("MAINVERSION"),x[D.MAINVERSION]="("+x[D.NUMERICIDENTIFIER]+")\\.("+x[D.NUMERICIDENTIFIER]+")\\.("+x[D.NUMERICIDENTIFIER]+")",N("MAINVERSIONLOOSE"),x[D.MAINVERSIONLOOSE]="("+x[D.NUMERICIDENTIFIERLOOSE]+")\\.("+x[D.NUMERICIDENTIFIERLOOSE]+")\\.("+x[D.NUMERICIDENTIFIERLOOSE]+")",N("PRERELEASEIDENTIFIER"),x[D.PRERELEASEIDENTIFIER]="(?:"+x[D.NUMERICIDENTIFIER]+"|"+x[D.NONNUMERICIDENTIFIER]+")",N("PRERELEASEIDENTIFIERLOOSE"),x[D.PRERELEASEIDENTIFIERLOOSE]="(?:"+x[D.NUMERICIDENTIFIERLOOSE]+"|"+x[D.NONNUMERICIDENTIFIER]+")",N("PRERELEASE"),x[D.PRERELEASE]="(?:-("+x[D.PRERELEASEIDENTIFIER]+"(?:\\."+x[D.PRERELEASEIDENTIFIER]+")*))",N("PRERELEASELOOSE"),x[D.PRERELEASELOOSE]="(?:-?("+x[D.PRERELEASEIDENTIFIERLOOSE]+"(?:\\."+x[D.PRERELEASEIDENTIFIERLOOSE]+")*))",N("BUILDIDENTIFIER"),x[D.BUILDIDENTIFIER]="[0-9A-Za-z-]+",N("BUILD"),x[D.BUILD]="(?:\\+("+x[D.BUILDIDENTIFIER]+"(?:\\."+x[D.BUILDIDENTIFIER]+")*))",N("FULL"),N("FULLPLAIN"),x[D.FULLPLAIN]="v?"+x[D.MAINVERSION]+x[D.PRERELEASE]+"?"+x[D.BUILD]+"?",x[D.FULL]="^"+x[D.FULLPLAIN]+"$",N("LOOSEPLAIN"),x[D.LOOSEPLAIN]="[v=\\s]*"+x[D.MAINVERSIONLOOSE]+x[D.PRERELEASELOOSE]+"?"+x[D.BUILD]+"?",N("LOOSE"),x[D.LOOSE]="^"+x[D.LOOSEPLAIN]+"$",N("GTLT"),x[D.GTLT]="((?:<|>)?=?)",N("XRANGEIDENTIFIERLOOSE"),x[D.XRANGEIDENTIFIERLOOSE]=x[D.NUMERICIDENTIFIERLOOSE]+"|x|X|\\*",N("XRANGEIDENTIFIER"),x[D.XRANGEIDENTIFIER]=x[D.NUMERICIDENTIFIER]+"|x|X|\\*",N("XRANGEPLAIN"),x[D.XRANGEPLAIN]="[v=\\s]*("+x[D.XRANGEIDENTIFIER]+")(?:\\.("+x[D.XRANGEIDENTIFIER]+")(?:\\.("+x[D.XRANGEIDENTIFIER]+")(?:"+x[D.PRERELEASE]+")?"+x[D.BUILD]+"?)?)?",N("XRANGEPLAINLOOSE"),x[D.XRANGEPLAINLOOSE]="[v=\\s]*("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:\\.("+x[D.XRANGEIDENTIFIERLOOSE]+")(?:"+x[D.PRERELEASELOOSE]+")?"+x[D.BUILD]+"?)?)?",N("XRANGE"),x[D.XRANGE]="^"+x[D.GTLT]+"\\s*"+x[D.XRANGEPLAIN]+"$",N("XRANGELOOSE"),x[D.XRANGELOOSE]="^"+x[D.GTLT]+"\\s*"+x[D.XRANGEPLAINLOOSE]+"$",N("COERCE"),x[D.COERCE]="(^|[^\\d])(\\d{1,16})(?:\\.(\\d{1,16}))?(?:\\.(\\d{1,16}))?(?:$|[^\\d])",N("COERCERTL"),A[D.COERCERTL]=new RegExp(x[D.COERCE],"g"),N("LONETILDE"),x[D.LONETILDE]="(?:~>?)",N("TILDETRIM"),x[D.TILDETRIM]="(\\s*)"+x[D.LONETILDE]+"\\s+",A[D.TILDETRIM]=new RegExp(x[D.TILDETRIM],"g"),N("TILDE"),x[D.TILDE]="^"+x[D.LONETILDE]+x[D.XRANGEPLAIN]+"$",N("TILDELOOSE"),x[D.TILDELOOSE]="^"+x[D.LONETILDE]+x[D.XRANGEPLAINLOOSE]+"$",N("LONECARET"),x[D.LONECARET]="(?:\\^)",N("CARETTRIM"),x[D.CARETTRIM]="(\\s*)"+x[D.LONECARET]+"\\s+",A[D.CARETTRIM]=new RegExp(x[D.CARETTRIM],"g"),N("CARET"),x[D.CARET]="^"+x[D.LONECARET]+x[D.XRANGEPLAIN]+"$",N("CARETLOOSE"),x[D.CARETLOOSE]="^"+x[D.LONECARET]+x[D.XRANGEPLAINLOOSE]+"$",N("COMPARATORLOOSE"),x[D.COMPARATORLOOSE]="^"+x[D.GTLT]+"\\s*("+x[D.LOOSEPLAIN]+")$|^$",N("COMPARATOR"),x[D.COMPARATOR]="^"+x[D.GTLT]+"\\s*("+x[D.FULLPLAIN]+")$|^$",N("COMPARATORTRIM"),x[D.COMPARATORTRIM]="(\\s*)"+x[D.GTLT]+"\\s*("+x[D.LOOSEPLAIN]+"|"+x[D.XRANGEPLAIN]+")",A[D.COMPARATORTRIM]=new RegExp(x[D.COMPARATORTRIM],"g"),N("HYPHENRANGE"),x[D.HYPHENRANGE]="^\\s*("+x[D.XRANGEPLAIN]+")\\s+-\\s+("+x[D.XRANGEPLAIN]+")\\s*$",N("HYPHENRANGELOOSE"),x[D.HYPHENRANGELOOSE]="^\\s*("+x[D.XRANGEPLAINLOOSE]+")\\s+-\\s+("+x[D.XRANGEPLAINLOOSE]+")\\s*$",N("STAR"),x[D.STAR]="(<|>)?=?\\s*\\*";for(var j=0;j256||!(ne.loose?A[D.LOOSE]:A[D.FULL]).test(V))return null;try{return new h(V,ne)}catch(ge){return null}}function h(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof h){if(V.loose===ne.loose)return V;V=V.version}else if(typeof V!="string")throw new TypeError("Invalid Version: "+V);if(V.length>256)throw new TypeError("version is longer than 256 characters");if(!(this instanceof h))return new h(V,ne);t("SemVer",V,ne),this.options=ne,this.loose=!!ne.loose;var ge=V.trim().match(ne.loose?A[D.LOOSE]:A[D.FULL]);if(!ge)throw new TypeError("Invalid Version: "+V);if(this.raw=V,this.major=+ge[1],this.minor=+ge[2],this.patch=+ge[3],this.major>C||this.major<0)throw new TypeError("Invalid major version");if(this.minor>C||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>C||this.patch<0)throw new TypeError("Invalid patch version");ge[4]?this.prerelease=ge[4].split(".").map(function(Z){if(/^[0-9]+$/.test(Z)){var Ae=+Z;if(Ae>=0&&Ae=0;)typeof this.prerelease[ge]=="number"&&(this.prerelease[ge]++,ge=-2);ge===-1&&this.prerelease.push(0)}ne&&(this.prerelease[0]===ne?isNaN(this.prerelease[1])&&(this.prerelease=[ne,0]):this.prerelease=[ne,0]);break;default:throw new Error("invalid increment argument: "+V)}return this.format(),this.raw=this.version,this},u.inc=function(V,ne,ge,Z){typeof ge=="string"&&(Z=ge,ge=void 0);try{return new h(V,ge).inc(ne,Z).version}catch(Ae){return null}},u.diff=function(V,ne){if(me(V,ne))return null;var ge=$(V),Z=$(ne),Ae="";if(ge.prerelease.length||Z.prerelease.length){Ae="pre";var at="prerelease"}for(var it in ge)if((it==="major"||it==="minor"||it==="patch")&&ge[it]!==Z[it])return Ae+it;return at},u.compareIdentifiers=ce;var re=/^[0-9]+$/;function ce(V,ne){var ge=re.test(V),Z=re.test(ne);return ge&&Z&&(V=+V,ne=+ne),V===ne?0:ge&&!Z?-1:Z&&!ge?1:V0}function Se(V,ne,ge){return Q(V,ne,ge)<0}function me(V,ne,ge){return Q(V,ne,ge)===0}function De(V,ne,ge){return Q(V,ne,ge)!==0}function J(V,ne,ge){return Q(V,ne,ge)>=0}function Te(V,ne,ge){return Q(V,ne,ge)<=0}function Oe(V,ne,ge,Z){switch(ne){case"===":return g(V)==="object"&&(V=V.version),g(ge)==="object"&&(ge=ge.version),V===ge;case"!==":return g(V)==="object"&&(V=V.version),g(ge)==="object"&&(ge=ge.version),V!==ge;case"":case"=":case"==":return me(V,ge,Z);case"!=":return De(V,ge,Z);case">":return oe(V,ge,Z);case">=":return J(V,ge,Z);case"<":return Se(V,ge,Z);case"<=":return Te(V,ge,Z);default:throw new TypeError("Invalid operator: "+ne)}}function Le(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof Le){if(V.loose===!!ne.loose)return V;V=V.value}if(!(this instanceof Le))return new Le(V,ne);t("comparator",V,ne),this.options=ne,this.loose=!!ne.loose,this.parse(V),this.semver===ot?this.value="":this.value=this.operator+this.semver.version,t("comp",this)}u.rcompareIdentifiers=function(V,ne){return ce(ne,V)},u.major=function(V,ne){return new h(V,ne).major},u.minor=function(V,ne){return new h(V,ne).minor},u.patch=function(V,ne){return new h(V,ne).patch},u.compare=Q,u.compareLoose=function(V,ne){return Q(V,ne,!0)},u.compareBuild=function(V,ne,ge){var Z=new h(V,ge),Ae=new h(ne,ge);return Z.compare(Ae)||Z.compareBuild(Ae)},u.rcompare=function(V,ne,ge){return Q(ne,V,ge)},u.sort=function(V,ne){return V.sort(function(ge,Z){return u.compareBuild(ge,Z,ne)})},u.rsort=function(V,ne){return V.sort(function(ge,Z){return u.compareBuild(Z,ge,ne)})},u.gt=oe,u.lt=Se,u.eq=me,u.neq=De,u.gte=J,u.lte=Te,u.cmp=Oe,u.Comparator=Le;var ot={};function ct(V,ne){if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),V instanceof ct)return V.loose===!!ne.loose&&V.includePrerelease===!!ne.includePrerelease?V:new ct(V.raw,ne);if(V instanceof Le)return new ct(V.value,ne);if(!(this instanceof ct))return new ct(V,ne);if(this.options=ne,this.loose=!!ne.loose,this.includePrerelease=!!ne.includePrerelease,this.raw=V,this.set=V.split(/\s*\|\|\s*/).map(function(ge){return this.parseRange(ge.trim())},this).filter(function(ge){return ge.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+V);this.format()}function Ue(V,ne){for(var ge=!0,Z=V.slice(),Ae=Z.pop();ge&&Z.length;)ge=Z.every(function(at){return Ae.intersects(at,ne)}),Ae=Z.pop();return ge}function be(V){return!V||V.toLowerCase()==="x"||V==="*"}function At(V,ne,ge,Z,Ae,at,it,Ft,jt,hn,Un,Jt,Yt){return((ne=be(ge)?"":be(Z)?">="+ge+".0.0":be(Ae)?">="+ge+"."+Z+".0":">="+ne)+" "+(Ft=be(jt)?"":be(hn)?"<"+(+jt+1)+".0.0":be(Un)?"<"+jt+"."+(+hn+1)+".0":Jt?"<="+jt+"."+hn+"."+Un+"-"+Jt:"<="+Ft)).trim()}function Ot(V,ne,ge){for(var Z=0;Z0){var Ae=V[Z].semver;if(Ae.major===ne.major&&Ae.minor===ne.minor&&Ae.patch===ne.patch)return!0}return!1}return!0}function Nt(V,ne,ge){try{ne=new ct(ne,ge)}catch(Z){return!1}return ne.test(V)}function Je(V,ne,ge,Z){var Ae,at,it,Ft,jt;switch(V=new h(V,Z),ne=new ct(ne,Z),ge){case">":Ae=oe,at=Te,it=Se,Ft=">",jt=">=";break;case"<":Ae=Se,at=J,it=oe,Ft="<",jt="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Nt(V,ne,Z))return!1;for(var hn=0;hn=0.0.0")),Jt=Jt||cr,Yt=Yt||cr,Ae(cr.semver,Jt.semver,Z)?Jt=cr:it(cr.semver,Yt.semver,Z)&&(Yt=cr)}),Jt.operator===Ft||Jt.operator===jt||(!Yt.operator||Yt.operator===Ft)&&at(V,Yt.semver)||Yt.operator===jt&&it(V,Yt.semver))return!1}return!0}Le.prototype.parse=function(V){var ne=this.options.loose?A[D.COMPARATORLOOSE]:A[D.COMPARATOR],ge=V.match(ne);if(!ge)throw new TypeError("Invalid comparator: "+V);this.operator=ge[1]!==void 0?ge[1]:"",this.operator==="="&&(this.operator=""),ge[2]?this.semver=new h(ge[2],this.options.loose):this.semver=ot},Le.prototype.toString=function(){return this.value},Le.prototype.test=function(V){if(t("Comparator.test",V,this.options.loose),this.semver===ot||V===ot)return!0;if(typeof V=="string")try{V=new h(V,this.options)}catch(ne){return!1}return Oe(V,this.operator,this.semver,this.options)},Le.prototype.intersects=function(V,ne){if(!(V instanceof Le))throw new TypeError("a Comparator is required");var ge;if(ne&&g(ne)==="object"||(ne={loose:!!ne,includePrerelease:!1}),this.operator==="")return this.value===""||(ge=new ct(V.value,ne),Nt(this.value,ge,ne));if(V.operator==="")return V.value===""||(ge=new ct(this.value,ne),Nt(V.semver,ge,ne));var Z=!(this.operator!==">="&&this.operator!==">"||V.operator!==">="&&V.operator!==">"),Ae=!(this.operator!=="<="&&this.operator!=="<"||V.operator!=="<="&&V.operator!=="<"),at=this.semver.version===V.semver.version,it=!(this.operator!==">="&&this.operator!=="<="||V.operator!==">="&&V.operator!=="<="),Ft=Oe(this.semver,"<",V.semver,ne)&&(this.operator===">="||this.operator===">")&&(V.operator==="<="||V.operator==="<"),jt=Oe(this.semver,">",V.semver,ne)&&(this.operator==="<="||this.operator==="<")&&(V.operator===">="||V.operator===">");return Z||Ae||at&&it||Ft||jt},u.Range=ct,ct.prototype.format=function(){return this.range=this.set.map(function(V){return V.join(" ").trim()}).join("||").trim(),this.range},ct.prototype.toString=function(){return this.range},ct.prototype.parseRange=function(V){var ne=this.options.loose;V=V.trim();var ge=ne?A[D.HYPHENRANGELOOSE]:A[D.HYPHENRANGE];V=V.replace(ge,At),t("hyphen replace",V),V=V.replace(A[D.COMPARATORTRIM],"$1$2$3"),t("comparator trim",V,A[D.COMPARATORTRIM]),V=(V=(V=V.replace(A[D.TILDETRIM],"$1~")).replace(A[D.CARETTRIM],"$1^")).split(/\s+/).join(" ");var Z=ne?A[D.COMPARATORLOOSE]:A[D.COMPARATOR],Ae=V.split(" ").map(function(at){return function(it,Ft){return t("comp",it,Ft),it=function(jt,hn){return jt.trim().split(/\s+/).map(function(Un){return function(Jt,Yt){t("caret",Jt,Yt);var cr=Yt.loose?A[D.CARETLOOSE]:A[D.CARET];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn){var vr;return t("caret",Jt,w,pt,Mn,Bn,Xn),be(pt)?vr="":be(Mn)?vr=">="+pt+".0.0 <"+(+pt+1)+".0.0":be(Bn)?vr=pt==="0"?">="+pt+"."+Mn+".0 <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+".0 <"+(+pt+1)+".0.0":Xn?(t("replaceCaret pr",Xn),vr=pt==="0"?Mn==="0"?">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+Mn+"."+(+Bn+1):">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+(+pt+1)+".0.0"):(t("no pr"),vr=pt==="0"?Mn==="0"?">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+Mn+"."+(+Bn+1):">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+(+Mn+1)+".0":">="+pt+"."+Mn+"."+Bn+" <"+(+pt+1)+".0.0"),t("caret return",vr),vr})}(Un,hn)}).join(" ")}(it,Ft),t("caret",it),it=function(jt,hn){return jt.trim().split(/\s+/).map(function(Un){return function(Jt,Yt){var cr=Yt.loose?A[D.TILDELOOSE]:A[D.TILDE];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn){var vr;return t("tilde",Jt,w,pt,Mn,Bn,Xn),be(pt)?vr="":be(Mn)?vr=">="+pt+".0.0 <"+(+pt+1)+".0.0":be(Bn)?vr=">="+pt+"."+Mn+".0 <"+pt+"."+(+Mn+1)+".0":Xn?(t("replaceTilde pr",Xn),vr=">="+pt+"."+Mn+"."+Bn+"-"+Xn+" <"+pt+"."+(+Mn+1)+".0"):vr=">="+pt+"."+Mn+"."+Bn+" <"+pt+"."+(+Mn+1)+".0",t("tilde return",vr),vr})}(Un,hn)}).join(" ")}(it,Ft),t("tildes",it),it=function(jt,hn){return t("replaceXRanges",jt,hn),jt.split(/\s+/).map(function(Un){return function(Jt,Yt){Jt=Jt.trim();var cr=Yt.loose?A[D.XRANGELOOSE]:A[D.XRANGE];return Jt.replace(cr,function(w,pt,Mn,Bn,Xn,vr){t("xRange",Jt,w,pt,Mn,Bn,Xn,vr);var gr=be(Mn),r0=gr||be(Bn),Ci=r0||be(Xn),yo=Ci;return pt==="="&&yo&&(pt=""),vr=Yt.includePrerelease?"-0":"",gr?w=pt===">"||pt==="<"?"<0.0.0-0":"*":pt&&yo?(r0&&(Bn=0),Xn=0,pt===">"?(pt=">=",r0?(Mn=+Mn+1,Bn=0,Xn=0):(Bn=+Bn+1,Xn=0)):pt==="<="&&(pt="<",r0?Mn=+Mn+1:Bn=+Bn+1),w=pt+Mn+"."+Bn+"."+Xn+vr):r0?w=">="+Mn+".0.0"+vr+" <"+(+Mn+1)+".0.0"+vr:Ci&&(w=">="+Mn+"."+Bn+".0"+vr+" <"+Mn+"."+(+Bn+1)+".0"+vr),t("xRange return",w),w})}(Un,hn)}).join(" ")}(it,Ft),t("xrange",it),it=function(jt,hn){return t("replaceStars",jt,hn),jt.trim().replace(A[D.STAR],"")}(it,Ft),t("stars",it),it}(at,this.options)},this).join(" ").split(/\s+/);return this.options.loose&&(Ae=Ae.filter(function(at){return!!at.match(Z)})),Ae=Ae.map(function(at){return new Le(at,this.options)},this)},ct.prototype.intersects=function(V,ne){if(!(V instanceof ct))throw new TypeError("a Range is required");return this.set.some(function(ge){return Ue(ge,ne)&&V.set.some(function(Z){return Ue(Z,ne)&&ge.every(function(Ae){return Z.every(function(at){return Ae.intersects(at,ne)})})})})},u.toComparators=function(V,ne){return new ct(V,ne).set.map(function(ge){return ge.map(function(Z){return Z.value}).join(" ").trim().split(" ")})},ct.prototype.test=function(V){if(!V)return!1;if(typeof V=="string")try{V=new h(V,this.options)}catch(ge){return!1}for(var ne=0;ne":at.prerelease.length===0?at.patch++:at.prerelease.push(0),at.raw=at.format();case"":case">=":ge&&!oe(ge,at)||(ge=at);break;case"<":case"<=":break;default:throw new Error("Unexpected operation: "+Ae.operator)}});return ge&&V.test(ge)?ge:null},u.validRange=function(V,ne){try{return new ct(V,ne).range||"*"}catch(ge){return null}},u.ltr=function(V,ne,ge){return Je(V,ne,"<",ge)},u.gtr=function(V,ne,ge){return Je(V,ne,">",ge)},u.outside=Je,u.prerelease=function(V,ne){var ge=$(V,ne);return ge&&ge.prerelease.length?ge.prerelease:null},u.intersects=function(V,ne,ge){return V=new ct(V,ge),ne=new ct(ne,ge),V.intersects(ne)},u.coerce=function(V,ne){if(V instanceof h)return V;if(typeof V=="number"&&(V=String(V)),typeof V!="string")return null;var ge=null;if((ne=ne||{}).rtl){for(var Z;(Z=A[D.COERCERTL].exec(V))&&(!ge||ge.index+ge[0].length!==V.length);)ge&&Z.index+Z[0].length===ge.index+ge[0].length||(ge=Z),A[D.COERCERTL].lastIndex=Z.index+Z[1].length+Z[2].length;A[D.COERCERTL].lastIndex=-1}else ge=V.match(A[D.COERCE]);return ge===null?null:$(ge[2]+"."+(ge[3]||"0")+"."+(ge[4]||"0"),ne)}}).call(this,f(5))},function(i,u){function f(g){return(f=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(g)}var c;c=function(){return this}();try{c=c||new Function("return this")()}catch(g){(typeof window=="undefined"?"undefined":f(window))==="object"&&(c=window)}i.exports=c},function(i,u){var f,c,g=i.exports={};function t(){throw new Error("setTimeout has not been defined")}function C(){throw new Error("clearTimeout has not been defined")}function A(ce){if(f===setTimeout)return setTimeout(ce,0);if((f===t||!f)&&setTimeout)return f=setTimeout,setTimeout(ce,0);try{return f(ce,0)}catch(Q){try{return f.call(null,ce,0)}catch(oe){return f.call(this,ce,0)}}}(function(){try{f=typeof setTimeout=="function"?setTimeout:t}catch(ce){f=t}try{c=typeof clearTimeout=="function"?clearTimeout:C}catch(ce){c=C}})();var x,D=[],L=!1,N=-1;function j(){L&&x&&(L=!1,x.length?D=x.concat(D):N=-1,D.length&&$())}function $(){if(!L){var ce=A(j);L=!0;for(var Q=D.length;Q;){for(x=D,D=[];++N1)for(var oe=1;oethis[C])return De(this,this[h].get(Ue)),!1;var Je=this[h].get(Ue).value;return this[N]&&(this[j]||this[N](Ue,Je.value)),Je.now=Ot,Je.maxAge=At,Je.value=be,this[A]+=Nt-Je.length,Je.length=Nt,this.get(Ue),me(this),!0}var V=new J(Ue,be,Nt,Ot,At);return V.length>this[C]?(this[N]&&this[N](Ue,be),!1):(this[A]+=V.length,this[$].unshift(V),this[h].set(Ue,this[$].head),me(this),!0)}},{key:"has",value:function(Ue){if(!this[h].has(Ue))return!1;var be=this[h].get(Ue).value;return!Se(this,be)}},{key:"get",value:function(Ue){return oe(this,Ue,!0)}},{key:"peek",value:function(Ue){return oe(this,Ue,!1)}},{key:"pop",value:function(){var Ue=this[$].tail;return Ue?(De(this,Ue),Ue.value):null}},{key:"del",value:function(Ue){De(this,this[h].get(Ue))}},{key:"load",value:function(Ue){this.reset();for(var be=Date.now(),At=Ue.length-1;At>=0;At--){var Ot=Ue[At],Nt=Ot.e||0;if(Nt===0)this.set(Ot.k,Ot.v);else{var Je=Nt-be;Je>0&&this.set(Ot.k,Ot.v,Je)}}}},{key:"prune",value:function(){var Ue=this;this[h].forEach(function(be,At){return oe(Ue,At,!1)})}},{key:"max",set:function(Ue){if(typeof Ue!="number"||Ue<0)throw new TypeError("max must be a non-negative number");this[C]=Ue||1/0,me(this)},get:function(){return this[C]}},{key:"allowStale",set:function(Ue){this[D]=!!Ue},get:function(){return this[D]}},{key:"maxAge",set:function(Ue){if(typeof Ue!="number")throw new TypeError("maxAge must be a non-negative number");this[L]=Ue,me(this)},get:function(){return this[L]}},{key:"lengthCalculator",set:function(Ue){var be=this;typeof Ue!="function"&&(Ue=ce),Ue!==this[x]&&(this[x]=Ue,this[A]=0,this[$].forEach(function(At){At.length=be[x](At.value,At.key),be[A]+=At.length})),me(this)},get:function(){return this[x]}},{key:"length",get:function(){return this[A]}},{key:"itemCount",get:function(){return this[$].length}}])&&g(Le.prototype,ot),ct&&g(Le,ct),Oe}(),oe=function(Oe,Le,ot){var ct=Oe[h].get(Le);if(ct){var Ue=ct.value;if(Se(Oe,Ue)){if(De(Oe,ct),!Oe[D])return}else ot&&(Oe[re]&&(ct.value.now=Date.now()),Oe[$].unshiftNode(ct));return Ue.value}},Se=function(Oe,Le){if(!Le||!Le.maxAge&&!Oe[L])return!1;var ot=Date.now()-Le.now;return Le.maxAge?ot>Le.maxAge:Oe[L]&&ot>Oe[L]},me=function(Oe){if(Oe[A]>Oe[C])for(var Le=Oe[$].tail;Oe[A]>Oe[C]&&Le!==null;){var ot=Le.prev;De(Oe,Le),Le=ot}},De=function(Oe,Le){if(Le){var ot=Le.value;Oe[N]&&Oe[N](ot.key,ot.value),Oe[A]-=ot.length,Oe[h].delete(ot.key),Oe[$].removeNode(Le)}},J=function Oe(Le,ot,ct,Ue,be){c(this,Oe),this.key=Le,this.value=ot,this.length=ct,this.now=Ue,this.maxAge=be||0},Te=function(Oe,Le,ot,ct){var Ue=ot.value;Se(Oe,Ue)&&(De(Oe,ot),Oe[D]||(Ue=void 0)),Ue&&Le.call(ct,Ue.value,Ue.key,Oe)};i.exports=Q},function(i,u,f){(function(c){function g(t){return(g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(C){return typeof C}:function(C){return C&&typeof Symbol=="function"&&C.constructor===Symbol&&C!==Symbol.prototype?"symbol":typeof C})(t)}i.exports=function(){if(typeof document=="undefined"||!document.addEventListener)return null;var t,C,A,x={};return x.copy=function(){var D=!1,L=null,N=!1;function j(){D=!1,L=null,N&&window.getSelection().removeAllRanges(),N=!1}return document.addEventListener("copy",function($){if(D){for(var h in L)$.clipboardData.setData(h,L[h]);$.preventDefault()}}),function($){return new Promise(function(h,re){D=!0,typeof $=="string"?L={"text/plain":$}:$ instanceof Node?L={"text/html":new XMLSerializer().serializeToString($)}:$ instanceof Object?L=$:re("Invalid data type. Must be string, DOM node, or an object mapping MIME types to strings."),function ce(Q){try{if(document.execCommand("copy"))j(),h();else{if(Q)throw j(),new Error("Unable to copy. Perhaps it's not available in your browser?");(function(){var oe=document.getSelection();if(!document.queryCommandEnabled("copy")&&oe.isCollapsed){var Se=document.createRange();Se.selectNodeContents(document.body),oe.removeAllRanges(),oe.addRange(Se),N=!0}})(),ce(!0)}}catch(oe){j(),re(oe)}}(!1)})}}(),x.paste=(A=!1,document.addEventListener("paste",function(D){if(A){A=!1,D.preventDefault();var L=t;t=null,L(D.clipboardData.getData(C))}}),function(D){return new Promise(function(L,N){A=!0,t=L,C=D||"text/plain";try{document.execCommand("paste")||(A=!1,N(new Error("Unable to paste. Pasting only works in Internet Explorer at the moment.")))}catch(j){A=!1,N(new Error(j))}})}),typeof ClipboardEvent=="undefined"&&window.clipboardData!==void 0&&window.clipboardData.setData!==void 0&&(function(D){function L(me,De){return function(){me.apply(De,arguments)}}function N(me){if(g(this)!="object")throw new TypeError("Promises must be constructed via new");if(typeof me!="function")throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],Q(me,L($,this),L(h,this))}function j(me){var De=this;return this._state===null?void this._deferreds.push(me):void oe(function(){var J=De._state?me.onFulfilled:me.onRejected;if(J!==null){var Te;try{Te=J(De._value)}catch(Oe){return void me.reject(Oe)}me.resolve(Te)}else(De._state?me.resolve:me.reject)(De._value)})}function $(me){try{if(me===this)throw new TypeError("A promise cannot be resolved with itself.");if(me&&(g(me)=="object"||typeof me=="function")){var De=me.then;if(typeof De=="function")return void Q(L(De,me),L($,this),L(h,this))}this._state=!0,this._value=me,re.call(this)}catch(J){h.call(this,J)}}function h(me){this._state=!1,this._value=me,re.call(this)}function re(){for(var me=0,De=this._deferreds.length;De>me;me++)j.call(this,this._deferreds[me]);this._deferreds=null}function ce(me,De,J,Te){this.onFulfilled=typeof me=="function"?me:null,this.onRejected=typeof De=="function"?De:null,this.resolve=J,this.reject=Te}function Q(me,De,J){var Te=!1;try{me(function(Oe){Te||(Te=!0,De(Oe))},function(Oe){Te||(Te=!0,J(Oe))})}catch(Oe){if(Te)return;Te=!0,J(Oe)}}var oe=N.immediateFn||typeof c=="function"&&c||function(me){setTimeout(me,1)},Se=Array.isArray||function(me){return Object.prototype.toString.call(me)==="[object Array]"};N.prototype.catch=function(me){return this.then(null,me)},N.prototype.then=function(me,De){var J=this;return new N(function(Te,Oe){j.call(J,new ce(me,De,Te,Oe))})},N.all=function(){var me=Array.prototype.slice.call(arguments.length===1&&Se(arguments[0])?arguments[0]:arguments);return new N(function(De,J){function Te(ot,ct){try{if(ct&&(g(ct)=="object"||typeof ct=="function")){var Ue=ct.then;if(typeof Ue=="function")return void Ue.call(ct,function(be){Te(ot,be)},J)}me[ot]=ct,--Oe==0&&De(me)}catch(be){J(be)}}if(me.length===0)return De([]);for(var Oe=me.length,Le=0;LeTe;Te++)me[Te].then(De,J)})},i.exports?i.exports=N:D.Promise||(D.Promise=N)}(this),x.copy=function(D){return new Promise(function(L,N){if(typeof D!="string"&&!("text/plain"in D))throw new Error("You must provide a text/plain type.");var j=typeof D=="string"?D:D["text/plain"];window.clipboardData.setData("Text",j)?L():N(new Error("Copying was rejected."))})},x.paste=function(){return new Promise(function(D,L){var N=window.clipboardData.getData("Text");N?D(N):L(new Error("Pasting was rejected."))})}),x}()}).call(this,f(13).setImmediate)},function(i,u,f){"use strict";i.exports=f(15)},function(i,u,f){"use strict";f.r(u),u.default=`:root { - /** - * IMPORTANT: When new theme variables are added below\u2013 also add them to SettingsContext updateThemeVariables() - */ - - /* Light theme */ - --light-color-attribute-name: #ef6632; - --light-color-attribute-name-not-editable: #23272f; - --light-color-attribute-name-inverted: rgba(255, 255, 255, 0.7); - --light-color-attribute-value: #1a1aa6; - --light-color-attribute-value-inverted: #ffffff; - --light-color-attribute-editable-value: #1a1aa6; - --light-color-background: #ffffff; - --light-color-background-hover: rgba(0, 136, 250, 0.1); - --light-color-background-inactive: #e5e5e5; - --light-color-background-invalid: #fff0f0; - --light-color-background-selected: #0088fa; - --light-color-button-background: #ffffff; - --light-color-button-background-focus: #ededed; - --light-color-button: #5f6673; - --light-color-button-disabled: #cfd1d5; - --light-color-button-active: #0088fa; - --light-color-button-focus: #23272f; - --light-color-button-hover: #23272f; - --light-color-border: #eeeeee; - --light-color-commit-did-not-render-fill: #cfd1d5; - --light-color-commit-did-not-render-fill-text: #000000; - --light-color-commit-did-not-render-pattern: #cfd1d5; - --light-color-commit-did-not-render-pattern-text: #333333; - --light-color-commit-gradient-0: #37afa9; - --light-color-commit-gradient-1: #63b19e; - --light-color-commit-gradient-2: #80b393; - --light-color-commit-gradient-3: #97b488; - --light-color-commit-gradient-4: #abb67d; - --light-color-commit-gradient-5: #beb771; - --light-color-commit-gradient-6: #cfb965; - --light-color-commit-gradient-7: #dfba57; - --light-color-commit-gradient-8: #efbb49; - --light-color-commit-gradient-9: #febc38; - --light-color-commit-gradient-text: #000000; - --light-color-component-name: #6a51b2; - --light-color-component-name-inverted: #ffffff; - --light-color-component-badge-background: rgba(0, 0, 0, 0.1); - --light-color-component-badge-background-inverted: rgba(255, 255, 255, 0.25); - --light-color-component-badge-count: #777d88; - --light-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --light-color-context-background: rgba(0,0,0,.9); - --light-color-context-background-hover: rgba(255, 255, 255, 0.1); - --light-color-context-background-selected: #178fb9; - --light-color-context-border: #3d424a; - --light-color-context-text: #ffffff; - --light-color-context-text-selected: #ffffff; - --light-color-dim: #777d88; - --light-color-dimmer: #cfd1d5; - --light-color-dimmest: #eff0f1; - --light-color-error-background: hsl(0, 100%, 97%); - --light-color-error-border: hsl(0, 100%, 92%); - --light-color-error-text: #ff0000; - --light-color-expand-collapse-toggle: #777d88; - --light-color-link: #0000ff; - --light-color-modal-background: rgba(255, 255, 255, 0.75); - --light-color-record-active: #fc3a4b; - --light-color-record-hover: #3578e5; - --light-color-record-inactive: #0088fa; - --light-color-scroll-thumb: #c2c2c2; - --light-color-scroll-track: #fafafa; - --light-color-search-match: yellow; - --light-color-search-match-current: #f7923b; - --light-color-selected-tree-highlight-active: rgba(0, 136, 250, 0.1); - --light-color-selected-tree-highlight-inactive: rgba(0, 0, 0, 0.05); - --light-color-shadow: rgba(0, 0, 0, 0.25); - --light-color-tab-selected-border: #0088fa; - --light-color-text: #000000; - --light-color-text-invalid: #ff0000; - --light-color-text-selected: #ffffff; - --light-color-toggle-background-invalid: #fc3a4b; - --light-color-toggle-background-on: #0088fa; - --light-color-toggle-background-off: #cfd1d5; - --light-color-toggle-text: #ffffff; - --light-color-tooltip-background: rgba(0, 0, 0, 0.9); - --light-color-tooltip-text: #ffffff; - - /* Dark theme */ - --dark-color-attribute-name: #9d87d2; - --dark-color-attribute-name-not-editable: #ededed; - --dark-color-attribute-name-inverted: #282828; - --dark-color-attribute-value: #cedae0; - --dark-color-attribute-value-inverted: #ffffff; - --dark-color-attribute-editable-value: yellow; - --dark-color-background: #282c34; - --dark-color-background-hover: rgba(255, 255, 255, 0.1); - --dark-color-background-inactive: #3d424a; - --dark-color-background-invalid: #5c0000; - --dark-color-background-selected: #178fb9; - --dark-color-button-background: #282c34; - --dark-color-button-background-focus: #3d424a; - --dark-color-button: #afb3b9; - --dark-color-button-active: #61dafb; - --dark-color-button-disabled: #4f5766; - --dark-color-button-focus: #a2e9fc; - --dark-color-button-hover: #ededed; - --dark-color-border: #3d424a; - --dark-color-commit-did-not-render-fill: #777d88; - --dark-color-commit-did-not-render-fill-text: #000000; - --dark-color-commit-did-not-render-pattern: #666c77; - --dark-color-commit-did-not-render-pattern-text: #ffffff; - --dark-color-commit-gradient-0: #37afa9; - --dark-color-commit-gradient-1: #63b19e; - --dark-color-commit-gradient-2: #80b393; - --dark-color-commit-gradient-3: #97b488; - --dark-color-commit-gradient-4: #abb67d; - --dark-color-commit-gradient-5: #beb771; - --dark-color-commit-gradient-6: #cfb965; - --dark-color-commit-gradient-7: #dfba57; - --dark-color-commit-gradient-8: #efbb49; - --dark-color-commit-gradient-9: #febc38; - --dark-color-commit-gradient-text: #000000; - --dark-color-component-name: #61dafb; - --dark-color-component-name-inverted: #282828; - --dark-color-component-badge-background: rgba(255, 255, 255, 0.25); - --dark-color-component-badge-background-inverted: rgba(0, 0, 0, 0.25); - --dark-color-component-badge-count: #8f949d; - --dark-color-component-badge-count-inverted: rgba(255, 255, 255, 0.7); - --dark-color-context-background: rgba(255,255,255,.9); - --dark-color-context-background-hover: rgba(0, 136, 250, 0.1); - --dark-color-context-background-selected: #0088fa; - --dark-color-context-border: #eeeeee; - --dark-color-context-text: #000000; - --dark-color-context-text-selected: #ffffff; - --dark-color-dim: #8f949d; - --dark-color-dimmer: #777d88; - --dark-color-dimmest: #4f5766; - --dark-color-error-background: #200; - --dark-color-error-border: #900; - --dark-color-error-text: #f55; - --dark-color-expand-collapse-toggle: #8f949d; - --dark-color-link: #61dafb; - --dark-color-modal-background: rgba(0, 0, 0, 0.75); - --dark-color-record-active: #fc3a4b; - --dark-color-record-hover: #a2e9fc; - --dark-color-record-inactive: #61dafb; - --dark-color-scroll-thumb: #afb3b9; - --dark-color-scroll-track: #313640; - --dark-color-search-match: yellow; - --dark-color-search-match-current: #f7923b; - --dark-color-selected-tree-highlight-active: rgba(23, 143, 185, 0.15); - --dark-color-selected-tree-highlight-inactive: rgba(255, 255, 255, 0.05); - --dark-color-shadow: rgba(0, 0, 0, 0.5); - --dark-color-tab-selected-border: #178fb9; - --dark-color-text: #ffffff; - --dark-color-text-invalid: #ff8080; - --dark-color-text-selected: #ffffff; - --dark-color-toggle-background-invalid: #fc3a4b; - --dark-color-toggle-background-on: #178fb9; - --dark-color-toggle-background-off: #777d88; - --dark-color-toggle-text: #ffffff; - --dark-color-tooltip-background: rgba(255, 255, 255, 0.9); - --dark-color-tooltip-text: #000000; - - /* Font smoothing */ - --light-font-smoothing: auto; - --dark-font-smoothing: antialiased; - --font-smoothing: auto; - - /* Compact density */ - --compact-font-size-monospace-small: 9px; - --compact-font-size-monospace-normal: 11px; - --compact-font-size-monospace-large: 15px; - --compact-font-size-sans-small: 10px; - --compact-font-size-sans-normal: 12px; - --compact-font-size-sans-large: 14px; - --compact-line-height-data: 18px; - --compact-root-font-size: 16px; - - /* Comfortable density */ - --comfortable-font-size-monospace-small: 10px; - --comfortable-font-size-monospace-normal: 13px; - --comfortable-font-size-monospace-large: 17px; - --comfortable-font-size-sans-small: 12px; - --comfortable-font-size-sans-normal: 14px; - --comfortable-font-size-sans-large: 16px; - --comfortable-line-height-data: 22px; - --comfortable-root-font-size: 20px; - - /* GitHub.com system fonts */ - --font-family-monospace: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, - Courier, monospace; - --font-family-sans: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, - Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; - - /* Constant values shared between JS and CSS */ - --interaction-commit-size: 10px; - --interaction-label-width: 200px; -} -`},function(i,u,f){"use strict";function c(x){var D=this;if(D instanceof c||(D=new c),D.tail=null,D.head=null,D.length=0,x&&typeof x.forEach=="function")x.forEach(function(j){D.push(j)});else if(arguments.length>0)for(var L=0,N=arguments.length;L1)L=D;else{if(!this.head)throw new TypeError("Reduce of empty list with no initial value");N=this.head.next,L=this.head.value}for(var j=0;N!==null;j++)L=x(L,N.value,j),N=N.next;return L},c.prototype.reduceReverse=function(x,D){var L,N=this.tail;if(arguments.length>1)L=D;else{if(!this.tail)throw new TypeError("Reduce of empty list with no initial value");N=this.tail.prev,L=this.tail.value}for(var j=this.length-1;N!==null;j--)L=x(L,N.value,j),N=N.prev;return L},c.prototype.toArray=function(){for(var x=new Array(this.length),D=0,L=this.head;L!==null;D++)x[D]=L.value,L=L.next;return x},c.prototype.toArrayReverse=function(){for(var x=new Array(this.length),D=0,L=this.tail;L!==null;D++)x[D]=L.value,L=L.prev;return x},c.prototype.slice=function(x,D){(D=D||this.length)<0&&(D+=this.length),(x=x||0)<0&&(x+=this.length);var L=new c;if(Dthis.length&&(D=this.length);for(var N=0,j=this.head;j!==null&&Nthis.length&&(D=this.length);for(var N=this.length,j=this.tail;j!==null&&N>D;N--)j=j.prev;for(;j!==null&&N>x;N--,j=j.prev)L.push(j.value);return L},c.prototype.splice=function(x,D){x>this.length&&(x=this.length-1),x<0&&(x=this.length+x);for(var L=0,N=this.head;N!==null&&L=0&&(A._idleTimeoutId=setTimeout(function(){A._onTimeout&&A._onTimeout()},x))},f(14),u.setImmediate=typeof self!="undefined"&&self.setImmediate||c!==void 0&&c.setImmediate||this&&this.setImmediate,u.clearImmediate=typeof self!="undefined"&&self.clearImmediate||c!==void 0&&c.clearImmediate||this&&this.clearImmediate}).call(this,f(4))},function(i,u,f){(function(c,g){(function(t,C){"use strict";if(!t.setImmediate){var A,x,D,L,N,j=1,$={},h=!1,re=t.document,ce=Object.getPrototypeOf&&Object.getPrototypeOf(t);ce=ce&&ce.setTimeout?ce:t,{}.toString.call(t.process)==="[object process]"?A=function(Se){g.nextTick(function(){oe(Se)})}:function(){if(t.postMessage&&!t.importScripts){var Se=!0,me=t.onmessage;return t.onmessage=function(){Se=!1},t.postMessage("","*"),t.onmessage=me,Se}}()?(L="setImmediate$"+Math.random()+"$",N=function(Se){Se.source===t&&typeof Se.data=="string"&&Se.data.indexOf(L)===0&&oe(+Se.data.slice(L.length))},t.addEventListener?t.addEventListener("message",N,!1):t.attachEvent("onmessage",N),A=function(Se){t.postMessage(L+Se,"*")}):t.MessageChannel?((D=new MessageChannel).port1.onmessage=function(Se){oe(Se.data)},A=function(Se){D.port2.postMessage(Se)}):re&&"onreadystatechange"in re.createElement("script")?(x=re.documentElement,A=function(Se){var me=re.createElement("script");me.onreadystatechange=function(){oe(Se),me.onreadystatechange=null,x.removeChild(me),me=null},x.appendChild(me)}):A=function(Se){setTimeout(oe,0,Se)},ce.setImmediate=function(Se){typeof Se!="function"&&(Se=new Function(""+Se));for(var me=new Array(arguments.length-1),De=0;Dene;ne++)if((V=Q(Je,Ot,ne))!==-1){ce=ne,Ot=V;break e}Ot=-1}}e:{if(Je=Nt,(V=j().get(At.primitive))!==void 0){for(ne=0;neOt-Je?null:Nt.slice(Je,Ot-1))!==null){if(Ot=0,Le!==null){for(;OtOt;Le--)ot=Ue.pop()}for(Le=Nt.length-Ot-1;1<=Le;Le--)Ot=[],ot.push({id:null,isStateEditable:!1,name:Se(Nt[Le-1].functionName),value:void 0,subHooks:Ot}),Ue.push(ot),ot=Ot;Le=Nt}Ot=(Nt=At.primitive)==="Context"||Nt==="DebugValue"?null:ct++,ot.push({id:Ot,isStateEditable:Nt==="Reducer"||Nt==="State",name:Nt,value:At.value,subHooks:[]})}return function ge(Z,Ae){for(var at=[],it=0;it-1&&($=$.replace(/eval code/g,"eval").replace(/(\(eval at [^()]*)|(\),.*$)/g,""));var h=$.replace(/^\s+/,"").replace(/\(eval code/g,"("),re=h.match(/ (\((.+):(\d+):(\d+)\)$)/),ce=(h=re?h.replace(re[0],""):h).split(/\s+/).slice(1),Q=this.extractLocation(re?re[1]:ce.pop()),oe=ce.join(" ")||void 0,Se=["eval",""].indexOf(Q[0])>-1?void 0:Q[0];return new x({functionName:oe,fileName:Se,lineNumber:Q[1],columnNumber:Q[2],source:$})},this)},parseFFOrSafari:function(j){return j.stack.split(` -`).filter(function($){return!$.match(N)},this).map(function($){if($.indexOf(" > eval")>-1&&($=$.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g,":$1")),$.indexOf("@")===-1&&$.indexOf(":")===-1)return new x({functionName:$});var h=/((.*".+"[^@]*)?[^@]*)(?:@)/,re=$.match(h),ce=re&&re[1]?re[1]:void 0,Q=this.extractLocation($.replace(h,""));return new x({functionName:ce,fileName:Q[0],lineNumber:Q[1],columnNumber:Q[2],source:$})},this)},parseOpera:function(j){return!j.stacktrace||j.message.indexOf(` -`)>-1&&j.message.split(` -`).length>j.stacktrace.split(` -`).length?this.parseOpera9(j):j.stack?this.parseOpera11(j):this.parseOpera10(j)},parseOpera9:function(j){for(var $=/Line (\d+).*script (?:in )?(\S+)/i,h=j.message.split(` -`),re=[],ce=2,Q=h.length;ce/,"$2").replace(/\([^)]*\)/g,"")||void 0;Q.match(/\(([^)]*)\)/)&&(h=Q.replace(/^[^(]+\(([^)]*)\)$/,"$1"));var Se=h===void 0||h==="[arguments not available]"?void 0:h.split(",");return new x({functionName:oe,args:Se,fileName:ce[0],lineNumber:ce[1],columnNumber:ce[2],source:$})},this)}}})=="function"?c.apply(u,g):c)===void 0||(i.exports=t)})()},function(i,u,f){var c,g,t;(function(C,A){"use strict";g=[],(t=typeof(c=function(){function x(oe){return oe.charAt(0).toUpperCase()+oe.substring(1)}function D(oe){return function(){return this[oe]}}var L=["isConstructor","isEval","isNative","isToplevel"],N=["columnNumber","lineNumber"],j=["fileName","functionName","source"],$=L.concat(N,j,["args"]);function h(oe){if(oe)for(var Se=0;Se<$.length;Se++)oe[$[Se]]!==void 0&&this["set"+x($[Se])](oe[$[Se]])}h.prototype={getArgs:function(){return this.args},setArgs:function(oe){if(Object.prototype.toString.call(oe)!=="[object Array]")throw new TypeError("Args must be an Array");this.args=oe},getEvalOrigin:function(){return this.evalOrigin},setEvalOrigin:function(oe){if(oe instanceof h)this.evalOrigin=oe;else{if(!(oe instanceof Object))throw new TypeError("Eval Origin must be an Object or StackFrame");this.evalOrigin=new h(oe)}},toString:function(){var oe=this.getFileName()||"",Se=this.getLineNumber()||"",me=this.getColumnNumber()||"",De=this.getFunctionName()||"";return this.getIsEval()?oe?"[eval] ("+oe+":"+Se+":"+me+")":"[eval]:"+Se+":"+me:De?De+" ("+oe+":"+Se+":"+me+")":oe+":"+Se+":"+me}},h.fromString=function(oe){var Se=oe.indexOf("("),me=oe.lastIndexOf(")"),De=oe.substring(0,Se),J=oe.substring(Se+1,me).split(","),Te=oe.substring(me+1);if(Te.indexOf("@")===0)var Oe=/@(.+?)(?::(\d+))?(?::(\d+))?$/.exec(Te,""),Le=Oe[1],ot=Oe[2],ct=Oe[3];return new h({functionName:De,args:J||void 0,fileName:Le,lineNumber:ot||void 0,columnNumber:ct||void 0})};for(var re=0;re1?de-1:0),ve=1;ve=0&&de.splice(W,1)}}}])&&c(R.prototype,U),H&&c(R,H),F}(),t=f(2),C=f.n(t);try{var A=f(9).default,x=function(F){var R=new RegExp("".concat(F,": ([0-9]+)")),U=A.match(R);return parseInt(U[1],10)};x("comfortable-line-height-data"),x("compact-line-height-data")}catch(F){}function D(F){try{return sessionStorage.getItem(F)}catch(R){return null}}function L(F){try{sessionStorage.removeItem(F)}catch(R){}}function N(F,R){try{return sessionStorage.setItem(F,R)}catch(U){}}var j=function(F,R){return F===R},$=f(1),h=f.n($);function re(F){return F.ownerDocument?F.ownerDocument.defaultView:null}function ce(F){var R=re(F);return R?R.frameElement:null}function Q(F){var R=me(F);return oe([F.getBoundingClientRect(),{top:R.borderTop,left:R.borderLeft,bottom:R.borderBottom,right:R.borderRight,width:0,height:0}])}function oe(F){return F.reduce(function(R,U){return R==null?U:{top:R.top+U.top,left:R.left+U.left,width:R.width,height:R.height,bottom:R.bottom+U.bottom,right:R.right+U.right}})}function Se(F,R){var U=ce(F);if(U&&U!==R){for(var H=[F.getBoundingClientRect()],fe=U,ue=!1;fe;){var de=Q(fe);if(H.push(de),fe=ce(fe),ue)break;fe&&re(fe)===R&&(ue=!0)}return oe(H)}return F.getBoundingClientRect()}function me(F){var R=window.getComputedStyle(F);return{borderLeft:parseInt(R.borderLeftWidth,10),borderRight:parseInt(R.borderRightWidth,10),borderTop:parseInt(R.borderTopWidth,10),borderBottom:parseInt(R.borderBottomWidth,10),marginLeft:parseInt(R.marginLeft,10),marginRight:parseInt(R.marginRight,10),marginTop:parseInt(R.marginTop,10),marginBottom:parseInt(R.marginBottom,10),paddingLeft:parseInt(R.paddingLeft,10),paddingRight:parseInt(R.paddingRight,10),paddingTop:parseInt(R.paddingTop,10),paddingBottom:parseInt(R.paddingBottom,10)}}function De(F,R){var U;if(typeof Symbol=="undefined"||F[Symbol.iterator]==null){if(Array.isArray(F)||(U=function(ve,Fe){if(!!ve){if(typeof ve=="string")return J(ve,Fe);var Ge=Object.prototype.toString.call(ve).slice(8,-1);if(Ge==="Object"&&ve.constructor&&(Ge=ve.constructor.name),Ge==="Map"||Ge==="Set")return Array.from(ve);if(Ge==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Ge))return J(ve,Fe)}}(F))||R&&F&&typeof F.length=="number"){U&&(F=U);var H=0,fe=function(){};return{s:fe,n:function(){return H>=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function J(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);Ude.left+de.width&&(K=de.left+de.width-Ge-5),{style:{top:ve+="px",left:K+="px"}}}(R,U,{width:H.width,height:H.height});h()(this.tip.style,fe.style)}}]),F}(),Ue=function(){function F(){Te(this,F);var R=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.window=R;var U=window.__REACT_DEVTOOLS_TARGET_WINDOW__||window;this.tipBoundsWindow=U;var H=R.document;this.container=H.createElement("div"),this.container.style.zIndex="10000000",this.tip=new ct(H,this.container),this.rects=[],H.body.appendChild(this.container)}return Le(F,[{key:"remove",value:function(){this.tip.remove(),this.rects.forEach(function(R){R.remove()}),this.rects.length=0,this.container.parentNode&&this.container.parentNode.removeChild(this.container)}},{key:"inspect",value:function(R,U){for(var H=this,fe=R.filter(function(Xe){return Xe.nodeType===Node.ELEMENT_NODE});this.rects.length>fe.length;)this.rects.pop().remove();if(fe.length!==0){for(;this.rects.length1&&arguments[1]!==void 0?arguments[1]:j,je=void 0,Xe=[],rt=void 0,st=!1,xt=function(lt,Rt){return xe(lt,Xe[Rt])},wt=function(){for(var lt=arguments.length,Rt=Array(lt),yn=0;yn5&&arguments[5]!==void 0?arguments[5]:0,W=cl(F);switch(W){case"html_element":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.tagName,type:W};case"function":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:typeof F.name!="function"&&F.name?F.name:"function",type:W};case"string":return F.length<=500?F:F.slice(0,500)+"...";case"bigint":case"symbol":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.toString(),type:W};case"react_element":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:al(F)||"Unknown",type:W};case"array_buffer":case"data_view":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:W==="data_view"?"DataView":"ArrayBuffer",size:F.byteLength,type:W};case"array":return ue=fe(H),de>=2&&!ue?yo(W,!0,F,R,H):F.map(function(Ge,K){return Ds(Ge,R,U,H.concat([K]),fe,ue?1:de+1)});case"html_all_collection":case"typed_array":case"iterator":if(ue=fe(H),de>=2&&!ue)return yo(W,!0,F,R,H);var ve={unserializable:!0,type:W,readonly:!0,size:W==="typed_array"?F.length:void 0,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.constructor&&F.constructor.name!=="Object"?F.constructor.name:""};return r0(F[Symbol.iterator])&&Array.from(F).forEach(function(Ge,K){return ve[K]=Ds(Ge,R,U,H.concat([K]),fe,ue?1:de+1)}),U.push(H),ve;case"opaque_iterator":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F[Symbol.toStringTag],type:W};case"date":case"regexp":return R.push(H),{inspectable:!1,preview_short:Mr(F,!1),preview_long:Mr(F,!0),name:F.toString(),type:W};case"object":if(ue=fe(H),de>=2&&!ue)return yo(W,!0,F,R,H);var Fe={};return Es(F).forEach(function(Ge){var K=Ge.toString();Fe[K]=Ds(F[Ge],R,U,H.concat([K]),fe,ue?1:de+1)}),Fe;case"infinity":case"nan":case"undefined":return R.push(H),{type:W};default:return F}}function Mu(F){return(Mu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Gf(F){return function(R){if(Array.isArray(R))return iu(R)}(F)||function(R){if(typeof Symbol!="undefined"&&Symbol.iterator in Object(R))return Array.from(R)}(F)||function(R,U){if(!!R){if(typeof R=="string")return iu(R,U);var H=Object.prototype.toString.call(R).slice(8,-1);if(H==="Object"&&R.constructor&&(H=R.constructor.name),H==="Map"||H==="Set")return Array.from(R);if(H==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(H))return iu(R,U)}}(F)||function(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}()}function iu(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);UR.toString()?1:R.toString()>F.toString()?-1:0}function Es(F){for(var R=[],U=F,H=function(){var fe=[].concat(Gf(Object.keys(U)),Gf(Object.getOwnPropertySymbols(U))),ue=Object.getOwnPropertyDescriptors(U);fe.forEach(function(de){ue[de].enumerable&&R.push(de)}),U=Object.getPrototypeOf(U)};U!=null;)H();return R}function Uo(F){var R=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"Anonymous",U=ou.get(F);if(U!=null)return U;var H=R;return typeof F.displayName=="string"?H=F.displayName:typeof F.name=="string"&&F.name!==""&&(H=F.name),ou.set(F,H),H}var sl=0;function Ss(){return++sl}function Cs(F){var R=ol.get(F);if(R!==void 0)return R;for(var U=new Array(F.length),H=0;H1&&arguments[1]!==void 0?arguments[1]:50;return F.length>R?F.substr(0,R)+"\u2026":F}function Mr(F,R){if(F!=null&&hasOwnProperty.call(F,Ci.type))return R?F[Ci.preview_long]:F[Ci.preview_short];switch(cl(F)){case"html_element":return"<".concat(Ui(F.tagName.toLowerCase())," />");case"function":return Ui("\u0192 ".concat(typeof F.name=="function"?"":F.name,"() {}"));case"string":return'"'.concat(F,'"');case"bigint":return Ui(F.toString()+"n");case"regexp":case"symbol":return Ui(F.toString());case"react_element":return"<".concat(Ui(al(F)||"Unknown")," />");case"array_buffer":return"ArrayBuffer(".concat(F.byteLength,")");case"data_view":return"DataView(".concat(F.buffer.byteLength,")");case"array":if(R){for(var U="",H=0;H0&&(U+=", "),!((U+=Mr(F[H],!1)).length>50));H++);return"[".concat(Ui(U),"]")}var fe=hasOwnProperty.call(F,Ci.size)?F[Ci.size]:F.length;return"Array(".concat(fe,")");case"typed_array":var ue="".concat(F.constructor.name,"(").concat(F.length,")");if(R){for(var de="",W=0;W0&&(de+=", "),!((de+=F[W]).length>50));W++);return"".concat(ue," [").concat(Ui(de),"]")}return ue;case"iterator":var ve=F.constructor.name;if(R){for(var Fe=Array.from(F),Ge="",K=0;K0&&(Ge+=", "),Array.isArray(xe)){var je=Mr(xe[0],!0),Xe=Mr(xe[1],!1);Ge+="".concat(je," => ").concat(Xe)}else Ge+=Mr(xe,!1);if(Ge.length>50)break}return"".concat(ve,"(").concat(F.size,") {").concat(Ui(Ge),"}")}return"".concat(ve,"(").concat(F.size,")");case"opaque_iterator":return F[Symbol.toStringTag];case"date":return F.toString();case"object":if(R){for(var rt=Es(F).sort(ul),st="",xt=0;xt0&&(st+=", "),(st+="".concat(wt.toString(),": ").concat(Mr(F[wt],!1))).length>50)break}return"{".concat(Ui(st),"}")}return"{\u2026}";case"boolean":case"number":case"infinity":case"nan":case"null":case"undefined":return F;default:try{return Ui(""+F)}catch(lt){return"unserializable"}}}var Ac=f(7);function of(F){return(of=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Ts(F,R){var U=Object.keys(F);if(Object.getOwnPropertySymbols){var H=Object.getOwnPropertySymbols(F);R&&(H=H.filter(function(fe){return Object.getOwnPropertyDescriptor(F,fe).enumerable})),U.push.apply(U,H)}return U}function xs(F){for(var R=1;R2&&arguments[2]!==void 0?arguments[2]:[];if(F!==null){var H=[],fe=[],ue=Ds(F,H,fe,U,R);return{data:ue,cleaned:H,unserializable:fe}}return null}function qo(F){var R,U,H=(R=F,U=new Set,JSON.stringify(R,function(de,W){if(of(W)==="object"&&W!==null){if(U.has(W))return;U.add(W)}return typeof W=="bigint"?W.toString()+"n":W})),fe=H===void 0?"undefined":H,ue=window.__REACT_DEVTOOLS_GLOBAL_HOOK__.clipboardCopyText;typeof ue=="function"?ue(fe).catch(function(de){}):Object(Ac.copy)(fe)}function kr(F,R){var U=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,H=R[U],fe=Array.isArray(F)?F.slice():xs({},F);return U+1===R.length?Array.isArray(fe)?fe.splice(H,1):delete fe[H]:fe[H]=kr(F[H],R,U+1),fe}function Fr(F,R,U){var H=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,fe=R[H],ue=Array.isArray(F)?F.slice():xs({},F);if(H+1===R.length){var de=U[H];ue[de]=ue[fe],Array.isArray(ue)?ue.splice(fe,1):delete ue[fe]}else ue[fe]=Fr(F[fe],R,U,H+1);return ue}function si(F,R,U){var H=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0;if(H>=R.length)return U;var fe=R[H],ue=Array.isArray(F)?F.slice():xs({},F);return ue[fe]=si(F[fe],R,U,H+1),ue}var H0=f(8);function b0(F,R){var U=Object.keys(F);if(Object.getOwnPropertySymbols){var H=Object.getOwnPropertySymbols(F);R&&(H=H.filter(function(fe){return Object.getOwnPropertyDescriptor(F,fe).enumerable})),U.push.apply(U,H)}return U}function Bt(F){for(var R=1;R=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function As(F,R){if(F){if(typeof F=="string")return uu(F,R);var U=Object.prototype.toString.call(F).slice(8,-1);return U==="Object"&&F.constructor&&(U=F.constructor.name),U==="Map"||U==="Set"?Array.from(F):U==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(U)?uu(F,R):void 0}}function uu(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);U0){var et=ue(X);if(et!=null){var Dt,bt=ks(du);try{for(bt.s();!(Dt=bt.n()).done;)if(Dt.value.test(et))return!0}catch(fn){bt.e(fn)}finally{bt.f()}}}if(Y!=null&&Yu.size>0){var Zt,qt=Y.fileName,Ut=ks(Yu);try{for(Ut.s();!(Zt=Ut.n()).done;)if(Zt.value.test(qt))return!0}catch(fn){Ut.e(fn)}finally{Ut.f()}}return!1}function Gr(X){var Y=X.type;switch(X.tag){case Xe:case ar:return 1;case je:case rn:return 5;case wt:return 6;case lt:return 11;case yn:return 7;case Rt:case sn:case xt:return 9;case Hn:case Cr:return 8;case He:return 12;case Qe:return 13;default:switch(de(Y)){case 60111:case"Symbol(react.concurrent_mode)":case"Symbol(react.async_mode)":return 9;case 60109:case"Symbol(react.provider)":return 2;case 60110:case"Symbol(react.context)":return 2;case 60108:case"Symbol(react.strict_mode)":return 9;case 60114:case"Symbol(react.profiler)":return 10;default:return 9}}}function ir(X){if(Co.has(X))return X;var Y=X.alternate;return Y!=null&&Co.has(Y)?Y:(Co.add(X),X)}window.__REACT_DEVTOOLS_COMPONENT_FILTERS__!=null?qs(window.__REACT_DEVTOOLS_COMPONENT_FILTERS__):qs([{type:1,value:7,isEnabled:!0}]);var L0=new Map,Y0=new Map,Co=new Set,$u=new Map,Vo=new Map,Rr=-1;function Jn(X){if(!L0.has(X)){var Y=Ss();L0.set(X,Y),Y0.set(Y,X)}return L0.get(X)}function ai(X){switch(Gr(X)){case 1:if(N0!==null){var Y=Jn(ir(X)),ye=Vr(X);ye!==null&&N0.set(Y,ye)}}}var o0={};function Vr(X){switch(Gr(X)){case 1:var Y=X.stateNode,ye=o0,he=o0;return Y!=null&&(Y.constructor&&Y.constructor.contextType!=null?he=Y.context:(ye=Y.context)&&Object.keys(ye).length===0&&(ye=o0)),[ye,he];default:return null}}function ff(X){switch(Gr(X)){case 1:if(N0!==null){var Y=Jn(ir(X)),ye=N0.has(Y)?N0.get(Y):null,he=Vr(X);if(ye==null||he==null)return null;var We=Ru(ye,2),et=We[0],Dt=We[1],bt=Ru(he,2),Zt=bt[0],qt=bt[1];if(Zt!==o0)return $0(et,Zt);if(qt!==o0)return Dt!==qt}}return null}function cf(X,Y){if(X==null||Y==null)return!1;if(Y.hasOwnProperty("baseState")&&Y.hasOwnProperty("memoizedState")&&Y.hasOwnProperty("next")&&Y.hasOwnProperty("queue"))for(;Y!==null;){if(Y.memoizedState!==X.memoizedState)return!0;Y=Y.next,X=X.next}return!1}function $0(X,Y){if(X==null||Y==null||Y.hasOwnProperty("baseState")&&Y.hasOwnProperty("memoizedState")&&Y.hasOwnProperty("next")&&Y.hasOwnProperty("queue"))return null;var ye,he=[],We=ks(new Set([].concat(c0(Object.keys(X)),c0(Object.keys(Y)))));try{for(We.s();!(ye=We.n()).done;){var et=ye.value;X[et]!==Y[et]&&he.push(et)}}catch(Dt){We.e(Dt)}finally{We.f()}return he}function K0(X,Y){switch(Y.tag){case Xe:case je:case rt:case Hn:case Cr:return(zo(Y)&K)===K;default:return X.memoizedProps!==Y.memoizedProps||X.memoizedState!==Y.memoizedState||X.ref!==Y.ref}}var ae=[],Be=[],Ie=[],ht=[],mt=new Map,wn=0,Gn=null;function $t(X){ae.push(X)}function X0(X){if(ae.length!==0||Be.length!==0||Ie.length!==0||Gn!==null||u0){var Y=Be.length+Ie.length+(Gn===null?0:1),ye=new Array(3+wn+(Y>0?2+Y:0)+ae.length),he=0;if(ye[he++]=R,ye[he++]=Rr,ye[he++]=wn,mt.forEach(function(bt,Zt){ye[he++]=Zt.length;for(var qt=Cs(Zt),Ut=0;Ut0){ye[he++]=2,ye[he++]=Y;for(var We=Be.length-1;We>=0;We--)ye[he++]=Be[We];for(var et=0;et0?X.forEach(function(Y){F.emit("operations",Y)}):(Fn!==null&&(zr=!0),F.getFiberRoots(R).forEach(function(Y){T0(Rr=Jn(ir(Y.current)),Y.current),u0&&Y.memoizedInteractions!=null&&(uo={changeDescriptions:To?new Map:null,durations:[],commitTime:Os()-v0,interactions:Array.from(Y.memoizedInteractions).map(function(ye){return Bt(Bt({},ye),{},{timestamp:ye.timestamp-v0})}),maxActualDuration:0,priorityLevel:null}),$r(Y.current,null,!1,!1),X0(),Rr=-1}))},getBestMatchForTrackedPath:function(){if(Fn===null||pi===null)return null;for(var X=pi;X!==null&&F0(X);)X=X.return;return X===null?null:{id:Jn(ir(X)),isFullMatch:Br===Fn.length-1}},getDisplayNameForFiberID:function(X){var Y=Y0.get(X);return Y!=null?ue(Y):null},getFiberIDForNative:function(X){var Y=arguments.length>1&&arguments[1]!==void 0&&arguments[1],ye=U.findFiberByHostInstance(X);if(ye!=null){if(Y)for(;ye!==null&&F0(ye);)ye=ye.return;return Jn(ir(ye))}return null},getInstanceAndStyle:function(X){var Y=null,ye=null,he=J0(X);return he!==null&&(Y=he.stateNode,he.memoizedProps!==null&&(ye=he.memoizedProps.style)),{instance:Y,style:ye}},getOwnersList:function(X){var Y=J0(X);if(Y==null)return null;var ye=Y._debugOwner,he=[{displayName:ue(Y)||"Anonymous",id:X,type:Gr(Y)}];if(ye)for(var We=ye;We!==null;)he.unshift({displayName:ue(We)||"Anonymous",id:Jn(ir(We)),type:Gr(We)}),We=We._debugOwner||null;return he},getPathForElement:function(X){var Y=Y0.get(X);if(Y==null)return null;for(var ye=[];Y!==null;)ye.push(Ai(Y)),Y=Y.return;return ye.reverse(),ye},getProfilingData:function(){var X=[];if(pu===null)throw Error("getProfilingData() called before any profiling data was recorded");return pu.forEach(function(Y,ye){var he=[],We=[],et=new Map,Dt=new Map,bt=so!==null&&so.get(ye)||"Unknown";C0!=null&&C0.forEach(function(Zt,qt){di!=null&&di.get(qt)===ye&&We.push([qt,Zt])}),Y.forEach(function(Zt,qt){var Ut=Zt.changeDescriptions,fn=Zt.durations,_t=Zt.interactions,_r=Zt.maxActualDuration,Wr=Zt.priorityLevel,Ar=Zt.commitTime,z=[];_t.forEach(function(s0){et.has(s0.id)||et.set(s0.id,s0),z.push(s0.id);var t0=Dt.get(s0.id);t0!=null?t0.push(qt):Dt.set(s0.id,[qt])});for(var dr=[],Or=[],Qn=0;Qn1?kn.set(Ut,fn-1):kn.delete(Ut),wr.delete(Zt)}(Rr),Yr(ye,!1))}else T0(Rr,ye),$r(ye,null,!1,!1);if(u0&&We){var bt=pu.get(Rr);bt!=null?bt.push(uo):pu.set(Rr,[uo])}X0(),oo&&F.emit("traceUpdates",Hi),Rr=-1},handleCommitFiberUnmount:function(X){Yr(X,!1)},inspectElement:function(X,Y){if(Tr(X)){if(Y!=null){R0(Y);var ye=null;return Y[0]==="hooks"&&(ye="hooks"),{id:X,type:"hydrated-path",path:Y,value:qi(Ti(S0,Y),Nr(null,ye),Y)}}return{id:X,type:"no-change"}}if(El=!1,S0!==null&&S0.id===X||(Q0={}),(S0=af(X))===null)return{id:X,type:"not-found"};Y!=null&&R0(Y),function(We){var et=We.hooks,Dt=We.id,bt=We.props,Zt=Y0.get(Dt);if(Zt!=null){var qt=Zt.elementType,Ut=Zt.stateNode,fn=Zt.tag,_t=Zt.type;switch(fn){case Xe:case ar:case rn:H.$r=Ut;break;case je:H.$r={hooks:et,props:bt,type:_t};break;case wt:H.$r={props:bt,type:_t.render};break;case Hn:case Cr:H.$r={props:bt,type:qt!=null&&qt.type!=null?qt.type:_t};break;default:H.$r=null}}else console.warn('Could not find Fiber with id "'.concat(Dt,'"'))}(S0);var he=Bt({},S0);return he.context=qi(he.context,Nr("context",null)),he.hooks=qi(he.hooks,Nr("hooks","hooks")),he.props=qi(he.props,Nr("props",null)),he.state=qi(he.state,Nr("state",null)),{id:X,type:"full-data",value:he}},logElementToConsole:function(X){var Y=Tr(X)?S0:af(X);if(Y!==null){var ye=typeof console.groupCollapsed=="function";ye&&console.groupCollapsed("[Click to expand] %c<".concat(Y.displayName||"Component"," />"),"color: var(--dom-tag-name-color); font-weight: normal;"),Y.props!==null&&console.log("Props:",Y.props),Y.state!==null&&console.log("State:",Y.state),Y.hooks!==null&&console.log("Hooks:",Y.hooks);var he=zs(X);he!==null&&console.log("Nodes:",he),Y.source!==null&&console.log("Location:",Y.source),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),ye&&console.groupEnd()}else console.warn('Could not find Fiber with id "'.concat(X,'"'))},prepareViewAttributeSource:function(X,Y){Tr(X)&&(window.$attribute=Ti(S0,Y))},prepareViewElementSource:function(X){var Y=Y0.get(X);if(Y!=null){var ye=Y.elementType,he=Y.tag,We=Y.type;switch(he){case Xe:case ar:case rn:case je:H.$type=We;break;case wt:H.$type=We.render;break;case Hn:case Cr:H.$type=ye!=null&&ye.type!=null?ye.type:We;break;default:H.$type=null}}else console.warn('Could not find Fiber with id "'.concat(X,'"'))},overrideSuspense:function(X,Y){if(typeof Eo!="function"||typeof So!="function")throw new Error("Expected overrideSuspense() to not get called for earlier React versions.");Y?(B0.add(X),B0.size===1&&Eo(hu)):(B0.delete(X),B0.size===0&&Eo(Cl));var ye=Y0.get(X);ye!=null&&So(ye)},overrideValueAtPath:function(X,Y,ye,he,We){var et=J0(Y);if(et!==null){var Dt=et.stateNode;switch(X){case"context":switch(he=he.slice(1),et.tag){case Xe:he.length===0?Dt.context=We:fl(Dt.context,he,We),Dt.forceUpdate()}break;case"hooks":typeof p0=="function"&&p0(et,ye,he,We);break;case"props":switch(et.tag){case Xe:et.pendingProps=si(Dt.props,he,We),Dt.forceUpdate();break;default:typeof xi=="function"&&xi(et,he,We)}break;case"state":switch(et.tag){case Xe:fl(Dt.state,he,We),Dt.forceUpdate()}}}},renamePath:function(X,Y,ye,he,We){var et=J0(Y);if(et!==null){var Dt=et.stateNode;switch(X){case"context":switch(he=he.slice(1),We=We.slice(1),et.tag){case Xe:he.length===0||ll(Dt.context,he,We),Dt.forceUpdate()}break;case"hooks":typeof ci=="function"&&ci(et,ye,he,We);break;case"props":Dt===null?typeof qr=="function"&&qr(et,he,We):(et.pendingProps=Fr(Dt.props,he,We),Dt.forceUpdate());break;case"state":ll(Dt.state,he,We),Dt.forceUpdate()}}},renderer:U,setTraceUpdatesEnabled:function(X){oo=X},setTrackedPath:lo,startProfiling:Sl,stopProfiling:function(){u0=!1,To=!1},storeAsGlobal:function(X,Y,ye){if(Tr(X)){var he=Ti(S0,Y),We="$reactTemp".concat(ye);window[We]=he,console.log(We),console.log(he)}},updateComponentFilters:function(X){if(u0)throw Error("Cannot modify filter preferences while profiling");F.getFiberRoots(R).forEach(function(Y){Rr=Jn(ir(Y.current)),m0(Y.current),Yr(Y.current,!1),Rr=-1}),qs(X),kn.clear(),F.getFiberRoots(R).forEach(function(Y){T0(Rr=Jn(ir(Y.current)),Y.current),$r(Y.current,null,!1,!1),X0(Y),Rr=-1})}}}var _n;function Nu(F){return(Nu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function Wo(F,R,U){if(_n===void 0)try{throw Error()}catch(fe){var H=fe.stack.trim().match(/\n( *(at )?)/);_n=H&&H[1]||""}return` -`+_n+F}var su=!1;function Ps(F,R,U){if(!F||su)return"";var H,fe=Error.prepareStackTrace;Error.prepareStackTrace=void 0,su=!0;var ue=U.current;U.current=null;try{if(R){var de=function(){throw Error()};if(Object.defineProperty(de.prototype,"props",{set:function(){throw Error()}}),(typeof Reflect=="undefined"?"undefined":Nu(Reflect))==="object"&&Reflect.construct){try{Reflect.construct(de,[])}catch(xe){H=xe}Reflect.construct(F,[],de)}else{try{de.call()}catch(xe){H=xe}F.call(de.prototype)}}else{try{throw Error()}catch(xe){H=xe}F()}}catch(xe){if(xe&&H&&typeof xe.stack=="string"){for(var W=xe.stack.split(` -`),ve=H.stack.split(` -`),Fe=W.length-1,Ge=ve.length-1;Fe>=1&&Ge>=0&&W[Fe]!==ve[Ge];)Ge--;for(;Fe>=1&&Ge>=0;Fe--,Ge--)if(W[Fe]!==ve[Ge]){if(Fe!==1||Ge!==1)do if(Fe--,--Ge<0||W[Fe]!==ve[Ge])return` -`+W[Fe].replace(" at new "," at ");while(Fe>=1&&Ge>=0);break}}}finally{su=!1,Error.prepareStackTrace=fe,U.current=ue}var K=F?F.displayName||F.name:"";return K?Wo(K):""}function pl(F,R,U,H){return Ps(F,!1,H)}function Vf(F,R,U){var H=F.HostComponent,fe=F.LazyComponent,ue=F.SuspenseComponent,de=F.SuspenseListComponent,W=F.FunctionComponent,ve=F.IndeterminateComponent,Fe=F.SimpleMemoComponent,Ge=F.ForwardRef,K=F.Block,xe=F.ClassComponent;switch(R.tag){case H:return Wo(R.type);case fe:return Wo("Lazy");case ue:return Wo("Suspense");case de:return Wo("SuspenseList");case W:case ve:case Fe:return pl(R.type,0,0,U);case Ge:return pl(R.type.render,0,0,U);case K:return pl(R.type._render,0,0,U);case xe:return function(je,Xe,rt,st){return Ps(je,!0,st)}(R.type,0,0,U);default:return""}}function hl(F,R,U){try{var H="",fe=R;do H+=Vf(F,fe,U),fe=fe.return;while(fe);return H}catch(ue){return` -Error generating stack: `+ue.message+` -`+ue.stack}}function Bu(F,R){var U;if(typeof Symbol=="undefined"||F[Symbol.iterator]==null){if(Array.isArray(F)||(U=function(ve,Fe){if(!!ve){if(typeof ve=="string")return ju(ve,Fe);var Ge=Object.prototype.toString.call(ve).slice(8,-1);if(Ge==="Object"&&ve.constructor&&(Ge=ve.constructor.name),Ge==="Map"||Ge==="Set")return Array.from(ve);if(Ge==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(Ge))return ju(ve,Fe)}}(F))||R&&F&&typeof F.length=="number"){U&&(F=U);var H=0,fe=function(){};return{s:fe,n:function(){return H>=F.length?{done:!0}:{done:!1,value:F[H++]}},e:function(ve){throw ve},f:fe}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var ue,de=!0,W=!1;return{s:function(){U=F[Symbol.iterator]()},n:function(){var ve=U.next();return de=ve.done,ve},e:function(ve){W=!0,ue=ve},f:function(){try{de||U.return==null||U.return()}finally{if(W)throw ue}}}}function ju(F,R){(R==null||R>F.length)&&(R=F.length);for(var U=0,H=new Array(R);U0?Fe[Fe.length-1]:null,xe=K!==null&&(ro.test(K)||Ms.test(K));if(!xe){var je,Xe=Bu(ml.values());try{for(Xe.s();!(je=Xe.n()).done;){var rt=je.value,st=rt.currentDispatcherRef,xt=rt.getCurrentFiber,wt=rt.workTagMap,lt=xt();if(lt!=null){var Rt=hl(wt,lt,st);Rt!==""&&Fe.push(Rt);break}}}catch(yn){Xe.e(yn)}finally{Xe.f()}}}catch(yn){}ue.apply(void 0,Fe)};de.__REACT_DEVTOOLS_ORIGINAL_METHOD__=ue,Uu[fe]=de}catch(W){}})}}function O0(F){return(O0=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(R){return typeof R}:function(R){return R&&typeof Symbol=="function"&&R.constructor===Symbol&&R!==Symbol.prototype?"symbol":typeof R})(F)}function vl(F,R){for(var U=0;UF.length)&&(R=F.length);for(var U=0,H=new Array(R);U1?W-1:0),Fe=1;Fe0?K[K.length-1]:0),K.push(St),W.set(Ne,Fe(ft._topLevelWrapper));try{var Qt=He.apply(this,Qe);return K.pop(),Qt}catch(bn){throw K=[],bn}finally{if(K.length===0){var Cn=W.get(Ne);if(Cn===void 0)throw new Error("Expected to find root ID.");yn(Cn)}}},performUpdateIfNecessary:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);var St=ln(Ne);try{var Qt=He.apply(this,Qe),Cn=ln(Ne);return Ge(St,Cn)||Xe(Ne,ft,Cn),K.pop(),Qt}catch(p0){throw K=[],p0}finally{if(K.length===0){var bn=W.get(Ne);if(bn===void 0)throw new Error("Expected to find root ID.");yn(bn)}}},receiveComponent:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);var St=ln(Ne);try{var Qt=He.apply(this,Qe),Cn=ln(Ne);return Ge(St,Cn)||Xe(Ne,ft,Cn),K.pop(),Qt}catch(p0){throw K=[],p0}finally{if(K.length===0){var bn=W.get(Ne);if(bn===void 0)throw new Error("Expected to find root ID.");yn(bn)}}},unmountComponent:function(He,Qe){var Ne=Qe[0];if(P0(Ne)===9)return He.apply(this,Qe);var ft=Fe(Ne);K.push(ft);try{var St=He.apply(this,Qe);return K.pop(),function(Cn,bn){wt.push(bn),ue.delete(bn)}(0,ft),St}catch(Cn){throw K=[],Cn}finally{if(K.length===0){var Qt=W.get(Ne);if(Qt===void 0)throw new Error("Expected to find root ID.");yn(Qt)}}}}));var st=[],xt=new Map,wt=[],lt=0,Rt=null;function yn(He){if(st.length!==0||wt.length!==0||Rt!==null){var Qe=wt.length+(Rt===null?0:1),Ne=new Array(3+lt+(Qe>0?2+Qe:0)+st.length),ft=0;if(Ne[ft++]=R,Ne[ft++]=He,Ne[ft++]=lt,xt.forEach(function(Cn,bn){Ne[ft++]=bn.length;for(var p0=Cs(bn),h0=0;h00){Ne[ft++]=2,Ne[ft++]=Qe;for(var St=0;St"),"color: var(--dom-tag-name-color); font-weight: normal;"),Qe.props!==null&&console.log("Props:",Qe.props),Qe.state!==null&&console.log("State:",Qe.state),Qe.context!==null&&console.log("Context:",Qe.context);var ft=fe(He);ft!==null&&console.log("Node:",ft),(window.chrome||/firefox/i.test(navigator.userAgent))&&console.log("Right-click any value to save it as a global variable for further inspection."),Ne&&console.groupEnd()}else console.warn('Could not find element with id "'.concat(He,'"'))},overrideSuspense:function(){throw new Error("overrideSuspense not supported by this renderer")},overrideValueAtPath:function(He,Qe,Ne,ft,St){var Qt=ue.get(Qe);if(Qt!=null){var Cn=Qt._instance;if(Cn!=null)switch(He){case"context":fl(Cn.context,ft,St),a0(Cn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var bn=Qt._currentElement;Qt._currentElement=V0(V0({},bn),{},{props:si(bn.props,ft,St)}),a0(Cn);break;case"state":fl(Cn.state,ft,St),a0(Cn)}}},renamePath:function(He,Qe,Ne,ft,St){var Qt=ue.get(Qe);if(Qt!=null){var Cn=Qt._instance;if(Cn!=null)switch(He){case"context":ll(Cn.context,ft,St),a0(Cn);break;case"hooks":throw new Error("Hooks not supported by this renderer");case"props":var bn=Qt._currentElement;Qt._currentElement=V0(V0({},bn),{},{props:Fr(bn.props,ft,St)}),a0(Cn);break;case"state":ll(Cn.state,ft,St),a0(Cn)}}},prepareViewAttributeSource:function(He,Qe){var Ne=Cr(He);Ne!==null&&(window.$attribute=Ti(Ne,Qe))},prepareViewElementSource:function(He){var Qe=ue.get(He);if(Qe!=null){var Ne=Qe._currentElement;Ne!=null?H.$type=Ne.type:console.warn('Could not find element with id "'.concat(He,'"'))}else console.warn('Could not find instance with id "'.concat(He,'"'))},renderer:U,setTraceUpdatesEnabled:function(He){},setTrackedPath:function(He){},startProfiling:function(){},stopProfiling:function(){},storeAsGlobal:function(He,Qe,Ne){var ft=Cr(He);if(ft!==null){var St=Ti(ft,Qe),Qt="$reactTemp".concat(Ne);window[Qt]=St,console.log(Qt),console.log(St)}},updateComponentFilters:function(He){}}}function nr(F,R){var U=!1,H={bottom:0,left:0,right:0,top:0},fe=R[F];if(fe!=null){for(var ue=0,de=Object.keys(H);ue0?"development":"production";var st=Function.prototype.toString;if(rt.Mount&&rt.Mount._renderNewRootComponent){var xt=st.call(rt.Mount._renderNewRootComponent);return xt.indexOf("function")!==0?"production":xt.indexOf("storedMeasure")!==-1?"development":xt.indexOf("should be a pure function")!==-1?xt.indexOf("NODE_ENV")!==-1||xt.indexOf("development")!==-1||xt.indexOf("true")!==-1?"development":xt.indexOf("nextElement")!==-1||xt.indexOf("nextComponent")!==-1?"unminified":"development":xt.indexOf("nextElement")!==-1||xt.indexOf("nextComponent")!==-1?"unminified":"outdated"}}catch(wt){}return"production"}(ve);try{var K=window.__REACT_DEVTOOLS_APPEND_COMPONENT_STACK__!==!1,xe=window.__REACT_DEVTOOLS_BREAK_ON_CONSOLE_ERRORS__===!0;(K||xe)&&(zi(ve),Ho({appendComponentStack:K,breakOnConsoleErrors:xe}))}catch(rt){}var je=F.__REACT_DEVTOOLS_ATTACH__;if(typeof je=="function"){var Xe=je(W,Fe,ve,F);W.rendererInterfaces.set(Fe,Xe)}return W.emit("renderer",{id:Fe,renderer:ve,reactBuildType:Ge}),Fe},on:function(ve,Fe){ue[ve]||(ue[ve]=[]),ue[ve].push(Fe)},off:function(ve,Fe){if(ue[ve]){var Ge=ue[ve].indexOf(Fe);Ge!==-1&&ue[ve].splice(Ge,1),ue[ve].length||delete ue[ve]}},sub:function(ve,Fe){return W.on(ve,Fe),function(){return W.off(ve,Fe)}},supportsFiber:!0,checkDCE:function(ve){try{Function.prototype.toString.call(ve).indexOf("^_^")>-1&&(U=!0,setTimeout(function(){throw new Error("React is running in production mode, but dead code elimination has not been applied. Read how to correctly configure React for production: https://reactjs.org/link/perf-use-production-build")}))}catch(Fe){}},onCommitFiberUnmount:function(ve,Fe){var Ge=fe.get(ve);Ge!=null&&Ge.handleCommitFiberUnmount(Fe)},onCommitFiberRoot:function(ve,Fe,Ge){var K=W.getFiberRoots(ve),xe=Fe.current,je=K.has(Fe),Xe=xe.memoizedState==null||xe.memoizedState.element==null;je||Xe?je&&Xe&&K.delete(Fe):K.add(Fe);var rt=fe.get(ve);rt!=null&&rt.handleCommitFiberRoot(Fe,Ge)}};Object.defineProperty(F,"__REACT_DEVTOOLS_GLOBAL_HOOK__",{configurable:!1,enumerable:!1,get:function(){return W}})})(window);var M0=window.__REACT_DEVTOOLS_GLOBAL_HOOK__,au=[{type:1,value:7,isEnabled:!0}];function Lr(F){if(M0!=null){var R=F||{},U=R.host,H=U===void 0?"localhost":U,fe=R.nativeStyleEditorValidAttributes,ue=R.useHttps,de=ue!==void 0&&ue,W=R.port,ve=W===void 0?8097:W,Fe=R.websocket,Ge=R.resolveRNStyle,K=Ge===void 0?null:Ge,xe=R.isAppActive,je=de?"wss":"ws",Xe=null;if((xe===void 0?function(){return!0}:xe)()){var rt=null,st=[],xt=je+"://"+H+":"+ve,wt=Fe||new window.WebSocket(xt);wt.onclose=function(){rt!==null&&rt.emit("shutdown"),lt()},wt.onerror=function(){lt()},wt.onmessage=function(Rt){var yn;try{if(typeof Rt.data!="string")throw Error();yn=JSON.parse(Rt.data)}catch(sn){return void console.error("[React DevTools] Failed to parse JSON: "+Rt.data)}st.forEach(function(sn){try{sn(yn)}catch(ar){throw console.log("[React DevTools] Error calling listener",yn),console.log("error:",ar),ar}})},wt.onopen=function(){(rt=new Do({listen:function(rn){return st.push(rn),function(){var Hn=st.indexOf(rn);Hn>=0&&st.splice(Hn,1)}},send:function(rn,Hn,d0){wt.readyState===wt.OPEN?wt.send(JSON.stringify({event:rn,payload:Hn})):(rt!==null&&rt.shutdown(),lt())}})).addListener("inspectElement",function(rn){var Hn=rn.id,d0=rn.rendererID,Cr=Rt.rendererInterfaces[d0];if(Cr!=null){var He=Cr.findNativeNodesForFiberID(Hn);He!=null&&He[0]!=null&&Rt.emit("showNativeHighlight",He[0])}}),rt.addListener("updateComponentFilters",function(rn){au=rn}),window.__REACT_DEVTOOLS_COMPONENT_FILTERS__==null&&rt.send("overrideComponentFilters",au);var Rt=new I0(rt);if(Rt.addListener("shutdown",function(){M0.emit("shutdown")}),function(rn,Hn,d0){if(rn==null)return function(){};var Cr=[rn.sub("renderer-attached",function(Ne){var ft=Ne.id,St=(Ne.renderer,Ne.rendererInterface);Hn.setRendererInterface(ft,St),St.flushInitialOperations()}),rn.sub("unsupported-renderer-version",function(Ne){Hn.onUnsupportedRenderer(Ne)}),rn.sub("operations",Hn.onHookOperations),rn.sub("traceUpdates",Hn.onTraceUpdates)],He=function(Ne,ft){var St=rn.rendererInterfaces.get(Ne);St==null&&(typeof ft.findFiberByHostInstance=="function"?St=uf(rn,Ne,ft,d0):ft.ComponentTree&&(St=lf(rn,Ne,ft,d0)),St!=null&&rn.rendererInterfaces.set(Ne,St)),St!=null?rn.emit("renderer-attached",{id:Ne,renderer:ft,rendererInterface:St}):rn.emit("unsupported-renderer-version",Ne)};rn.renderers.forEach(function(Ne,ft){He(ft,Ne)}),Cr.push(rn.sub("renderer",function(Ne){var ft=Ne.id,St=Ne.renderer;He(ft,St)})),rn.emit("react-devtools",Hn),rn.reactDevtoolsAgent=Hn;var Qe=function(){Cr.forEach(function(Ne){return Ne()}),rn.rendererInterfaces.forEach(function(Ne){Ne.cleanup()}),rn.reactDevtoolsAgent=null};Hn.addListener("shutdown",Qe),Cr.push(function(){Hn.removeListener("shutdown",Qe)})}(M0,Rt,window),K!=null||M0.resolveRNStyle!=null)Gu(rt,Rt,K||M0.resolveRNStyle,fe||M0.nativeStyleEditorValidAttributes||null);else{var yn,sn,ar=function(){rt!==null&&Gu(rt,Rt,yn,sn)};M0.hasOwnProperty("resolveRNStyle")||Object.defineProperty(M0,"resolveRNStyle",{enumerable:!1,get:function(){return yn},set:function(rn){yn=rn,ar()}}),M0.hasOwnProperty("nativeStyleEditorValidAttributes")||Object.defineProperty(M0,"nativeStyleEditorValidAttributes",{enumerable:!1,get:function(){return sn},set:function(rn){sn=rn,ar()}})}}}else lt()}function lt(){Xe===null&&(Xe=setTimeout(function(){return Lr(F)},2e3))}}}])})});var rS=Me(nS=>{"use strict";Object.defineProperty(nS,"__esModule",{value:!0});eS();var _j=tS();_j.connectToDevTools()});var lS=Me(x2=>{"use strict";var iS=x2&&x2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(x2,"__esModule",{value:!0});var oS=Ay(),yj=iS(lE()),uS=iS(hc()),no=Xy();process.env.DEV==="true"&&rS();var sS=i=>{i==null||i.unsetMeasureFunc(),i==null||i.freeRecursive()};x2.default=yj.default({schedulePassiveEffects:oS.unstable_scheduleCallback,cancelPassiveEffects:oS.unstable_cancelCallback,now:Date.now,getRootHostContext:()=>({isInsideText:!1}),prepareForCommit:()=>{},resetAfterCommit:i=>{if(i.isStaticDirty){i.isStaticDirty=!1,typeof i.onImmediateRender=="function"&&i.onImmediateRender();return}typeof i.onRender=="function"&&i.onRender()},getChildHostContext:(i,u)=>{let f=i.isInsideText,c=u==="ink-text"||u==="ink-virtual-text";return f===c?i:{isInsideText:c}},shouldSetTextContent:()=>!1,createInstance:(i,u,f,c)=>{if(c.isInsideText&&i==="ink-box")throw new Error(" can\u2019t be nested inside component");let g=i==="ink-text"&&c.isInsideText?"ink-virtual-text":i,t=no.createNode(g);for(let[C,A]of Object.entries(u))C!=="children"&&(C==="style"?no.setStyle(t,A):C==="internal_transform"?t.internal_transform=A:C==="internal_static"?t.internal_static=!0:no.setAttribute(t,C,A));return t},createTextInstance:(i,u,f)=>{if(!f.isInsideText)throw new Error(`Text string "${i}" must be rendered inside component`);return no.createTextNode(i)},resetTextContent:()=>{},hideTextInstance:i=>{no.setTextNodeValue(i,"")},unhideTextInstance:(i,u)=>{no.setTextNodeValue(i,u)},getPublicInstance:i=>i,hideInstance:i=>{var u;(u=i.yogaNode)===null||u===void 0||u.setDisplay(uS.default.DISPLAY_NONE)},unhideInstance:i=>{var u;(u=i.yogaNode)===null||u===void 0||u.setDisplay(uS.default.DISPLAY_FLEX)},appendInitialChild:no.appendChildNode,appendChild:no.appendChildNode,insertBefore:no.insertBeforeNode,finalizeInitialChildren:(i,u,f,c)=>(i.internal_static&&(c.isStaticDirty=!0,c.staticNode=i),!1),supportsMutation:!0,appendChildToContainer:no.appendChildNode,insertInContainerBefore:no.insertBeforeNode,removeChildFromContainer:(i,u)=>{no.removeChildNode(i,u),sS(u.yogaNode)},prepareUpdate:(i,u,f,c,g)=>{i.internal_static&&(g.isStaticDirty=!0);let t={},C=Object.keys(c);for(let A of C)if(c[A]!==f[A]){if(A==="style"&&typeof c.style=="object"&&typeof f.style=="object"){let D=c.style,L=f.style,N=Object.keys(D);for(let j of N){if(j==="borderStyle"||j==="borderColor"){if(typeof t.style!="object"){let $={};t.style=$}t.style.borderStyle=D.borderStyle,t.style.borderColor=D.borderColor}if(D[j]!==L[j]){if(typeof t.style!="object"){let $={};t.style=$}t.style[j]=D[j]}}continue}t[A]=c[A]}return t},commitUpdate:(i,u)=>{for(let[f,c]of Object.entries(u))f!=="children"&&(f==="style"?no.setStyle(i,c):f==="internal_transform"?i.internal_transform=c:f==="internal_static"?i.internal_static=!0:no.setAttribute(i,f,c))},commitTextUpdate:(i,u,f)=>{no.setTextNodeValue(i,f)},removeChild:(i,u)=>{no.removeChildNode(i,u),sS(u.yogaNode)}})});var cS=Me((Jb,fS)=>{"use strict";fS.exports=(i,u=1,f)=>{if(f=dt({indent:" ",includeEmptyLines:!1},f),typeof i!="string")throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof i}\``);if(typeof u!="number")throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof u}\``);if(typeof f.indent!="string")throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof f.indent}\``);if(u===0)return i;let c=f.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return i.replace(c,f.indent.repeat(u))}});var aS=Me(k2=>{"use strict";var wj=k2&&k2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(k2,"__esModule",{value:!0});var Vh=wj(hc());k2.default=i=>i.getComputedWidth()-i.getComputedPadding(Vh.default.EDGE_LEFT)-i.getComputedPadding(Vh.default.EDGE_RIGHT)-i.getComputedBorder(Vh.default.EDGE_LEFT)-i.getComputedBorder(Vh.default.EDGE_RIGHT)});var pS=Me((Zb,dS)=>{dS.exports={single:{topLeft:"\u250C",topRight:"\u2510",bottomRight:"\u2518",bottomLeft:"\u2514",vertical:"\u2502",horizontal:"\u2500"},double:{topLeft:"\u2554",topRight:"\u2557",bottomRight:"\u255D",bottomLeft:"\u255A",vertical:"\u2551",horizontal:"\u2550"},round:{topLeft:"\u256D",topRight:"\u256E",bottomRight:"\u256F",bottomLeft:"\u2570",vertical:"\u2502",horizontal:"\u2500"},bold:{topLeft:"\u250F",topRight:"\u2513",bottomRight:"\u251B",bottomLeft:"\u2517",vertical:"\u2503",horizontal:"\u2501"},singleDouble:{topLeft:"\u2553",topRight:"\u2556",bottomRight:"\u255C",bottomLeft:"\u2559",vertical:"\u2551",horizontal:"\u2500"},doubleSingle:{topLeft:"\u2552",topRight:"\u2555",bottomRight:"\u255B",bottomLeft:"\u2558",vertical:"\u2502",horizontal:"\u2550"},classic:{topLeft:"+",topRight:"+",bottomRight:"+",bottomLeft:"+",vertical:"|",horizontal:"-"}}});var mS=Me((eG,m3)=>{"use strict";var hS=pS();m3.exports=hS;m3.exports.default=hS});var gS=Me((tG,vS)=>{"use strict";vS.exports=(i,u=process.argv)=>{let f=i.startsWith("-")?"":i.length===1?"-":"--",c=u.indexOf(f+i),g=u.indexOf("--");return c!==-1&&(g===-1||c{"use strict";var Dj=require("os"),yS=require("tty"),Pu=gS(),{env:oi}=process,qf;Pu("no-color")||Pu("no-colors")||Pu("color=false")||Pu("color=never")?qf=0:(Pu("color")||Pu("colors")||Pu("color=true")||Pu("color=always"))&&(qf=1);"FORCE_COLOR"in oi&&(oi.FORCE_COLOR==="true"?qf=1:oi.FORCE_COLOR==="false"?qf=0:qf=oi.FORCE_COLOR.length===0?1:Math.min(parseInt(oi.FORCE_COLOR,10),3));function v3(i){return i===0?!1:{level:i,hasBasic:!0,has256:i>=2,has16m:i>=3}}function g3(i,u){if(qf===0)return 0;if(Pu("color=16m")||Pu("color=full")||Pu("color=truecolor"))return 3;if(Pu("color=256"))return 2;if(i&&!u&&qf===void 0)return 0;let f=qf||0;if(oi.TERM==="dumb")return f;if(process.platform==="win32"){let c=Dj.release().split(".");return Number(c[0])>=10&&Number(c[2])>=10586?Number(c[2])>=14931?3:2:1}if("CI"in oi)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some(c=>c in oi)||oi.CI_NAME==="codeship"?1:f;if("TEAMCITY_VERSION"in oi)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(oi.TEAMCITY_VERSION)?1:0;if("GITHUB_ACTIONS"in oi)return 1;if(oi.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in oi){let c=parseInt((oi.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(oi.TERM_PROGRAM){case"iTerm.app":return c>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(oi.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(oi.TERM)||"COLORTERM"in oi?1:f}function Ej(i){let u=g3(i,i&&i.isTTY);return v3(u)}_S.exports={supportsColor:Ej,stdout:v3(g3(!0,yS.isatty(1))),stderr:v3(g3(!0,yS.isatty(2)))}});var ES=Me((rG,DS)=>{"use strict";var Sj=(i,u,f)=>{let c=i.indexOf(u);if(c===-1)return i;let g=u.length,t=0,C="";do C+=i.substr(t,c-t)+u+f,t=c+g,c=i.indexOf(u,t);while(c!==-1);return C+=i.substr(t),C},Cj=(i,u,f,c)=>{let g=0,t="";do{let C=i[c-1]==="\r";t+=i.substr(g,(C?c-1:c)-g)+u+(C?`\r -`:` -`)+f,g=c+1,c=i.indexOf(` -`,g)}while(c!==-1);return t+=i.substr(g),t};DS.exports={stringReplaceAll:Sj,stringEncaseCRLFWithFirstIndex:Cj}});var kS=Me((iG,SS)=>{"use strict";var Tj=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,CS=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,xj=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,kj=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,Aj=new Map([["n",` -`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e",""],["a","\x07"]]);function TS(i){let u=i[0]==="u",f=i[1]==="{";return u&&!f&&i.length===5||i[0]==="x"&&i.length===3?String.fromCharCode(parseInt(i.slice(1),16)):u&&f?String.fromCodePoint(parseInt(i.slice(2,-1),16)):Aj.get(i)||i}function Oj(i,u){let f=[],c=u.trim().split(/\s*,\s*/g),g;for(let t of c){let C=Number(t);if(!Number.isNaN(C))f.push(C);else if(g=t.match(xj))f.push(g[2].replace(kj,(A,x,D)=>x?TS(x):D));else throw new Error(`Invalid Chalk template style argument: ${t} (in style '${i}')`)}return f}function Ij(i){CS.lastIndex=0;let u=[],f;for(;(f=CS.exec(i))!==null;){let c=f[1];if(f[2]){let g=Oj(c,f[2]);u.push([c].concat(g))}else u.push([c])}return u}function xS(i,u){let f={};for(let g of u)for(let t of g.styles)f[t[0]]=g.inverse?null:t.slice(1);let c=i;for(let[g,t]of Object.entries(f))if(!!Array.isArray(t)){if(!(g in c))throw new Error(`Unknown Chalk style: ${g}`);c=t.length>0?c[g](...t):c[g]}return c}SS.exports=(i,u)=>{let f=[],c=[],g=[];if(u.replace(Tj,(t,C,A,x,D,L)=>{if(C)g.push(TS(C));else if(x){let N=g.join("");g=[],c.push(f.length===0?N:xS(i,f)(N)),f.push({inverse:A,styles:Ij(x)})}else if(D){if(f.length===0)throw new Error("Found extraneous } in Chalk template literal");c.push(xS(i,f)(g.join(""))),g=[],f.pop()}else g.push(L)}),c.push(g.join("")),f.length>0){let t=`Chalk template literal is missing ${f.length} closing bracket${f.length===1?"":"s"} (\`}\`)`;throw new Error(t)}return c.join("")}});var Jh=Me((oG,AS)=>{"use strict";var A2=Rh(),{stdout:_3,stderr:y3}=wS(),{stringReplaceAll:Pj,stringEncaseCRLFWithFirstIndex:Mj}=ES(),{isArray:Yh}=Array,OS=["ansi","ansi","ansi256","ansi16m"],ka=Object.create(null),Fj=(i,u={})=>{if(u.level&&!(Number.isInteger(u.level)&&u.level>=0&&u.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let f=_3?_3.level:0;i.level=u.level===void 0?f:u.level},IS=class{constructor(u){return PS(u)}},PS=i=>{let u={};return Fj(u,i),u.template=(...f)=>MS(u.template,...f),Object.setPrototypeOf(u,$h.prototype),Object.setPrototypeOf(u.template,u),u.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},u.template.Instance=IS,u.template};function $h(i){return PS(i)}for(let[i,u]of Object.entries(A2))ka[i]={get(){let f=Kh(this,w3(u.open,u.close,this._styler),this._isEmpty);return Object.defineProperty(this,i,{value:f}),f}};ka.visible={get(){let i=Kh(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:i}),i}};var LS=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let i of LS)ka[i]={get(){let{level:u}=this;return function(...f){let c=w3(A2.color[OS[u]][i](...f),A2.color.close,this._styler);return Kh(this,c,this._isEmpty)}}};for(let i of LS){let u="bg"+i[0].toUpperCase()+i.slice(1);ka[u]={get(){let{level:f}=this;return function(...c){let g=w3(A2.bgColor[OS[f]][i](...c),A2.bgColor.close,this._styler);return Kh(this,g,this._isEmpty)}}}}var Lj=Object.defineProperties(()=>{},zn(dt({},ka),{level:{enumerable:!0,get(){return this._generator.level},set(i){this._generator.level=i}}})),w3=(i,u,f)=>{let c,g;return f===void 0?(c=i,g=u):(c=f.openAll+i,g=u+f.closeAll),{open:i,close:u,openAll:c,closeAll:g,parent:f}},Kh=(i,u,f)=>{let c=(...g)=>Yh(g[0])&&Yh(g[0].raw)?RS(c,MS(c,...g)):RS(c,g.length===1?""+g[0]:g.join(" "));return Object.setPrototypeOf(c,Lj),c._generator=i,c._styler=u,c._isEmpty=f,c},RS=(i,u)=>{if(i.level<=0||!u)return i._isEmpty?"":u;let f=i._styler;if(f===void 0)return u;let{openAll:c,closeAll:g}=f;if(u.indexOf("")!==-1)for(;f!==void 0;)u=Pj(u,f.close,f.open),f=f.parent;let t=u.indexOf(` -`);return t!==-1&&(u=Mj(u,g,c,t)),c+u+g},D3,MS=(i,...u)=>{let[f]=u;if(!Yh(f)||!Yh(f.raw))return u.join(" ");let c=u.slice(1),g=[f.raw[0]];for(let t=1;t{"use strict";var Rj=O2&&O2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(O2,"__esModule",{value:!0});var I2=Rj(Jh()),Nj=/^(rgb|hsl|hsv|hwb)\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/,Bj=/^(ansi|ansi256)\(\s?(\d+)\s?\)$/,Qh=(i,u)=>u==="foreground"?i:"bg"+i[0].toUpperCase()+i.slice(1);O2.default=(i,u,f)=>{if(!u)return i;if(u in I2.default){let g=Qh(u,f);return I2.default[g](i)}if(u.startsWith("#")){let g=Qh("hex",f);return I2.default[g](u)(i)}if(u.startsWith("ansi")){let g=Bj.exec(u);if(!g)return i;let t=Qh(g[1],f),C=Number(g[2]);return I2.default[t](C)(i)}if(u.startsWith("rgb")||u.startsWith("hsl")||u.startsWith("hsv")||u.startsWith("hwb")){let g=Nj.exec(u);if(!g)return i;let t=Qh(g[1],f),C=Number(g[2]),A=Number(g[3]),x=Number(g[4]);return I2.default[t](C,A,x)(i)}return i}});var BS=Me(P2=>{"use strict";var NS=P2&&P2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(P2,"__esModule",{value:!0});var jj=NS(mS()),S3=NS(E3());P2.default=(i,u,f,c)=>{if(typeof f.style.borderStyle=="string"){let g=f.yogaNode.getComputedWidth(),t=f.yogaNode.getComputedHeight(),C=f.style.borderColor,A=jj.default[f.style.borderStyle],x=S3.default(A.topLeft+A.horizontal.repeat(g-2)+A.topRight,C,"foreground"),D=(S3.default(A.vertical,C,"foreground")+` -`).repeat(t-2),L=S3.default(A.bottomLeft+A.horizontal.repeat(g-2)+A.bottomRight,C,"foreground");c.write(i,u,x,{transformers:[]}),c.write(i,u+1,D,{transformers:[]}),c.write(i+g-1,u+1,D,{transformers:[]}),c.write(i,u+t-1,L,{transformers:[]})}}});var US=Me(M2=>{"use strict";var _c=M2&&M2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(M2,"__esModule",{value:!0});var Uj=_c(hc()),qj=_c(jy()),zj=_c(cS()),Wj=_c(Yy()),Hj=_c(aS()),bj=_c(Ky()),Gj=_c(BS()),Vj=(i,u)=>{var f;let c=(f=i.childNodes[0])===null||f===void 0?void 0:f.yogaNode;if(c){let g=c.getComputedLeft(),t=c.getComputedTop();u=` -`.repeat(t)+zj.default(u,g)}return u},jS=(i,u,f)=>{var c;let{offsetX:g=0,offsetY:t=0,transformers:C=[],skipStaticElements:A}=f;if(A&&i.internal_static)return;let{yogaNode:x}=i;if(x){if(x.getDisplay()===Uj.default.DISPLAY_NONE)return;let D=g+x.getComputedLeft(),L=t+x.getComputedTop(),N=C;if(typeof i.internal_transform=="function"&&(N=[i.internal_transform,...C]),i.nodeName==="ink-text"){let j=bj.default(i);if(j.length>0){let $=qj.default(j),h=Hj.default(x);if($>h){let re=(c=i.style.textWrap)!==null&&c!==void 0?c:"wrap";j=Wj.default(j,h,re)}j=Vj(i,j),u.write(D,L,j,{transformers:N})}return}if(i.nodeName==="ink-box"&&Gj.default(D,L,i,u),i.nodeName==="ink-root"||i.nodeName==="ink-box")for(let j of i.childNodes)jS(j,u,{offsetX:D,offsetY:L,transformers:N,skipStaticElements:A})}};M2.default=jS});var zS=Me((fG,qS)=>{"use strict";qS.exports=i=>{i=Object.assign({onlyFirst:!1},i);let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(u,i.onlyFirst?void 0:"g")}});var HS=Me((cG,C3)=>{"use strict";var Yj=zS(),WS=i=>typeof i=="string"?i.replace(Yj(),""):i;C3.exports=WS;C3.exports.default=WS});var VS=Me((aG,bS)=>{"use strict";var GS="[\uD800-\uDBFF][\uDC00-\uDFFF]";bS.exports=i=>i&&i.exact?new RegExp(`^${GS}$`):new RegExp(GS,"g")});var $S=Me((dG,T3)=>{"use strict";var $j=HS(),Kj=VS(),YS=i=>$j(i).replace(Kj()," ").length;T3.exports=YS;T3.exports.default=YS});var QS=Me(F2=>{"use strict";var KS=F2&&F2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(F2,"__esModule",{value:!0});var XS=KS(Gy()),Xj=KS($S()),JS=class{constructor(u){this.writes=[];let{width:f,height:c}=u;this.width=f,this.height=c}write(u,f,c,g){let{transformers:t}=g;!c||this.writes.push({x:u,y:f,text:c,transformers:t})}get(){let u=[];for(let c=0;cc.trimRight()).join(` -`),height:u.length}}};F2.default=JS});var t5=Me(L2=>{"use strict";var x3=L2&&L2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(L2,"__esModule",{value:!0});var Jj=x3(hc()),ZS=x3(US()),e5=x3(QS());L2.default=(i,u)=>{var f;if(i.yogaNode.setWidth(u),i.yogaNode){i.yogaNode.calculateLayout(void 0,void 0,Jj.default.DIRECTION_LTR);let c=new e5.default({width:i.yogaNode.getComputedWidth(),height:i.yogaNode.getComputedHeight()});ZS.default(i,c,{skipStaticElements:!0});let g;((f=i.staticNode)===null||f===void 0?void 0:f.yogaNode)&&(g=new e5.default({width:i.staticNode.yogaNode.getComputedWidth(),height:i.staticNode.yogaNode.getComputedHeight()}),ZS.default(i.staticNode,g,{skipStaticElements:!1}));let{output:t,height:C}=c.get();return{output:t,outputHeight:C,staticOutput:g?`${g.get().output} -`:""}}return{output:"",outputHeight:0,staticOutput:""}}});var o5=Me((mG,n5)=>{"use strict";var r5=require("stream"),i5=["assert","count","countReset","debug","dir","dirxml","error","group","groupCollapsed","groupEnd","info","log","table","time","timeEnd","timeLog","trace","warn"],k3={},Qj=i=>{let u=new r5.PassThrough,f=new r5.PassThrough;u.write=g=>i("stdout",g),f.write=g=>i("stderr",g);let c=new console.Console(u,f);for(let g of i5)k3[g]=console[g],console[g]=c[g];return()=>{for(let g of i5)console[g]=k3[g];k3={}}};n5.exports=Qj});var O3=Me(A3=>{"use strict";Object.defineProperty(A3,"__esModule",{value:!0});A3.default=new WeakMap});var P3=Me(I3=>{"use strict";Object.defineProperty(I3,"__esModule",{value:!0});var Zj=lr(),u5=Zj.createContext({exit:()=>{}});u5.displayName="InternalAppContext";I3.default=u5});var F3=Me(M3=>{"use strict";Object.defineProperty(M3,"__esModule",{value:!0});var eU=lr(),s5=eU.createContext({stdin:void 0,setRawMode:()=>{},isRawModeSupported:!1,internal_exitOnCtrlC:!0});s5.displayName="InternalStdinContext";M3.default=s5});var R3=Me(L3=>{"use strict";Object.defineProperty(L3,"__esModule",{value:!0});var tU=lr(),l5=tU.createContext({stdout:void 0,write:()=>{}});l5.displayName="InternalStdoutContext";L3.default=l5});var B3=Me(N3=>{"use strict";Object.defineProperty(N3,"__esModule",{value:!0});var nU=lr(),f5=nU.createContext({stderr:void 0,write:()=>{}});f5.displayName="InternalStderrContext";N3.default=f5});var Zh=Me(j3=>{"use strict";Object.defineProperty(j3,"__esModule",{value:!0});var rU=lr(),c5=rU.createContext({activeId:void 0,add:()=>{},remove:()=>{},activate:()=>{},deactivate:()=>{},enableFocus:()=>{},disableFocus:()=>{},focusNext:()=>{},focusPrevious:()=>{}});c5.displayName="InternalFocusContext";j3.default=c5});var d5=Me((EG,a5)=>{"use strict";var iU=/[|\\{}()[\]^$+*?.-]/g;a5.exports=i=>{if(typeof i!="string")throw new TypeError("Expected a string");return i.replace(iU,"\\$&")}});var v5=Me((SG,p5)=>{"use strict";var oU=d5(),h5=[].concat(require("module").builtinModules,"bootstrap_node","node").map(i=>new RegExp(`(?:\\(${i}\\.js:\\d+:\\d+\\)$|^\\s*at ${i}\\.js:\\d+:\\d+$)`));h5.push(/\(internal\/[^:]+:\d+:\d+\)$/,/\s*at internal\/[^:]+:\d+:\d+$/,/\/\.node-spawn-wrap-\w+-\w+\/node:\d+:\d+\)?$/);var em=class{constructor(u){u=dt({ignoredPackages:[]},u),"internals"in u||(u.internals=em.nodeInternals()),"cwd"in u||(u.cwd=process.cwd()),this._cwd=u.cwd.replace(/\\/g,"/"),this._internals=[].concat(u.internals,uU(u.ignoredPackages)),this._wrapCallSite=u.wrapCallSite||!1}static nodeInternals(){return[...h5]}clean(u,f=0){f=" ".repeat(f),Array.isArray(u)||(u=u.split(` -`)),!/^\s*at /.test(u[0])&&/^\s*at /.test(u[1])&&(u=u.slice(1));let c=!1,g=null,t=[];return u.forEach(C=>{if(C=C.replace(/\\/g,"/"),this._internals.some(x=>x.test(C)))return;let A=/^\s*at /.test(C);c?C=C.trimEnd().replace(/^(\s+)at /,"$1"):(C=C.trim(),A&&(C=C.slice(3))),C=C.replace(`${this._cwd}/`,""),C&&(A?(g&&(t.push(g),g=null),t.push(C)):(c=!0,g=C))}),t.map(C=>`${f}${C} -`).join("")}captureString(u,f=this.captureString){typeof u=="function"&&(f=u,u=Infinity);let{stackTraceLimit:c}=Error;u&&(Error.stackTraceLimit=u);let g={};Error.captureStackTrace(g,f);let{stack:t}=g;return Error.stackTraceLimit=c,this.clean(t)}capture(u,f=this.capture){typeof u=="function"&&(f=u,u=Infinity);let{prepareStackTrace:c,stackTraceLimit:g}=Error;Error.prepareStackTrace=(A,x)=>this._wrapCallSite?x.map(this._wrapCallSite):x,u&&(Error.stackTraceLimit=u);let t={};Error.captureStackTrace(t,f);let{stack:C}=t;return Object.assign(Error,{prepareStackTrace:c,stackTraceLimit:g}),C}at(u=this.at){let[f]=this.capture(1,u);if(!f)return{};let c={line:f.getLineNumber(),column:f.getColumnNumber()};m5(c,f.getFileName(),this._cwd),f.isConstructor()&&(c.constructor=!0),f.isEval()&&(c.evalOrigin=f.getEvalOrigin()),f.isNative()&&(c.native=!0);let g;try{g=f.getTypeName()}catch(A){}g&&g!=="Object"&&g!=="[object Object]"&&(c.type=g);let t=f.getFunctionName();t&&(c.function=t);let C=f.getMethodName();return C&&t!==C&&(c.method=C),c}parseLine(u){let f=u&&u.match(sU);if(!f)return null;let c=f[1]==="new",g=f[2],t=f[3],C=f[4],A=Number(f[5]),x=Number(f[6]),D=f[7],L=f[8],N=f[9],j=f[10]==="native",$=f[11]===")",h,re={};if(L&&(re.line=Number(L)),N&&(re.column=Number(N)),$&&D){let ce=0;for(let Q=D.length-1;Q>0;Q--)if(D.charAt(Q)===")")ce++;else if(D.charAt(Q)==="("&&D.charAt(Q-1)===" "&&(ce--,ce===-1&&D.charAt(Q-1)===" ")){let oe=D.slice(0,Q-1);D=D.slice(Q+1),g+=` (${oe}`;break}}if(g){let ce=g.match(lU);ce&&(g=ce[1],h=ce[2])}return m5(re,D,this._cwd),c&&(re.constructor=!0),t&&(re.evalOrigin=t,re.evalLine=A,re.evalColumn=x,re.evalFile=C&&C.replace(/\\/g,"/")),j&&(re.native=!0),g&&(re.function=g),h&&g!==h&&(re.method=h),re}};function m5(i,u,f){u&&(u=u.replace(/\\/g,"/"),u.startsWith(`${f}/`)&&(u=u.slice(f.length+1)),i.file=u)}function uU(i){if(i.length===0)return[];let u=i.map(f=>oU(f));return new RegExp(`[/\\\\]node_modules[/\\\\](?:${u.join("|")})[/\\\\][^:]+:\\d+:\\d+`)}var sU=new RegExp("^(?:\\s*at )?(?:(new) )?(?:(.*?) \\()?(?:eval at ([^ ]+) \\((.+?):(\\d+):(\\d+)\\), )?(?:(.+?):(\\d+):(\\d+)|(native))(\\)?)$"),lU=/^(.*?) \[as (.*?)\]$/;p5.exports=em});var _5=Me((CG,g5)=>{"use strict";g5.exports=(i,u)=>i.replace(/^\t+/gm,f=>" ".repeat(f.length*(u||2)))});var w5=Me((TG,y5)=>{"use strict";var fU=_5(),cU=(i,u)=>{let f=[],c=i-u,g=i+u;for(let t=c;t<=g;t++)f.push(t);return f};y5.exports=(i,u,f)=>{if(typeof i!="string")throw new TypeError("Source code is missing.");if(!u||u<1)throw new TypeError("Line number must start from `1`.");if(i=fU(i).split(/\r?\n/),!(u>i.length))return f=dt({around:3},f),cU(u,f.around).filter(c=>i[c-1]!==void 0).map(c=>({line:c,value:i[c-1]}))}});var tm=Me(hs=>{"use strict";var aU=hs&&hs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),dU=hs&&hs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),pU=hs&&hs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&aU(u,i,f);return dU(u,i),u},hU=hs&&hs.__rest||function(i,u){var f={};for(var c in i)Object.prototype.hasOwnProperty.call(i,c)&&u.indexOf(c)<0&&(f[c]=i[c]);if(i!=null&&typeof Object.getOwnPropertySymbols=="function")for(var g=0,c=Object.getOwnPropertySymbols(i);g{var{children:f}=i,c=hU(i,["children"]);let g=Object.assign(Object.assign({},c),{marginLeft:c.marginLeft||c.marginX||c.margin||0,marginRight:c.marginRight||c.marginX||c.margin||0,marginTop:c.marginTop||c.marginY||c.margin||0,marginBottom:c.marginBottom||c.marginY||c.margin||0,paddingLeft:c.paddingLeft||c.paddingX||c.padding||0,paddingRight:c.paddingRight||c.paddingX||c.padding||0,paddingTop:c.paddingTop||c.paddingY||c.padding||0,paddingBottom:c.paddingBottom||c.paddingY||c.padding||0});return D5.default.createElement("ink-box",{ref:u,style:g},f)});U3.displayName="Box";U3.defaultProps={flexDirection:"row",flexGrow:0,flexShrink:1};hs.default=U3});var W3=Me(R2=>{"use strict";var q3=R2&&R2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(R2,"__esModule",{value:!0});var mU=q3(lr()),Aa=q3(Jh()),E5=q3(E3()),z3=({color:i,backgroundColor:u,dimColor:f,bold:c,italic:g,underline:t,strikethrough:C,inverse:A,wrap:x,children:D})=>{if(D==null)return null;let L=N=>(f&&(N=Aa.default.dim(N)),i&&(N=E5.default(N,i,"foreground")),u&&(N=E5.default(N,u,"background")),c&&(N=Aa.default.bold(N)),g&&(N=Aa.default.italic(N)),t&&(N=Aa.default.underline(N)),C&&(N=Aa.default.strikethrough(N)),A&&(N=Aa.default.inverse(N)),N);return mU.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row",textWrap:x},internal_transform:L},D)};z3.displayName="Text";z3.defaultProps={dimColor:!1,bold:!1,italic:!1,underline:!1,strikethrough:!1,wrap:"wrap"};R2.default=z3});var x5=Me(ms=>{"use strict";var vU=ms&&ms.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),gU=ms&&ms.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),_U=ms&&ms.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&vU(u,i,f);return gU(u,i),u},N2=ms&&ms.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(ms,"__esModule",{value:!0});var S5=_U(require("fs")),ui=N2(lr()),C5=N2(v5()),yU=N2(w5()),ef=N2(tm()),il=N2(W3()),T5=new C5.default({cwd:process.cwd(),internals:C5.default.nodeInternals()}),wU=({error:i})=>{let u=i.stack?i.stack.split(` -`).slice(1):void 0,f=u?T5.parseLine(u[0]):void 0,c,g=0;if((f==null?void 0:f.file)&&(f==null?void 0:f.line)&&S5.existsSync(f.file)){let t=S5.readFileSync(f.file,"utf8");if(c=yU.default(t,f.line),c)for(let{line:C}of c)g=Math.max(g,String(C).length)}return ui.default.createElement(ef.default,{flexDirection:"column",padding:1},ui.default.createElement(ef.default,null,ui.default.createElement(il.default,{backgroundColor:"red",color:"white"}," ","ERROR"," "),ui.default.createElement(il.default,null," ",i.message)),f&&ui.default.createElement(ef.default,{marginTop:1},ui.default.createElement(il.default,{dimColor:!0},f.file,":",f.line,":",f.column)),f&&c&&ui.default.createElement(ef.default,{marginTop:1,flexDirection:"column"},c.map(({line:t,value:C})=>ui.default.createElement(ef.default,{key:t},ui.default.createElement(ef.default,{width:g+1},ui.default.createElement(il.default,{dimColor:t!==f.line,backgroundColor:t===f.line?"red":void 0,color:t===f.line?"white":void 0},String(t).padStart(g," "),":")),ui.default.createElement(il.default,{key:t,backgroundColor:t===f.line?"red":void 0,color:t===f.line?"white":void 0}," "+C)))),i.stack&&ui.default.createElement(ef.default,{marginTop:1,flexDirection:"column"},i.stack.split(` -`).slice(1).map(t=>{let C=T5.parseLine(t);return C?ui.default.createElement(ef.default,{key:t},ui.default.createElement(il.default,{dimColor:!0},"- "),ui.default.createElement(il.default,{dimColor:!0,bold:!0},C.function),ui.default.createElement(il.default,{dimColor:!0,color:"gray"}," ","(",C.file,":",C.line,":",C.column,")")):ui.default.createElement(ef.default,{key:t},ui.default.createElement(il.default,{dimColor:!0},"- "),ui.default.createElement(il.default,{dimColor:!0,bold:!0},t))})))};ms.default=wU});var A5=Me(vs=>{"use strict";var DU=vs&&vs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),EU=vs&&vs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),SU=vs&&vs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&DU(u,i,f);return EU(u,i),u},yc=vs&&vs.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(vs,"__esModule",{value:!0});var wc=SU(lr()),k5=yc(gy()),CU=yc(P3()),TU=yc(F3()),xU=yc(R3()),kU=yc(B3()),AU=yc(Zh()),OU=yc(x5()),IU=" ",PU="",MU="",H3=class extends wc.PureComponent{constructor(){super(...arguments);this.state={isFocusEnabled:!0,activeFocusId:void 0,focusables:[],error:void 0},this.rawModeEnabledCount=0,this.handleSetRawMode=u=>{let{stdin:f}=this.props;if(!this.isRawModeSupported())throw f===process.stdin?new Error(`Raw mode is not supported on the current process.stdin, which Ink uses as input stream by default. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`):new Error(`Raw mode is not supported on the stdin provided to Ink. -Read about how to prevent this error on https://github.com/vadimdemedes/ink/#israwmodesupported`);if(f.setEncoding("utf8"),u){this.rawModeEnabledCount===0&&(f.addListener("data",this.handleInput),f.resume(),f.setRawMode(!0)),this.rawModeEnabledCount++;return}--this.rawModeEnabledCount==0&&(f.setRawMode(!1),f.removeListener("data",this.handleInput),f.pause())},this.handleInput=u=>{u===""&&this.props.exitOnCtrlC&&this.handleExit(),u===MU&&this.state.activeFocusId&&this.setState({activeFocusId:void 0}),this.state.isFocusEnabled&&this.state.focusables.length>0&&(u===IU&&this.focusNext(),u===PU&&this.focusPrevious())},this.handleExit=u=>{this.isRawModeSupported()&&this.handleSetRawMode(!1),this.props.onExit(u)},this.enableFocus=()=>{this.setState({isFocusEnabled:!0})},this.disableFocus=()=>{this.setState({isFocusEnabled:!1})},this.focusNext=()=>{this.setState(u=>{let f=u.focusables[0].id;return{activeFocusId:this.findNextFocusable(u)||f}})},this.focusPrevious=()=>{this.setState(u=>{let f=u.focusables[u.focusables.length-1].id;return{activeFocusId:this.findPreviousFocusable(u)||f}})},this.addFocusable=(u,{autoFocus:f})=>{this.setState(c=>{let g=c.activeFocusId;return!g&&f&&(g=u),{activeFocusId:g,focusables:[...c.focusables,{id:u,isActive:!0}]}})},this.removeFocusable=u=>{this.setState(f=>({activeFocusId:f.activeFocusId===u?void 0:f.activeFocusId,focusables:f.focusables.filter(c=>c.id!==u)}))},this.activateFocusable=u=>{this.setState(f=>({focusables:f.focusables.map(c=>c.id!==u?c:{id:u,isActive:!0})}))},this.deactivateFocusable=u=>{this.setState(f=>({activeFocusId:f.activeFocusId===u?void 0:f.activeFocusId,focusables:f.focusables.map(c=>c.id!==u?c:{id:u,isActive:!1})}))},this.findNextFocusable=u=>{let f=u.focusables.findIndex(c=>c.id===u.activeFocusId);for(let c=f+1;c{let f=u.focusables.findIndex(c=>c.id===u.activeFocusId);for(let c=f-1;c>=0;c--)if(u.focusables[c].isActive)return u.focusables[c].id}}static getDerivedStateFromError(u){return{error:u}}isRawModeSupported(){return this.props.stdin.isTTY}render(){return wc.default.createElement(CU.default.Provider,{value:{exit:this.handleExit}},wc.default.createElement(TU.default.Provider,{value:{stdin:this.props.stdin,setRawMode:this.handleSetRawMode,isRawModeSupported:this.isRawModeSupported(),internal_exitOnCtrlC:this.props.exitOnCtrlC}},wc.default.createElement(xU.default.Provider,{value:{stdout:this.props.stdout,write:this.props.writeToStdout}},wc.default.createElement(kU.default.Provider,{value:{stderr:this.props.stderr,write:this.props.writeToStderr}},wc.default.createElement(AU.default.Provider,{value:{activeId:this.state.activeFocusId,add:this.addFocusable,remove:this.removeFocusable,activate:this.activateFocusable,deactivate:this.deactivateFocusable,enableFocus:this.enableFocus,disableFocus:this.disableFocus,focusNext:this.focusNext,focusPrevious:this.focusPrevious}},this.state.error?wc.default.createElement(OU.default,{error:this.state.error}):this.props.children)))))}componentDidMount(){k5.default.hide(this.props.stdout)}componentWillUnmount(){k5.default.show(this.props.stdout),this.isRawModeSupported()&&this.handleSetRawMode(!1)}componentDidCatch(u){this.handleExit(u)}};vs.default=H3;H3.displayName="InternalApp"});var M5=Me(gs=>{"use strict";var FU=gs&&gs.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),LU=gs&&gs.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),RU=gs&&gs.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&FU(u,i,f);return LU(u,i),u},_s=gs&&gs.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(gs,"__esModule",{value:!0});var NU=_s(lr()),O5=AD(),BU=_s(WD()),jU=_s(ay()),UU=_s(KD()),qU=_s(JD()),nm=_s(lS()),zU=_s(t5()),WU=_s(vy()),HU=_s(o5()),bU=RU(Xy()),GU=_s(O3()),VU=_s(A5()),Oa=process.env.CI==="false"?!1:UU.default,I5=()=>{},P5=class{constructor(u){this.resolveExitPromise=()=>{},this.rejectExitPromise=()=>{},this.unsubscribeExit=()=>{},this.onRender=()=>{if(this.isUnmounted)return;let{output:f,outputHeight:c,staticOutput:g}=zU.default(this.rootNode,this.options.stdout.columns||80),t=g&&g!==` -`;if(this.options.debug){t&&(this.fullStaticOutput+=g),this.options.stdout.write(this.fullStaticOutput+f);return}if(Oa){t&&this.options.stdout.write(g),this.lastOutput=f;return}if(t&&(this.fullStaticOutput+=g),c>=this.options.stdout.rows){this.options.stdout.write(jU.default.clearTerminal+this.fullStaticOutput+f),this.lastOutput=f;return}t&&(this.log.clear(),this.options.stdout.write(g),this.log(f)),!t&&f!==this.lastOutput&&this.throttledLog(f),this.lastOutput=f},qU.default(this),this.options=u,this.rootNode=bU.createNode("ink-root"),this.rootNode.onRender=u.debug?this.onRender:O5.throttle(this.onRender,32,{leading:!0,trailing:!0}),this.rootNode.onImmediateRender=this.onRender,this.log=BU.default.create(u.stdout),this.throttledLog=u.debug?this.log:O5.throttle(this.log,void 0,{leading:!0,trailing:!0}),this.isUnmounted=!1,this.lastOutput="",this.fullStaticOutput="",this.container=nm.default.createContainer(this.rootNode,!1,!1),this.unsubscribeExit=WU.default(this.unmount,{alwaysLast:!1}),process.env.DEV==="true"&&nm.default.injectIntoDevTools({bundleType:0,version:"16.13.1",rendererPackageName:"ink"}),u.patchConsole&&this.patchConsole(),Oa||(u.stdout.on("resize",this.onRender),this.unsubscribeResize=()=>{u.stdout.off("resize",this.onRender)})}render(u){let f=NU.default.createElement(VU.default,{stdin:this.options.stdin,stdout:this.options.stdout,stderr:this.options.stderr,writeToStdout:this.writeToStdout,writeToStderr:this.writeToStderr,exitOnCtrlC:this.options.exitOnCtrlC,onExit:this.unmount},u);nm.default.updateContainer(f,this.container,null,I5)}writeToStdout(u){if(!this.isUnmounted){if(this.options.debug){this.options.stdout.write(u+this.fullStaticOutput+this.lastOutput);return}if(Oa){this.options.stdout.write(u);return}this.log.clear(),this.options.stdout.write(u),this.log(this.lastOutput)}}writeToStderr(u){if(!this.isUnmounted){if(this.options.debug){this.options.stderr.write(u),this.options.stdout.write(this.fullStaticOutput+this.lastOutput);return}if(Oa){this.options.stderr.write(u);return}this.log.clear(),this.options.stderr.write(u),this.log(this.lastOutput)}}unmount(u){this.isUnmounted||(this.onRender(),this.unsubscribeExit(),typeof this.restoreConsole=="function"&&this.restoreConsole(),typeof this.unsubscribeResize=="function"&&this.unsubscribeResize(),Oa?this.options.stdout.write(this.lastOutput+` -`):this.options.debug||this.log.done(),this.isUnmounted=!0,nm.default.updateContainer(null,this.container,null,I5),GU.default.delete(this.options.stdout),u instanceof Error?this.rejectExitPromise(u):this.resolveExitPromise())}waitUntilExit(){return this.exitPromise||(this.exitPromise=new Promise((u,f)=>{this.resolveExitPromise=u,this.rejectExitPromise=f})),this.exitPromise}clear(){!Oa&&!this.options.debug&&this.log.clear()}patchConsole(){this.options.debug||(this.restoreConsole=HU.default((u,f)=>{u==="stdout"&&this.writeToStdout(f),u==="stderr"&&(f.startsWith("The above error occurred")||this.writeToStderr(f))}))}};gs.default=P5});var L5=Me(B2=>{"use strict";var F5=B2&&B2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(B2,"__esModule",{value:!0});var YU=F5(M5()),rm=F5(O3()),$U=require("stream"),JU=(i,u)=>{let f=Object.assign({stdout:process.stdout,stdin:process.stdin,stderr:process.stderr,debug:!1,exitOnCtrlC:!0,patchConsole:!0},KU(u)),c=XU(f.stdout,()=>new YU.default(f));return c.render(i),{rerender:c.render,unmount:()=>c.unmount(),waitUntilExit:c.waitUntilExit,cleanup:()=>rm.default.delete(f.stdout),clear:c.clear}};B2.default=JU;var KU=(i={})=>i instanceof $U.Stream?{stdout:i,stdin:process.stdin}:i,XU=(i,u)=>{let f;return rm.default.has(i)?f=rm.default.get(i):(f=u(),rm.default.set(i,f)),f}});var N5=Me(tf=>{"use strict";var QU=tf&&tf.__createBinding||(Object.create?function(i,u,f,c){c===void 0&&(c=f),Object.defineProperty(i,c,{enumerable:!0,get:function(){return u[f]}})}:function(i,u,f,c){c===void 0&&(c=f),i[c]=u[f]}),ZU=tf&&tf.__setModuleDefault||(Object.create?function(i,u){Object.defineProperty(i,"default",{enumerable:!0,value:u})}:function(i,u){i.default=u}),eq=tf&&tf.__importStar||function(i){if(i&&i.__esModule)return i;var u={};if(i!=null)for(var f in i)f!=="default"&&Object.hasOwnProperty.call(i,f)&&QU(u,i,f);return ZU(u,i),u};Object.defineProperty(tf,"__esModule",{value:!0});var j2=eq(lr()),R5=i=>{let{items:u,children:f,style:c}=i,[g,t]=j2.useState(0),C=j2.useMemo(()=>u.slice(g),[u,g]);j2.useLayoutEffect(()=>{t(u.length)},[u.length]);let A=C.map((D,L)=>f(D,g+L)),x=j2.useMemo(()=>Object.assign({position:"absolute",flexDirection:"column"},c),[c]);return j2.default.createElement("ink-box",{internal_static:!0,style:x},A)};R5.displayName="Static";tf.default=R5});var j5=Me(U2=>{"use strict";var tq=U2&&U2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(U2,"__esModule",{value:!0});var nq=tq(lr()),B5=({children:i,transform:u})=>i==null?null:nq.default.createElement("ink-text",{style:{flexGrow:0,flexShrink:1,flexDirection:"row"},internal_transform:u},i);B5.displayName="Transform";U2.default=B5});var q5=Me(q2=>{"use strict";var rq=q2&&q2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(q2,"__esModule",{value:!0});var iq=rq(lr()),U5=({count:i=1})=>iq.default.createElement("ink-text",null,` -`.repeat(i));U5.displayName="Newline";q2.default=U5});var H5=Me(z2=>{"use strict";var z5=z2&&z2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(z2,"__esModule",{value:!0});var oq=z5(lr()),uq=z5(tm()),W5=()=>oq.default.createElement(uq.default,{flexGrow:1});W5.displayName="Spacer";z2.default=W5});var im=Me(W2=>{"use strict";var sq=W2&&W2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(W2,"__esModule",{value:!0});var lq=lr(),fq=sq(F3()),cq=()=>lq.useContext(fq.default);W2.default=cq});var G5=Me(H2=>{"use strict";var aq=H2&&H2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(H2,"__esModule",{value:!0});var b5=lr(),dq=aq(im()),pq=(i,u={})=>{let{stdin:f,setRawMode:c,internal_exitOnCtrlC:g}=dq.default();b5.useEffect(()=>{if(u.isActive!==!1)return c(!0),()=>{c(!1)}},[u.isActive,c]),b5.useEffect(()=>{if(u.isActive===!1)return;let t=C=>{let A=String(C),x={upArrow:A==="",downArrow:A==="",leftArrow:A==="",rightArrow:A==="",pageDown:A==="[6~",pageUp:A==="[5~",return:A==="\r",escape:A==="",ctrl:!1,shift:!1,tab:A===" "||A==="",backspace:A==="\b",delete:A==="\x7F"||A==="[3~",meta:!1};A<=""&&!x.return&&(A=String.fromCharCode(A.charCodeAt(0)+"a".charCodeAt(0)-1),x.ctrl=!0),A.startsWith("")&&(A=A.slice(1),x.meta=!0);let D=A>="A"&&A<="Z",L=A>="\u0410"&&A<="\u042F";A.length===1&&(D||L)&&(x.shift=!0),x.tab&&A==="[Z"&&(x.shift=!0),(x.tab||x.backspace||x.delete)&&(A=""),(!(A==="c"&&x.ctrl)||!g)&&i(A,x)};return f==null||f.on("data",t),()=>{f==null||f.off("data",t)}},[u.isActive,f,g,i])};H2.default=pq});var V5=Me(b2=>{"use strict";var hq=b2&&b2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(b2,"__esModule",{value:!0});var mq=lr(),vq=hq(P3()),gq=()=>mq.useContext(vq.default);b2.default=gq});var Y5=Me(G2=>{"use strict";var _q=G2&&G2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(G2,"__esModule",{value:!0});var yq=lr(),wq=_q(R3()),Dq=()=>yq.useContext(wq.default);G2.default=Dq});var $5=Me(V2=>{"use strict";var Eq=V2&&V2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(V2,"__esModule",{value:!0});var Sq=lr(),Cq=Eq(B3()),Tq=()=>Sq.useContext(Cq.default);V2.default=Tq});var X5=Me(Y2=>{"use strict";var K5=Y2&&Y2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(Y2,"__esModule",{value:!0});var $2=lr(),xq=K5(Zh()),kq=K5(im()),Aq=({isActive:i=!0,autoFocus:u=!1}={})=>{let{isRawModeSupported:f,setRawMode:c}=kq.default(),{activeId:g,add:t,remove:C,activate:A,deactivate:x}=$2.useContext(xq.default),D=$2.useMemo(()=>Math.random().toString().slice(2,7),[]);return $2.useEffect(()=>(t(D,{autoFocus:u}),()=>{C(D)}),[D,u]),$2.useEffect(()=>{i?A(D):x(D)},[i,D]),$2.useEffect(()=>{if(!(!f||!i))return c(!0),()=>{c(!1)}},[i]),{isFocused:Boolean(D)&&g===D}};Y2.default=Aq});var J5=Me(K2=>{"use strict";var Oq=K2&&K2.__importDefault||function(i){return i&&i.__esModule?i:{default:i}};Object.defineProperty(K2,"__esModule",{value:!0});var Iq=lr(),Pq=Oq(Zh()),Mq=()=>{let i=Iq.useContext(Pq.default);return{enableFocus:i.enableFocus,disableFocus:i.disableFocus,focusNext:i.focusNext,focusPrevious:i.focusPrevious}};K2.default=Mq});var Q5=Me(b3=>{"use strict";Object.defineProperty(b3,"__esModule",{value:!0});b3.default=i=>{var u,f,c,g;return{width:(f=(u=i.yogaNode)===null||u===void 0?void 0:u.getComputedWidth())!==null&&f!==void 0?f:0,height:(g=(c=i.yogaNode)===null||c===void 0?void 0:c.getComputedHeight())!==null&&g!==void 0?g:0}}});var ys=Me(ji=>{"use strict";Object.defineProperty(ji,"__esModule",{value:!0});var Fq=L5();Object.defineProperty(ji,"render",{enumerable:!0,get:function(){return Fq.default}});var Lq=tm();Object.defineProperty(ji,"Box",{enumerable:!0,get:function(){return Lq.default}});var Rq=W3();Object.defineProperty(ji,"Text",{enumerable:!0,get:function(){return Rq.default}});var Nq=N5();Object.defineProperty(ji,"Static",{enumerable:!0,get:function(){return Nq.default}});var Bq=j5();Object.defineProperty(ji,"Transform",{enumerable:!0,get:function(){return Bq.default}});var jq=q5();Object.defineProperty(ji,"Newline",{enumerable:!0,get:function(){return jq.default}});var Uq=H5();Object.defineProperty(ji,"Spacer",{enumerable:!0,get:function(){return Uq.default}});var qq=G5();Object.defineProperty(ji,"useInput",{enumerable:!0,get:function(){return qq.default}});var zq=V5();Object.defineProperty(ji,"useApp",{enumerable:!0,get:function(){return zq.default}});var Wq=im();Object.defineProperty(ji,"useStdin",{enumerable:!0,get:function(){return Wq.default}});var Hq=Y5();Object.defineProperty(ji,"useStdout",{enumerable:!0,get:function(){return Hq.default}});var bq=$5();Object.defineProperty(ji,"useStderr",{enumerable:!0,get:function(){return bq.default}});var Gq=X5();Object.defineProperty(ji,"useFocus",{enumerable:!0,get:function(){return Gq.default}});var Vq=J5();Object.defineProperty(ji,"useFocusManager",{enumerable:!0,get:function(){return Vq.default}});var Yq=Q5();Object.defineProperty(ji,"measureElement",{enumerable:!0,get:function(){return Yq.default}})});var lC=Me(X2=>{"use strict";Object.defineProperty(X2,"__esModule",{value:!0});X2.UncontrolledTextInput=void 0;var oC=lr(),Y3=lr(),uC=ys(),Sc=Jh(),sC=({value:i,placeholder:u="",focus:f=!0,mask:c,highlightPastedText:g=!1,showCursor:t=!0,onChange:C,onSubmit:A})=>{let[{cursorOffset:x,cursorWidth:D},L]=Y3.useState({cursorOffset:(i||"").length,cursorWidth:0});Y3.useEffect(()=>{L(re=>{if(!f||!t)return re;let ce=i||"";return re.cursorOffset>ce.length-1?{cursorOffset:ce.length,cursorWidth:0}:re})},[i,f,t]);let N=g?D:0,j=c?c.repeat(i.length):i,$=j,h=u?Sc.grey(u):void 0;if(t&&f){h=u.length>0?Sc.inverse(u[0])+Sc.grey(u.slice(1)):Sc.inverse(" "),$=j.length>0?"":Sc.inverse(" ");let re=0;for(let ce of j)re>=x-N&&re<=x?$+=Sc.inverse(ce):$+=ce,re++;j.length>0&&x===j.length&&($+=Sc.inverse(" "))}return uC.useInput((re,ce)=>{if(ce.upArrow||ce.downArrow||ce.ctrl&&re==="c"||ce.tab||ce.shift&&ce.tab)return;if(ce.return){A&&A(i);return}let Q=x,oe=i,Se=0;ce.leftArrow?t&&Q--:ce.rightArrow?t&&Q++:ce.backspace||ce.delete?x>0&&(oe=i.slice(0,x-1)+i.slice(x,i.length),Q--):(oe=i.slice(0,x)+re+i.slice(x,i.length),Q+=re.length,re.length>1&&(Se=re.length)),x<0&&(Q=0),x>i.length&&(Q=i.length),L({cursorOffset:Q,cursorWidth:Se}),oe!==i&&C(oe)},{isActive:f}),oC.createElement(uC.Text,null,u?j.length>0?$:h:$)};X2.default=sC;X2.UncontrolledTextInput=i=>{let[u,f]=Y3.useState("");return oC.createElement(sC,Object.assign({},i,{value:u,onChange:f}))}});var cC=Me(pm=>{"use strict";Object.defineProperty(pm,"__esModule",{value:!0});function J2(i){let u=[...i.caches],f=u.shift();return f===void 0?fC():{get(c,g,t={miss:()=>Promise.resolve()}){return f.get(c,g,t).catch(()=>J2({caches:u}).get(c,g,t))},set(c,g){return f.set(c,g).catch(()=>J2({caches:u}).set(c,g))},delete(c){return f.delete(c).catch(()=>J2({caches:u}).delete(c))},clear(){return f.clear().catch(()=>J2({caches:u}).clear())}}}function fC(){return{get(i,u,f={miss:()=>Promise.resolve()}){return u().then(g=>Promise.all([g,f.miss(g)])).then(([g])=>g)},set(i,u){return Promise.resolve(u)},delete(i){return Promise.resolve()},clear(){return Promise.resolve()}}}pm.createFallbackableCache=J2;pm.createNullCache=fC});var dC=Me((fV,aC)=>{aC.exports=cC()});var pC=Me($3=>{"use strict";Object.defineProperty($3,"__esModule",{value:!0});function $q(i={serializable:!0}){let u={};return{get(f,c,g={miss:()=>Promise.resolve()}){let t=JSON.stringify(f);if(t in u)return Promise.resolve(i.serializable?JSON.parse(u[t]):u[t]);let C=c(),A=g&&g.miss||(()=>Promise.resolve());return C.then(x=>A(x)).then(()=>C)},set(f,c){return u[JSON.stringify(f)]=i.serializable?JSON.stringify(c):c,Promise.resolve(c)},delete(f){return delete u[JSON.stringify(f)],Promise.resolve()},clear(){return u={},Promise.resolve()}}}$3.createInMemoryCache=$q});var mC=Me((aV,hC)=>{hC.exports=pC()});var gC=Me(ws=>{"use strict";Object.defineProperty(ws,"__esModule",{value:!0});function Kq(i,u,f){let c={"x-algolia-api-key":f,"x-algolia-application-id":u};return{headers(){return i===K3.WithinHeaders?c:{}},queryParameters(){return i===K3.WithinQueryParameters?c:{}}}}function Xq(i){let u=0,f=()=>(u++,new Promise(c=>{setTimeout(()=>{c(i(f))},Math.min(100*u,1e3))}));return i(f)}function vC(i,u=(f,c)=>Promise.resolve()){return Object.assign(i,{wait(f){return vC(i.then(c=>Promise.all([u(c,f),c])).then(c=>c[1]))}})}function Jq(i){let u=i.length-1;for(u;u>0;u--){let f=Math.floor(Math.random()*(u+1)),c=i[u];i[u]=i[f],i[f]=c}return i}function Qq(i,u){return Object.keys(u!==void 0?u:{}).forEach(f=>{i[f]=u[f](i)}),i}function Zq(i,...u){let f=0;return i.replace(/%s/g,()=>encodeURIComponent(u[f++]))}var ez="4.2.0",tz=i=>()=>i.transporter.requester.destroy(),K3={WithinQueryParameters:0,WithinHeaders:1};ws.AuthMode=K3;ws.addMethods=Qq;ws.createAuth=Kq;ws.createRetryablePromise=Xq;ws.createWaitablePromise=vC;ws.destroy=tz;ws.encode=Zq;ws.shuffle=Jq;ws.version=ez});var Q2=Me((pV,_C)=>{_C.exports=gC()});var yC=Me(X3=>{"use strict";Object.defineProperty(X3,"__esModule",{value:!0});var nz={Delete:"DELETE",Get:"GET",Post:"POST",Put:"PUT"};X3.MethodEnum=nz});var Z2=Me((mV,wC)=>{wC.exports=yC()});var RC=Me(y0=>{"use strict";Object.defineProperty(y0,"__esModule",{value:!0});var DC=Z2();function J3(i,u){let f=i||{},c=f.data||{};return Object.keys(f).forEach(g=>{["timeout","headers","queryParameters","data","cacheable"].indexOf(g)===-1&&(c[g]=f[g])}),{data:Object.entries(c).length>0?c:void 0,timeout:f.timeout||u,headers:f.headers||{},queryParameters:f.queryParameters||{},cacheable:f.cacheable}}var hm={Read:1,Write:2,Any:3},Ia={Up:1,Down:2,Timeouted:3},EC=2*60*1e3;function Q3(i,u=Ia.Up){return zn(dt({},i),{status:u,lastUpdate:Date.now()})}function SC(i){return i.status===Ia.Up||Date.now()-i.lastUpdate>EC}function CC(i){return i.status===Ia.Timeouted&&Date.now()-i.lastUpdate<=EC}function Z3(i){return{protocol:i.protocol||"https",url:i.url,accept:i.accept||hm.Any}}function rz(i,u){return Promise.all(u.map(f=>i.get(f,()=>Promise.resolve(Q3(f))))).then(f=>{let c=f.filter(A=>SC(A)),g=f.filter(A=>CC(A)),t=[...c,...g],C=t.length>0?t.map(A=>Z3(A)):u;return{getTimeout(A,x){return(g.length===0&&A===0?1:g.length+3+A)*x},statelessHosts:C}})}var iz=({isTimedOut:i,status:u})=>!i&&~~u==0,oz=i=>{let u=i.status;return i.isTimedOut||iz(i)||~~(u/100)!=2&&~~(u/100)!=4},uz=({status:i})=>~~(i/100)==2,sz=(i,u)=>oz(i)?u.onRetry(i):uz(i)?u.onSucess(i):u.onFail(i);function PC(i,u,f,c){let g=[],t=AC(f,c),C=OC(i,c),A=f.method,x=f.method!==DC.MethodEnum.Get?{}:dt(dt({},f.data),c.data),D=dt(dt(dt({"x-algolia-agent":i.userAgent.value},i.queryParameters),x),c.queryParameters),L=0,N=(j,$)=>{let h=j.pop();if(h===void 0)throw IC(ew(g));let re={data:t,headers:C,method:A,url:kC(h,f.path,D),connectTimeout:$(L,i.timeouts.connect),responseTimeout:$(L,c.timeout)},ce=oe=>{let Se={request:re,response:oe,host:h,triesLeft:j.length};return g.push(Se),Se},Q={onSucess:oe=>TC(oe),onRetry(oe){let Se=ce(oe);return oe.isTimedOut&&L++,Promise.all([i.logger.info("Retryable failure",tw(Se)),i.hostsCache.set(h,Q3(h,oe.isTimedOut?Ia.Timeouted:Ia.Down))]).then(()=>N(j,$))},onFail(oe){throw ce(oe),xC(oe,ew(g))}};return i.requester.send(re).then(oe=>sz(oe,Q))};return rz(i.hostsCache,u).then(j=>N([...j.statelessHosts].reverse(),j.getTimeout))}function lz(i){let{hostsCache:u,logger:f,requester:c,requestsCache:g,responsesCache:t,timeouts:C,userAgent:A,hosts:x,queryParameters:D,headers:L}=i,N={hostsCache:u,logger:f,requester:c,requestsCache:g,responsesCache:t,timeouts:C,userAgent:A,headers:L,queryParameters:D,hosts:x.map(j=>Z3(j)),read(j,$){let h=J3($,N.timeouts.read),re=()=>PC(N,N.hosts.filter(oe=>(oe.accept&hm.Read)!=0),j,h);if((h.cacheable!==void 0?h.cacheable:j.cacheable)!==!0)return re();let Q={request:j,mappedRequestOptions:h,transporter:{queryParameters:N.queryParameters,headers:N.headers}};return N.responsesCache.get(Q,()=>N.requestsCache.get(Q,()=>N.requestsCache.set(Q,re()).then(oe=>Promise.all([N.requestsCache.delete(Q),oe]),oe=>Promise.all([N.requestsCache.delete(Q),Promise.reject(oe)])).then(([oe,Se])=>Se)),{miss:oe=>N.responsesCache.set(Q,oe)})},write(j,$){return PC(N,N.hosts.filter(h=>(h.accept&hm.Write)!=0),j,J3($,N.timeouts.write))}};return N}function fz(i){let u={value:`Algolia for JavaScript (${i})`,add(f){let c=`; ${f.segment}${f.version!==void 0?` (${f.version})`:""}`;return u.value.indexOf(c)===-1&&(u.value=`${u.value}${c}`),u}};return u}function TC(i){try{return JSON.parse(i.content)}catch(u){throw MC(u.message,i)}}function xC({content:i,status:u},f){let c=i;try{c=JSON.parse(i).message}catch(g){}return FC(c,u,f)}function cz(i,...u){let f=0;return i.replace(/%s/g,()=>encodeURIComponent(u[f++]))}function kC(i,u,f){let c=LC(f),g=`${i.protocol}://${i.url}/${u.charAt(0)==="/"?u.substr(1):u}`;return c.length&&(g+=`?${c}`),g}function LC(i){let u=f=>Object.prototype.toString.call(f)==="[object Object]"||Object.prototype.toString.call(f)==="[object Array]";return Object.keys(i).map(f=>cz("%s=%s",f,u(i[f])?JSON.stringify(i[f]):i[f])).join("&")}function AC(i,u){if(i.method===DC.MethodEnum.Get||i.data===void 0&&u.data===void 0)return;let f=Array.isArray(i.data)?i.data:dt(dt({},i.data),u.data);return JSON.stringify(f)}function OC(i,u){let f=dt(dt({},i.headers),u.headers),c={};return Object.keys(f).forEach(g=>{let t=f[g];c[g.toLowerCase()]=t}),c}function ew(i){return i.map(u=>tw(u))}function tw(i){let u=i.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return zn(dt({},i),{request:zn(dt({},i.request),{headers:dt(dt({},i.request.headers),u)})})}function FC(i,u,f){return{name:"ApiError",message:i,status:u,transporterStackTrace:f}}function MC(i,u){return{name:"DeserializationError",message:i,response:u}}function IC(i){return{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:i}}y0.CallEnum=hm;y0.HostStatusEnum=Ia;y0.createApiError=FC;y0.createDeserializationError=MC;y0.createMappedRequestOptions=J3;y0.createRetryError=IC;y0.createStatefulHost=Q3;y0.createStatelessHost=Z3;y0.createTransporter=lz;y0.createUserAgent=fz;y0.deserializeFailure=xC;y0.deserializeSuccess=TC;y0.isStatefulHostTimeouted=CC;y0.isStatefulHostUp=SC;y0.serializeData=AC;y0.serializeHeaders=OC;y0.serializeQueryParameters=LC;y0.serializeUrl=kC;y0.stackFrameWithoutCredentials=tw;y0.stackTraceWithoutCredentials=ew});var ed=Me((gV,NC)=>{NC.exports=RC()});var BC=Me(Hf=>{"use strict";Object.defineProperty(Hf,"__esModule",{value:!0});var Pa=Q2(),az=ed(),td=Z2(),dz=i=>{let u=i.region||"us",f=Pa.createAuth(Pa.AuthMode.WithinHeaders,i.appId,i.apiKey),c=az.createTransporter(zn(dt({hosts:[{url:`analytics.${u}.algolia.com`}]},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/json"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)})),g=i.appId;return Pa.addMethods({appId:g,transporter:c},i.methods)},pz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Post,path:"2/abtests",data:u},f),hz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Delete,path:Pa.encode("2/abtests/%s",u)},f),mz=i=>(u,f)=>i.transporter.read({method:td.MethodEnum.Get,path:Pa.encode("2/abtests/%s",u)},f),vz=i=>u=>i.transporter.read({method:td.MethodEnum.Get,path:"2/abtests"},u),gz=i=>(u,f)=>i.transporter.write({method:td.MethodEnum.Post,path:Pa.encode("2/abtests/%s/stop",u)},f);Hf.addABTest=pz;Hf.createAnalyticsClient=dz;Hf.deleteABTest=hz;Hf.getABTest=mz;Hf.getABTests=vz;Hf.stopABTest=gz});var UC=Me((yV,jC)=>{jC.exports=BC()});var zC=Me(nd=>{"use strict";Object.defineProperty(nd,"__esModule",{value:!0});var nw=Q2(),_z=ed(),qC=Z2(),yz=i=>{let u=i.region||"us",f=nw.createAuth(nw.AuthMode.WithinHeaders,i.appId,i.apiKey),c=_z.createTransporter(zn(dt({hosts:[{url:`recommendation.${u}.algolia.com`}]},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/json"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)}));return nw.addMethods({appId:i.appId,transporter:c},i.methods)},wz=i=>u=>i.transporter.read({method:qC.MethodEnum.Get,path:"1/strategies/personalization"},u),Dz=i=>(u,f)=>i.transporter.write({method:qC.MethodEnum.Post,path:"1/strategies/personalization",data:u},f);nd.createRecommendationClient=yz;nd.getPersonalizationStrategy=wz;nd.setPersonalizationStrategy=Dz});var HC=Me((DV,WC)=>{WC.exports=zC()});var nT=Me(yt=>{"use strict";Object.defineProperty(yt,"__esModule",{value:!0});var Wt=Q2(),jo=ed(),Rn=Z2(),Ez=require("crypto");function mm(i){let u=f=>i.request(f).then(c=>{if(i.batch!==void 0&&i.batch(c.hits),!i.shouldStop(c))return c.cursor?u({cursor:c.cursor}):u({page:(f.page||0)+1})});return u({})}var Sz=i=>{let u=i.appId,f=Wt.createAuth(i.authMode!==void 0?i.authMode:Wt.AuthMode.WithinHeaders,u,i.apiKey),c=jo.createTransporter(zn(dt({hosts:[{url:`${u}-dsn.algolia.net`,accept:jo.CallEnum.Read},{url:`${u}.algolia.net`,accept:jo.CallEnum.Write}].concat(Wt.shuffle([{url:`${u}-1.algolianet.com`},{url:`${u}-2.algolianet.com`},{url:`${u}-3.algolianet.com`}]))},i),{headers:dt(zn(dt({},f.headers()),{"content-type":"application/x-www-form-urlencoded"}),i.headers),queryParameters:dt(dt({},f.queryParameters()),i.queryParameters)})),g={transporter:c,appId:u,addAlgoliaAgent(t,C){c.userAgent.add({segment:t,version:C})},clearCache(){return Promise.all([c.requestsCache.clear(),c.responsesCache.clear()]).then(()=>{})}};return Wt.addMethods(g,i.methods)};function bC(){return{name:"MissingObjectIDError",message:"All objects must have an unique objectID (like a primary key) to be valid. Algolia is also able to generate objectIDs automatically but *it's not recommended*. To do it, use the `{'autoGenerateObjectIDIfNotExist': true}` option."}}function GC(){return{name:"ObjectNotFoundError",message:"Object not found."}}function VC(){return{name:"ValidUntilNotFoundError",message:"ValidUntil not found in given secured api key."}}var Cz=i=>(u,f)=>{let A=f||{},{queryParameters:c}=A,g=Si(A,["queryParameters"]),t=dt({acl:u},c!==void 0?{queryParameters:c}:{}),C=(x,D)=>Wt.createRetryablePromise(L=>rd(i)(x.key,D).catch(N=>{if(N.status!==404)throw N;return L()}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:"1/keys",data:t},g),C)},Tz=i=>(u,f,c)=>{let g=jo.createMappedRequestOptions(c);return g.queryParameters["X-Algolia-User-ID"]=u,i.transporter.write({method:Rn.MethodEnum.Post,path:"1/clusters/mapping",data:{cluster:f}},g)},xz=i=>(u,f,c)=>i.transporter.write({method:Rn.MethodEnum.Post,path:"1/clusters/mapping/batch",data:{users:u,cluster:f}},c),vm=i=>(u,f,c)=>{let g=(t,C)=>id(i)(u,{methods:{waitTask:z0}}).waitTask(t.taskID,C);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",u),data:{operation:"copy",destination:f}},c),g)},kz=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Rules]})),Az=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Settings]})),Oz=i=>(u,f,c)=>vm(i)(u,f,zn(dt({},c),{scope:[gm.Synonyms]})),Iz=i=>(u,f)=>{let c=(g,t)=>Wt.createRetryablePromise(C=>rd(i)(u,t).then(C).catch(A=>{if(A.status!==404)throw A}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/keys/%s",u)},f),c)},Pz=()=>(i,u)=>{let f=jo.serializeQueryParameters(u),c=Ez.createHmac("sha256",i).update(f).digest("hex");return Buffer.from(c+f).toString("base64")},rd=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/keys/%s",u)},f),Mz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/logs"},u),Fz=()=>i=>{let u=Buffer.from(i,"base64").toString("ascii"),f=/validUntil=(\d+)/,c=u.match(f);if(c===null)throw VC();return parseInt(c[1],10)-Math.round(new Date().getTime()/1e3)},Lz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping/top"},u),Rz=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/clusters/mapping/%s",u)},f),Nz=i=>u=>{let g=u||{},{retrieveMappings:f}=g,c=Si(g,["retrieveMappings"]);return f===!0&&(c.getClusters=!0),i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping/pending"},c)},id=i=>(u,f={})=>{let c={transporter:i.transporter,appId:i.appId,indexName:u};return Wt.addMethods(c,f.methods)},Bz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/keys"},u),jz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters"},u),Uz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/indexes"},u),qz=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:"1/clusters/mapping"},u),zz=i=>(u,f,c)=>{let g=(t,C)=>id(i)(u,{methods:{waitTask:z0}}).waitTask(t.taskID,C);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",u),data:{operation:"move",destination:f}},c),g)},Wz=i=>(u,f)=>{let c=(g,t)=>Promise.all(Object.keys(g.taskID).map(C=>id(i)(C,{methods:{waitTask:z0}}).waitTask(g.taskID[C],t)));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:"1/indexes/*/batch",data:{requests:u}},f),c)},Hz=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:u}},f),bz=i=>(u,f)=>{let c=u.map(g=>zn(dt({},g),{params:jo.serializeQueryParameters(g.params||{})}));return i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/queries",data:{requests:c},cacheable:!0},f)},Gz=i=>(u,f)=>Promise.all(u.map(c=>{let A=c.params,{facetName:g,facetQuery:t}=A,C=Si(A,["facetName","facetQuery"]);return id(i)(c.indexName,{methods:{searchForFacetValues:YC}}).searchForFacetValues(g,t,dt(dt({},f),C))})),Vz=i=>(u,f)=>{let c=jo.createMappedRequestOptions(f);return c.queryParameters["X-Algolia-User-ID"]=u,i.transporter.write({method:Rn.MethodEnum.Delete,path:"1/clusters/mapping"},c)},Yz=i=>(u,f)=>{let c=(g,t)=>Wt.createRetryablePromise(C=>rd(i)(u,t).catch(A=>{if(A.status!==404)throw A;return C()}));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/keys/%s/restore",u)},f),c)},$z=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:"1/clusters/mapping/search",data:{query:u}},f),Kz=i=>(u,f)=>{let c=Object.assign({},f),L=f||{},{queryParameters:g}=L,t=Si(L,["queryParameters"]),C=g?{queryParameters:g}:{},A=["acl","indexes","referers","restrictSources","queryParameters","description","maxQueriesPerIPPerHour","maxHitsPerQuery"],x=N=>Object.keys(c).filter(j=>A.indexOf(j)!==-1).every(j=>N[j]===c[j]),D=(N,j)=>Wt.createRetryablePromise($=>rd(i)(u,j).then(h=>x(h)?Promise.resolve():$()));return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Put,path:Wt.encode("1/keys/%s",u),data:C},t),D)},$C=i=>(u,f)=>{let c=(g,t)=>z0(i)(g.taskID,t);return Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/batch",i.indexName),data:{requests:u}},f),c)},Xz=i=>u=>mm(zn(dt({},u),{shouldStop:f=>f.cursor===void 0,request:f=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/browse",i.indexName),data:f},u)})),Jz=i=>u=>{let f=dt({hitsPerPage:1e3},u);return mm(zn(dt({},f),{shouldStop:c=>c.hits.lengthzn(dt({},g),{hits:g.hits.map(t=>(delete t._highlightResult,t))}))}}))},Qz=i=>u=>{let f=dt({hitsPerPage:1e3},u);return mm(zn(dt({},f),{shouldStop:c=>c.hits.lengthzn(dt({},g),{hits:g.hits.map(t=>(delete t._highlightResult,t))}))}}))},_m=i=>(u,f,c)=>{let x=c||{},{batchSize:g}=x,t=Si(x,["batchSize"]),C={taskIDs:[],objectIDs:[]},A=(D=0)=>{let L=[],N;for(N=D;N({action:f,body:j})),t).then(j=>(C.objectIDs=C.objectIDs.concat(j.objectIDs),C.taskIDs.push(j.taskID),N++,A(N)))};return Wt.createWaitablePromise(A(),(D,L)=>Promise.all(D.taskIDs.map(N=>z0(i)(N,L))))},Zz=i=>u=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/clear",i.indexName)},u),(f,c)=>z0(i)(f.taskID,c)),eW=i=>u=>{let t=u||{},{forwardToReplicas:f}=t,c=Si(t,["forwardToReplicas"]),g=jo.createMappedRequestOptions(c);return f&&(g.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/clear",i.indexName)},g),(C,A)=>z0(i)(C.taskID,A))},tW=i=>u=>{let t=u||{},{forwardToReplicas:f}=t,c=Si(t,["forwardToReplicas"]),g=jo.createMappedRequestOptions(c);return f&&(g.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/clear",i.indexName)},g),(C,A)=>z0(i)(C.taskID,A))},nW=i=>(u,f)=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/deleteByQuery",i.indexName),data:u},f),(c,g)=>z0(i)(c.taskID,g)),rW=i=>u=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s",i.indexName)},u),(f,c)=>z0(i)(f.taskID,c)),iW=i=>(u,f)=>Wt.createWaitablePromise(JC(i)([u],f).then(c=>({taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),JC=i=>(u,f)=>{let c=u.map(g=>({objectID:g}));return _m(i)(c,Cc.DeleteObject,f)},oW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s/rules/%s",i.indexName,u)},t),(A,x)=>z0(i)(A.taskID,x))},uW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Delete,path:Wt.encode("1/indexes/%s/synonyms/%s",i.indexName,u)},t),(A,x)=>z0(i)(A.taskID,x))},sW=i=>u=>QC(i)(u).then(()=>!0).catch(f=>{if(f.status!==404)throw f;return!1}),lW=i=>(u,f)=>{let x=f||{},{query:c,paginate:g}=x,t=Si(x,["query","paginate"]),C=0,A=()=>ZC(i)(c||"",zn(dt({},t),{page:C})).then(D=>{for(let[L,N]of Object.entries(D.hits))if(u(N))return{object:N,position:parseInt(L,10),page:C};if(C++,g===!1||C>=D.nbPages)throw GC();return A()});return A()},fW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/%s",i.indexName,u)},f),cW=()=>(i,u)=>{for(let[f,c]of Object.entries(i.hits))if(c.objectID===u)return parseInt(f,10);return-1},aW=i=>(u,f)=>{let C=f||{},{attributesToRetrieve:c}=C,g=Si(C,["attributesToRetrieve"]),t=u.map(A=>dt({indexName:i.indexName,objectID:A},c?{attributesToRetrieve:c}:{}));return i.transporter.read({method:Rn.MethodEnum.Post,path:"1/indexes/*/objects",data:{requests:t}},g)},dW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/rules/%s",i.indexName,u)},f),QC=i=>u=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/settings",i.indexName),data:{getVersion:2}},u),pW=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/synonyms/%s",i.indexName,u)},f),eT=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Get,path:Wt.encode("1/indexes/%s/task/%s",i.indexName,u.toString())},f),hW=i=>(u,f)=>Wt.createWaitablePromise(tT(i)([u],f).then(c=>({objectID:c.objectIDs[0],taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),tT=i=>(u,f)=>{let C=f||{},{createIfNotExists:c}=C,g=Si(C,["createIfNotExists"]),t=c?Cc.PartialUpdateObject:Cc.PartialUpdateObjectNoCreate;return _m(i)(u,t,g)},mW=i=>(u,f)=>{let h=f||{},{safe:c,autoGenerateObjectIDIfNotExist:g,batchSize:t}=h,C=Si(h,["safe","autoGenerateObjectIDIfNotExist","batchSize"]),A=(re,ce,Q,oe)=>Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/operation",re),data:{operation:Q,destination:ce}},oe),(Se,me)=>z0(i)(Se.taskID,me)),x=Math.random().toString(36).substring(7),D=`${i.indexName}_tmp_${x}`,L=rw({appId:i.appId,transporter:i.transporter,indexName:D}),N=[],j=A(i.indexName,D,"copy",zn(dt({},C),{scope:["settings","synonyms","rules"]}));N.push(j);let $=(c?j.wait(C):j).then(()=>{let re=L(u,zn(dt({},C),{autoGenerateObjectIDIfNotExist:g,batchSize:t}));return N.push(re),c?re.wait(C):re}).then(()=>{let re=A(D,i.indexName,"move",C);return N.push(re),c?re.wait(C):re}).then(()=>Promise.all(N)).then(([re,ce,Q])=>({objectIDs:ce.objectIDs,taskIDs:[re.taskID,...ce.taskIDs,Q.taskID]}));return Wt.createWaitablePromise($,(re,ce)=>Promise.all(N.map(Q=>Q.wait(ce))))},vW=i=>(u,f)=>iw(i)(u,zn(dt({},f),{clearExistingRules:!0})),gW=i=>(u,f)=>ow(i)(u,zn(dt({},f),{replaceExistingSynonyms:!0})),_W=i=>(u,f)=>Wt.createWaitablePromise(rw(i)([u],f).then(c=>({objectID:c.objectIDs[0],taskID:c.taskIDs[0]})),(c,g)=>z0(i)(c.taskID,g)),rw=i=>(u,f)=>{let C=f||{},{autoGenerateObjectIDIfNotExist:c}=C,g=Si(C,["autoGenerateObjectIDIfNotExist"]),t=c?Cc.AddObject:Cc.UpdateObject;if(t===Cc.UpdateObject){for(let A of u)if(A.objectID===void 0)return Wt.createWaitablePromise(Promise.reject(bC()))}return _m(i)(u,t,g)},yW=i=>(u,f)=>iw(i)([u],f),iw=i=>(u,f)=>{let A=f||{},{forwardToReplicas:c,clearExistingRules:g}=A,t=Si(A,["forwardToReplicas","clearExistingRules"]),C=jo.createMappedRequestOptions(t);return c&&(C.queryParameters.forwardToReplicas=1),g&&(C.queryParameters.clearExistingRules=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/batch",i.indexName),data:u},C),(x,D)=>z0(i)(x.taskID,D))},wW=i=>(u,f)=>ow(i)([u],f),ow=i=>(u,f)=>{let A=f||{},{forwardToReplicas:c,replaceExistingSynonyms:g}=A,t=Si(A,["forwardToReplicas","replaceExistingSynonyms"]),C=jo.createMappedRequestOptions(t);return c&&(C.queryParameters.forwardToReplicas=1),g&&(C.queryParameters.replaceExistingSynonyms=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/batch",i.indexName),data:u},C),(x,D)=>z0(i)(x.taskID,D))},ZC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/query",i.indexName),data:{query:u},cacheable:!0},f),YC=i=>(u,f,c)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/facets/%s/query",i.indexName,u),data:{facetQuery:f},cacheable:!0},c),KC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/rules/search",i.indexName),data:{query:u}},f),XC=i=>(u,f)=>i.transporter.read({method:Rn.MethodEnum.Post,path:Wt.encode("1/indexes/%s/synonyms/search",i.indexName),data:{query:u}},f),DW=i=>(u,f)=>{let C=f||{},{forwardToReplicas:c}=C,g=Si(C,["forwardToReplicas"]),t=jo.createMappedRequestOptions(g);return c&&(t.queryParameters.forwardToReplicas=1),Wt.createWaitablePromise(i.transporter.write({method:Rn.MethodEnum.Put,path:Wt.encode("1/indexes/%s/settings",i.indexName),data:u},t),(A,x)=>z0(i)(A.taskID,x))},z0=i=>(u,f)=>Wt.createRetryablePromise(c=>eT(i)(u,f).then(g=>g.status!=="published"?c():void 0)),EW={AddObject:"addObject",Analytics:"analytics",Browser:"browse",DeleteIndex:"deleteIndex",DeleteObject:"deleteObject",EditSettings:"editSettings",ListIndexes:"listIndexes",Logs:"logs",Recommendation:"recommendation",Search:"search",SeeUnretrievableAttributes:"seeUnretrievableAttributes",Settings:"settings",Usage:"usage"},Cc={AddObject:"addObject",UpdateObject:"updateObject",PartialUpdateObject:"partialUpdateObject",PartialUpdateObjectNoCreate:"partialUpdateObjectNoCreate",DeleteObject:"deleteObject"},gm={Settings:"settings",Synonyms:"synonyms",Rules:"rules"},SW={None:"none",StopIfEnoughMatches:"stopIfEnoughMatches"},CW={Synonym:"synonym",OneWaySynonym:"oneWaySynonym",AltCorrection1:"altCorrection1",AltCorrection2:"altCorrection2",Placeholder:"placeholder"};yt.ApiKeyACLEnum=EW;yt.BatchActionEnum=Cc;yt.ScopeEnum=gm;yt.StrategyEnum=SW;yt.SynonymEnum=CW;yt.addApiKey=Cz;yt.assignUserID=Tz;yt.assignUserIDs=xz;yt.batch=$C;yt.browseObjects=Xz;yt.browseRules=Jz;yt.browseSynonyms=Qz;yt.chunkedBatch=_m;yt.clearObjects=Zz;yt.clearRules=eW;yt.clearSynonyms=tW;yt.copyIndex=vm;yt.copyRules=kz;yt.copySettings=Az;yt.copySynonyms=Oz;yt.createBrowsablePromise=mm;yt.createMissingObjectIDError=bC;yt.createObjectNotFoundError=GC;yt.createSearchClient=Sz;yt.createValidUntilNotFoundError=VC;yt.deleteApiKey=Iz;yt.deleteBy=nW;yt.deleteIndex=rW;yt.deleteObject=iW;yt.deleteObjects=JC;yt.deleteRule=oW;yt.deleteSynonym=uW;yt.exists=sW;yt.findObject=lW;yt.generateSecuredApiKey=Pz;yt.getApiKey=rd;yt.getLogs=Mz;yt.getObject=fW;yt.getObjectPosition=cW;yt.getObjects=aW;yt.getRule=dW;yt.getSecuredApiKeyRemainingValidity=Fz;yt.getSettings=QC;yt.getSynonym=pW;yt.getTask=eT;yt.getTopUserIDs=Lz;yt.getUserID=Rz;yt.hasPendingMappings=Nz;yt.initIndex=id;yt.listApiKeys=Bz;yt.listClusters=jz;yt.listIndices=Uz;yt.listUserIDs=qz;yt.moveIndex=zz;yt.multipleBatch=Wz;yt.multipleGetObjects=Hz;yt.multipleQueries=bz;yt.multipleSearchForFacetValues=Gz;yt.partialUpdateObject=hW;yt.partialUpdateObjects=tT;yt.removeUserID=Vz;yt.replaceAllObjects=mW;yt.replaceAllRules=vW;yt.replaceAllSynonyms=gW;yt.restoreApiKey=Yz;yt.saveObject=_W;yt.saveObjects=rw;yt.saveRule=yW;yt.saveRules=iw;yt.saveSynonym=wW;yt.saveSynonyms=ow;yt.search=ZC;yt.searchForFacetValues=YC;yt.searchRules=KC;yt.searchSynonyms=XC;yt.searchUserIDs=$z;yt.setSettings=DW;yt.updateApiKey=Kz;yt.waitTask=z0});var iT=Me((SV,rT)=>{rT.exports=nT()});var oT=Me(ym=>{"use strict";Object.defineProperty(ym,"__esModule",{value:!0});function TW(){return{debug(i,u){return Promise.resolve()},info(i,u){return Promise.resolve()},error(i,u){return Promise.resolve()}}}var xW={Debug:1,Info:2,Error:3};ym.LogLevelEnum=xW;ym.createNullLogger=TW});var sT=Me((TV,uT)=>{uT.exports=oT()});var cT=Me(uw=>{"use strict";Object.defineProperty(uw,"__esModule",{value:!0});var lT=require("http"),fT=require("https"),kW=require("url");function AW(){let i={keepAlive:!0},u=new lT.Agent(i),f=new fT.Agent(i);return{send(c){return new Promise(g=>{let t=kW.parse(c.url),C=t.query===null?t.pathname:`${t.pathname}?${t.query}`,A=dt({agent:t.protocol==="https:"?f:u,hostname:t.hostname,path:C,method:c.method,headers:c.headers},t.port!==void 0?{port:t.port||""}:{}),x=(t.protocol==="https:"?fT:lT).request(A,j=>{let $="";j.on("data",h=>$+=h),j.on("end",()=>{clearTimeout(L),clearTimeout(N),g({status:j.statusCode||0,content:$,isTimedOut:!1})})}),D=(j,$)=>setTimeout(()=>{x.abort(),g({status:0,content:$,isTimedOut:!0})},j*1e3),L=D(c.connectTimeout,"Connection timeout"),N;x.on("error",j=>{clearTimeout(L),clearTimeout(N),g({status:0,content:j.message,isTimedOut:!1})}),x.once("response",()=>{clearTimeout(L),N=D(c.responseTimeout,"Socket timeout")}),c.data!==void 0&&x.write(c.data),x.end()})},destroy(){return u.destroy(),f.destroy(),Promise.resolve()}}}uw.createNodeHttpRequester=AW});var dT=Me((kV,aT)=>{aT.exports=cT()});var vT=Me((AV,pT)=>{"use strict";var hT=dC(),OW=mC(),Ma=UC(),sw=Q2(),lw=HC(),Mt=iT(),IW=sT(),PW=dT(),MW=ed();function mT(i,u,f){let c={appId:i,apiKey:u,timeouts:{connect:2,read:5,write:30},requester:PW.createNodeHttpRequester(),logger:IW.createNullLogger(),responsesCache:hT.createNullCache(),requestsCache:hT.createNullCache(),hostsCache:OW.createInMemoryCache(),userAgent:MW.createUserAgent(sw.version).add({segment:"Node.js",version:process.versions.node})};return Mt.createSearchClient(zn(dt(dt({},c),f),{methods:{search:Mt.multipleQueries,searchForFacetValues:Mt.multipleSearchForFacetValues,multipleBatch:Mt.multipleBatch,multipleGetObjects:Mt.multipleGetObjects,multipleQueries:Mt.multipleQueries,copyIndex:Mt.copyIndex,copySettings:Mt.copySettings,copyRules:Mt.copyRules,copySynonyms:Mt.copySynonyms,moveIndex:Mt.moveIndex,listIndices:Mt.listIndices,getLogs:Mt.getLogs,listClusters:Mt.listClusters,multipleSearchForFacetValues:Mt.multipleSearchForFacetValues,getApiKey:Mt.getApiKey,addApiKey:Mt.addApiKey,listApiKeys:Mt.listApiKeys,updateApiKey:Mt.updateApiKey,deleteApiKey:Mt.deleteApiKey,restoreApiKey:Mt.restoreApiKey,assignUserID:Mt.assignUserID,assignUserIDs:Mt.assignUserIDs,getUserID:Mt.getUserID,searchUserIDs:Mt.searchUserIDs,listUserIDs:Mt.listUserIDs,getTopUserIDs:Mt.getTopUserIDs,removeUserID:Mt.removeUserID,hasPendingMappings:Mt.hasPendingMappings,generateSecuredApiKey:Mt.generateSecuredApiKey,getSecuredApiKeyRemainingValidity:Mt.getSecuredApiKeyRemainingValidity,destroy:sw.destroy,initIndex:g=>t=>Mt.initIndex(g)(t,{methods:{batch:Mt.batch,delete:Mt.deleteIndex,getObject:Mt.getObject,getObjects:Mt.getObjects,saveObject:Mt.saveObject,saveObjects:Mt.saveObjects,search:Mt.search,searchForFacetValues:Mt.searchForFacetValues,waitTask:Mt.waitTask,setSettings:Mt.setSettings,getSettings:Mt.getSettings,partialUpdateObject:Mt.partialUpdateObject,partialUpdateObjects:Mt.partialUpdateObjects,deleteObject:Mt.deleteObject,deleteObjects:Mt.deleteObjects,deleteBy:Mt.deleteBy,clearObjects:Mt.clearObjects,browseObjects:Mt.browseObjects,getObjectPosition:Mt.getObjectPosition,findObject:Mt.findObject,exists:Mt.exists,saveSynonym:Mt.saveSynonym,saveSynonyms:Mt.saveSynonyms,getSynonym:Mt.getSynonym,searchSynonyms:Mt.searchSynonyms,browseSynonyms:Mt.browseSynonyms,deleteSynonym:Mt.deleteSynonym,clearSynonyms:Mt.clearSynonyms,replaceAllObjects:Mt.replaceAllObjects,replaceAllSynonyms:Mt.replaceAllSynonyms,searchRules:Mt.searchRules,getRule:Mt.getRule,deleteRule:Mt.deleteRule,saveRule:Mt.saveRule,saveRules:Mt.saveRules,replaceAllRules:Mt.replaceAllRules,browseRules:Mt.browseRules,clearRules:Mt.clearRules}}),initAnalytics:()=>g=>Ma.createAnalyticsClient(zn(dt(dt({},c),g),{methods:{addABTest:Ma.addABTest,getABTest:Ma.getABTest,getABTests:Ma.getABTests,stopABTest:Ma.stopABTest,deleteABTest:Ma.deleteABTest}})),initRecommendation:()=>g=>lw.createRecommendationClient(zn(dt(dt({},c),g),{methods:{getPersonalizationStrategy:lw.getPersonalizationStrategy,setPersonalizationStrategy:lw.setPersonalizationStrategy}}))}}))}mT.version=sw.version;pT.exports=mT});var _T=Me((OV,fw)=>{var gT=vT();fw.exports=gT;fw.exports.default=gT});var rf=Me(dw=>{"use strict";Object.defineProperty(dw,"__esModule",{value:!0});dw.default=kT;function kT(){}kT.prototype={diff:function(u,f){var c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},g=c.callback;typeof c=="function"&&(g=c,c={}),this.options=c;var t=this;function C(re){return g?(setTimeout(function(){g(void 0,re)},0),!0):re}u=this.castInput(u),f=this.castInput(f),u=this.removeEmpty(this.tokenize(u)),f=this.removeEmpty(this.tokenize(f));var A=f.length,x=u.length,D=1,L=A+x,N=[{newPos:-1,components:[]}],j=this.extractCommon(N[0],f,u,0);if(N[0].newPos+1>=A&&j+1>=x)return C([{value:this.join(f),count:f.length}]);function $(){for(var re=-1*D;re<=D;re+=2){var ce=void 0,Q=N[re-1],oe=N[re+1],Se=(oe?oe.newPos:0)-re;Q&&(N[re-1]=void 0);var me=Q&&Q.newPos+1=A&&Se+1>=x)return C(LW(t,ce.components,f,u,t.useLongestToken));N[re]=ce}D++}if(g)(function re(){setTimeout(function(){if(D>L)return g();$()||re()},0)})();else for(;D<=L;){var h=$();if(h)return h}},pushComponent:function(u,f,c){var g=u[u.length-1];g&&g.added===f&&g.removed===c?u[u.length-1]={count:g.count+1,added:f,removed:c}:u.push({count:1,added:f,removed:c})},extractCommon:function(u,f,c,g){for(var t=f.length,C=c.length,A=u.newPos,x=A-g,D=0;A+1$.length?re:$}),D.value=i.join(L)}else D.value=i.join(f.slice(A,A+D.count));A+=D.count,D.added||(x+=D.count)}}var j=u[C-1];return C>1&&typeof j.value=="string"&&(j.added||j.removed)&&i.equals("",j.value)&&(u[C-2].value+=j.value,u.pop()),u}function RW(i){return{newPos:i.newPos,components:i.components.slice(0)}}});var OT=Me(ld=>{"use strict";Object.defineProperty(ld,"__esModule",{value:!0});ld.diffChars=NW;ld.characterDiff=void 0;var jW=BW(rf());function BW(i){return i&&i.__esModule?i:{default:i}}var AT=new jW.default;ld.characterDiff=AT;function NW(i,u,f){return AT.diff(i,u,f)}});var hw=Me(pw=>{"use strict";Object.defineProperty(pw,"__esModule",{value:!0});pw.generateOptions=UW;function UW(i,u){if(typeof i=="function")u.callback=i;else if(i)for(var f in i)i.hasOwnProperty(f)&&(u[f]=i[f]);return u}});var MT=Me(Fa=>{"use strict";Object.defineProperty(Fa,"__esModule",{value:!0});Fa.diffWords=qW;Fa.diffWordsWithSpace=zW;Fa.wordDiff=void 0;var HW=WW(rf()),bW=hw();function WW(i){return i&&i.__esModule?i:{default:i}}var IT=/^[A-Za-z\xC0-\u02C6\u02C8-\u02D7\u02DE-\u02FF\u1E00-\u1EFF]+$/,PT=/\S/,fd=new HW.default;Fa.wordDiff=fd;fd.equals=function(i,u){return this.options.ignoreCase&&(i=i.toLowerCase(),u=u.toLowerCase()),i===u||this.options.ignoreWhitespace&&!PT.test(i)&&!PT.test(u)};fd.tokenize=function(i){for(var u=i.split(/(\s+|[()[\]{}'"]|\b)/),f=0;f{"use strict";Object.defineProperty(La,"__esModule",{value:!0});La.diffLines=GW;La.diffTrimmedLines=VW;La.lineDiff=void 0;var $W=YW(rf()),KW=hw();function YW(i){return i&&i.__esModule?i:{default:i}}var Dm=new $W.default;La.lineDiff=Dm;Dm.tokenize=function(i){var u=[],f=i.split(/(\n|\r\n)/);f[f.length-1]||f.pop();for(var c=0;c{"use strict";Object.defineProperty(cd,"__esModule",{value:!0});cd.diffSentences=XW;cd.sentenceDiff=void 0;var QW=JW(rf());function JW(i){return i&&i.__esModule?i:{default:i}}var mw=new QW.default;cd.sentenceDiff=mw;mw.tokenize=function(i){return i.split(/(\S.+?[.!?])(?=\s+|$)/)};function XW(i,u,f){return mw.diff(i,u,f)}});var LT=Me(ad=>{"use strict";Object.defineProperty(ad,"__esModule",{value:!0});ad.diffCss=ZW;ad.cssDiff=void 0;var tH=eH(rf());function eH(i){return i&&i.__esModule?i:{default:i}}var vw=new tH.default;ad.cssDiff=vw;vw.tokenize=function(i){return i.split(/([{}:;,]|\s+)/)};function ZW(i,u,f){return vw.diff(i,u,f)}});var NT=Me(Ra=>{"use strict";Object.defineProperty(Ra,"__esModule",{value:!0});Ra.diffJson=nH;Ra.canonicalize=Sm;Ra.jsonDiff=void 0;var RT=rH(rf()),iH=Em();function rH(i){return i&&i.__esModule?i:{default:i}}function Cm(i){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Cm=function(f){return typeof f}:Cm=function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f},Cm(i)}var oH=Object.prototype.toString,xc=new RT.default;Ra.jsonDiff=xc;xc.useLongestToken=!0;xc.tokenize=iH.lineDiff.tokenize;xc.castInput=function(i){var u=this.options,f=u.undefinedReplacement,c=u.stringifyReplacer,g=c===void 0?function(t,C){return typeof C=="undefined"?f:C}:c;return typeof i=="string"?i:JSON.stringify(Sm(i,null,null,g),g," ")};xc.equals=function(i,u){return RT.default.prototype.equals.call(xc,i.replace(/,([\r\n])/g,"$1"),u.replace(/,([\r\n])/g,"$1"))};function nH(i,u,f){return xc.diff(i,u,f)}function Sm(i,u,f,c,g){u=u||[],f=f||[],c&&(i=c(g,i));var t;for(t=0;t{"use strict";Object.defineProperty(dd,"__esModule",{value:!0});dd.diffArrays=uH;dd.arrayDiff=void 0;var lH=sH(rf());function sH(i){return i&&i.__esModule?i:{default:i}}var pd=new lH.default;dd.arrayDiff=pd;pd.tokenize=function(i){return i.slice()};pd.join=pd.removeEmpty=function(i){return i};function uH(i,u,f){return pd.diff(i,u,f)}});var Tm=Me(gw=>{"use strict";Object.defineProperty(gw,"__esModule",{value:!0});gw.parsePatch=fH;function fH(i){var u=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},f=i.split(/\r\n|[\n\v\f\r\x85]/),c=i.match(/\r\n|[\n\v\f\r\x85]/g)||[],g=[],t=0;function C(){var D={};for(g.push(D);t{"use strict";Object.defineProperty(_w,"__esModule",{value:!0});_w.default=cH;function cH(i,u,f){var c=!0,g=!1,t=!1,C=1;return function A(){if(c&&!t){if(g?C++:c=!1,i+C<=f)return C;t=!0}if(!g)return t||(c=!0),u<=i-C?-C++:(g=!0,A())}}});var zT=Me(xm=>{"use strict";Object.defineProperty(xm,"__esModule",{value:!0});xm.applyPatch=UT;xm.applyPatches=aH;var qT=Tm(),pH=dH(jT());function dH(i){return i&&i.__esModule?i:{default:i}}function UT(i,u){var f=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(typeof u=="string"&&(u=(0,qT.parsePatch)(u)),Array.isArray(u)){if(u.length>1)throw new Error("applyPatch only works with a single input.");u=u[0]}var c=i.split(/\r\n|[\n\v\f\r\x85]/),g=i.match(/\r\n|[\n\v\f\r\x85]/g)||[],t=u.hunks,C=f.compareLine||function(Ot,Nt,Je,V){return Nt===V},A=0,x=f.fuzzFactor||0,D=0,L=0,N,j;function $(Ot,Nt){for(var Je=0;Je0?V[0]:" ",ge=V.length>0?V.substr(1):V;if(ne===" "||ne==="-"){if(!C(Nt+1,c[Nt],ne,ge)&&(A++,A>x))return!1;Nt++}}return!0}for(var h=0;h0?Le[0]:" ",ct=Le.length>0?Le.substr(1):Le,Ue=J.linedelimiters[Oe];if(ot===" ")Te++;else if(ot==="-")c.splice(Te,1),g.splice(Te,1);else if(ot==="+")c.splice(Te,0,ct),g.splice(Te,0,Ue),Te++;else if(ot==="\\"){var be=J.lines[Oe-1]?J.lines[Oe-1][0]:null;be==="+"?N=!0:be==="-"&&(j=!0)}}}if(N)for(;!c[c.length-1];)c.pop(),g.pop();else j&&(c.push(""),g.push(` -`));for(var At=0;At{"use strict";Object.defineProperty(hd,"__esModule",{value:!0});hd.structuredPatch=WT;hd.createTwoFilesPatch=HT;hd.createPatch=hH;var mH=Em();function yw(i){return _H(i)||gH(i)||vH()}function vH(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function gH(i){if(Symbol.iterator in Object(i)||Object.prototype.toString.call(i)==="[object Arguments]")return Array.from(i)}function _H(i){if(Array.isArray(i)){for(var u=0,f=new Array(i.length);u0?x(J.lines.slice(-C.context)):[],L-=j.length,N-=j.length)}(De=j).push.apply(De,yw(me.map(function(At){return(Se.added?"+":"-")+At}))),Se.added?h+=me.length:$+=me.length}else{if(L)if(me.length<=C.context*2&&oe=A.length-2&&me.length<=C.context){var ct=/\n$/.test(f),Ue=/\n$/.test(c),be=me.length==0&&j.length>ot.oldLines;!ct&&be&&j.splice(ot.oldLines,0,"\\ No newline at end of file"),(!ct&&!be||!Ue)&&j.push("\\ No newline at end of file")}D.push(ot),L=0,N=0,j=[]}$+=me.length,h+=me.length}},ce=0;ce{"use strict";Object.defineProperty(km,"__esModule",{value:!0});km.arrayEqual=yH;km.arrayStartsWith=bT;function yH(i,u){return i.length!==u.length?!1:bT(i,u)}function bT(i,u){if(u.length>i.length)return!1;for(var f=0;f{"use strict";Object.defineProperty(Am,"__esModule",{value:!0});Am.calcLineCount=VT;Am.merge=wH;var DH=ww(),EH=Tm(),Dw=GT();function Na(i){return TH(i)||CH(i)||SH()}function SH(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function CH(i){if(Symbol.iterator in Object(i)||Object.prototype.toString.call(i)==="[object Arguments]")return Array.from(i)}function TH(i){if(Array.isArray(i)){for(var u=0,f=new Array(i.length);u{"use strict";Object.defineProperty(Cw,"__esModule",{value:!0});Cw.convertChangesToDMP=OH;function OH(i){for(var u=[],f,c,g=0;g{"use strict";Object.defineProperty(Tw,"__esModule",{value:!0});Tw.convertChangesToXML=IH;function IH(i){for(var u=[],f=0;f"):c.removed&&u.push(""),u.push(PH(c.value)),c.added?u.push(""):c.removed&&u.push("")}return u.join("")}function PH(i){var u=i;return u=u.replace(/&/g,"&"),u=u.replace(//g,">"),u=u.replace(/"/g,"""),u}});var f9=Me(w0=>{"use strict";Object.defineProperty(w0,"__esModule",{value:!0});Object.defineProperty(w0,"Diff",{enumerable:!0,get:function(){return MH.default}});Object.defineProperty(w0,"diffChars",{enumerable:!0,get:function(){return FH.diffChars}});Object.defineProperty(w0,"diffWords",{enumerable:!0,get:function(){return o9.diffWords}});Object.defineProperty(w0,"diffWordsWithSpace",{enumerable:!0,get:function(){return o9.diffWordsWithSpace}});Object.defineProperty(w0,"diffLines",{enumerable:!0,get:function(){return u9.diffLines}});Object.defineProperty(w0,"diffTrimmedLines",{enumerable:!0,get:function(){return u9.diffTrimmedLines}});Object.defineProperty(w0,"diffSentences",{enumerable:!0,get:function(){return LH.diffSentences}});Object.defineProperty(w0,"diffCss",{enumerable:!0,get:function(){return RH.diffCss}});Object.defineProperty(w0,"diffJson",{enumerable:!0,get:function(){return s9.diffJson}});Object.defineProperty(w0,"canonicalize",{enumerable:!0,get:function(){return s9.canonicalize}});Object.defineProperty(w0,"diffArrays",{enumerable:!0,get:function(){return NH.diffArrays}});Object.defineProperty(w0,"applyPatch",{enumerable:!0,get:function(){return l9.applyPatch}});Object.defineProperty(w0,"applyPatches",{enumerable:!0,get:function(){return l9.applyPatches}});Object.defineProperty(w0,"parsePatch",{enumerable:!0,get:function(){return BH.parsePatch}});Object.defineProperty(w0,"merge",{enumerable:!0,get:function(){return jH.merge}});Object.defineProperty(w0,"structuredPatch",{enumerable:!0,get:function(){return xw.structuredPatch}});Object.defineProperty(w0,"createTwoFilesPatch",{enumerable:!0,get:function(){return xw.createTwoFilesPatch}});Object.defineProperty(w0,"createPatch",{enumerable:!0,get:function(){return xw.createPatch}});Object.defineProperty(w0,"convertChangesToDMP",{enumerable:!0,get:function(){return UH.convertChangesToDMP}});Object.defineProperty(w0,"convertChangesToXML",{enumerable:!0,get:function(){return qH.convertChangesToXML}});var MH=zH(rf()),FH=OT(),o9=MT(),u9=Em(),LH=FT(),RH=LT(),s9=NT(),NH=BT(),l9=zT(),BH=Tm(),jH=n9(),xw=ww(),UH=r9(),qH=i9();function zH(i){return i&&i.__esModule?i:{default:i}}});var HH={};jR(HH,{default:()=>GH});var wT=Er(require("@yarnpkg/cli")),Tc=Er(require("@yarnpkg/core"));var Z5=Er(ys()),Dc=Er(lr()),om=(0,Dc.memo)(({active:i})=>{let u=(0,Dc.useMemo)(()=>i?"\u25C9":"\u25EF",[i]),f=(0,Dc.useMemo)(()=>i?"green":"yellow",[i]);return Dc.default.createElement(Z5.Text,{color:f},u)});var Wf=Er(ys()),Bo=Er(lr());var eC=Er(ys()),um=Er(lr());function zf({active:i},u,f){let{stdin:c}=(0,eC.useStdin)(),g=(0,um.useCallback)((t,C)=>u(t,C),f);(0,um.useEffect)(()=>{if(!(!i||!c))return c.on("keypress",g),()=>{c.off("keypress",g)}},[i,g,c])}var sm;(function(f){f.BEFORE="before",f.AFTER="after"})(sm||(sm={}));var tC=function({active:i},u,f){zf({active:i},(c,g)=>{g.name==="tab"&&(g.shift?u(sm.BEFORE):u(sm.AFTER))},f)};var lm=function(i,u,{active:f,minus:c,plus:g,set:t,loop:C=!0}){zf({active:f},(A,x)=>{let D=u.indexOf(i);switch(x.name){case c:{let L=D-1;if(C){t(u[(u.length+L)%u.length]);return}if(L<0)return;t(u[L])}break;case g:{let L=D+1;if(C){t(u[L%u.length]);return}if(L>=u.length)return;t(u[L])}break}},[u,i,g,t,C])};var fm=({active:i=!0,children:u=[],radius:f=10,size:c=1,loop:g=!0,onFocusRequest:t,willReachEnd:C})=>{let A=ce=>{if(ce.key===null)throw new Error("Expected all children to have a key");return ce.key},x=Bo.default.Children.map(u,ce=>A(ce)),D=x[0],[L,N]=(0,Bo.useState)(D),j=x.indexOf(L);(0,Bo.useEffect)(()=>{x.includes(L)||N(D)},[u]),(0,Bo.useEffect)(()=>{C&&j>=x.length-2&&C()},[j]),tC({active:i&&!!t},ce=>{t==null||t(ce)},[t]),lm(L,x,{active:i,minus:"up",plus:"down",set:N,loop:g});let $=j-f,h=j+f;h>x.length&&($-=h-x.length,h=x.length),$<0&&(h+=-$,$=0),h>=x.length&&(h=x.length-1);let re=[];for(let ce=$;ce<=h;++ce){let Q=x[ce],oe=i&&Q===L;re.push(Bo.default.createElement(Wf.Box,{key:Q,height:c},Bo.default.createElement(Wf.Box,{marginLeft:1,marginRight:1},Bo.default.createElement(Wf.Text,null,oe?Bo.default.createElement(Wf.Text,{color:"cyan",bold:!0},">"):" ")),Bo.default.createElement(Wf.Box,null,Bo.default.cloneElement(u[ce],{active:oe}))))}return Bo.default.createElement(Wf.Box,{flexDirection:"column",width:"100%"},re)};var cm=Er(lr());var nC=Er(ys()),nf=Er(lr()),rC=Er(require("readline")),G3=nf.default.createContext(null),iC=({children:i})=>{let{stdin:u,setRawMode:f}=(0,nC.useStdin)();(0,nf.useEffect)(()=>{f&&f(!0),u&&(0,rC.emitKeypressEvents)(u)},[u,f]);let[c,g]=(0,nf.useState)(new Map),t=(0,nf.useMemo)(()=>({getAll:()=>c,get:C=>c.get(C),set:(C,A)=>g(new Map([...c,[C,A]]))}),[c,g]);return nf.default.createElement(G3.Provider,{value:t,children:i})};function Ec(i,u){let f=(0,cm.useContext)(G3);if(f===null)throw new Error("Expected this hook to run with a ministore context attached");if(typeof i=="undefined")return f.getAll();let c=(0,cm.useCallback)(t=>{f.set(i,t)},[i,f.set]),g=f.get(i);return typeof g=="undefined"&&(g=u),[g,c]}var am=Er(ys()),V3=Er(lr());async function dm(i,u){let f,c=t=>{let{exit:C}=(0,am.useApp)();zf({active:!0},(A,x)=>{x.name==="return"&&(f=t,C())},[C,t])},{waitUntilExit:g}=(0,am.render)(V3.default.createElement(iC,null,V3.default.createElement(i,zn(dt({},u),{useSubmit:c}))));return await g(),f}var DT=Er(require("clipanion")),ET=Er(lC()),un=Er(ys()),Pt=Er(lr());var yT=Er(_T()),cw={appId:"OFCNCOG2CU",apiKey:"6fe4476ee5a1832882e326b506d14126",indexName:"npm-search"},FW=(0,yT.default)(cw.appId,cw.apiKey).initIndex(cw.indexName),aw=async(i,u=0)=>await FW.search(i,{analyticsTags:["yarn-plugin-interactive-tools"],attributesToRetrieve:["name","version","owner","repository","humanDownloadsLast30Days"],page:u,hitsPerPage:10});var od=["regular","dev","peer"],ud=class extends wT.BaseCommand{async execute(){let u=await Tc.Configuration.find(this.context.cwd,this.context.plugins),f=()=>Pt.default.createElement(un.Box,{flexDirection:"row"},Pt.default.createElement(un.Box,{flexDirection:"column",width:48},Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},""),"/",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to move between packages.")),Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to select a package.")),Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," again to change the target."))),Pt.default.createElement(un.Box,{flexDirection:"column"},Pt.default.createElement(un.Box,{marginLeft:1},Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to install the selected packages.")),Pt.default.createElement(un.Box,{marginLeft:1},Pt.default.createElement(un.Text,null,"Press ",Pt.default.createElement(un.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),c=()=>Pt.default.createElement(Pt.default.Fragment,null,Pt.default.createElement(un.Box,{width:15},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Owner")),Pt.default.createElement(un.Box,{width:11},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Version")),Pt.default.createElement(un.Box,{width:10},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Downloads"))),g=()=>Pt.default.createElement(un.Box,{width:17},Pt.default.createElement(un.Text,{bold:!0,underline:!0,color:"gray"},"Target")),t=({hit:$,active:h})=>{let[re,ce]=Ec($.name,null);zf({active:h},(Se,me)=>{if(me.name!=="space")return;if(!re){ce(od[0]);return}let De=od.indexOf(re)+1;De===od.length?ce(null):ce(od[De])},[re,ce]);let Q=Tc.structUtils.parseIdent($.name),oe=Tc.structUtils.prettyIdent(u,Q);return Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Box,{width:45},Pt.default.createElement(un.Text,{bold:!0,wrap:"wrap"},oe)),Pt.default.createElement(un.Box,{width:14,marginLeft:1},Pt.default.createElement(un.Text,{bold:!0,wrap:"truncate"},$.owner.name)),Pt.default.createElement(un.Box,{width:10,marginLeft:1},Pt.default.createElement(un.Text,{italic:!0,wrap:"truncate"},$.version)),Pt.default.createElement(un.Box,{width:16,marginLeft:1},Pt.default.createElement(un.Text,null,$.humanDownloadsLast30Days)))},C=({name:$,active:h})=>{let[re]=Ec($,null),ce=Tc.structUtils.parseIdent($);return Pt.default.createElement(un.Box,null,Pt.default.createElement(un.Box,{width:47},Pt.default.createElement(un.Text,{bold:!0}," - ",Tc.structUtils.prettyIdent(u,ce))),od.map(Q=>Pt.default.createElement(un.Box,{key:Q,width:14,marginLeft:1},Pt.default.createElement(un.Text,null," ",Pt.default.createElement(om,{active:re===Q})," ",Pt.default.createElement(un.Text,{bold:!0},Q)))))},A=()=>Pt.default.createElement(un.Box,{marginTop:1},Pt.default.createElement(un.Text,null,"Powered by Algolia.")),D=await dm(({useSubmit:$})=>{let h=Ec();$(h);let re=Array.from(h.keys()).filter(Le=>h.get(Le)!==null),[ce,Q]=(0,Pt.useState)(""),[oe,Se]=(0,Pt.useState)(0),[me,De]=(0,Pt.useState)([]),J=Le=>{Le.match(/\t| /)||Q(Le)},Te=async()=>{Se(0);let Le=await aw(ce);Le.query===ce&&De(Le.hits)},Oe=async()=>{let Le=await aw(ce,oe+1);Le.query===ce&&Le.page-1===oe&&(Se(Le.page),De([...me,...Le.hits]))};return(0,Pt.useEffect)(()=>{ce?Te():De([])},[ce]),Pt.default.createElement(un.Box,{flexDirection:"column"},Pt.default.createElement(f,null),Pt.default.createElement(un.Box,{flexDirection:"row",marginTop:1},Pt.default.createElement(un.Text,{bold:!0},"Search: "),Pt.default.createElement(un.Box,{width:41},Pt.default.createElement(ET.default,{value:ce,onChange:J,placeholder:"i.e. babel, webpack, react...",showCursor:!1})),Pt.default.createElement(c,null)),me.length?Pt.default.createElement(fm,{radius:2,loop:!1,children:me.map(Le=>Pt.default.createElement(t,{key:Le.name,hit:Le,active:!1})),willReachEnd:Oe}):Pt.default.createElement(un.Text,{color:"gray"},"Start typing..."),Pt.default.createElement(un.Box,{flexDirection:"row",marginTop:1},Pt.default.createElement(un.Box,{width:49},Pt.default.createElement(un.Text,{bold:!0},"Selected:")),Pt.default.createElement(g,null)),re.length?re.map(Le=>Pt.default.createElement(C,{key:Le,name:Le,active:!1})):Pt.default.createElement(un.Text,{color:"gray"},"No selected packages..."),Pt.default.createElement(A,null))},{});if(typeof D=="undefined")return 1;let L=Array.from(D.keys()).filter($=>D.get($)==="regular"),N=Array.from(D.keys()).filter($=>D.get($)==="dev"),j=Array.from(D.keys()).filter($=>D.get($)==="peer");return L.length&&await this.cli.run(["add",...L]),N.length&&await this.cli.run(["add","--dev",...N]),j&&await this.cli.run(["add","--peer",...j]),0}};ud.paths=[["search"]],ud.usage=DT.Command.Usage({category:"Interactive commands",description:"open the search interface",details:` - This command opens a fullscreen terminal interface where you can search for and install packages from the npm registry. - `,examples:[["Open the search window","yarn search"]]});var ST=ud;var Im=Er(require("@yarnpkg/cli")),W0=Er(require("@yarnpkg/core"));var sd=Er(ys()),bf=Er(lr());var CT=Er(ys()),TT=Er(lr()),wm=({length:i,active:u})=>{if(i===0)return null;let f=i>1?` ${"-".repeat(i-1)}`:" ";return TT.default.createElement(CT.Text,{dimColor:!u},f)};var xT=function({active:i,skewer:u,options:f,value:c,onChange:g,sizes:t=[]}){let C=f.filter(({label:x})=>!!x).map(({value:x})=>x),A=f.findIndex(x=>x.value===c&&x.label!="");return lm(c,C,{active:i,minus:"left",plus:"right",set:g}),bf.default.createElement(bf.default.Fragment,null,f.map(({label:x},D)=>{let L=D===A,N=t[D]-1||0,j=x.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,""),$=Math.max(0,N-j.length-2);return x?bf.default.createElement(sd.Box,{key:x,width:N,marginLeft:1},bf.default.createElement(sd.Text,{wrap:"truncate"},bf.default.createElement(om,{active:L})," ",x),u?bf.default.createElement(wm,{active:i,length:$}):null):bf.default.createElement(sd.Box,{key:`spacer-${D}`,width:N,marginLeft:1})}))};var c9=Er(require("@yarnpkg/plugin-essentials")),a9=Er(require("clipanion")),d9=Er(f9()),tr=Er(ys()),pn=Er(lr()),p9=Er(require("semver")),h9=/^((?:[\^~]|>=?)?)([0-9]+)(\.[0-9]+)(\.[0-9]+)((?:-\S+)?)$/,WH=10,md=class extends Im.BaseCommand{async execute(){let u=await W0.Configuration.find(this.context.cwd,this.context.plugins),{project:f,workspace:c}=await W0.Project.find(u,this.context.cwd),g=await W0.Cache.find(u);if(!c)throw new Im.WorkspaceRequiredError(f.cwd,this.context.cwd);await f.restoreInstallState({restoreResolutions:!1});let t=(Q,oe)=>{let Se=(0,d9.diffWords)(Q,oe),me="";for(let De of Se)De.added?me+=W0.formatUtils.pretty(u,De.value,"green"):De.removed||(me+=De.value);return me},C=(Q,oe)=>{if(Q===oe)return oe;let Se=W0.structUtils.parseRange(Q),me=W0.structUtils.parseRange(oe),De=Se.selector.match(h9),J=me.selector.match(h9);if(!De||!J)return t(Q,oe);let Te=["gray","red","yellow","green","magenta"],Oe=null,Le="";for(let ot=1;ot{let me=await c9.suggestUtils.fetchDescriptorFrom(Q,Se,{project:f,cache:g,preserveModifier:oe,workspace:c});return me!==null?me.range:Q.range},x=async Q=>{let oe=p9.default.valid(Q.range)?`^${Q.range}`:Q.range,[Se,me]=await Promise.all([A(Q,Q.range,oe).catch(()=>null),A(Q,Q.range,"latest").catch(()=>null)]),De=[{value:null,label:Q.range}];return Se&&Se!==Q.range?De.push({value:Se,label:C(Q.range,Se)}):De.push({value:null,label:""}),me&&me!==Se&&me!==Q.range?De.push({value:me,label:C(Q.range,me)}):De.push({value:null,label:""}),De},D=()=>pn.default.createElement(tr.Box,{flexDirection:"row"},pn.default.createElement(tr.Box,{flexDirection:"column",width:49},pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},""),"/",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to select packages.")),pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},""),"/",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to select versions."))),pn.default.createElement(tr.Box,{flexDirection:"column"},pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to install.")),pn.default.createElement(tr.Box,{marginLeft:1},pn.default.createElement(tr.Text,null,"Press ",pn.default.createElement(tr.Text,{bold:!0,color:"cyanBright"},"")," to abort.")))),L=()=>pn.default.createElement(tr.Box,{flexDirection:"row",paddingTop:1,paddingBottom:1},pn.default.createElement(tr.Box,{width:50},pn.default.createElement(tr.Text,{bold:!0},pn.default.createElement(tr.Text,{color:"greenBright"},"?")," Pick the packages you want to upgrade.")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Current")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Range")),pn.default.createElement(tr.Box,{width:17},pn.default.createElement(tr.Text,{bold:!0,underline:!0,color:"gray"},"Latest"))),N=({active:Q,descriptor:oe,suggestions:Se})=>{let[me,De]=Ec(oe.descriptorHash,null),J=W0.structUtils.stringifyIdent(oe),Te=Math.max(0,45-J.length);return pn.default.createElement(pn.default.Fragment,null,pn.default.createElement(tr.Box,null,pn.default.createElement(tr.Box,{width:45},pn.default.createElement(tr.Text,{bold:!0},W0.structUtils.prettyIdent(u,oe)),pn.default.createElement(wm,{active:Q,length:Te})),Se!==null?pn.default.createElement(xT,{active:Q,options:Se,value:me,skewer:!0,onChange:De,sizes:[17,17,17]}):pn.default.createElement(tr.Box,{marginLeft:2},pn.default.createElement(tr.Text,{color:"gray"},"Fetching suggestions..."))))},j=({dependencies:Q})=>{let[oe,Se]=(0,pn.useState)(null),me=(0,pn.useRef)(!0);return(0,pn.useEffect)(()=>()=>{me.current=!1}),(0,pn.useEffect)(()=>{Promise.all(Q.map(De=>x(De))).then(De=>{let J=Q.map((Te,Oe)=>{let Le=De[Oe];return[Te,Le]}).filter(([Te,Oe])=>Oe.filter(Le=>Le.label!=="").length>1);me.current&&Se(J)})},[]),oe?oe.length?pn.default.createElement(fm,{radius:WH,children:oe.map(([De,J])=>pn.default.createElement(N,{key:De.descriptorHash,active:!1,descriptor:De,suggestions:J}))}):pn.default.createElement(tr.Text,null,"No upgrades found"):pn.default.createElement(tr.Text,null,"Fetching suggestions...")},h=await dm(({useSubmit:Q})=>{Q(Ec());let oe=new Map;for(let me of f.workspaces)for(let De of["dependencies","devDependencies"])for(let J of me.manifest[De].values())f.tryWorkspaceByDescriptor(J)===null&&oe.set(J.descriptorHash,J);let Se=W0.miscUtils.sortMap(oe.values(),me=>W0.structUtils.stringifyDescriptor(me));return pn.default.createElement(tr.Box,{flexDirection:"column"},pn.default.createElement(D,null),pn.default.createElement(L,null),pn.default.createElement(j,{dependencies:Se}))},{});if(typeof h=="undefined")return 1;let re=!1;for(let Q of f.workspaces)for(let oe of["dependencies","devDependencies"]){let Se=Q.manifest[oe];for(let me of Se.values()){let De=h.get(me.descriptorHash);typeof De!="undefined"&&De!==null&&(Se.set(me.identHash,W0.structUtils.makeDescriptor(me,De)),re=!0)}}return re?(await W0.StreamReport.start({configuration:u,stdout:this.context.stdout,includeLogs:!this.context.quiet},async Q=>{await f.install({cache:g,report:Q})})).exitCode():0}};md.paths=[["upgrade-interactive"]],md.usage=a9.Command.Usage({category:"Interactive commands",description:"open the upgrade interface",details:` - This command opens a fullscreen terminal interface where you can see any out of date packages used by your application, their status compared to the latest versions available on the remote registry, and select packages to upgrade. - `,examples:[["Open the upgrade window","yarn upgrade-interactive"]]});var m9=md;var bH={commands:[ST,m9]},GH=bH;return HH;})(); -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-debug-tools.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.0.0-experimental-51a3aa6af - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.18.0 - * scheduler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v0.24.0 - * react-reconciler.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -/** @license React v16.13.1 - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -return plugin; -} -}; diff --git a/tgui/.yarn/releases/yarn-3.3.1.cjs b/tgui/.yarn/releases/yarn-3.3.1.cjs deleted file mode 100644 index 53a282e439a..00000000000 --- a/tgui/.yarn/releases/yarn-3.3.1.cjs +++ /dev/null @@ -1,823 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var dfe=Object.create;var jS=Object.defineProperty;var Cfe=Object.getOwnPropertyDescriptor;var mfe=Object.getOwnPropertyNames;var Efe=Object.getPrototypeOf,Ife=Object.prototype.hasOwnProperty;var J=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var y=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ht=(r,e)=>{for(var t in e)jS(r,t,{get:e[t],enumerable:!0})},yfe=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of mfe(e))!Ife.call(r,n)&&n!==t&&jS(r,n,{get:()=>e[n],enumerable:!(i=Cfe(e,n))||i.enumerable});return r};var ne=(r,e,t)=>(t=r!=null?dfe(Efe(r)):{},yfe(e||!r||!r.__esModule?jS(t,"default",{value:r,enumerable:!0}):t,r));var aK=y((uZe,oK)=>{oK.exports=sK;sK.sync=Gfe;var iK=J("fs");function Hfe(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{uK.exports=lK;lK.sync=Yfe;var AK=J("fs");function lK(r,e,t){AK.stat(r,function(i,n){t(i,i?!1:cK(n,e))})}function Yfe(r,e){return cK(AK.statSync(r),e)}function cK(r,e){return r.isFile()&&jfe(r,e)}function jfe(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var hK=y((hZe,fK)=>{var fZe=J("fs"),OI;process.platform==="win32"||global.TESTING_WINDOWS?OI=aK():OI=gK();fK.exports=av;av.sync=qfe;function av(r,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){av(r,e||{},function(s,o){s?n(s):i(o)})})}OI(r,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function qfe(r,e){try{return OI.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var yK=y((pZe,IK)=>{var _g=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",pK=J("path"),Jfe=_g?";":":",dK=hK(),CK=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),mK=(r,e)=>{let t=e.colon||Jfe,i=r.match(/\//)||_g&&r.match(/\\/)?[""]:[..._g?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=_g?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=_g?n.split(t):[""];return _g&&r.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},EK=(r,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=mK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(CK(r));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=pK.join(h,r),C=!h&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];dK(c+p,{pathExt:s},(C,w)=>{if(!C&&w)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},Wfe=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=mK(r,e),s=[];for(let o=0;o{"use strict";var wK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};Av.exports=wK;Av.exports.default=wK});var vK=y((CZe,SK)=>{"use strict";var bK=J("path"),zfe=yK(),Vfe=BK();function QK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=zfe.sync(r.command,{path:t[Vfe({env:t})],pathExt:e?bK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=bK.resolve(n?r.options.cwd:"",o)),o}function Xfe(r){return QK(r)||QK(r,!0)}SK.exports=Xfe});var xK=y((mZe,cv)=>{"use strict";var lv=/([()\][%!^"`<>&|;, *?])/g;function _fe(r){return r=r.replace(lv,"^$1"),r}function Zfe(r,e){return r=`${r}`,r=r.replace(/(\\*)"/g,'$1$1\\"'),r=r.replace(/(\\*)$/,"$1$1"),r=`"${r}"`,r=r.replace(lv,"^$1"),e&&(r=r.replace(lv,"^$1")),r}cv.exports.command=_fe;cv.exports.argument=Zfe});var DK=y((EZe,PK)=>{"use strict";PK.exports=/^#!(.*)/});var RK=y((IZe,kK)=>{"use strict";var $fe=DK();kK.exports=(r="")=>{let e=r.match($fe);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var NK=y((yZe,FK)=>{"use strict";var uv=J("fs"),ehe=RK();function the(r){let t=Buffer.alloc(150),i;try{i=uv.openSync(r,"r"),uv.readSync(i,t,0,150,0),uv.closeSync(i)}catch{}return ehe(t.toString())}FK.exports=the});var MK=y((wZe,OK)=>{"use strict";var rhe=J("path"),TK=vK(),LK=xK(),ihe=NK(),nhe=process.platform==="win32",she=/\.(?:com|exe)$/i,ohe=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function ahe(r){r.file=TK(r);let e=r.file&&ihe(r.file);return e?(r.args.unshift(r.file),r.command=e,TK(r)):r.file}function Ahe(r){if(!nhe)return r;let e=ahe(r),t=!she.test(e);if(r.options.forceShell||t){let i=ohe.test(e);r.command=rhe.normalize(r.command),r.command=LK.command(r.command),r.args=r.args.map(s=>LK.argument(s,i));let n=[r.command].concat(r.args).join(" ");r.args=["/d","/s","/c",`"${n}"`],r.command=process.env.comspec||"cmd.exe",r.options.windowsVerbatimArguments=!0}return r}function lhe(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:Ahe(i)}OK.exports=lhe});var HK=y((BZe,KK)=>{"use strict";var gv=process.platform==="win32";function fv(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function che(r,e){if(!gv)return;let t=r.emit;r.emit=function(i,n){if(i==="exit"){let s=UK(n,e,"spawn");if(s)return t.call(r,"error",s)}return t.apply(r,arguments)}}function UK(r,e){return gv&&r===1&&!e.file?fv(e.original,"spawn"):null}function uhe(r,e){return gv&&r===1&&!e.file?fv(e.original,"spawnSync"):null}KK.exports={hookChildProcess:che,verifyENOENT:UK,verifyENOENTSync:uhe,notFoundError:fv}});var dv=y((bZe,Zg)=>{"use strict";var GK=J("child_process"),hv=MK(),pv=HK();function YK(r,e,t){let i=hv(r,e,t),n=GK.spawn(i.command,i.args,i.options);return pv.hookChildProcess(n,i),n}function ghe(r,e,t){let i=hv(r,e,t),n=GK.spawnSync(i.command,i.args,i.options);return n.error=n.error||pv.verifyENOENTSync(n.status,i),n}Zg.exports=YK;Zg.exports.spawn=YK;Zg.exports.sync=ghe;Zg.exports._parse=hv;Zg.exports._enoent=pv});var qK=y((QZe,jK)=>{"use strict";function fhe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function uc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,uc)}fhe(uc,Error);uc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",re=de(">>",!1),me=">&",tt=de(">&",!1),Rt=">",It=de(">",!1),Ur="<<<",oi=de("<<<",!1),pi="<&",pr=de("<&",!1),di="<",ai=de("<",!1),Os=function(m){return{type:"argument",segments:[].concat(...m)}},dr=function(m){return m},Bi="$'",_n=de("$'",!1),pa="'",EA=de("'",!1),kg=function(m){return[{type:"text",text:m}]},Zn='""',IA=de('""',!1),da=function(){return{type:"text",text:""}},Jp='"',yA=de('"',!1),wA=function(m){return m},Br=function(m){return{type:"arithmetic",arithmetic:m,quoted:!0}},Vl=function(m){return{type:"shell",shell:m,quoted:!0}},Rg=function(m){return{type:"variable",...m,quoted:!0}},Eo=function(m){return{type:"text",text:m}},Fg=function(m){return{type:"arithmetic",arithmetic:m,quoted:!1}},Wp=function(m){return{type:"shell",shell:m,quoted:!1}},zp=function(m){return{type:"variable",...m,quoted:!1}},Pr=function(m){return{type:"glob",pattern:m}},oe=/^[^']/,Io=Ye(["'"],!0,!1),kn=function(m){return m.join("")},Ng=/^[^$"]/,bt=Ye(["$",'"'],!0,!1),Xl=`\\ -`,Rn=de(`\\ -`,!1),$n=function(){return""},es="\\",ut=de("\\",!1),yo=/^[\\$"`]/,at=Ye(["\\","$",'"',"`"],!1,!1),ln=function(m){return m},S="\\a",Lt=de("\\a",!1),Tg=function(){return"a"},_l="\\b",Vp=de("\\b",!1),Xp=function(){return"\b"},_p=/^[Ee]/,Zp=Ye(["E","e"],!1,!1),$p=function(){return"\x1B"},G="\\f",yt=de("\\f",!1),BA=function(){return"\f"},Wi="\\n",Zl=de("\\n",!1),We=function(){return` -`},Ca="\\r",Lg=de("\\r",!1),uI=function(){return"\r"},ed="\\t",gI=de("\\t",!1),ar=function(){return" "},Fn="\\v",$l=de("\\v",!1),td=function(){return"\v"},Ms=/^[\\'"?]/,ma=Ye(["\\","'",'"',"?"],!1,!1),cn=function(m){return String.fromCharCode(parseInt(m,16))},ke="\\x",Og=de("\\x",!1),ec="\\u",Us=de("\\u",!1),tc="\\U",bA=de("\\U",!1),Mg=function(m){return String.fromCodePoint(parseInt(m,16))},Ug=/^[0-7]/,Ea=Ye([["0","7"]],!1,!1),Ia=/^[0-9a-fA-f]/,$e=Ye([["0","9"],["a","f"],["A","f"]],!1,!1),wo=rt(),QA="-",rc=de("-",!1),Ks="+",ic=de("+",!1),fI=".",rd=de(".",!1),Kg=function(m,Q,F){return{type:"number",value:(m==="-"?-1:1)*parseFloat(Q.join("")+"."+F.join(""))}},id=function(m,Q){return{type:"number",value:(m==="-"?-1:1)*parseInt(Q.join(""))}},hI=function(m){return{type:"variable",...m}},nc=function(m){return{type:"variable",name:m}},pI=function(m){return m},Hg="*",SA=de("*",!1),Nr="/",dI=de("/",!1),Hs=function(m,Q,F){return{type:Q==="*"?"multiplication":"division",right:F}},Gs=function(m,Q){return Q.reduce((F,K)=>({left:F,...K}),m)},Gg=function(m,Q,F){return{type:Q==="+"?"addition":"subtraction",right:F}},vA="$((",R=de("$((",!1),q="))",pe=de("))",!1),Ne=function(m){return m},xe="$(",qe=de("$(",!1),dt=function(m){return m},Ft="${",Nn=de("${",!1),vS=":-",AU=de(":-",!1),lU=function(m,Q){return{name:m,defaultValue:Q}},xS=":-}",cU=de(":-}",!1),uU=function(m){return{name:m,defaultValue:[]}},PS=":+",gU=de(":+",!1),fU=function(m,Q){return{name:m,alternativeValue:Q}},DS=":+}",hU=de(":+}",!1),pU=function(m){return{name:m,alternativeValue:[]}},kS=function(m){return{name:m}},dU="$",CU=de("$",!1),mU=function(m){return e.isGlobPattern(m)},EU=function(m){return m},RS=/^[a-zA-Z0-9_]/,FS=Ye([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),NS=function(){return O()},TS=/^[$@*?#a-zA-Z0-9_\-]/,LS=Ye(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),IU=/^[(){}<>$|&; \t"']/,Yg=Ye(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),OS=/^[<>&; \t"']/,MS=Ye(["<",">","&",";"," "," ",'"',"'"],!1,!1),CI=/^[ \t]/,mI=Ye([" "," "],!1,!1),b=0,Fe=0,xA=[{line:1,column:1}],d=0,E=[],I=0,k;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function O(){return r.substring(Fe,b)}function X(){return Et(Fe,b)}function te(m,Q){throw Q=Q!==void 0?Q:Et(Fe,b),Fi([At(m)],r.substring(Fe,b),Q)}function ye(m,Q){throw Q=Q!==void 0?Q:Et(Fe,b),Tn(m,Q)}function de(m,Q){return{type:"literal",text:m,ignoreCase:Q}}function Ye(m,Q,F){return{type:"class",parts:m,inverted:Q,ignoreCase:F}}function rt(){return{type:"any"}}function wt(){return{type:"end"}}function At(m){return{type:"other",description:m}}function et(m){var Q=xA[m],F;if(Q)return Q;for(F=m-1;!xA[F];)F--;for(Q=xA[F],Q={line:Q.line,column:Q.column};Fd&&(d=b,E=[]),E.push(m))}function Tn(m,Q){return new uc(m,null,null,Q)}function Fi(m,Q,F){return new uc(uc.buildMessage(m,Q),m,Q,F)}function PA(){var m,Q;return m=b,Q=Kr(),Q===t&&(Q=null),Q!==t&&(Fe=m,Q=s(Q)),m=Q,m}function Kr(){var m,Q,F,K,ce;if(m=b,Q=Hr(),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();F!==t?(K=ya(),K!==t?(ce=ts(),ce===t&&(ce=null),ce!==t?(Fe=m,Q=o(Q,K,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;if(m===t)if(m=b,Q=Hr(),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();F!==t?(K=ya(),K===t&&(K=null),K!==t?(Fe=m,Q=a(Q,K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function ts(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=Kr(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=l(F),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function ya(){var m;return r.charCodeAt(b)===59?(m=c,b++):(m=t,I===0&&Be(u)),m===t&&(r.charCodeAt(b)===38?(m=g,b++):(m=t,I===0&&Be(f))),m}function Hr(){var m,Q,F;return m=b,Q=yU(),Q!==t?(F=$ge(),F===t&&(F=null),F!==t?(Fe=m,Q=h(Q,F),m=Q):(b=m,m=t)):(b=m,m=t),m}function $ge(){var m,Q,F,K,ce,Qe,ft;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=efe(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Hr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=p(F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function efe(){var m;return r.substr(b,2)===C?(m=C,b+=2):(m=t,I===0&&Be(w)),m===t&&(r.substr(b,2)===B?(m=B,b+=2):(m=t,I===0&&Be(v))),m}function yU(){var m,Q,F;return m=b,Q=ife(),Q!==t?(F=tfe(),F===t&&(F=null),F!==t?(Fe=m,Q=D(Q,F),m=Q):(b=m,m=t)):(b=m,m=t),m}function tfe(){var m,Q,F,K,ce,Qe,ft;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(F=rfe(),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=yU(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=T(F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;return m}function rfe(){var m;return r.substr(b,2)===H?(m=H,b+=2):(m=t,I===0&&Be(j)),m===t&&(r.charCodeAt(b)===124?(m=$,b++):(m=t,I===0&&Be(V))),m}function EI(){var m,Q,F,K,ce,Qe;if(m=b,Q=FU(),Q!==t)if(r.charCodeAt(b)===61?(F=W,b++):(F=t,I===0&&Be(Z)),F!==t)if(K=bU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(Fe=m,Q=A(Q,K),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;else b=m,m=t;if(m===t)if(m=b,Q=FU(),Q!==t)if(r.charCodeAt(b)===61?(F=W,b++):(F=t,I===0&&Be(Z)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=ae(Q),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t;return m}function ife(){var m,Q,F,K,ce,Qe,ft,Bt,Vr,Ci,rs;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(r.charCodeAt(b)===40?(F=ge,b++):(F=t,I===0&&Be(_)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Kr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();if(Qe!==t)if(r.charCodeAt(b)===41?(ft=L,b++):(ft=t,I===0&&Be(N)),ft!==t){for(Bt=[],Vr=Me();Vr!==t;)Bt.push(Vr),Vr=Me();if(Bt!==t){for(Vr=[],Ci=nd();Ci!==t;)Vr.push(Ci),Ci=nd();if(Vr!==t){for(Ci=[],rs=Me();rs!==t;)Ci.push(rs),rs=Me();Ci!==t?(Fe=m,Q=ue(ce,Vr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t)if(r.charCodeAt(b)===123?(F=we,b++):(F=t,I===0&&Be(Te)),F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t)if(ce=Kr(),ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();if(Qe!==t)if(r.charCodeAt(b)===125?(ft=Pe,b++):(ft=t,I===0&&Be(Le)),ft!==t){for(Bt=[],Vr=Me();Vr!==t;)Bt.push(Vr),Vr=Me();if(Bt!==t){for(Vr=[],Ci=nd();Ci!==t;)Vr.push(Ci),Ci=nd();if(Vr!==t){for(Ci=[],rs=Me();rs!==t;)Ci.push(rs),rs=Me();Ci!==t?(Fe=m,Q=se(ce,Vr),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t}else b=m,m=t;else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){for(F=[],K=EI();K!==t;)F.push(K),K=EI();if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();if(K!==t){if(ce=[],Qe=BU(),Qe!==t)for(;Qe!==t;)ce.push(Qe),Qe=BU();else ce=t;if(ce!==t){for(Qe=[],ft=Me();ft!==t;)Qe.push(ft),ft=Me();Qe!==t?(Fe=m,Q=Ae(F,ce),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}else b=m,m=t}else b=m,m=t;if(m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){if(F=[],K=EI(),K!==t)for(;K!==t;)F.push(K),K=EI();else F=t;if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=be(F),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t}}}return m}function wU(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t){if(F=[],K=II(),K!==t)for(;K!==t;)F.push(K),K=II();else F=t;if(F!==t){for(K=[],ce=Me();ce!==t;)K.push(ce),ce=Me();K!==t?(Fe=m,Q=fe(F),m=Q):(b=m,m=t)}else b=m,m=t}else b=m,m=t;return m}function BU(){var m,Q,F;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();if(Q!==t?(F=nd(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t){for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();Q!==t?(F=II(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t)}return m}function nd(){var m,Q,F,K,ce;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();return Q!==t?(Ge.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(ie)),F===t&&(F=null),F!==t?(K=nfe(),K!==t?(ce=II(),ce!==t?(Fe=m,Q=Y(F,K,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function nfe(){var m;return r.substr(b,2)===he?(m=he,b+=2):(m=t,I===0&&Be(re)),m===t&&(r.substr(b,2)===me?(m=me,b+=2):(m=t,I===0&&Be(tt)),m===t&&(r.charCodeAt(b)===62?(m=Rt,b++):(m=t,I===0&&Be(It)),m===t&&(r.substr(b,3)===Ur?(m=Ur,b+=3):(m=t,I===0&&Be(oi)),m===t&&(r.substr(b,2)===pi?(m=pi,b+=2):(m=t,I===0&&Be(pr)),m===t&&(r.charCodeAt(b)===60?(m=di,b++):(m=t,I===0&&Be(ai))))))),m}function II(){var m,Q,F;for(m=b,Q=[],F=Me();F!==t;)Q.push(F),F=Me();return Q!==t?(F=bU(),F!==t?(Fe=m,Q=le(F),m=Q):(b=m,m=t)):(b=m,m=t),m}function bU(){var m,Q,F;if(m=b,Q=[],F=QU(),F!==t)for(;F!==t;)Q.push(F),F=QU();else Q=t;return Q!==t&&(Fe=m,Q=Os(Q)),m=Q,m}function QU(){var m,Q;return m=b,Q=sfe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=ofe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=afe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q,m===t&&(m=b,Q=Afe(),Q!==t&&(Fe=m,Q=dr(Q)),m=Q))),m}function sfe(){var m,Q,F,K;return m=b,r.substr(b,2)===Bi?(Q=Bi,b+=2):(Q=t,I===0&&Be(_n)),Q!==t?(F=ufe(),F!==t?(r.charCodeAt(b)===39?(K=pa,b++):(K=t,I===0&&Be(EA)),K!==t?(Fe=m,Q=kg(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function ofe(){var m,Q,F,K;return m=b,r.charCodeAt(b)===39?(Q=pa,b++):(Q=t,I===0&&Be(EA)),Q!==t?(F=lfe(),F!==t?(r.charCodeAt(b)===39?(K=pa,b++):(K=t,I===0&&Be(EA)),K!==t?(Fe=m,Q=kg(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function afe(){var m,Q,F,K;if(m=b,r.substr(b,2)===Zn?(Q=Zn,b+=2):(Q=t,I===0&&Be(IA)),Q!==t&&(Fe=m,Q=da()),m=Q,m===t)if(m=b,r.charCodeAt(b)===34?(Q=Jp,b++):(Q=t,I===0&&Be(yA)),Q!==t){for(F=[],K=SU();K!==t;)F.push(K),K=SU();F!==t?(r.charCodeAt(b)===34?(K=Jp,b++):(K=t,I===0&&Be(yA)),K!==t?(Fe=m,Q=wA(F),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;return m}function Afe(){var m,Q,F;if(m=b,Q=[],F=vU(),F!==t)for(;F!==t;)Q.push(F),F=vU();else Q=t;return Q!==t&&(Fe=m,Q=wA(Q)),m=Q,m}function SU(){var m,Q;return m=b,Q=kU(),Q!==t&&(Fe=m,Q=Br(Q)),m=Q,m===t&&(m=b,Q=RU(),Q!==t&&(Fe=m,Q=Vl(Q)),m=Q,m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=Rg(Q)),m=Q,m===t&&(m=b,Q=cfe(),Q!==t&&(Fe=m,Q=Eo(Q)),m=Q))),m}function vU(){var m,Q;return m=b,Q=kU(),Q!==t&&(Fe=m,Q=Fg(Q)),m=Q,m===t&&(m=b,Q=RU(),Q!==t&&(Fe=m,Q=Wp(Q)),m=Q,m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=zp(Q)),m=Q,m===t&&(m=b,Q=hfe(),Q!==t&&(Fe=m,Q=Pr(Q)),m=Q,m===t&&(m=b,Q=ffe(),Q!==t&&(Fe=m,Q=Eo(Q)),m=Q)))),m}function lfe(){var m,Q,F;for(m=b,Q=[],oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io));F!==t;)Q.push(F),oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io));return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function cfe(){var m,Q,F;if(m=b,Q=[],F=xU(),F===t&&(Ng.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(bt))),F!==t)for(;F!==t;)Q.push(F),F=xU(),F===t&&(Ng.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(bt)));else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function xU(){var m,Q,F;return m=b,r.substr(b,2)===Xl?(Q=Xl,b+=2):(Q=t,I===0&&Be(Rn)),Q!==t&&(Fe=m,Q=$n()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(yo.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(at)),F!==t?(Fe=m,Q=ln(F),m=Q):(b=m,m=t)):(b=m,m=t)),m}function ufe(){var m,Q,F;for(m=b,Q=[],F=PU(),F===t&&(oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io)));F!==t;)Q.push(F),F=PU(),F===t&&(oe.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Io)));return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function PU(){var m,Q,F;return m=b,r.substr(b,2)===S?(Q=S,b+=2):(Q=t,I===0&&Be(Lt)),Q!==t&&(Fe=m,Q=Tg()),m=Q,m===t&&(m=b,r.substr(b,2)===_l?(Q=_l,b+=2):(Q=t,I===0&&Be(Vp)),Q!==t&&(Fe=m,Q=Xp()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(_p.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(Zp)),F!==t?(Fe=m,Q=$p(),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===G?(Q=G,b+=2):(Q=t,I===0&&Be(yt)),Q!==t&&(Fe=m,Q=BA()),m=Q,m===t&&(m=b,r.substr(b,2)===Wi?(Q=Wi,b+=2):(Q=t,I===0&&Be(Zl)),Q!==t&&(Fe=m,Q=We()),m=Q,m===t&&(m=b,r.substr(b,2)===Ca?(Q=Ca,b+=2):(Q=t,I===0&&Be(Lg)),Q!==t&&(Fe=m,Q=uI()),m=Q,m===t&&(m=b,r.substr(b,2)===ed?(Q=ed,b+=2):(Q=t,I===0&&Be(gI)),Q!==t&&(Fe=m,Q=ar()),m=Q,m===t&&(m=b,r.substr(b,2)===Fn?(Q=Fn,b+=2):(Q=t,I===0&&Be($l)),Q!==t&&(Fe=m,Q=td()),m=Q,m===t&&(m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(Ms.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(ma)),F!==t?(Fe=m,Q=ln(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=gfe()))))))))),m}function gfe(){var m,Q,F,K,ce,Qe,ft,Bt,Vr,Ci,rs,YS;return m=b,r.charCodeAt(b)===92?(Q=es,b++):(Q=t,I===0&&Be(ut)),Q!==t?(F=US(),F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===ke?(Q=ke,b+=2):(Q=t,I===0&&Be(Og)),Q!==t?(F=b,K=b,ce=US(),ce!==t?(Qe=Ln(),Qe!==t?(ce=[ce,Qe],K=ce):(b=K,K=t)):(b=K,K=t),K===t&&(K=US()),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===ec?(Q=ec,b+=2):(Q=t,I===0&&Be(Us)),Q!==t?(F=b,K=b,ce=Ln(),ce!==t?(Qe=Ln(),Qe!==t?(ft=Ln(),ft!==t?(Bt=Ln(),Bt!==t?(ce=[ce,Qe,ft,Bt],K=ce):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=cn(F),m=Q):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===tc?(Q=tc,b+=2):(Q=t,I===0&&Be(bA)),Q!==t?(F=b,K=b,ce=Ln(),ce!==t?(Qe=Ln(),Qe!==t?(ft=Ln(),ft!==t?(Bt=Ln(),Bt!==t?(Vr=Ln(),Vr!==t?(Ci=Ln(),Ci!==t?(rs=Ln(),rs!==t?(YS=Ln(),YS!==t?(ce=[ce,Qe,ft,Bt,Vr,Ci,rs,YS],K=ce):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t)):(b=K,K=t),K!==t?F=r.substring(F,b):F=K,F!==t?(Fe=m,Q=Mg(F),m=Q):(b=m,m=t)):(b=m,m=t)))),m}function US(){var m;return Ug.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(Ea)),m}function Ln(){var m;return Ia.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be($e)),m}function ffe(){var m,Q,F,K,ce;if(m=b,Q=[],F=b,r.charCodeAt(b)===92?(K=es,b++):(K=t,I===0&&Be(ut)),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F===t&&(F=b,K=b,I++,ce=NU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t)),F!==t)for(;F!==t;)Q.push(F),F=b,r.charCodeAt(b)===92?(K=es,b++):(K=t,I===0&&Be(ut)),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F===t&&(F=b,K=b,I++,ce=NU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t));else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function KS(){var m,Q,F,K,ce,Qe;if(m=b,r.charCodeAt(b)===45?(Q=QA,b++):(Q=t,I===0&&Be(rc)),Q===t&&(r.charCodeAt(b)===43?(Q=Ks,b++):(Q=t,I===0&&Be(ic))),Q===t&&(Q=null),Q!==t){if(F=[],Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie)),K!==t)for(;K!==t;)F.push(K),Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie));else F=t;if(F!==t)if(r.charCodeAt(b)===46?(K=fI,b++):(K=t,I===0&&Be(rd)),K!==t){if(ce=[],Ge.test(r.charAt(b))?(Qe=r.charAt(b),b++):(Qe=t,I===0&&Be(ie)),Qe!==t)for(;Qe!==t;)ce.push(Qe),Ge.test(r.charAt(b))?(Qe=r.charAt(b),b++):(Qe=t,I===0&&Be(ie));else ce=t;ce!==t?(Fe=m,Q=Kg(Q,F,ce),m=Q):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;if(m===t){if(m=b,r.charCodeAt(b)===45?(Q=QA,b++):(Q=t,I===0&&Be(rc)),Q===t&&(r.charCodeAt(b)===43?(Q=Ks,b++):(Q=t,I===0&&Be(ic))),Q===t&&(Q=null),Q!==t){if(F=[],Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie)),K!==t)for(;K!==t;)F.push(K),Ge.test(r.charAt(b))?(K=r.charAt(b),b++):(K=t,I===0&&Be(ie));else F=t;F!==t?(Fe=m,Q=id(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;if(m===t&&(m=b,Q=GS(),Q!==t&&(Fe=m,Q=hI(Q)),m=Q,m===t&&(m=b,Q=sc(),Q!==t&&(Fe=m,Q=nc(Q)),m=Q,m===t)))if(m=b,r.charCodeAt(b)===40?(Q=ge,b++):(Q=t,I===0&&Be(_)),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();if(F!==t)if(K=DU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(r.charCodeAt(b)===41?(Qe=L,b++):(Qe=t,I===0&&Be(N)),Qe!==t?(Fe=m,Q=pI(K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t}return m}function HS(){var m,Q,F,K,ce,Qe,ft,Bt;if(m=b,Q=KS(),Q!==t){for(F=[],K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===42?(Qe=Hg,b++):(Qe=t,I===0&&Be(SA)),Qe===t&&(r.charCodeAt(b)===47?(Qe=Nr,b++):(Qe=t,I===0&&Be(dI))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=KS(),Bt!==t?(Fe=K,ce=Hs(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t;for(;K!==t;){for(F.push(K),K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===42?(Qe=Hg,b++):(Qe=t,I===0&&Be(SA)),Qe===t&&(r.charCodeAt(b)===47?(Qe=Nr,b++):(Qe=t,I===0&&Be(dI))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=KS(),Bt!==t?(Fe=K,ce=Hs(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t}F!==t?(Fe=m,Q=Gs(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;return m}function DU(){var m,Q,F,K,ce,Qe,ft,Bt;if(m=b,Q=HS(),Q!==t){for(F=[],K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===43?(Qe=Ks,b++):(Qe=t,I===0&&Be(ic)),Qe===t&&(r.charCodeAt(b)===45?(Qe=QA,b++):(Qe=t,I===0&&Be(rc))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=HS(),Bt!==t?(Fe=K,ce=Gg(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t;for(;K!==t;){for(F.push(K),K=b,ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();if(ce!==t)if(r.charCodeAt(b)===43?(Qe=Ks,b++):(Qe=t,I===0&&Be(ic)),Qe===t&&(r.charCodeAt(b)===45?(Qe=QA,b++):(Qe=t,I===0&&Be(rc))),Qe!==t){for(ft=[],Bt=Me();Bt!==t;)ft.push(Bt),Bt=Me();ft!==t?(Bt=HS(),Bt!==t?(Fe=K,ce=Gg(Q,Qe,Bt),K=ce):(b=K,K=t)):(b=K,K=t)}else b=K,K=t;else b=K,K=t}F!==t?(Fe=m,Q=Gs(Q,F),m=Q):(b=m,m=t)}else b=m,m=t;return m}function kU(){var m,Q,F,K,ce,Qe;if(m=b,r.substr(b,3)===vA?(Q=vA,b+=3):(Q=t,I===0&&Be(R)),Q!==t){for(F=[],K=Me();K!==t;)F.push(K),K=Me();if(F!==t)if(K=DU(),K!==t){for(ce=[],Qe=Me();Qe!==t;)ce.push(Qe),Qe=Me();ce!==t?(r.substr(b,2)===q?(Qe=q,b+=2):(Qe=t,I===0&&Be(pe)),Qe!==t?(Fe=m,Q=Ne(K),m=Q):(b=m,m=t)):(b=m,m=t)}else b=m,m=t;else b=m,m=t}else b=m,m=t;return m}function RU(){var m,Q,F,K;return m=b,r.substr(b,2)===xe?(Q=xe,b+=2):(Q=t,I===0&&Be(qe)),Q!==t?(F=Kr(),F!==t?(r.charCodeAt(b)===41?(K=L,b++):(K=t,I===0&&Be(N)),K!==t?(Fe=m,Q=dt(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m}function GS(){var m,Q,F,K,ce,Qe;return m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,2)===vS?(K=vS,b+=2):(K=t,I===0&&Be(AU)),K!==t?(ce=wU(),ce!==t?(r.charCodeAt(b)===125?(Qe=Pe,b++):(Qe=t,I===0&&Be(Le)),Qe!==t?(Fe=m,Q=lU(F,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,3)===xS?(K=xS,b+=3):(K=t,I===0&&Be(cU)),K!==t?(Fe=m,Q=uU(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,2)===PS?(K=PS,b+=2):(K=t,I===0&&Be(gU)),K!==t?(ce=wU(),ce!==t?(r.charCodeAt(b)===125?(Qe=Pe,b++):(Qe=t,I===0&&Be(Le)),Qe!==t?(Fe=m,Q=fU(F,ce),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.substr(b,3)===DS?(K=DS,b+=3):(K=t,I===0&&Be(hU)),K!==t?(Fe=m,Q=pU(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.substr(b,2)===Ft?(Q=Ft,b+=2):(Q=t,I===0&&Be(Nn)),Q!==t?(F=sc(),F!==t?(r.charCodeAt(b)===125?(K=Pe,b++):(K=t,I===0&&Be(Le)),K!==t?(Fe=m,Q=kS(F),m=Q):(b=m,m=t)):(b=m,m=t)):(b=m,m=t),m===t&&(m=b,r.charCodeAt(b)===36?(Q=dU,b++):(Q=t,I===0&&Be(CU)),Q!==t?(F=sc(),F!==t?(Fe=m,Q=kS(F),m=Q):(b=m,m=t)):(b=m,m=t)))))),m}function hfe(){var m,Q,F;return m=b,Q=pfe(),Q!==t?(Fe=b,F=mU(Q),F?F=void 0:F=t,F!==t?(Fe=m,Q=EU(Q),m=Q):(b=m,m=t)):(b=m,m=t),m}function pfe(){var m,Q,F,K,ce;if(m=b,Q=[],F=b,K=b,I++,ce=TU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t),F!==t)for(;F!==t;)Q.push(F),F=b,K=b,I++,ce=TU(),I--,ce===t?K=void 0:(b=K,K=t),K!==t?(r.length>b?(ce=r.charAt(b),b++):(ce=t,I===0&&Be(wo)),ce!==t?(Fe=F,K=ln(ce),F=K):(b=F,F=t)):(b=F,F=t);else Q=t;return Q!==t&&(Fe=m,Q=kn(Q)),m=Q,m}function FU(){var m,Q,F;if(m=b,Q=[],RS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(FS)),F!==t)for(;F!==t;)Q.push(F),RS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(FS));else Q=t;return Q!==t&&(Fe=m,Q=NS()),m=Q,m}function sc(){var m,Q,F;if(m=b,Q=[],TS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(LS)),F!==t)for(;F!==t;)Q.push(F),TS.test(r.charAt(b))?(F=r.charAt(b),b++):(F=t,I===0&&Be(LS));else Q=t;return Q!==t&&(Fe=m,Q=NS()),m=Q,m}function NU(){var m;return IU.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(Yg)),m}function TU(){var m;return OS.test(r.charAt(b))?(m=r.charAt(b),b++):(m=t,I===0&&Be(MS)),m}function Me(){var m,Q;if(m=[],CI.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&Be(mI)),Q!==t)for(;Q!==t;)m.push(Q),CI.test(r.charAt(b))?(Q=r.charAt(b),b++):(Q=t,I===0&&Be(mI));else m=t;return m}if(k=n(),k!==t&&b===r.length)return k;throw k!==t&&b{"use strict";function phe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function fc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,fc)}phe(fc,Error);fc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=v,j=[]),j.push(ie))}function Le(ie,Y){return new fc(ie,null,null,Y)}function se(ie,Y,he){return new fc(fc.buildMessage(ie,Y),ie,Y,he)}function Ae(){var ie,Y,he,re;return ie=v,Y=be(),Y!==t?(r.charCodeAt(v)===47?(he=s,v++):(he=t,$===0&&Pe(o)),he!==t?(re=be(),re!==t?(D=ie,Y=a(Y,re),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=be(),Y!==t&&(D=ie,Y=l(Y)),ie=Y),ie}function be(){var ie,Y,he,re;return ie=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(he=c,v++):(he=t,$===0&&Pe(u)),he!==t?(re=Ge(),re!==t?(D=ie,Y=g(Y,re),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=fe(),Y!==t&&(D=ie,Y=f(Y)),ie=Y),ie}function fe(){var ie,Y,he,re,me;return ie=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Pe(u)),Y!==t?(he=le(),he!==t?(r.charCodeAt(v)===47?(re=s,v++):(re=t,$===0&&Pe(o)),re!==t?(me=le(),me!==t?(D=ie,Y=h(),ie=Y):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t)):(v=ie,ie=t),ie===t&&(ie=v,Y=le(),Y!==t&&(D=ie,Y=h()),ie=Y),ie}function le(){var ie,Y,he;if(ie=v,Y=[],p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(C)),he!==t)for(;he!==t;)Y.push(he),p.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(C));else Y=t;return Y!==t&&(D=ie,Y=h()),ie=Y,ie}function Ge(){var ie,Y,he;if(ie=v,Y=[],w.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(B)),he!==t)for(;he!==t;)Y.push(he),w.test(r.charAt(v))?(he=r.charAt(v),v++):(he=t,$===0&&Pe(B));else Y=t;return Y!==t&&(D=ie,Y=h()),ie=Y,ie}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v{"use strict";function XK(r){return typeof r>"u"||r===null}function Che(r){return typeof r=="object"&&r!==null}function mhe(r){return Array.isArray(r)?r:XK(r)?[]:[r]}function Ehe(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t{"use strict";function md(r,e){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}md.prototype=Object.create(Error.prototype);md.prototype.constructor=md;md.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t};_K.exports=md});var e2=y((YZe,$K)=>{"use strict";var ZK=pc();function wv(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}wv.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i="",n=this.position;n>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;ot/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),ZK.repeat(" ",e)+i+a+s+` -`+ZK.repeat(" ",e+this.position-n+i.length)+"^"};wv.prototype.toString=function(e){var t,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`: -`+t)),i};$K.exports=wv});var Ai=y((jZe,r2)=>{"use strict";var t2=tf(),whe=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Bhe=["scalar","sequence","mapping"];function bhe(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function Qhe(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(whe.indexOf(t)===-1)throw new t2('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=bhe(e.styleAliases||null),Bhe.indexOf(this.kind)===-1)throw new t2('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}r2.exports=Qhe});var dc=y((qZe,n2)=>{"use strict";var i2=pc(),jI=tf(),She=Ai();function Bv(r,e,t){var i=[];return r.include.forEach(function(n){t=Bv(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function vhe(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e{"use strict";var xhe=Ai();s2.exports=new xhe("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}})});var A2=y((WZe,a2)=>{"use strict";var Phe=Ai();a2.exports=new Phe("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}})});var c2=y((zZe,l2)=>{"use strict";var Dhe=Ai();l2.exports=new Dhe("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}})});var qI=y((VZe,u2)=>{"use strict";var khe=dc();u2.exports=new khe({explicit:[o2(),A2(),c2()]})});var f2=y((XZe,g2)=>{"use strict";var Rhe=Ai();function Fhe(r){if(r===null)return!0;var e=r.length;return e===1&&r==="~"||e===4&&(r==="null"||r==="Null"||r==="NULL")}function Nhe(){return null}function The(r){return r===null}g2.exports=new Rhe("tag:yaml.org,2002:null",{kind:"scalar",resolve:Fhe,construct:Nhe,predicate:The,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var p2=y((_Ze,h2)=>{"use strict";var Lhe=Ai();function Ohe(r){if(r===null)return!1;var e=r.length;return e===4&&(r==="true"||r==="True"||r==="TRUE")||e===5&&(r==="false"||r==="False"||r==="FALSE")}function Mhe(r){return r==="true"||r==="True"||r==="TRUE"}function Uhe(r){return Object.prototype.toString.call(r)==="[object Boolean]"}h2.exports=new Lhe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Ohe,construct:Mhe,predicate:Uhe,represent:{lowercase:function(r){return r?"true":"false"},uppercase:function(r){return r?"TRUE":"FALSE"},camelcase:function(r){return r?"True":"False"}},defaultStyle:"lowercase"})});var C2=y((ZZe,d2)=>{"use strict";var Khe=pc(),Hhe=Ai();function Ghe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function Yhe(r){return 48<=r&&r<=55}function jhe(r){return 48<=r&&r<=57}function qhe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n==="-"||n==="+")&&(n=r[++t]),n==="0"){if(t+1===e)return!0;if(n=r[++t],n==="b"){for(t++;t=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0"+r.toString(8):"-0"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var I2=y(($Ze,E2)=>{"use strict";var m2=pc(),zhe=Ai(),Vhe=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Xhe(r){return!(r===null||!Vhe.test(r)||r[r.length-1]==="_")}function _he(r){var e,t,i,n;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var Zhe=/^[-+]?[0-9]+e/;function $he(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(m2.isNegativeZero(r))return"-0.0";return t=r.toString(10),Zhe.test(t)?t.replace("e",".e"):t}function epe(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!==0||m2.isNegativeZero(r))}E2.exports=new zhe("tag:yaml.org,2002:float",{kind:"scalar",resolve:Xhe,construct:_he,predicate:epe,represent:$he,defaultStyle:"lowercase"})});var bv=y((e$e,y2)=>{"use strict";var tpe=dc();y2.exports=new tpe({include:[qI()],implicit:[f2(),p2(),C2(),I2()]})});var Qv=y((t$e,w2)=>{"use strict";var rpe=dc();w2.exports=new rpe({include:[bv()]})});var S2=y((r$e,Q2)=>{"use strict";var ipe=Ai(),B2=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),b2=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function npe(r){return r===null?!1:B2.exec(r)!==null||b2.exec(r)!==null}function spe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=B2.exec(r),e===null&&(e=b2.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function ope(r){return r.toISOString()}Q2.exports=new ipe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:npe,construct:spe,instanceOf:Date,represent:ope})});var x2=y((i$e,v2)=>{"use strict";var ape=Ai();function Ape(r){return r==="<<"||r===null}v2.exports=new ape("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Ape})});var k2=y((n$e,D2)=>{"use strict";var Cc;try{P2=J,Cc=P2("buffer").Buffer}catch{}var P2,lpe=Ai(),Sv=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function cpe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=Sv;for(t=0;t64)){if(e<0)return!1;i+=6}return i%8===0}function upe(r){var e,t,i=r.replace(/[\r\n=]/g,""),n=i.length,s=Sv,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),Cc?Cc.from?Cc.from(a):new Cc(a):a}function gpe(r){var e="",t=0,i,n,s=r.length,o=Sv;for(i=0;i>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function fpe(r){return Cc&&Cc.isBuffer(r)}D2.exports=new lpe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:cpe,construct:upe,predicate:fpe,represent:gpe})});var F2=y((s$e,R2)=>{"use strict";var hpe=Ai(),ppe=Object.prototype.hasOwnProperty,dpe=Object.prototype.toString;function Cpe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t{"use strict";var Epe=Ai(),Ipe=Object.prototype.toString;function ype(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e{"use strict";var Bpe=Ai(),bpe=Object.prototype.hasOwnProperty;function Qpe(r){if(r===null)return!0;var e,t=r;for(e in t)if(bpe.call(t,e)&&t[e]!==null)return!1;return!0}function Spe(r){return r!==null?r:{}}L2.exports=new Bpe("tag:yaml.org,2002:set",{kind:"mapping",resolve:Qpe,construct:Spe})});var nf=y((A$e,M2)=>{"use strict";var vpe=dc();M2.exports=new vpe({include:[Qv()],implicit:[S2(),x2()],explicit:[k2(),F2(),T2(),O2()]})});var K2=y((l$e,U2)=>{"use strict";var xpe=Ai();function Ppe(){return!0}function Dpe(){}function kpe(){return""}function Rpe(r){return typeof r>"u"}U2.exports=new xpe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Ppe,construct:Dpe,predicate:Rpe,represent:kpe})});var G2=y((c$e,H2)=>{"use strict";var Fpe=Ai();function Npe(r){if(r===null||r.length===0)return!1;var e=r,t=/\/([gim]*)$/.exec(r),i="";return!(e[0]==="/"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function Tpe(r){var e=r,t=/\/([gim]*)$/.exec(r),i="";return e[0]==="/"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function Lpe(r){var e="/"+r.source+"/";return r.global&&(e+="g"),r.multiline&&(e+="m"),r.ignoreCase&&(e+="i"),e}function Ope(r){return Object.prototype.toString.call(r)==="[object RegExp]"}H2.exports=new Fpe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:Npe,construct:Tpe,predicate:Ope,represent:Lpe})});var q2=y((u$e,j2)=>{"use strict";var JI;try{Y2=J,JI=Y2("esprima")}catch{typeof window<"u"&&(JI=window.esprima)}var Y2,Mpe=Ai();function Upe(r){if(r===null)return!1;try{var e="("+r+")",t=JI.parse(e,{range:!0});return!(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function Kpe(r){var e="("+r+")",t=JI.parse(e,{range:!0}),i=[],n;if(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function Hpe(r){return r.toString()}function Gpe(r){return Object.prototype.toString.call(r)==="[object Function]"}j2.exports=new Mpe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:Upe,construct:Kpe,predicate:Gpe,represent:Hpe})});var Ed=y((g$e,W2)=>{"use strict";var J2=dc();W2.exports=J2.DEFAULT=new J2({include:[nf()],explicit:[K2(),G2(),q2()]})});var gH=y((f$e,Id)=>{"use strict";var Qa=pc(),eH=tf(),Ype=e2(),tH=nf(),jpe=Ed(),NA=Object.prototype.hasOwnProperty,WI=1,rH=2,iH=3,zI=4,vv=1,qpe=2,z2=3,Jpe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Wpe=/[\x85\u2028\u2029]/,zpe=/[,\[\]\{\}]/,nH=/^(?:!|!!|![a-z\-]+!)$/i,sH=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function V2(r){return Object.prototype.toString.call(r)}function So(r){return r===10||r===13}function Ec(r){return r===9||r===32}function fn(r){return r===9||r===32||r===10||r===13}function sf(r){return r===44||r===91||r===93||r===123||r===125}function Vpe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function Xpe(r){return r===120?2:r===117?4:r===85?8:0}function _pe(r){return 48<=r&&r<=57?r-48:-1}function X2(r){return r===48?"\0":r===97?"\x07":r===98?"\b":r===116||r===9?" ":r===110?` -`:r===118?"\v":r===102?"\f":r===114?"\r":r===101?"\x1B":r===32?" ":r===34?'"':r===47?"/":r===92?"\\":r===78?"\x85":r===95?"\xA0":r===76?"\u2028":r===80?"\u2029":""}function Zpe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var oH=new Array(256),aH=new Array(256);for(mc=0;mc<256;mc++)oH[mc]=X2(mc)?1:0,aH[mc]=X2(mc);var mc;function $pe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||jpe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function AH(r,e){return new eH(e,new Ype(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function gt(r,e){throw AH(r,e)}function VI(r,e){r.onWarning&&r.onWarning.call(null,AH(r,e))}var _2={YAML:function(e,t,i){var n,s,o;e.version!==null&>(e,"duplication of %YAML directive"),i.length!==1&>(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&>(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&>(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&VI(e,"unsupported YAML version of the document")},TAG:function(e,t,i){var n,s;i.length!==2&>(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],nH.test(n)||gt(e,"ill-formed tag handle (first argument) of the TAG directive"),NA.call(e.tagMap,n)&>(e,'there is a previously declared suffix for "'+n+'" tag handle'),sH.test(s)||gt(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function FA(r,e,t,i){var n,s,o,a;if(e1&&(r.result+=Qa.repeat(` -`,e-1))}function ede(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),fn(h)||sf(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),fn(n)||t&&sf(n)))return!1;for(r.kind="scalar",r.result="",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),fn(n)||t&&sf(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),fn(i))break}else{if(r.position===r.lineStart&&XI(r)||t&&sf(h))break;if(So(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,_r(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(FA(r,s,o,!1),Pv(r,r.line-l),s=o=r.position,a=!1),Ec(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return FA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function tde(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(FA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else So(t)?(FA(r,i,n,!0),Pv(r,_r(r,!1,e)),i=n=r.position):r.position===r.lineStart&&XI(r)?gt(r,"unexpected end of the document within a single quoted scalar"):(r.position++,n=r.position);gt(r,"unexpected end of the stream within a single quoted scalar")}function rde(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return FA(r,t,r.position,!0),r.position++,!0;if(a===92){if(FA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),So(a))_r(r,!1,e);else if(a<256&&oH[a])r.result+=aH[a],r.position++;else if((o=Xpe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=Vpe(a))>=0?s=(s<<4)+o:gt(r,"expected hexadecimal character");r.result+=Zpe(s),r.position++}else gt(r,"unknown escape sequence");t=i=r.position}else So(a)?(FA(r,t,i,!0),Pv(r,_r(r,!1,e)),t=i=r.position):r.position===r.lineStart&&XI(r)?gt(r,"unexpected end of the document within a double quoted scalar"):(r.position++,i=r.position)}gt(r,"unexpected end of the stream within a double quoted scalar")}function ide(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,w;if(w=r.input.charCodeAt(r.position),w===91)l=93,g=!1,s=[];else if(w===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),w=r.input.charCodeAt(++r.position);w!==0;){if(_r(r,!0,e),w=r.input.charCodeAt(r.position),w===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?"mapping":"sequence",r.result=s,!0;t||gt(r,"missed comma between flow collection entries"),p=h=C=null,c=u=!1,w===63&&(a=r.input.charCodeAt(r.position+1),fn(a)&&(c=u=!0,r.position++,_r(r,!0,e))),i=r.line,af(r,e,WI,!1,!0),p=r.tag,h=r.result,_r(r,!0,e),w=r.input.charCodeAt(r.position),(u||r.line===i)&&w===58&&(c=!0,w=r.input.charCodeAt(++r.position),_r(r,!0,e),af(r,e,WI,!1,!0),C=r.result),g?of(r,s,f,p,h,C):c?s.push(of(r,null,f,p,h,C)):s.push(h),_r(r,!0,e),w=r.input.charCodeAt(r.position),w===44?(t=!0,w=r.input.charCodeAt(++r.position)):t=!1}gt(r,"unexpected end of the stream within a flow collection")}function nde(r,e){var t,i,n=vv,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind="scalar",r.result="";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)vv===n?n=g===43?z2:qpe:gt(r,"repeat of a chomping mode identifier");else if((u=_pe(g))>=0)u===0?gt(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?gt(r,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(Ec(g)){do g=r.input.charCodeAt(++r.position);while(Ec(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!So(g)&&g!==0)}for(;g!==0;){for(xv(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndenta&&(a=r.lineIndent),So(g)){l++;continue}if(r.lineIndente)&&l!==0)gt(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(af(r,e,zI,!0,n)&&(p?f=r.result:h=r.result),p||(of(r,c,u,g,f,h,s,o),g=f=h=null),_r(r,!0,-1),w=r.input.charCodeAt(r.position)),r.lineIndent>e&&w!==0)gt(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),g=0,f=r.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+r.kind+'"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):gt(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")):gt(r,"unknown tag !<"+r.tag+">");return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||u}function lde(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(_r(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&>(r,"directive name must not be less than one character in length");o!==0;){for(;Ec(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!So(o));break}if(So(o))break;for(t=r.position;o!==0&&!fn(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&xv(r),NA.call(_2,i)?_2[i](r,i,n):VI(r,'unknown document directive "'+i+'"')}if(_r(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,_r(r,!0,-1)):s&>(r,"directives end mark is expected"),af(r,r.lineIndent-1,zI,!1,!0),_r(r,!0,-1),r.checkLineBreaks&&Wpe.test(r.input.slice(e,r.position))&&VI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&XI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,_r(r,!0,-1));return}if(r.position"u"&&(t=e,e=null);var i=lH(r,t);if(typeof e!="function")return i;for(var n=0,s=i.length;n"u"&&(t=e,e=null),cH(r,e,Qa.extend({schema:tH},t))}function ude(r,e){return uH(r,Qa.extend({schema:tH},e))}Id.exports.loadAll=cH;Id.exports.load=uH;Id.exports.safeLoadAll=cde;Id.exports.safeLoad=ude});var TH=y((h$e,Fv)=>{"use strict";var wd=pc(),Bd=tf(),gde=Ed(),fde=nf(),IH=Object.prototype.toString,yH=Object.prototype.hasOwnProperty,hde=9,yd=10,pde=13,dde=32,Cde=33,mde=34,wH=35,Ede=37,Ide=38,yde=39,wde=42,BH=44,Bde=45,bH=58,bde=61,Qde=62,Sde=63,vde=64,QH=91,SH=93,xde=96,vH=123,Pde=124,xH=125,Ti={};Ti[0]="\\0";Ti[7]="\\a";Ti[8]="\\b";Ti[9]="\\t";Ti[10]="\\n";Ti[11]="\\v";Ti[12]="\\f";Ti[13]="\\r";Ti[27]="\\e";Ti[34]='\\"';Ti[92]="\\\\";Ti[133]="\\N";Ti[160]="\\_";Ti[8232]="\\L";Ti[8233]="\\P";var Dde=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function kde(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n0?r.charCodeAt(s-1):null,f=f&&pH(o,a)}else{for(s=0;si&&r[g+1]!==" ",g=s);else if(!Af(o))return _I;a=s>0?r.charCodeAt(s-1):null,f=f&&pH(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==" "}return!l&&!c?f&&!n(r)?DH:kH:t>9&&PH(r)?_I:c?FH:RH}function Ode(r,e,t,i){r.dump=function(){if(e.length===0)return"''";if(!r.noCompatMode&&Dde.indexOf(e)!==-1)return"'"+e+"'";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return Fde(r,l)}switch(Lde(e,o,r.indent,s,a)){case DH:return e;case kH:return"'"+e.replace(/'/g,"''")+"'";case RH:return"|"+dH(e,r.indent)+CH(hH(e,n));case FH:return">"+dH(e,r.indent)+CH(hH(Mde(e,s),n));case _I:return'"'+Ude(e,s)+'"';default:throw new Bd("impossible error: invalid scalar style")}}()}function dH(r,e){var t=PH(r)?String(e):"",i=r[r.length-1]===` -`,n=i&&(r[r.length-2]===` -`||r===` -`),s=n?"+":i?"":"-";return t+s+` -`}function CH(r){return r[r.length-1]===` -`?r.slice(0,-1):r}function Mde(r,e){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=r.indexOf(` -`);return c=c!==-1?c:r.length,t.lastIndex=c,mH(r.slice(0,c),e)}(),n=r[0]===` -`||r[0]===" ",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` -`:"")+mH(l,e),n=s}return i}function mH(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` -`+r.slice(n,s),n=s+1),o=a;return l+=` -`,r.length-n>e&&o>n?l+=r.slice(n,o)+` -`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function Ude(r){for(var e="",t,i,n,s=0;s=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=fH((t-55296)*1024+i-56320+65536),s++;continue}n=Ti[t],e+=!n&&Af(t)?r[s]:n||fH(t)}return e}function Kde(r,e,t){var i="",n=r.tag,s,o;for(s=0,o=t.length;s1024&&(u+="? "),u+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),Ic(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump="{"+i+"}"}function Yde(r,e,t,i){var n="",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new Bd("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(r.dump&&yd===r.dump.charCodeAt(0)?f+="?":f+="? "),f+=r.dump,g&&(f+=Dv(r,e)),Ic(r,e+1,u,!0,g)&&(r.dump&&yd===r.dump.charCodeAt(0)?f+=":":f+=": ",f+=r.dump,n+=f));r.tag=s,r.dump=n||"{}"}function EH(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');r.dump=i}return!0}return!1}function Ic(r,e,t,i,n,s){r.tag=null,r.dump=t,EH(r,t,!1)||EH(r,t,!0);var o=IH.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!=="?"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump="*ref_"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(r.dump).length!==0?(Yde(r,e,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(Gde(r,e,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump));else if(o==="[object Array]"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(Hde(r,u,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(Kde(r,u,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump))}else if(o==="[object String]")r.tag!=="?"&&Ode(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new Bd("unacceptable kind of an object to dump "+o)}r.tag!==null&&r.tag!=="?"&&(r.dump="!<"+r.tag+"> "+r.dump)}return!0}function jde(r,e){var t=[],i=[],n,s;for(kv(r,t,i),n=0,s=i.length;n{"use strict";var ZI=gH(),LH=TH();function $I(r){return function(){throw new Error("Function "+r+" is deprecated and cannot be used.")}}Tr.exports.Type=Ai();Tr.exports.Schema=dc();Tr.exports.FAILSAFE_SCHEMA=qI();Tr.exports.JSON_SCHEMA=bv();Tr.exports.CORE_SCHEMA=Qv();Tr.exports.DEFAULT_SAFE_SCHEMA=nf();Tr.exports.DEFAULT_FULL_SCHEMA=Ed();Tr.exports.load=ZI.load;Tr.exports.loadAll=ZI.loadAll;Tr.exports.safeLoad=ZI.safeLoad;Tr.exports.safeLoadAll=ZI.safeLoadAll;Tr.exports.dump=LH.dump;Tr.exports.safeDump=LH.safeDump;Tr.exports.YAMLException=tf();Tr.exports.MINIMAL_SCHEMA=qI();Tr.exports.SAFE_SCHEMA=nf();Tr.exports.DEFAULT_SCHEMA=Ed();Tr.exports.scan=$I("scan");Tr.exports.parse=$I("parse");Tr.exports.compose=$I("compose");Tr.exports.addConstructor=$I("addConstructor")});var UH=y((d$e,MH)=>{"use strict";var Jde=OH();MH.exports=Jde});var HH=y((C$e,KH)=>{"use strict";function Wde(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function yc(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,yc)}Wde(yc,Error);yc.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ne]:pe})))},H=function(R){return R},j=function(R){return R},$=Ms("correct indentation"),V=" ",W=ar(" ",!1),Z=function(R){return R.length===vA*Gg},A=function(R){return R.length===(vA+1)*Gg},ae=function(){return vA++,!0},ge=function(){return vA--,!0},_=function(){return Lg()},L=Ms("pseudostring"),N=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ue=Fn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),we=/^[^\r\n\t ,\][{}:#"']/,Te=Fn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Pe=function(){return Lg().replace(/^ *| *$/g,"")},Le="--",se=ar("--",!1),Ae=/^[a-zA-Z\/0-9]/,be=Fn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),fe=/^[^\r\n\t :,]/,le=Fn(["\r",` -`," "," ",":",","],!0,!1),Ge="null",ie=ar("null",!1),Y=function(){return null},he="true",re=ar("true",!1),me=function(){return!0},tt="false",Rt=ar("false",!1),It=function(){return!1},Ur=Ms("string"),oi='"',pi=ar('"',!1),pr=function(){return""},di=function(R){return R},ai=function(R){return R.join("")},Os=/^[^"\\\0-\x1F\x7F]/,dr=Fn(['"',"\\",["\0",""],"\x7F"],!0,!1),Bi='\\"',_n=ar('\\"',!1),pa=function(){return'"'},EA="\\\\",kg=ar("\\\\",!1),Zn=function(){return"\\"},IA="\\/",da=ar("\\/",!1),Jp=function(){return"/"},yA="\\b",wA=ar("\\b",!1),Br=function(){return"\b"},Vl="\\f",Rg=ar("\\f",!1),Eo=function(){return"\f"},Fg="\\n",Wp=ar("\\n",!1),zp=function(){return` -`},Pr="\\r",oe=ar("\\r",!1),Io=function(){return"\r"},kn="\\t",Ng=ar("\\t",!1),bt=function(){return" "},Xl="\\u",Rn=ar("\\u",!1),$n=function(R,q,pe,Ne){return String.fromCharCode(parseInt(`0x${R}${q}${pe}${Ne}`))},es=/^[0-9a-fA-F]/,ut=Fn([["0","9"],["a","f"],["A","F"]],!1,!1),yo=Ms("blank space"),at=/^[ \t]/,ln=Fn([" "," "],!1,!1),S=Ms("white space"),Lt=/^[ \t\n\r]/,Tg=Fn([" "," ",` -`,"\r"],!1,!1),_l=`\r -`,Vp=ar(`\r -`,!1),Xp=` -`,_p=ar(` -`,!1),Zp="\r",$p=ar("\r",!1),G=0,yt=0,BA=[{line:1,column:1}],Wi=0,Zl=[],We=0,Ca;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function Lg(){return r.substring(yt,G)}function uI(){return cn(yt,G)}function ed(R,q){throw q=q!==void 0?q:cn(yt,G),ec([Ms(R)],r.substring(yt,G),q)}function gI(R,q){throw q=q!==void 0?q:cn(yt,G),Og(R,q)}function ar(R,q){return{type:"literal",text:R,ignoreCase:q}}function Fn(R,q,pe){return{type:"class",parts:R,inverted:q,ignoreCase:pe}}function $l(){return{type:"any"}}function td(){return{type:"end"}}function Ms(R){return{type:"other",description:R}}function ma(R){var q=BA[R],pe;if(q)return q;for(pe=R-1;!BA[pe];)pe--;for(q=BA[pe],q={line:q.line,column:q.column};peWi&&(Wi=G,Zl=[]),Zl.push(R))}function Og(R,q){return new yc(R,null,null,q)}function ec(R,q,pe){return new yc(yc.buildMessage(R,q),R,q,pe)}function Us(){var R;return R=Mg(),R}function tc(){var R,q,pe;for(R=G,q=[],pe=bA();pe!==t;)q.push(pe),pe=bA();return q!==t&&(yt=R,q=s(q)),R=q,R}function bA(){var R,q,pe,Ne,xe;return R=G,q=Ia(),q!==t?(r.charCodeAt(G)===45?(pe=o,G++):(pe=t,We===0&&ke(a)),pe!==t?(Ne=Nr(),Ne!==t?(xe=Ea(),xe!==t?(yt=R,q=l(xe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function Mg(){var R,q,pe;for(R=G,q=[],pe=Ug();pe!==t;)q.push(pe),pe=Ug();return q!==t&&(yt=R,q=c(q)),R=q,R}function Ug(){var R,q,pe,Ne,xe,qe,dt,Ft,Nn;if(R=G,q=Nr(),q===t&&(q=null),q!==t){if(pe=G,r.charCodeAt(G)===35?(Ne=u,G++):(Ne=t,We===0&&ke(g)),Ne!==t){if(xe=[],qe=G,dt=G,We++,Ft=Gs(),We--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,We===0&&ke(f)),Ft!==t?(dt=[dt,Ft],qe=dt):(G=qe,qe=t)):(G=qe,qe=t),qe!==t)for(;qe!==t;)xe.push(qe),qe=G,dt=G,We++,Ft=Gs(),We--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,We===0&&ke(f)),Ft!==t?(dt=[dt,Ft],qe=dt):(G=qe,qe=t)):(G=qe,qe=t);else xe=t;xe!==t?(Ne=[Ne,xe],pe=Ne):(G=pe,pe=t)}else G=pe,pe=t;if(pe===t&&(pe=null),pe!==t){if(Ne=[],xe=Hs(),xe!==t)for(;xe!==t;)Ne.push(xe),xe=Hs();else Ne=t;Ne!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=Ia(),q!==t?(pe=rc(),pe!==t?(Ne=Nr(),Ne===t&&(Ne=null),Ne!==t?(r.charCodeAt(G)===58?(xe=p,G++):(xe=t,We===0&&ke(C)),xe!==t?(qe=Nr(),qe===t&&(qe=null),qe!==t?(dt=Ea(),dt!==t?(yt=R,q=w(pe,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Ia(),q!==t?(pe=Ks(),pe!==t?(Ne=Nr(),Ne===t&&(Ne=null),Ne!==t?(r.charCodeAt(G)===58?(xe=p,G++):(xe=t,We===0&&ke(C)),xe!==t?(qe=Nr(),qe===t&&(qe=null),qe!==t?(dt=Ea(),dt!==t?(yt=R,q=w(pe,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=Ia(),q!==t)if(pe=Ks(),pe!==t)if(Ne=Nr(),Ne!==t)if(xe=fI(),xe!==t){if(qe=[],dt=Hs(),dt!==t)for(;dt!==t;)qe.push(dt),dt=Hs();else qe=t;qe!==t?(yt=R,q=w(pe,xe),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=Ia(),q!==t)if(pe=Ks(),pe!==t){if(Ne=[],xe=G,qe=Nr(),qe===t&&(qe=null),qe!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,We===0&&ke(v)),dt!==t?(Ft=Nr(),Ft===t&&(Ft=null),Ft!==t?(Nn=Ks(),Nn!==t?(yt=xe,qe=D(pe,Nn),xe=qe):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t),xe!==t)for(;xe!==t;)Ne.push(xe),xe=G,qe=Nr(),qe===t&&(qe=null),qe!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,We===0&&ke(v)),dt!==t?(Ft=Nr(),Ft===t&&(Ft=null),Ft!==t?(Nn=Ks(),Nn!==t?(yt=xe,qe=D(pe,Nn),xe=qe):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t)):(G=xe,xe=t);else Ne=t;Ne!==t?(xe=Nr(),xe===t&&(xe=null),xe!==t?(r.charCodeAt(G)===58?(qe=p,G++):(qe=t,We===0&&ke(C)),qe!==t?(dt=Nr(),dt===t&&(dt=null),dt!==t?(Ft=Ea(),Ft!==t?(yt=R,q=T(pe,Ne,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function Ea(){var R,q,pe,Ne,xe,qe,dt;if(R=G,q=G,We++,pe=G,Ne=Gs(),Ne!==t?(xe=$e(),xe!==t?(r.charCodeAt(G)===45?(qe=o,G++):(qe=t,We===0&&ke(a)),qe!==t?(dt=Nr(),dt!==t?(Ne=[Ne,xe,qe,dt],pe=Ne):(G=pe,pe=t)):(G=pe,pe=t)):(G=pe,pe=t)):(G=pe,pe=t),We--,pe!==t?(G=q,q=void 0):q=t,q!==t?(pe=Hs(),pe!==t?(Ne=wo(),Ne!==t?(xe=tc(),xe!==t?(qe=QA(),qe!==t?(yt=R,q=H(xe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Gs(),q!==t?(pe=wo(),pe!==t?(Ne=Mg(),Ne!==t?(xe=QA(),xe!==t?(yt=R,q=H(Ne),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=ic(),q!==t){if(pe=[],Ne=Hs(),Ne!==t)for(;Ne!==t;)pe.push(Ne),Ne=Hs();else pe=t;pe!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function Ia(){var R,q,pe;for(We++,R=G,q=[],r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));pe!==t;)q.push(pe),r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));return q!==t?(yt=G,pe=Z(q),pe?pe=void 0:pe=t,pe!==t?(q=[q,pe],R=q):(G=R,R=t)):(G=R,R=t),We--,R===t&&(q=t,We===0&&ke($)),R}function $e(){var R,q,pe;for(R=G,q=[],r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));pe!==t;)q.push(pe),r.charCodeAt(G)===32?(pe=V,G++):(pe=t,We===0&&ke(W));return q!==t?(yt=G,pe=A(q),pe?pe=void 0:pe=t,pe!==t?(q=[q,pe],R=q):(G=R,R=t)):(G=R,R=t),R}function wo(){var R;return yt=G,R=ae(),R?R=void 0:R=t,R}function QA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function rc(){var R;return R=nc(),R===t&&(R=rd()),R}function Ks(){var R,q,pe;if(R=nc(),R===t){if(R=G,q=[],pe=Kg(),pe!==t)for(;pe!==t;)q.push(pe),pe=Kg();else q=t;q!==t&&(yt=R,q=_()),R=q}return R}function ic(){var R;return R=id(),R===t&&(R=hI(),R===t&&(R=nc(),R===t&&(R=rd()))),R}function fI(){var R;return R=id(),R===t&&(R=nc(),R===t&&(R=Kg())),R}function rd(){var R,q,pe,Ne,xe,qe;if(We++,R=G,N.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ue)),q!==t){for(pe=[],Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(we.test(r.charAt(G))?(qe=r.charAt(G),G++):(qe=t,We===0&&ke(Te)),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);Ne!==t;)pe.push(Ne),Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(we.test(r.charAt(G))?(qe=r.charAt(G),G++):(qe=t,We===0&&ke(Te)),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);pe!==t?(yt=R,q=Pe(),R=q):(G=R,R=t)}else G=R,R=t;return We--,R===t&&(q=t,We===0&&ke(L)),R}function Kg(){var R,q,pe,Ne,xe;if(R=G,r.substr(G,2)===Le?(q=Le,G+=2):(q=t,We===0&&ke(se)),q===t&&(q=null),q!==t)if(Ae.test(r.charAt(G))?(pe=r.charAt(G),G++):(pe=t,We===0&&ke(be)),pe!==t){for(Ne=[],fe.test(r.charAt(G))?(xe=r.charAt(G),G++):(xe=t,We===0&&ke(le));xe!==t;)Ne.push(xe),fe.test(r.charAt(G))?(xe=r.charAt(G),G++):(xe=t,We===0&&ke(le));Ne!==t?(yt=R,q=Pe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function id(){var R,q;return R=G,r.substr(G,4)===Ge?(q=Ge,G+=4):(q=t,We===0&&ke(ie)),q!==t&&(yt=R,q=Y()),R=q,R}function hI(){var R,q;return R=G,r.substr(G,4)===he?(q=he,G+=4):(q=t,We===0&&ke(re)),q!==t&&(yt=R,q=me()),R=q,R===t&&(R=G,r.substr(G,5)===tt?(q=tt,G+=5):(q=t,We===0&&ke(Rt)),q!==t&&(yt=R,q=It()),R=q),R}function nc(){var R,q,pe,Ne;return We++,R=G,r.charCodeAt(G)===34?(q=oi,G++):(q=t,We===0&&ke(pi)),q!==t?(r.charCodeAt(G)===34?(pe=oi,G++):(pe=t,We===0&&ke(pi)),pe!==t?(yt=R,q=pr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=oi,G++):(q=t,We===0&&ke(pi)),q!==t?(pe=pI(),pe!==t?(r.charCodeAt(G)===34?(Ne=oi,G++):(Ne=t,We===0&&ke(pi)),Ne!==t?(yt=R,q=di(pe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),We--,R===t&&(q=t,We===0&&ke(Ur)),R}function pI(){var R,q,pe;if(R=G,q=[],pe=Hg(),pe!==t)for(;pe!==t;)q.push(pe),pe=Hg();else q=t;return q!==t&&(yt=R,q=ai(q)),R=q,R}function Hg(){var R,q,pe,Ne,xe,qe;return Os.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,We===0&&ke(dr)),R===t&&(R=G,r.substr(G,2)===Bi?(q=Bi,G+=2):(q=t,We===0&&ke(_n)),q!==t&&(yt=R,q=pa()),R=q,R===t&&(R=G,r.substr(G,2)===EA?(q=EA,G+=2):(q=t,We===0&&ke(kg)),q!==t&&(yt=R,q=Zn()),R=q,R===t&&(R=G,r.substr(G,2)===IA?(q=IA,G+=2):(q=t,We===0&&ke(da)),q!==t&&(yt=R,q=Jp()),R=q,R===t&&(R=G,r.substr(G,2)===yA?(q=yA,G+=2):(q=t,We===0&&ke(wA)),q!==t&&(yt=R,q=Br()),R=q,R===t&&(R=G,r.substr(G,2)===Vl?(q=Vl,G+=2):(q=t,We===0&&ke(Rg)),q!==t&&(yt=R,q=Eo()),R=q,R===t&&(R=G,r.substr(G,2)===Fg?(q=Fg,G+=2):(q=t,We===0&&ke(Wp)),q!==t&&(yt=R,q=zp()),R=q,R===t&&(R=G,r.substr(G,2)===Pr?(q=Pr,G+=2):(q=t,We===0&&ke(oe)),q!==t&&(yt=R,q=Io()),R=q,R===t&&(R=G,r.substr(G,2)===kn?(q=kn,G+=2):(q=t,We===0&&ke(Ng)),q!==t&&(yt=R,q=bt()),R=q,R===t&&(R=G,r.substr(G,2)===Xl?(q=Xl,G+=2):(q=t,We===0&&ke(Rn)),q!==t?(pe=SA(),pe!==t?(Ne=SA(),Ne!==t?(xe=SA(),xe!==t?(qe=SA(),qe!==t?(yt=R,q=$n(pe,Ne,xe,qe),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function SA(){var R;return es.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,We===0&&ke(ut)),R}function Nr(){var R,q;if(We++,R=[],at.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ln)),q!==t)for(;q!==t;)R.push(q),at.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(ln));else R=t;return We--,R===t&&(q=t,We===0&&ke(yo)),R}function dI(){var R,q;if(We++,R=[],Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(Tg)),q!==t)for(;q!==t;)R.push(q),Lt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,We===0&&ke(Tg));else R=t;return We--,R===t&&(q=t,We===0&&ke(S)),R}function Hs(){var R,q,pe,Ne,xe,qe;if(R=G,q=Gs(),q!==t){for(pe=[],Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(qe=Gs(),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);Ne!==t;)pe.push(Ne),Ne=G,xe=Nr(),xe===t&&(xe=null),xe!==t?(qe=Gs(),qe!==t?(xe=[xe,qe],Ne=xe):(G=Ne,Ne=t)):(G=Ne,Ne=t);pe!==t?(q=[q,pe],R=q):(G=R,R=t)}else G=R,R=t;return R}function Gs(){var R;return r.substr(G,2)===_l?(R=_l,G+=2):(R=t,We===0&&ke(Vp)),R===t&&(r.charCodeAt(G)===10?(R=Xp,G++):(R=t,We===0&&ke(_p)),R===t&&(r.charCodeAt(G)===13?(R=Zp,G++):(R=t,We===0&&ke($p)))),R}let Gg=2,vA=0;if(Ca=n(),Ca!==t&&G===r.length)return Ca;throw Ca!==t&&G{"use strict";var $de=r=>{let e=!1,t=!1,i=!1;for(let n=0;n{if(!(typeof r=="string"||Array.isArray(r)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join("-"):r=r.trim(),r.length===0?"":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=$de(r)),r=r.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),t(r))};Tv.exports=JH;Tv.exports.default=JH});var zH=y((B$e,eCe)=>{eCe.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var wc=y(Mn=>{"use strict";var XH=zH(),vo=process.env;Object.defineProperty(Mn,"_vendors",{value:XH.map(function(r){return r.constant})});Mn.name=null;Mn.isPR=null;XH.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return VH(i)});if(Mn[r.constant]=t,t)switch(Mn.name=r.name,typeof r.pr){case"string":Mn.isPR=!!vo[r.pr];break;case"object":"env"in r.pr?Mn.isPR=r.pr.env in vo&&vo[r.pr.env]!==r.pr.ne:"any"in r.pr?Mn.isPR=r.pr.any.some(function(i){return!!vo[i]}):Mn.isPR=VH(r.pr);break;default:Mn.isPR=null}});Mn.isCI=!!(vo.CI||vo.CONTINUOUS_INTEGRATION||vo.BUILD_NUMBER||vo.RUN_ID||Mn.name);function VH(r){return typeof r=="string"?!!vo[r]:Object.keys(r).every(function(e){return vo[e]===r[e]})}});var ry=y(Un=>{"use strict";Object.defineProperty(Un,"__esModule",{value:!0});var tCe=0,rCe=1,iCe=2,nCe="",sCe="\0",oCe=-1,aCe=/^(-h|--help)(?:=([0-9]+))?$/,ACe=/^(--[a-z]+(?:-[a-z]+)*|-[a-zA-Z]+)$/,lCe=/^-[a-zA-Z]{2,}$/,cCe=/^([^=]+)=([\s\S]*)$/,uCe=process.env.DEBUG_CLI==="1";Un.BATCH_REGEX=lCe;Un.BINDING_REGEX=cCe;Un.DEBUG=uCe;Un.END_OF_INPUT=sCe;Un.HELP_COMMAND_INDEX=oCe;Un.HELP_REGEX=aCe;Un.NODE_ERRORED=iCe;Un.NODE_INITIAL=tCe;Un.NODE_SUCCESS=rCe;Un.OPTION_REGEX=ACe;Un.START_OF_INPUT=nCe});var iy=y(Qd=>{"use strict";Object.defineProperty(Qd,"__esModule",{value:!0});var gCe=ry(),Lv=class extends Error{constructor(e){super(e),this.clipanion={type:"usage"},this.name="UsageError"}},Ov=class extends Error{constructor(e,t){if(super(),this.input=e,this.candidates=t,this.clipanion={type:"none"},this.name="UnknownSyntaxError",this.candidates.length===0)this.message="Command not found, but we're not sure what's the alternative.";else if(this.candidates.every(i=>i.reason!==null&&i.reason===t[0].reason)){let[{reason:i}]=this.candidates;this.message=`${i} - -${this.candidates.map(({usage:n})=>`$ ${n}`).join(` -`)}`}else if(this.candidates.length===1){let[{usage:i}]=this.candidates;this.message=`Command not found; did you mean: - -$ ${i} -${Uv(e)}`}else this.message=`Command not found; did you mean one of: - -${this.candidates.map(({usage:i},n)=>`${`${n}.`.padStart(4)} ${i}`).join(` -`)} - -${Uv(e)}`}},Mv=class extends Error{constructor(e,t){super(),this.input=e,this.usages=t,this.clipanion={type:"none"},this.name="AmbiguousSyntaxError",this.message=`Cannot find which to pick amongst the following alternatives: - -${this.usages.map((i,n)=>`${`${n}.`.padStart(4)} ${i}`).join(` -`)} - -${Uv(e)}`}},Uv=r=>`While running ${r.filter(e=>e!==gCe.END_OF_INPUT).map(e=>{let t=JSON.stringify(e);return e.match(/\s/)||e.length===0||t!==`"${e}"`?t:e}).join(" ")}`;Qd.AmbiguousSyntaxError=Mv;Qd.UnknownSyntaxError=Ov;Qd.UsageError=Lv});var va=y(TA=>{"use strict";Object.defineProperty(TA,"__esModule",{value:!0});var _H=iy(),ZH=Symbol("clipanion/isOption");function fCe(r){return{...r,[ZH]:!0}}function hCe(r,e){return typeof r>"u"?[r,e]:typeof r=="object"&&r!==null&&!Array.isArray(r)?[void 0,r]:[r,e]}function Kv(r,e=!1){let t=r.replace(/^\.: /,"");return e&&(t=t[0].toLowerCase()+t.slice(1)),t}function $H(r,e){return e.length===1?new _H.UsageError(`${r}: ${Kv(e[0],!0)}`):new _H.UsageError(`${r}: -${e.map(t=>` -- ${Kv(t)}`).join("")}`)}function pCe(r,e,t){if(typeof t>"u")return e;let i=[],n=[],s=a=>{let l=e;return e=a,s.bind(null,l)};if(!t(e,{errors:i,coercions:n,coercion:s}))throw $H(`Invalid value for ${r}`,i);for(let[,a]of n)a();return e}TA.applyValidator=pCe;TA.cleanValidationError=Kv;TA.formatError=$H;TA.isOptionSymbol=ZH;TA.makeCommandOption=fCe;TA.rerouteArguments=hCe});var ns=y(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});var eG=/^[a-zA-Z_][a-zA-Z0-9_]*$/,tG=/^#[0-9a-f]{6}$/i,rG=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,iG=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,nG=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,Hv=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,sG=r=>()=>r;function Qt({test:r}){return sG(r)()}function Zr(r){return r===null?"null":r===void 0?"undefined":r===""?"an empty string":JSON.stringify(r)}function LA(r,e){var t,i,n;return typeof e=="number"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:"."}[${e}]`:eG.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function Bc(r,e){return t=>{let i=r[e];return r[e]=t,Bc(r,e).bind(null,i)}}function oG(r,e){return t=>{r[e]=t}}function ny(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:"."}: ${t}`),!1}var aG=()=>Qt({test:(r,e)=>!0});function dCe(r){return Qt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Zr(r)})`):!0})}var CCe=()=>Qt({test:(r,e)=>typeof r!="string"?pt(e,`Expected a string (got ${Zr(r)})`):!0});function mCe(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return Qt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Zr(i)})`)})}var ECe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),ICe=()=>Qt({test:(r,e)=>{var t;if(typeof r!="boolean"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i=ECe.get(r);if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Zr(r)})`)}return!0}}),yCe=()=>Qt({test:(r,e)=>{var t;if(typeof r!="number"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"){let n;try{n=JSON.parse(r)}catch{}if(typeof n=="number")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Zr(r)})`)}return!0}}),wCe=()=>Qt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"&&Hv.test(r))i=new Date(r);else{let n;if(typeof r=="string"){let s;try{s=JSON.parse(r)}catch{}typeof s=="number"&&(n=s)}else typeof r=="number"&&(n=r);if(typeof n<"u")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Zr(r)})`)}return!0}}),BCe=(r,{delimiter:e}={})=>Qt({test:(t,i)=>{var n;if(typeof t=="string"&&typeof e<"u"&&typeof(i==null?void 0:i.coercions)<"u"){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Zr(t)})`);let s=!0;for(let o=0,a=t.length;o{let t=AG(r.length);return Qt({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e<"u"&&typeof(n==null?void 0:n.coercions)<"u"){if(typeof(n==null?void 0:n.coercion)>"u")return pt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Zr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;aQt({test:(t,i)=>{if(typeof t!="object"||t===null)return pt(i,`Expected an object (got ${Zr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o{let t=Object.keys(r);return Qt({test:(i,n)=>{if(typeof i!="object"||i===null)return pt(n,`Expected an object (got ${Zr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=pt(Object.assign(Object.assign({},n),{p:LA(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<"u"?a=c(u,Object.assign(Object.assign({},n),{p:LA(n,l),coercion:Bc(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:LA(n,l)}),`Extraneous property (got ${Zr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:oG(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},vCe=r=>Qt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Zr(e)})`)}),xCe=(r,{exclusive:e=!1}={})=>Qt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<"u"?[]:void 0;for(let c=0,u=r.length;c1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),PCe=(r,e)=>Qt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<"u"?Bc(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)<"u"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<"u")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<"u"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),DCe=r=>Qt({test:(e,t)=>typeof e>"u"?!0:r(e,t)}),kCe=r=>Qt({test:(e,t)=>e===null?!0:r(e,t)}),RCe=r=>Qt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),FCe=r=>Qt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),AG=r=>Qt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),NCe=({map:r}={})=>Qt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sQt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),LCe=()=>Qt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),OCe=r=>Qt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),MCe=r=>Qt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),UCe=(r,e)=>Qt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),KCe=(r,e)=>Qt({test:(t,i)=>t>=r&&tQt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),GCe=r=>Qt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Zr(e)})`)}),YCe=()=>Qt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),jCe=()=>Qt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),qCe=()=>Qt({test:(r,e)=>nG.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Zr(r)})`)}),JCe=()=>Qt({test:(r,e)=>Hv.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Zr(r)})`)}),WCe=({alpha:r=!1})=>Qt({test:(e,t)=>(r?tG.test(e):rG.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Zr(e)})`)}),zCe=()=>Qt({test:(r,e)=>iG.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Zr(r)})`)}),VCe=(r=aG())=>Qt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Zr(e)})`)}return r(i,t)}}),XCe=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${ny(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},_Ce=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${ny(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},ZCe=r=>{let e=new Set(r);return Qt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(r){r.Forbids="Forbids",r.Requires="Requires"})(st.KeyRelationship||(st.KeyRelationship={}));var $Ce={[st.KeyRelationship.Forbids]:{expect:!1,message:"forbids using"},[st.KeyRelationship.Requires]:{expect:!0,message:"requires using"}},eme=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=$Ce[e];return Qt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property "${r}" ${o.message} ${ny(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})};st.applyCascade=PCe;st.base64RegExp=iG;st.colorStringAlphaRegExp=rG;st.colorStringRegExp=tG;st.computeKey=LA;st.getPrintable=Zr;st.hasExactLength=AG;st.hasForbiddenKeys=_Ce;st.hasKeyRelationship=eme;st.hasMaxLength=FCe;st.hasMinLength=RCe;st.hasMutuallyExclusiveKeys=ZCe;st.hasRequiredKeys=XCe;st.hasUniqueItems=NCe;st.isArray=BCe;st.isAtLeast=OCe;st.isAtMost=MCe;st.isBase64=zCe;st.isBoolean=ICe;st.isDate=wCe;st.isDict=QCe;st.isEnum=mCe;st.isHexColor=WCe;st.isISO8601=JCe;st.isInExclusiveRange=KCe;st.isInInclusiveRange=UCe;st.isInstanceOf=vCe;st.isInteger=HCe;st.isJSON=VCe;st.isLiteral=dCe;st.isLowerCase=YCe;st.isNegative=TCe;st.isNullable=kCe;st.isNumber=yCe;st.isObject=SCe;st.isOneOf=xCe;st.isOptional=DCe;st.isPositive=LCe;st.isString=CCe;st.isTuple=bCe;st.isUUID4=qCe;st.isUnknown=aG;st.isUpperCase=jCe;st.iso8601RegExp=Hv;st.makeCoercionFn=Bc;st.makeSetter=oG;st.makeTrait=sG;st.makeValidator=Qt;st.matchesRegExp=GCe;st.plural=ny;st.pushError=pt;st.simpleKeyRegExp=eG;st.uuid4RegExp=nG});var bc=y(Gv=>{"use strict";Object.defineProperty(Gv,"__esModule",{value:!0});var lG=va();function tme(r){if(r&&r.__esModule)return r;var e=Object.create(null);return r&&Object.keys(r).forEach(function(t){if(t!=="default"){var i=Object.getOwnPropertyDescriptor(r,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:function(){return r[t]}})}}),e.default=r,Object.freeze(e)}var Sd=class{constructor(){this.help=!1}static Usage(e){return e}async catch(e){throw e}async validateAndExecute(){let t=this.constructor.schema;if(Array.isArray(t)){let{isDict:n,isUnknown:s,applyCascade:o}=await Promise.resolve().then(function(){return tme(ns())}),a=o(n(s()),t),l=[],c=[];if(!a(this,{errors:l,coercions:c}))throw lG.formatError("Invalid option schema",l);for(let[,g]of c)g()}else if(t!=null)throw new Error("Invalid command schema");let i=await this.execute();return typeof i<"u"?i:0}};Sd.isOption=lG.isOptionSymbol;Sd.Default=[];Gv.Command=Sd});var jv=y(vd=>{"use strict";Object.defineProperty(vd,"__esModule",{value:!0});var cG=80,Yv=Array(cG).fill("\u2501");for(let r=0;r<=24;++r)Yv[Yv.length-r]=`\x1B[38;5;${232+r}m\u2501`;var rme={header:r=>`\x1B[1m\u2501\u2501\u2501 ${r}${r.length`\x1B[1m${r}\x1B[22m`,error:r=>`\x1B[31m\x1B[1m${r}\x1B[22m\x1B[39m`,code:r=>`\x1B[36m${r}\x1B[39m`},ime={header:r=>r,bold:r=>r,error:r=>r,code:r=>r};function nme(r){let e=r.split(` -`),t=e.filter(n=>n.match(/\S/)),i=t.length>0?t.reduce((n,s)=>Math.min(n,s.length-s.trimStart().length),Number.MAX_VALUE):0;return e.map(n=>n.slice(i).trimRight()).join(` -`)}function sme(r,{format:e,paragraphs:t}){return r=r.replace(/\r\n?/g,` -`),r=nme(r),r=r.replace(/^\n+|\n+$/g,""),r=r.replace(/^(\s*)-([^\n]*?)\n+/gm,`$1-$2 - -`),r=r.replace(/\n(\n)?\n*/g,"$1"),t&&(r=r.split(/\n/).map(i=>{let n=i.match(/^\s*[*-][\t ]+(.*)/);if(!n)return i.match(/(.{1,80})(?: |$)/g).join(` -`);let s=i.length-i.trimStart().length;return n[1].match(new RegExp(`(.{1,${78-s}})(?: |$)`,"g")).map((o,a)=>" ".repeat(s)+(a===0?"- ":" ")+o).join(` -`)}).join(` - -`)),r=r.replace(/(`+)((?:.|[\n])*?)\1/g,(i,n,s)=>e.code(n+s+n)),r=r.replace(/(\*\*)((?:.|[\n])*?)\1/g,(i,n,s)=>e.bold(n+s+n)),r?`${r} -`:""}vd.formatMarkdownish=sme;vd.richFormat=rme;vd.textFormat=ime});var ly=y(Ar=>{"use strict";Object.defineProperty(Ar,"__esModule",{value:!0});var lt=ry(),ay=iy();function Vi(r){lt.DEBUG&&console.log(r)}var uG={candidateUsage:null,requiredOptions:[],errorMessage:null,ignoreOptions:!1,path:[],positionals:[],options:[],remainder:null,selectedIndex:lt.HELP_COMMAND_INDEX};function qv(){return{nodes:[Li(),Li(),Li()]}}function gG(r){let e=qv(),t=[],i=e.nodes.length;for(let n of r){t.push(i);for(let s=0;s{if(e.has(i))return;e.add(i);let n=r.nodes[i];for(let o of Object.values(n.statics))for(let{to:a}of o)t(a);for(let[,{to:o}]of n.dynamics)t(o);for(let{to:o}of n.shortcuts)t(o);let s=new Set(n.shortcuts.map(({to:o})=>o));for(;n.shortcuts.length>0;){let{to:o}=n.shortcuts.shift(),a=r.nodes[o];for(let[l,c]of Object.entries(a.statics)){let u=Object.prototype.hasOwnProperty.call(n.statics,l)?n.statics[l]:n.statics[l]=[];for(let g of c)u.some(({to:f})=>g.to===f)||u.push(g)}for(let[l,c]of a.dynamics)n.dynamics.some(([u,{to:g}])=>l===u&&c.to===g)||n.dynamics.push([l,c]);for(let l of a.shortcuts)s.has(l.to)||(n.shortcuts.push(l),s.add(l.to))}};t(lt.NODE_INITIAL)}function hG(r,{prefix:e=""}={}){if(lt.DEBUG){Vi(`${e}Nodes are:`);for(let t=0;tl!==lt.NODE_ERRORED).map(({state:l})=>({usage:l.candidateUsage,reason:null})));if(a.every(({node:l})=>l===lt.NODE_ERRORED))throw new ay.UnknownSyntaxError(e,a.map(({state:l})=>({usage:l.candidateUsage,reason:l.errorMessage})));i=pG(a)}if(i.length>0){Vi(" Results:");for(let s of i)Vi(` - ${s.node} -> ${JSON.stringify(s.state)}`)}else Vi(" No results");return i}function ome(r,e){if(e.selectedIndex!==null)return!0;if(Object.prototype.hasOwnProperty.call(r.statics,lt.END_OF_INPUT)){for(let{to:t}of r.statics[lt.END_OF_INPUT])if(t===lt.NODE_SUCCESS)return!0}return!1}function ame(r,e,t){let i=t&&e.length>0?[""]:[],n=Jv(r,e,t),s=[],o=new Set,a=(l,c,u=!0)=>{let g=[c];for(;g.length>0;){let h=g;g=[];for(let p of h){let C=r.nodes[p],w=Object.keys(C.statics);for(let B of Object.keys(C.statics)){let v=w[0];for(let{to:D,reducer:T}of C.statics[v])T==="pushPath"&&(u||l.push(v),g.push(D))}}u=!1}let f=JSON.stringify(l);o.has(f)||(s.push(l),o.add(f))};for(let{node:l,state:c}of n){if(c.remainder!==null){a([c.remainder],l);continue}let u=r.nodes[l],g=ome(u,c);for(let[f,h]of Object.entries(u.statics))(g&&f!==lt.END_OF_INPUT||!f.startsWith("-")&&h.some(({reducer:p})=>p==="pushPath"))&&a([...i,f],l);if(!!g)for(let[f,{to:h}]of u.dynamics){if(h===lt.NODE_ERRORED)continue;let p=IG(f,c);if(p!==null)for(let C of p)a([...i,C],l)}}return[...s].sort()}function Ame(r,e){let t=Jv(r,[...e,lt.END_OF_INPUT]);return dG(e,t.map(({state:i})=>i))}function pG(r){let e=0;for(let{state:t}of r)t.path.length>e&&(e=t.path.length);return r.filter(({state:t})=>t.path.length===e)}function dG(r,e){let t=e.filter(g=>g.selectedIndex!==null);if(t.length===0)throw new Error;let i=t.filter(g=>g.requiredOptions.every(f=>f.some(h=>g.options.find(p=>p.name===h))));if(i.length===0)throw new ay.UnknownSyntaxError(r,t.map(g=>({usage:g.candidateUsage,reason:null})));let n=0;for(let g of i)g.path.length>n&&(n=g.path.length);let s=i.filter(g=>g.path.length===n),o=g=>g.positionals.filter(({extra:f})=>!f).length+g.options.length,a=s.map(g=>({state:g,positionalCount:o(g)})),l=0;for(let{positionalCount:g}of a)g>l&&(l=g);let c=a.filter(({positionalCount:g})=>g===l).map(({state:g})=>g),u=CG(c);if(u.length>1)throw new ay.AmbiguousSyntaxError(r,u.map(g=>g.candidateUsage));return u[0]}function CG(r){let e=[],t=[];for(let i of r)i.selectedIndex===lt.HELP_COMMAND_INDEX?t.push(i):e.push(i);return t.length>0&&e.push({...uG,path:mG(...t.map(i=>i.path)),options:t.reduce((i,n)=>i.concat(n.options),[])}),e}function mG(r,e,...t){return e===void 0?Array.from(r):mG(r.filter((i,n)=>i===e[n]),...t)}function Li(){return{dynamics:[],shortcuts:[],statics:{}}}function Wv(r){return r===lt.NODE_SUCCESS||r===lt.NODE_ERRORED}function sy(r,e=0){return{to:Wv(r.to)?r.to:r.to>2?r.to+e-2:r.to+e,reducer:r.reducer}}function EG(r,e=0){let t=Li();for(let[i,n]of r.dynamics)t.dynamics.push([i,sy(n,e)]);for(let i of r.shortcuts)t.shortcuts.push(sy(i,e));for(let[i,n]of Object.entries(r.statics))t.statics[i]=n.map(s=>sy(s,e));return t}function Ei(r,e,t,i,n){r.nodes[e].dynamics.push([t,{to:i,reducer:n}])}function Qc(r,e,t,i){r.nodes[e].shortcuts.push({to:t,reducer:i})}function xo(r,e,t,i,n){(Object.prototype.hasOwnProperty.call(r.nodes[e].statics,t)?r.nodes[e].statics[t]:r.nodes[e].statics[t]=[]).push({to:i,reducer:n})}function xd(r,e,t,i){if(Array.isArray(e)){let[n,...s]=e;return r[n](t,i,...s)}else return r[e](t,i)}function IG(r,e){let t=Array.isArray(r)?Pd[r[0]]:Pd[r];if(typeof t.suggest>"u")return null;let i=Array.isArray(r)?r.slice(1):[];return t.suggest(e,...i)}var Pd={always:()=>!0,isOptionLike:(r,e)=>!r.ignoreOptions&&e!=="-"&&e.startsWith("-"),isNotOptionLike:(r,e)=>r.ignoreOptions||e==="-"||!e.startsWith("-"),isOption:(r,e,t,i)=>!r.ignoreOptions&&e===t,isBatchOption:(r,e,t)=>!r.ignoreOptions&<.BATCH_REGEX.test(e)&&[...e.slice(1)].every(i=>t.includes(`-${i}`)),isBoundOption:(r,e,t,i)=>{let n=e.match(lt.BINDING_REGEX);return!r.ignoreOptions&&!!n&<.OPTION_REGEX.test(n[1])&&t.includes(n[1])&&i.filter(s=>s.names.includes(n[1])).every(s=>s.allowBinding)},isNegatedOption:(r,e,t)=>!r.ignoreOptions&&e===`--no-${t.slice(2)}`,isHelp:(r,e)=>!r.ignoreOptions&<.HELP_REGEX.test(e),isUnsupportedOption:(r,e,t)=>!r.ignoreOptions&&e.startsWith("-")&<.OPTION_REGEX.test(e)&&!t.includes(e),isInvalidOption:(r,e)=>!r.ignoreOptions&&e.startsWith("-")&&!lt.OPTION_REGEX.test(e)};Pd.isOption.suggest=(r,e,t=!0)=>t?null:[e];var oy={setCandidateState:(r,e,t)=>({...r,...t}),setSelectedIndex:(r,e,t)=>({...r,selectedIndex:t}),pushBatch:(r,e)=>({...r,options:r.options.concat([...e.slice(1)].map(t=>({name:`-${t}`,value:!0})))}),pushBound:(r,e)=>{let[,t,i]=e.match(lt.BINDING_REGEX);return{...r,options:r.options.concat({name:t,value:i})}},pushPath:(r,e)=>({...r,path:r.path.concat(e)}),pushPositional:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!1})}),pushExtra:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:!0})}),pushExtraNoLimits:(r,e)=>({...r,positionals:r.positionals.concat({value:e,extra:Po})}),pushTrue:(r,e,t=e)=>({...r,options:r.options.concat({name:e,value:!0})}),pushFalse:(r,e,t=e)=>({...r,options:r.options.concat({name:t,value:!1})}),pushUndefined:(r,e)=>({...r,options:r.options.concat({name:e,value:void 0})}),pushStringValue:(r,e)=>{var t;let i={...r,options:[...r.options]},n=r.options[r.options.length-1];return n.value=((t=n.value)!==null&&t!==void 0?t:[]).concat([e]),i},setStringValue:(r,e)=>{let t={...r,options:[...r.options]},i=r.options[r.options.length-1];return i.value=e,t},inhibateOptions:r=>({...r,ignoreOptions:!0}),useHelp:(r,e,t)=>{let[,,i]=e.match(lt.HELP_REGEX);return typeof i<"u"?{...r,options:[{name:"-c",value:String(t)},{name:"-i",value:i}]}:{...r,options:[{name:"-c",value:String(t)}]}},setError:(r,e,t)=>e===lt.END_OF_INPUT?{...r,errorMessage:`${t}.`}:{...r,errorMessage:`${t} ("${e}").`},setOptionArityError:(r,e)=>{let t=r.options[r.options.length-1];return{...r,errorMessage:`Not enough arguments to option ${t.name}.`}}},Po=Symbol(),Ay=class{constructor(e,t){this.allOptionNames=[],this.arity={leading:[],trailing:[],extra:[],proxy:!1},this.options=[],this.paths=[],this.cliIndex=e,this.cliOpts=t}addPath(e){this.paths.push(e)}setArity({leading:e=this.arity.leading,trailing:t=this.arity.trailing,extra:i=this.arity.extra,proxy:n=this.arity.proxy}){Object.assign(this.arity,{leading:e,trailing:t,extra:i,proxy:n})}addPositional({name:e="arg",required:t=!0}={}){if(!t&&this.arity.extra===Po)throw new Error("Optional parameters cannot be declared when using .rest() or .proxy()");if(!t&&this.arity.trailing.length>0)throw new Error("Optional parameters cannot be declared after the required trailing positional arguments");!t&&this.arity.extra!==Po?this.arity.extra.push(e):this.arity.extra!==Po&&this.arity.extra.length===0?this.arity.leading.push(e):this.arity.trailing.push(e)}addRest({name:e="arg",required:t=0}={}){if(this.arity.extra===Po)throw new Error("Infinite lists cannot be declared multiple times in the same command");if(this.arity.trailing.length>0)throw new Error("Infinite lists cannot be declared after the required trailing positional arguments");for(let i=0;i1)throw new Error("The arity cannot be higher than 1 when the option only supports the --arg=value syntax");if(!Number.isInteger(i))throw new Error(`The arity must be an integer, got ${i}`);if(i<0)throw new Error(`The arity must be positive, got ${i}`);this.allOptionNames.push(...e),this.options.push({names:e,description:t,arity:i,hidden:n,required:s,allowBinding:o})}setContext(e){this.context=e}usage({detailed:e=!0,inlineOptions:t=!0}={}){let i=[this.cliOpts.binaryName],n=[];if(this.paths.length>0&&i.push(...this.paths[0]),e){for(let{names:o,arity:a,hidden:l,description:c,required:u}of this.options){if(l)continue;let g=[];for(let h=0;h`:`[${f}]`)}i.push(...this.arity.leading.map(o=>`<${o}>`)),this.arity.extra===Po?i.push("..."):i.push(...this.arity.extra.map(o=>`[${o}]`)),i.push(...this.arity.trailing.map(o=>`<${o}>`))}return{usage:i.join(" "),options:n}}compile(){if(typeof this.context>"u")throw new Error("Assertion failed: No context attached");let e=qv(),t=lt.NODE_INITIAL,i=this.usage().usage,n=this.options.filter(a=>a.required).map(a=>a.names);t=ss(e,Li()),xo(e,lt.NODE_INITIAL,lt.START_OF_INPUT,t,["setCandidateState",{candidateUsage:i,requiredOptions:n}]);let s=this.arity.proxy?"always":"isNotOptionLike",o=this.paths.length>0?this.paths:[[]];for(let a of o){let l=t;if(a.length>0){let f=ss(e,Li());Qc(e,l,f),this.registerOptions(e,f),l=f}for(let f=0;f0||!this.arity.proxy){let f=ss(e,Li());Ei(e,l,"isHelp",f,["useHelp",this.cliIndex]),xo(e,f,lt.END_OF_INPUT,lt.NODE_SUCCESS,["setSelectedIndex",lt.HELP_COMMAND_INDEX]),this.registerOptions(e,l)}this.arity.leading.length>0&&xo(e,l,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]);let c=l;for(let f=0;f0||f+1!==this.arity.leading.length)&&xo(e,h,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]),Ei(e,c,"isNotOptionLike",h,"pushPositional"),c=h}let u=c;if(this.arity.extra===Po||this.arity.extra.length>0){let f=ss(e,Li());if(Qc(e,c,f),this.arity.extra===Po){let h=ss(e,Li());this.arity.proxy||this.registerOptions(e,h),Ei(e,c,s,h,"pushExtraNoLimits"),Ei(e,h,s,h,"pushExtraNoLimits"),Qc(e,h,f)}else for(let h=0;h0&&xo(e,u,lt.END_OF_INPUT,lt.NODE_ERRORED,["setError","Not enough positional arguments"]);let g=u;for(let f=0;fo.length>s.length?o:s,"");if(i.arity===0)for(let s of i.names)Ei(e,t,["isOption",s,i.hidden||s!==n],t,"pushTrue"),s.startsWith("--")&&!s.startsWith("--no-")&&Ei(e,t,["isNegatedOption",s],t,["pushFalse",s]);else{let s=ss(e,Li());for(let o of i.names)Ei(e,t,["isOption",o,i.hidden||o!==n],s,"pushUndefined");for(let o=0;o=0&&eAme(i,n),suggest:(n,s)=>ame(i,n,s)}}};Ar.CliBuilder=Dd;Ar.CommandBuilder=Ay;Ar.NoLimits=Po;Ar.aggregateHelpStates=CG;Ar.cloneNode=EG;Ar.cloneTransition=sy;Ar.debug=Vi;Ar.debugMachine=hG;Ar.execute=xd;Ar.injectNode=ss;Ar.isTerminalNode=Wv;Ar.makeAnyOfMachine=gG;Ar.makeNode=Li;Ar.makeStateMachine=qv;Ar.reducers=oy;Ar.registerDynamic=Ei;Ar.registerShortcut=Qc;Ar.registerStatic=xo;Ar.runMachineInternal=Jv;Ar.selectBestState=dG;Ar.simplifyMachine=fG;Ar.suggest=IG;Ar.tests=Pd;Ar.trimSmallerBranches=pG});var yG=y(zv=>{"use strict";Object.defineProperty(zv,"__esModule",{value:!0});var lme=bc(),kd=class extends lme.Command{constructor(e){super(),this.contexts=e,this.commands=[]}static from(e,t){let i=new kd(t);i.path=e.path;for(let n of e.options)switch(n.name){case"-c":i.commands.push(Number(n.value));break;case"-i":i.index=Number(n.value);break}return i}async execute(){let e=this.commands;if(typeof this.index<"u"&&this.index>=0&&this.index1){this.context.stdout.write(`Multiple commands match your selection: -`),this.context.stdout.write(` -`);let t=0;for(let i of this.commands)this.context.stdout.write(this.cli.usage(this.contexts[i].commandClass,{prefix:`${t++}. `.padStart(5)}));this.context.stdout.write(` -`),this.context.stdout.write(`Run again with -h= to see the longer details of any of those commands. -`)}}};zv.HelpCommand=kd});var vG=y(Vv=>{"use strict";Object.defineProperty(Vv,"__esModule",{value:!0});var cme=ry(),wG=bc(),ume=J("tty"),gme=ly(),hn=jv(),fme=yG();function hme(r){return r&&typeof r=="object"&&"default"in r?r:{default:r}}var BG=hme(ume),bG=Symbol("clipanion/errorCommand");function pme(){return process.env.FORCE_COLOR==="0"?1:process.env.FORCE_COLOR==="1"||typeof process.stdout<"u"&&process.stdout.isTTY?8:1}var OA=class{constructor({binaryLabel:e,binaryName:t="...",binaryVersion:i,enableCapture:n=!1,enableColors:s}={}){this.registrations=new Map,this.builder=new gme.CliBuilder({binaryName:t}),this.binaryLabel=e,this.binaryName=t,this.binaryVersion=i,this.enableCapture=n,this.enableColors=s}static from(e,t={}){let i=new OA(t);for(let n of e)i.register(n);return i}register(e){var t;let i=new Map,n=new e;for(let l in n){let c=n[l];typeof c=="object"&&c!==null&&c[wG.Command.isOption]&&i.set(l,c)}let s=this.builder.command(),o=s.cliIndex,a=(t=e.paths)!==null&&t!==void 0?t:n.paths;if(typeof a<"u")for(let l of a)s.addPath(l);this.registrations.set(e,{specs:i,builder:s,index:o});for(let[l,{definition:c}]of i.entries())c(s,l);s.setContext({commandClass:e})}process(e){let{contexts:t,process:i}=this.builder.compile(),n=i(e);switch(n.selectedIndex){case cme.HELP_COMMAND_INDEX:return fme.HelpCommand.from(n,t);default:{let{commandClass:s}=t[n.selectedIndex],o=this.registrations.get(s);if(typeof o>"u")throw new Error("Assertion failed: Expected the command class to have been registered.");let a=new s;a.path=n.path;try{for(let[l,{transformer:c}]of o.specs.entries())a[l]=c(o.builder,l,n);return a}catch(l){throw l[bG]=a,l}}break}}async run(e,t){var i;let n,s={...OA.defaultContext,...t},o=(i=this.enableColors)!==null&&i!==void 0?i:s.colorDepth>1;if(!Array.isArray(e))n=e;else try{n=this.process(e)}catch(c){return s.stdout.write(this.error(c,{colored:o})),1}if(n.help)return s.stdout.write(this.usage(n,{colored:o,detailed:!0})),0;n.context=s,n.cli={binaryLabel:this.binaryLabel,binaryName:this.binaryName,binaryVersion:this.binaryVersion,enableCapture:this.enableCapture,enableColors:this.enableColors,definitions:()=>this.definitions(),error:(c,u)=>this.error(c,u),format:c=>this.format(c),process:c=>this.process(c),run:(c,u)=>this.run(c,{...s,...u}),usage:(c,u)=>this.usage(c,u)};let a=this.enableCapture?dme(s):SG,l;try{l=await a(()=>n.validateAndExecute().catch(c=>n.catch(c).then(()=>0)))}catch(c){return s.stdout.write(this.error(c,{colored:o,command:n})),1}return l}async runExit(e,t){process.exitCode=await this.run(e,t)}suggest(e,t){let{suggest:i}=this.builder.compile();return i(e,t)}definitions({colored:e=!1}={}){let t=[];for(let[i,{index:n}]of this.registrations){if(typeof i.usage>"u")continue;let{usage:s}=this.getUsageByIndex(n,{detailed:!1}),{usage:o,options:a}=this.getUsageByIndex(n,{detailed:!0,inlineOptions:!1}),l=typeof i.usage.category<"u"?hn.formatMarkdownish(i.usage.category,{format:this.format(e),paragraphs:!1}):void 0,c=typeof i.usage.description<"u"?hn.formatMarkdownish(i.usage.description,{format:this.format(e),paragraphs:!1}):void 0,u=typeof i.usage.details<"u"?hn.formatMarkdownish(i.usage.details,{format:this.format(e),paragraphs:!0}):void 0,g=typeof i.usage.examples<"u"?i.usage.examples.map(([f,h])=>[hn.formatMarkdownish(f,{format:this.format(e),paragraphs:!1}),h.replace(/\$0/g,this.binaryName)]):void 0;t.push({path:s,usage:o,category:l,description:c,details:u,examples:g,options:a})}return t}usage(e=null,{colored:t,detailed:i=!1,prefix:n="$ "}={}){var s;if(e===null){for(let l of this.registrations.keys()){let c=l.paths,u=typeof l.usage<"u";if(!c||c.length===0||c.length===1&&c[0].length===0||((s=c==null?void 0:c.some(h=>h.length===0))!==null&&s!==void 0?s:!1))if(e){e=null;break}else e=l;else if(u){e=null;continue}}e&&(i=!0)}let o=e!==null&&e instanceof wG.Command?e.constructor:e,a="";if(o)if(i){let{description:l="",details:c="",examples:u=[]}=o.usage||{};l!==""&&(a+=hn.formatMarkdownish(l,{format:this.format(t),paragraphs:!1}).replace(/^./,h=>h.toUpperCase()),a+=` -`),(c!==""||u.length>0)&&(a+=`${this.format(t).header("Usage")} -`,a+=` -`);let{usage:g,options:f}=this.getUsageByRegistration(o,{inlineOptions:!1});if(a+=`${this.format(t).bold(n)}${g} -`,f.length>0){a+=` -`,a+=`${hn.richFormat.header("Options")} -`;let h=f.reduce((p,C)=>Math.max(p,C.definition.length),0);a+=` -`;for(let{definition:p,description:C}of f)a+=` ${this.format(t).bold(p.padEnd(h))} ${hn.formatMarkdownish(C,{format:this.format(t),paragraphs:!1})}`}if(c!==""&&(a+=` -`,a+=`${this.format(t).header("Details")} -`,a+=` -`,a+=hn.formatMarkdownish(c,{format:this.format(t),paragraphs:!0})),u.length>0){a+=` -`,a+=`${this.format(t).header("Examples")} -`;for(let[h,p]of u)a+=` -`,a+=hn.formatMarkdownish(h,{format:this.format(t),paragraphs:!1}),a+=`${p.replace(/^/m,` ${this.format(t).bold(n)}`).replace(/\$0/g,this.binaryName)} -`}}else{let{usage:l}=this.getUsageByRegistration(o);a+=`${this.format(t).bold(n)}${l} -`}else{let l=new Map;for(let[f,{index:h}]of this.registrations.entries()){if(typeof f.usage>"u")continue;let p=typeof f.usage.category<"u"?hn.formatMarkdownish(f.usage.category,{format:this.format(t),paragraphs:!1}):null,C=l.get(p);typeof C>"u"&&l.set(p,C=[]);let{usage:w}=this.getUsageByIndex(h);C.push({commandClass:f,usage:w})}let c=Array.from(l.keys()).sort((f,h)=>f===null?-1:h===null?1:f.localeCompare(h,"en",{usage:"sort",caseFirst:"upper"})),u=typeof this.binaryLabel<"u",g=typeof this.binaryVersion<"u";u||g?(u&&g?a+=`${this.format(t).header(`${this.binaryLabel} - ${this.binaryVersion}`)} - -`:u?a+=`${this.format(t).header(`${this.binaryLabel}`)} -`:a+=`${this.format(t).header(`${this.binaryVersion}`)} -`,a+=` ${this.format(t).bold(n)}${this.binaryName} -`):a+=`${this.format(t).bold(n)}${this.binaryName} -`;for(let f of c){let h=l.get(f).slice().sort((C,w)=>C.usage.localeCompare(w.usage,"en",{usage:"sort",caseFirst:"upper"})),p=f!==null?f.trim():"General commands";a+=` -`,a+=`${this.format(t).header(`${p}`)} -`;for(let{commandClass:C,usage:w}of h){let B=C.usage.description||"undocumented";a+=` -`,a+=` ${this.format(t).bold(w)} -`,a+=` ${hn.formatMarkdownish(B,{format:this.format(t),paragraphs:!1})}`}}a+=` -`,a+=hn.formatMarkdownish("You can also print more details about any of these commands by calling them with the `-h,--help` flag right after the command name.",{format:this.format(t),paragraphs:!0})}return a}error(e,t){var i,{colored:n,command:s=(i=e[bG])!==null&&i!==void 0?i:null}=t===void 0?{}:t;e instanceof Error||(e=new Error(`Execution failed with a non-error rejection (rejected value: ${JSON.stringify(e)})`));let o="",a=e.name.replace(/([a-z])([A-Z])/g,"$1 $2");a==="Error"&&(a="Internal Error"),o+=`${this.format(n).error(a)}: ${e.message} -`;let l=e.clipanion;return typeof l<"u"?l.type==="usage"&&(o+=` -`,o+=this.usage(s)):e.stack&&(o+=`${e.stack.replace(/^.*\n/,"")} -`),o}format(e){var t;return((t=e!=null?e:this.enableColors)!==null&&t!==void 0?t:OA.defaultContext.colorDepth>1)?hn.richFormat:hn.textFormat}getUsageByRegistration(e,t){let i=this.registrations.get(e);if(typeof i>"u")throw new Error("Assertion failed: Unregistered command");return this.getUsageByIndex(i.index,t)}getUsageByIndex(e,t){return this.builder.getBuilderByIndex(e).usage(t)}};OA.defaultContext={stdin:process.stdin,stdout:process.stdout,stderr:process.stderr,colorDepth:"getColorDepth"in BG.default.WriteStream.prototype?BG.default.WriteStream.prototype.getColorDepth():pme()};var QG;function dme(r){let e=QG;if(typeof e>"u"){if(r.stdout===process.stdout&&r.stderr===process.stderr)return SG;let{AsyncLocalStorage:t}=J("async_hooks");e=QG=new t;let i=process.stdout._write;process.stdout._write=function(s,o,a){let l=e.getStore();return typeof l>"u"?i.call(this,s,o,a):l.stdout.write(s,o,a)};let n=process.stderr._write;process.stderr._write=function(s,o,a){let l=e.getStore();return typeof l>"u"?n.call(this,s,o,a):l.stderr.write(s,o,a)}}return t=>e.run(r,t)}function SG(r){return r()}Vv.Cli=OA});var xG=y(Xv=>{"use strict";Object.defineProperty(Xv,"__esModule",{value:!0});var Cme=bc(),cy=class extends Cme.Command{async execute(){this.context.stdout.write(`${JSON.stringify(this.cli.definitions(),null,2)} -`)}};cy.paths=[["--clipanion=definitions"]];Xv.DefinitionsCommand=cy});var PG=y(_v=>{"use strict";Object.defineProperty(_v,"__esModule",{value:!0});var mme=bc(),uy=class extends mme.Command{async execute(){this.context.stdout.write(this.cli.usage())}};uy.paths=[["-h"],["--help"]];_v.HelpCommand=uy});var DG=y(Zv=>{"use strict";Object.defineProperty(Zv,"__esModule",{value:!0});var Eme=bc(),gy=class extends Eme.Command{async execute(){var e;this.context.stdout.write(`${(e=this.cli.binaryVersion)!==null&&e!==void 0?e:""} -`)}};gy.paths=[["-v"],["--version"]];Zv.VersionCommand=gy});var kG=y(Rd=>{"use strict";Object.defineProperty(Rd,"__esModule",{value:!0});var Ime=xG(),yme=PG(),wme=DG();Rd.DefinitionsCommand=Ime.DefinitionsCommand;Rd.HelpCommand=yme.HelpCommand;Rd.VersionCommand=wme.VersionCommand});var FG=y($v=>{"use strict";Object.defineProperty($v,"__esModule",{value:!0});var RG=va();function Bme(r,e,t){let[i,n]=RG.rerouteArguments(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(","),a=new Set(o);return RG.makeCommandOption({definition(l){l.addOption({names:o,arity:s,hidden:n==null?void 0:n.hidden,description:n==null?void 0:n.description,required:n.required})},transformer(l,c,u){let g=typeof i<"u"?[...i]:void 0;for(let{name:f,value:h}of u.options)!a.has(f)||(g=g!=null?g:[],g.push(h));return g}})}$v.Array=Bme});var TG=y(ex=>{"use strict";Object.defineProperty(ex,"__esModule",{value:!0});var NG=va();function bme(r,e,t){let[i,n]=NG.rerouteArguments(e,t!=null?t:{}),s=r.split(","),o=new Set(s);return NG.makeCommandOption({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u=f);return u}})}ex.Boolean=bme});var OG=y(tx=>{"use strict";Object.defineProperty(tx,"__esModule",{value:!0});var LG=va();function Qme(r,e,t){let[i,n]=LG.rerouteArguments(e,t!=null?t:{}),s=r.split(","),o=new Set(s);return LG.makeCommandOption({definition(a){a.addOption({names:s,allowBinding:!1,arity:0,hidden:n.hidden,description:n.description,required:n.required})},transformer(a,l,c){let u=i;for(let{name:g,value:f}of c.options)!o.has(g)||(u!=null||(u=0),f?u+=1:u=0);return u}})}tx.Counter=Qme});var MG=y(rx=>{"use strict";Object.defineProperty(rx,"__esModule",{value:!0});var Sme=va();function vme(r={}){return Sme.makeCommandOption({definition(e,t){var i;e.addProxy({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){return i.positionals.map(({value:n})=>n)}})}rx.Proxy=vme});var UG=y(ix=>{"use strict";Object.defineProperty(ix,"__esModule",{value:!0});var xme=va(),Pme=ly();function Dme(r={}){return xme.makeCommandOption({definition(e,t){var i;e.addRest({name:(i=r.name)!==null&&i!==void 0?i:t,required:r.required})},transformer(e,t,i){let n=o=>{let a=i.positionals[o];return a.extra===Pme.NoLimits||a.extra===!1&&oo)}})}ix.Rest=Dme});var KG=y(nx=>{"use strict";Object.defineProperty(nx,"__esModule",{value:!0});var Fd=va(),kme=ly();function Rme(r,e,t){let[i,n]=Fd.rerouteArguments(e,t!=null?t:{}),{arity:s=1}=n,o=r.split(","),a=new Set(o);return Fd.makeCommandOption({definition(l){l.addOption({names:o,arity:n.tolerateBoolean?0:s,hidden:n.hidden,description:n.description,required:n.required})},transformer(l,c,u){let g,f=i;for(let{name:h,value:p}of u.options)!a.has(h)||(g=h,f=p);return typeof f=="string"?Fd.applyValidator(g!=null?g:c,f,n.validator):f}})}function Fme(r={}){let{required:e=!0}=r;return Fd.makeCommandOption({definition(t,i){var n;t.addPositional({name:(n=r.name)!==null&&n!==void 0?n:i,required:r.required})},transformer(t,i,n){var s;for(let o=0;o{"use strict";Object.defineProperty(pn,"__esModule",{value:!0});var lf=va(),Tme=FG(),Lme=TG(),Ome=OG(),Mme=MG(),Ume=UG(),Kme=KG();pn.applyValidator=lf.applyValidator;pn.cleanValidationError=lf.cleanValidationError;pn.formatError=lf.formatError;pn.isOptionSymbol=lf.isOptionSymbol;pn.makeCommandOption=lf.makeCommandOption;pn.rerouteArguments=lf.rerouteArguments;pn.Array=Tme.Array;pn.Boolean=Lme.Boolean;pn.Counter=Ome.Counter;pn.Proxy=Mme.Proxy;pn.Rest=Ume.Rest;pn.String=Kme.String});var Xe=y(MA=>{"use strict";Object.defineProperty(MA,"__esModule",{value:!0});var Hme=iy(),Gme=bc(),Yme=jv(),jme=vG(),qme=kG(),Jme=HG();MA.UsageError=Hme.UsageError;MA.Command=Gme.Command;MA.formatMarkdownish=Yme.formatMarkdownish;MA.Cli=jme.Cli;MA.Builtins=qme;MA.Option=Jme});var YG=y((J$e,GG)=>{"use strict";GG.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var cf=y((W$e,sx)=>{"use strict";var Wme=YG(),jG=r=>{if(r<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=Wme(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{tnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};sx.exports=jG;sx.exports.default=jG});var Nd=y((V$e,qG)=>{var zme="2.0.0",Vme=Number.MAX_SAFE_INTEGER||9007199254740991,Xme=16;qG.exports={SEMVER_SPEC_VERSION:zme,MAX_LENGTH:256,MAX_SAFE_INTEGER:Vme,MAX_SAFE_COMPONENT_LENGTH:Xme}});var Td=y((X$e,JG)=>{var _me=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};JG.exports=_me});var Sc=y((KA,WG)=>{var{MAX_SAFE_COMPONENT_LENGTH:ox}=Nd(),Zme=Td();KA=WG.exports={};var $me=KA.re=[],_e=KA.src=[],Ze=KA.t={},eEe=0,St=(r,e,t)=>{let i=eEe++;Zme(i,e),Ze[r]=i,_e[i]=e,$me[i]=new RegExp(e,t?"g":void 0)};St("NUMERICIDENTIFIER","0|[1-9]\\d*");St("NUMERICIDENTIFIERLOOSE","[0-9]+");St("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");St("MAINVERSION",`(${_e[Ze.NUMERICIDENTIFIER]})\\.(${_e[Ze.NUMERICIDENTIFIER]})\\.(${_e[Ze.NUMERICIDENTIFIER]})`);St("MAINVERSIONLOOSE",`(${_e[Ze.NUMERICIDENTIFIERLOOSE]})\\.(${_e[Ze.NUMERICIDENTIFIERLOOSE]})\\.(${_e[Ze.NUMERICIDENTIFIERLOOSE]})`);St("PRERELEASEIDENTIFIER",`(?:${_e[Ze.NUMERICIDENTIFIER]}|${_e[Ze.NONNUMERICIDENTIFIER]})`);St("PRERELEASEIDENTIFIERLOOSE",`(?:${_e[Ze.NUMERICIDENTIFIERLOOSE]}|${_e[Ze.NONNUMERICIDENTIFIER]})`);St("PRERELEASE",`(?:-(${_e[Ze.PRERELEASEIDENTIFIER]}(?:\\.${_e[Ze.PRERELEASEIDENTIFIER]})*))`);St("PRERELEASELOOSE",`(?:-?(${_e[Ze.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${_e[Ze.PRERELEASEIDENTIFIERLOOSE]})*))`);St("BUILDIDENTIFIER","[0-9A-Za-z-]+");St("BUILD",`(?:\\+(${_e[Ze.BUILDIDENTIFIER]}(?:\\.${_e[Ze.BUILDIDENTIFIER]})*))`);St("FULLPLAIN",`v?${_e[Ze.MAINVERSION]}${_e[Ze.PRERELEASE]}?${_e[Ze.BUILD]}?`);St("FULL",`^${_e[Ze.FULLPLAIN]}$`);St("LOOSEPLAIN",`[v=\\s]*${_e[Ze.MAINVERSIONLOOSE]}${_e[Ze.PRERELEASELOOSE]}?${_e[Ze.BUILD]}?`);St("LOOSE",`^${_e[Ze.LOOSEPLAIN]}$`);St("GTLT","((?:<|>)?=?)");St("XRANGEIDENTIFIERLOOSE",`${_e[Ze.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);St("XRANGEIDENTIFIER",`${_e[Ze.NUMERICIDENTIFIER]}|x|X|\\*`);St("XRANGEPLAIN",`[v=\\s]*(${_e[Ze.XRANGEIDENTIFIER]})(?:\\.(${_e[Ze.XRANGEIDENTIFIER]})(?:\\.(${_e[Ze.XRANGEIDENTIFIER]})(?:${_e[Ze.PRERELEASE]})?${_e[Ze.BUILD]}?)?)?`);St("XRANGEPLAINLOOSE",`[v=\\s]*(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:\\.(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:\\.(${_e[Ze.XRANGEIDENTIFIERLOOSE]})(?:${_e[Ze.PRERELEASELOOSE]})?${_e[Ze.BUILD]}?)?)?`);St("XRANGE",`^${_e[Ze.GTLT]}\\s*${_e[Ze.XRANGEPLAIN]}$`);St("XRANGELOOSE",`^${_e[Ze.GTLT]}\\s*${_e[Ze.XRANGEPLAINLOOSE]}$`);St("COERCE",`(^|[^\\d])(\\d{1,${ox}})(?:\\.(\\d{1,${ox}}))?(?:\\.(\\d{1,${ox}}))?(?:$|[^\\d])`);St("COERCERTL",_e[Ze.COERCE],!0);St("LONETILDE","(?:~>?)");St("TILDETRIM",`(\\s*)${_e[Ze.LONETILDE]}\\s+`,!0);KA.tildeTrimReplace="$1~";St("TILDE",`^${_e[Ze.LONETILDE]}${_e[Ze.XRANGEPLAIN]}$`);St("TILDELOOSE",`^${_e[Ze.LONETILDE]}${_e[Ze.XRANGEPLAINLOOSE]}$`);St("LONECARET","(?:\\^)");St("CARETTRIM",`(\\s*)${_e[Ze.LONECARET]}\\s+`,!0);KA.caretTrimReplace="$1^";St("CARET",`^${_e[Ze.LONECARET]}${_e[Ze.XRANGEPLAIN]}$`);St("CARETLOOSE",`^${_e[Ze.LONECARET]}${_e[Ze.XRANGEPLAINLOOSE]}$`);St("COMPARATORLOOSE",`^${_e[Ze.GTLT]}\\s*(${_e[Ze.LOOSEPLAIN]})$|^$`);St("COMPARATOR",`^${_e[Ze.GTLT]}\\s*(${_e[Ze.FULLPLAIN]})$|^$`);St("COMPARATORTRIM",`(\\s*)${_e[Ze.GTLT]}\\s*(${_e[Ze.LOOSEPLAIN]}|${_e[Ze.XRANGEPLAIN]})`,!0);KA.comparatorTrimReplace="$1$2$3";St("HYPHENRANGE",`^\\s*(${_e[Ze.XRANGEPLAIN]})\\s+-\\s+(${_e[Ze.XRANGEPLAIN]})\\s*$`);St("HYPHENRANGELOOSE",`^\\s*(${_e[Ze.XRANGEPLAINLOOSE]})\\s+-\\s+(${_e[Ze.XRANGEPLAINLOOSE]})\\s*$`);St("STAR","(<|>)?=?\\s*\\*");St("GTE0","^\\s*>=\\s*0.0.0\\s*$");St("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var Ld=y((_$e,zG)=>{var tEe=["includePrerelease","loose","rtl"],rEe=r=>r?typeof r!="object"?{loose:!0}:tEe.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};zG.exports=rEe});var hy=y((Z$e,_G)=>{var VG=/^[0-9]+$/,XG=(r,e)=>{let t=VG.test(r),i=VG.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:rXG(e,r);_G.exports={compareIdentifiers:XG,rcompareIdentifiers:iEe}});var Oi=y(($$e,tY)=>{var py=Td(),{MAX_LENGTH:ZG,MAX_SAFE_INTEGER:dy}=Nd(),{re:$G,t:eY}=Sc(),nEe=Ld(),{compareIdentifiers:Od}=hy(),Kn=class{constructor(e,t){if(t=nEe(t),e instanceof Kn){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>ZG)throw new TypeError(`version is longer than ${ZG} characters`);py("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?$G[eY.LOOSE]:$G[eY.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>dy||this.major<0)throw new TypeError("Invalid major version");if(this.minor>dy||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>dy||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};tY.exports=Kn});var vc=y((eet,sY)=>{var{MAX_LENGTH:sEe}=Nd(),{re:rY,t:iY}=Sc(),nY=Oi(),oEe=Ld(),aEe=(r,e)=>{if(e=oEe(e),r instanceof nY)return r;if(typeof r!="string"||r.length>sEe||!(e.loose?rY[iY.LOOSE]:rY[iY.FULL]).test(r))return null;try{return new nY(r,e)}catch{return null}};sY.exports=aEe});var aY=y((tet,oY)=>{var AEe=vc(),lEe=(r,e)=>{let t=AEe(r,e);return t?t.version:null};oY.exports=lEe});var lY=y((ret,AY)=>{var cEe=vc(),uEe=(r,e)=>{let t=cEe(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};AY.exports=uEe});var uY=y((iet,cY)=>{var gEe=Oi(),fEe=(r,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new gEe(r,t).inc(e,i).version}catch{return null}};cY.exports=fEe});var os=y((net,fY)=>{var gY=Oi(),hEe=(r,e,t)=>new gY(r,t).compare(new gY(e,t));fY.exports=hEe});var Cy=y((set,hY)=>{var pEe=os(),dEe=(r,e,t)=>pEe(r,e,t)===0;hY.exports=dEe});var CY=y((oet,dY)=>{var pY=vc(),CEe=Cy(),mEe=(r,e)=>{if(CEe(r,e))return null;{let t=pY(r),i=pY(e),n=t.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return s+a;return o}};dY.exports=mEe});var EY=y((aet,mY)=>{var EEe=Oi(),IEe=(r,e)=>new EEe(r,e).major;mY.exports=IEe});var yY=y((Aet,IY)=>{var yEe=Oi(),wEe=(r,e)=>new yEe(r,e).minor;IY.exports=wEe});var BY=y((cet,wY)=>{var BEe=Oi(),bEe=(r,e)=>new BEe(r,e).patch;wY.exports=bEe});var QY=y((uet,bY)=>{var QEe=vc(),SEe=(r,e)=>{let t=QEe(r,e);return t&&t.prerelease.length?t.prerelease:null};bY.exports=SEe});var vY=y((get,SY)=>{var vEe=os(),xEe=(r,e,t)=>vEe(e,r,t);SY.exports=xEe});var PY=y((fet,xY)=>{var PEe=os(),DEe=(r,e)=>PEe(r,e,!0);xY.exports=DEe});var my=y((het,kY)=>{var DY=Oi(),kEe=(r,e,t)=>{let i=new DY(r,t),n=new DY(e,t);return i.compare(n)||i.compareBuild(n)};kY.exports=kEe});var FY=y((pet,RY)=>{var REe=my(),FEe=(r,e)=>r.sort((t,i)=>REe(t,i,e));RY.exports=FEe});var TY=y((det,NY)=>{var NEe=my(),TEe=(r,e)=>r.sort((t,i)=>NEe(i,t,e));NY.exports=TEe});var Md=y((Cet,LY)=>{var LEe=os(),OEe=(r,e,t)=>LEe(r,e,t)>0;LY.exports=OEe});var Ey=y((met,OY)=>{var MEe=os(),UEe=(r,e,t)=>MEe(r,e,t)<0;OY.exports=UEe});var ax=y((Eet,MY)=>{var KEe=os(),HEe=(r,e,t)=>KEe(r,e,t)!==0;MY.exports=HEe});var Iy=y((Iet,UY)=>{var GEe=os(),YEe=(r,e,t)=>GEe(r,e,t)>=0;UY.exports=YEe});var yy=y((yet,KY)=>{var jEe=os(),qEe=(r,e,t)=>jEe(r,e,t)<=0;KY.exports=qEe});var Ax=y((wet,HY)=>{var JEe=Cy(),WEe=ax(),zEe=Md(),VEe=Iy(),XEe=Ey(),_Ee=yy(),ZEe=(r,e,t,i)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return JEe(r,t,i);case"!=":return WEe(r,t,i);case">":return zEe(r,t,i);case">=":return VEe(r,t,i);case"<":return XEe(r,t,i);case"<=":return _Ee(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};HY.exports=ZEe});var YY=y((Bet,GY)=>{var $Ee=Oi(),eIe=vc(),{re:wy,t:By}=Sc(),tIe=(r,e)=>{if(r instanceof $Ee)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(wy[By.COERCE]);else{let i;for(;(i=wy[By.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),wy[By.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;wy[By.COERCERTL].lastIndex=-1}return t===null?null:eIe(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};GY.exports=tIe});var qY=y((bet,jY)=>{"use strict";jY.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var Ud=y((Qet,JY)=>{"use strict";JY.exports=Ht;Ht.Node=xc;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach=="function")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i{"use strict";var sIe=Ud(),Pc=Symbol("max"),Pa=Symbol("length"),uf=Symbol("lengthCalculator"),Hd=Symbol("allowStale"),Dc=Symbol("maxAge"),xa=Symbol("dispose"),WY=Symbol("noDisposeOnSet"),Ii=Symbol("lruList"),zs=Symbol("cache"),VY=Symbol("updateAgeOnGet"),lx=()=>1,ux=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[Pc]=e.max||1/0,i=e.length||lx;if(this[uf]=typeof i!="function"?lx:i,this[Hd]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[Dc]=e.maxAge||0,this[xa]=e.dispose,this[WY]=e.noDisposeOnSet||!1,this[VY]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[Pc]=e||1/0,Kd(this)}get max(){return this[Pc]}set allowStale(e){this[Hd]=!!e}get allowStale(){return this[Hd]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[Dc]=e,Kd(this)}get maxAge(){return this[Dc]}set lengthCalculator(e){typeof e!="function"&&(e=lx),e!==this[uf]&&(this[uf]=e,this[Pa]=0,this[Ii].forEach(t=>{t.length=this[uf](t.value,t.key),this[Pa]+=t.length})),Kd(this)}get lengthCalculator(){return this[uf]}get length(){return this[Pa]}get itemCount(){return this[Ii].length}rforEach(e,t){t=t||this;for(let i=this[Ii].tail;i!==null;){let n=i.prev;zY(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[Ii].head;i!==null;){let n=i.next;zY(this,e,i,t),i=n}}keys(){return this[Ii].toArray().map(e=>e.key)}values(){return this[Ii].toArray().map(e=>e.value)}reset(){this[xa]&&this[Ii]&&this[Ii].length&&this[Ii].forEach(e=>this[xa](e.key,e.value)),this[zs]=new Map,this[Ii]=new sIe,this[Pa]=0}dump(){return this[Ii].map(e=>by(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[Ii]}set(e,t,i){if(i=i||this[Dc],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[uf](t,e);if(this[zs].has(e)){if(s>this[Pc])return gf(this,this[zs].get(e)),!1;let l=this[zs].get(e).value;return this[xa]&&(this[WY]||this[xa](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[Pa]+=s-l.length,l.length=s,this.get(e),Kd(this),!0}let o=new gx(e,t,s,n,i);return o.length>this[Pc]?(this[xa]&&this[xa](e,t),!1):(this[Pa]+=o.length,this[Ii].unshift(o),this[zs].set(e,this[Ii].head),Kd(this),!0)}has(e){if(!this[zs].has(e))return!1;let t=this[zs].get(e).value;return!by(this,t)}get(e){return cx(this,e,!0)}peek(e){return cx(this,e,!1)}pop(){let e=this[Ii].tail;return e?(gf(this,e),e.value):null}del(e){gf(this,this[zs].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[zs].forEach((e,t)=>cx(this,t,!1))}},cx=(r,e,t)=>{let i=r[zs].get(e);if(i){let n=i.value;if(by(r,n)){if(gf(r,i),!r[Hd])return}else t&&(r[VY]&&(i.value.now=Date.now()),r[Ii].unshiftNode(i));return n.value}},by=(r,e)=>{if(!e||!e.maxAge&&!r[Dc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[Dc]&&t>r[Dc]},Kd=r=>{if(r[Pa]>r[Pc])for(let e=r[Ii].tail;r[Pa]>r[Pc]&&e!==null;){let t=e.prev;gf(r,e),e=t}},gf=(r,e)=>{if(e){let t=e.value;r[xa]&&r[xa](t.key,t.value),r[Pa]-=t.length,r[zs].delete(t.key),r[Ii].removeNode(e)}},gx=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},zY=(r,e,t,i)=>{let n=t.value;by(r,n)&&(gf(r,t),r[Hd]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};XY.exports=ux});var as=y((xet,tj)=>{var kc=class{constructor(e,t){if(t=aIe(t),e instanceof kc)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new kc(e.raw,t);if(e instanceof fx)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!$Y(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&gIe(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=ZY.get(i);if(n)return n;let s=this.options.loose,o=s?Mi[Qi.HYPHENRANGELOOSE]:Mi[Qi.HYPHENRANGE];e=e.replace(o,wIe(this.options.includePrerelease)),jr("hyphen replace",e),e=e.replace(Mi[Qi.COMPARATORTRIM],lIe),jr("comparator trim",e,Mi[Qi.COMPARATORTRIM]),e=e.replace(Mi[Qi.TILDETRIM],cIe),e=e.replace(Mi[Qi.CARETTRIM],uIe),e=e.split(/\s+/).join(" ");let a=s?Mi[Qi.COMPARATORLOOSE]:Mi[Qi.COMPARATOR],l=e.split(" ").map(f=>fIe(f,this.options)).join(" ").split(/\s+/).map(f=>yIe(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new fx(f,this.options)),c=l.length,u=new Map;for(let f of l){if($Y(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return ZY.set(i,g),g}intersects(e,t){if(!(e instanceof kc))throw new TypeError("a Range is required");return this.set.some(i=>ej(i,t)&&e.set.some(n=>ej(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new AIe(e,this.options)}catch{return!1}for(let t=0;tr.value==="<0.0.0-0",gIe=r=>r.value==="",ej=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},fIe=(r,e)=>(jr("comp",r,e),r=dIe(r,e),jr("caret",r),r=hIe(r,e),jr("tildes",r),r=mIe(r,e),jr("xrange",r),r=IIe(r,e),jr("stars",r),r),Xi=r=>!r||r.toLowerCase()==="x"||r==="*",hIe=(r,e)=>r.trim().split(/\s+/).map(t=>pIe(t,e)).join(" "),pIe=(r,e)=>{let t=e.loose?Mi[Qi.TILDELOOSE]:Mi[Qi.TILDE];return r.replace(t,(i,n,s,o,a)=>{jr("tilde",r,i,n,s,o,a);let l;return Xi(n)?l="":Xi(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:Xi(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(jr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,jr("tilde return",l),l})},dIe=(r,e)=>r.trim().split(/\s+/).map(t=>CIe(t,e)).join(" "),CIe=(r,e)=>{jr("caret",r,e);let t=e.loose?Mi[Qi.CARETLOOSE]:Mi[Qi.CARET],i=e.includePrerelease?"-0":"";return r.replace(t,(n,s,o,a,l)=>{jr("caret",r,n,s,o,a,l);let c;return Xi(s)?c="":Xi(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:Xi(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(jr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(jr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),jr("caret return",c),c})},mIe=(r,e)=>(jr("replaceXRanges",r,e),r.split(/\s+/).map(t=>EIe(t,e)).join(" ")),EIe=(r,e)=>{r=r.trim();let t=e.loose?Mi[Qi.XRANGELOOSE]:Mi[Qi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{jr("xRange",r,i,n,s,o,a,l);let c=Xi(s),u=c||Xi(o),g=u||Xi(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),jr("xRange return",i),i})},IIe=(r,e)=>(jr("replaceStars",r,e),r.trim().replace(Mi[Qi.STAR],"")),yIe=(r,e)=>(jr("replaceGTE0",r,e),r.trim().replace(Mi[e.includePrerelease?Qi.GTE0PRE:Qi.GTE0],"")),wIe=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>(Xi(i)?t="":Xi(n)?t=`>=${i}.0.0${r?"-0":""}`:Xi(s)?t=`>=${i}.${n}.0${r?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,Xi(c)?l="":Xi(u)?l=`<${+c+1}.0.0-0`:Xi(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),BIe=(r,e,t)=>{for(let i=0;i0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Gd=y((Pet,oj)=>{var Yd=Symbol("SemVer ANY"),ff=class{static get ANY(){return Yd}constructor(e,t){if(t=bIe(t),e instanceof ff){if(e.loose===!!t.loose)return e;e=e.value}px("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===Yd?this.value="":this.value=this.operator+this.semver.version,px("comp",this)}parse(e){let t=this.options.loose?rj[ij.COMPARATORLOOSE]:rj[ij.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new nj(i[2],this.options.loose):this.semver=Yd}toString(){return this.value}test(e){if(px("Comparator.test",e,this.options.loose),this.semver===Yd||e===Yd)return!0;if(typeof e=="string")try{e=new nj(e,this.options)}catch{return!1}return hx(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof ff))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new sj(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new sj(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=hx(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=hx(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};oj.exports=ff;var bIe=Ld(),{re:rj,t:ij}=Sc(),hx=Ax(),px=Td(),nj=Oi(),sj=as()});var jd=y((Det,aj)=>{var QIe=as(),SIe=(r,e,t)=>{try{e=new QIe(e,t)}catch{return!1}return e.test(r)};aj.exports=SIe});var lj=y((ket,Aj)=>{var vIe=as(),xIe=(r,e)=>new vIe(r,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));Aj.exports=xIe});var uj=y((Ret,cj)=>{var PIe=Oi(),DIe=as(),kIe=(r,e,t)=>{let i=null,n=null,s=null;try{s=new DIe(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new PIe(i,t))}),i};cj.exports=kIe});var fj=y((Fet,gj)=>{var RIe=Oi(),FIe=as(),NIe=(r,e,t)=>{let i=null,n=null,s=null;try{s=new FIe(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new RIe(i,t))}),i};gj.exports=NIe});var dj=y((Net,pj)=>{var dx=Oi(),TIe=as(),hj=Md(),LIe=(r,e)=>{r=new TIe(r,e);let t=new dx("0.0.0");if(r.test(t)||(t=new dx("0.0.0-0"),r.test(t)))return t;t=null;for(let i=0;i{let a=new dx(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||hj(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||hj(t,s))&&(t=s)}return t&&r.test(t)?t:null};pj.exports=LIe});var mj=y((Tet,Cj)=>{var OIe=as(),MIe=(r,e)=>{try{return new OIe(r,e).range||"*"}catch{return null}};Cj.exports=MIe});var Qy=y((Let,wj)=>{var UIe=Oi(),yj=Gd(),{ANY:KIe}=yj,HIe=as(),GIe=jd(),Ej=Md(),Ij=Ey(),YIe=yy(),jIe=Iy(),qIe=(r,e,t,i)=>{r=new UIe(r,i),e=new HIe(e,i);let n,s,o,a,l;switch(t){case">":n=Ej,s=YIe,o=Ij,a=">",l=">=";break;case"<":n=Ij,s=jIe,o=Ej,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(GIe(r,e,i))return!1;for(let c=0;c{h.semver===KIe&&(h=new yj(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};wj.exports=qIe});var bj=y((Oet,Bj)=>{var JIe=Qy(),WIe=(r,e,t)=>JIe(r,e,">",t);Bj.exports=WIe});var Sj=y((Met,Qj)=>{var zIe=Qy(),VIe=(r,e,t)=>zIe(r,e,"<",t);Qj.exports=VIe});var Pj=y((Uet,xj)=>{var vj=as(),XIe=(r,e,t)=>(r=new vj(r,t),e=new vj(e,t),r.intersects(e));xj.exports=XIe});var kj=y((Ket,Dj)=>{var _Ie=jd(),ZIe=os();Dj.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>ZIe(u,g,t));for(let u of o)_Ie(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var Rj=as(),Sy=Gd(),{ANY:Cx}=Sy,qd=jd(),mx=os(),$Ie=(r,e,t={})=>{if(r===e)return!0;r=new Rj(r,t),e=new Rj(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=eye(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},eye=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===Cx){if(e.length===1&&e[0].semver===Cx)return!0;t.includePrerelease?r=[new Sy(">=0.0.0-0")]:r=[new Sy(">=0.0.0")]}if(e.length===1&&e[0].semver===Cx){if(t.includePrerelease)return!0;e=[new Sy(">=0.0.0")]}let i=new Set,n,s;for(let h of r)h.operator===">"||h.operator===">="?n=Fj(n,h,t):h.operator==="<"||h.operator==="<="?s=Nj(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=mx(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!qd(h,String(n),t)||s&&!qd(h,String(s),t))return null;for(let p of e)if(!qd(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=Fj(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!qd(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=Nj(s,h,t),l===h&&l!==s)return!1}else if(s.operator==="<="&&!qd(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},Fj=(r,e,t)=>{if(!r)return e;let i=mx(r.semver,e.semver,t);return i>0?r:i<0||e.operator===">"&&r.operator===">="?e:r},Nj=(r,e,t)=>{if(!r)return e;let i=mx(r.semver,e.semver,t);return i<0?r:i>0||e.operator==="<"&&r.operator==="<="?e:r};Tj.exports=$Ie});var $r=y((Get,Oj)=>{var Ex=Sc();Oj.exports={re:Ex.re,src:Ex.src,tokens:Ex.t,SEMVER_SPEC_VERSION:Nd().SEMVER_SPEC_VERSION,SemVer:Oi(),compareIdentifiers:hy().compareIdentifiers,rcompareIdentifiers:hy().rcompareIdentifiers,parse:vc(),valid:aY(),clean:lY(),inc:uY(),diff:CY(),major:EY(),minor:yY(),patch:BY(),prerelease:QY(),compare:os(),rcompare:vY(),compareLoose:PY(),compareBuild:my(),sort:FY(),rsort:TY(),gt:Md(),lt:Ey(),eq:Cy(),neq:ax(),gte:Iy(),lte:yy(),cmp:Ax(),coerce:YY(),Comparator:Gd(),Range:as(),satisfies:jd(),toComparators:lj(),maxSatisfying:uj(),minSatisfying:fj(),minVersion:dj(),validRange:mj(),outside:Qy(),gtr:bj(),ltr:Sj(),intersects:Pj(),simplifyRange:kj(),subset:Lj()}});var Ix=y(vy=>{"use strict";Object.defineProperty(vy,"__esModule",{value:!0});vy.VERSION=void 0;vy.VERSION="9.1.0"});var Gt=y((exports,module)=>{"use strict";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof xy=="object"&&xy.exports?xy.exports=e():r.regexpToAst=e()})(typeof self<"u"?self:Mj,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar("/");var C=this.disjunction();this.consumeChar("/");for(var w={type:"Flags",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case"g":o(w,"global");break;case"i":o(w,"ignoreCase");break;case"m":o(w,"multiLine");break;case"u":o(w,"unicode");break;case"y":o(w,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:w,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),p.push(this.alternative());return{type:"Disjunction",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:"Alternative",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(p)};case"$":return{type:"EndAnchor",loc:this.loc(p)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(p)};case"B":return{type:"NonWordBoundary",loc:this.loc(p)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");var C;switch(this.popChar()){case"=":C="Lookahead";break;case"!":C="NegativeLookahead";break}a(C);var w=this.disjunction();return this.consumeChar(")"),{type:C,value:w,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,w=this.idx;switch(this.popChar()){case"*":C={atLeast:0,atMost:1/0};break;case"+":C={atLeast:1,atMost:1/0};break;case"?":C={atLeast:0,atMost:1};break;case"{":var B=this.integerIncludingZero();switch(this.popChar()){case"}":C={atLeast:B,atMost:B};break;case",":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar("}");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)==="?"?(this.consumeChar("?"),C.greedy=!1):C.greedy=!0,C.type="Quantifier",C.loc=this.loc(w),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case".":p=this.dotAll();break;case"\\":p=this.atomEscape();break;case"[":p=this.characterClass();break;case"(":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar("."),{type:"Set",complement:!0,value:[n(` -`),n("\r"),n("\u2028"),n("\u2029")]}},r.prototype.atomEscape=function(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:"GroupBackReference",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case"d":p=u;break;case"D":p=u,C=!0;break;case"s":p=f;break;case"S":p=f,C=!0;break;case"w":p=g;break;case"W":p=g,C=!0;break}return a(p),{type:"Set",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case"f":p=n("\f");break;case"n":p=n(` -`);break;case"r":p=n("\r");break;case"t":p=n(" ");break;case"v":p=n("\v");break}return a(p),{type:"Character",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar("c");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error("Invalid ");var C=p.toUpperCase().charCodeAt(0)-64;return{type:"Character",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar("0"),{type:"Character",value:n("\0")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar("x"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar("u"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:"Character",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case` -`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:var p=this.popChar();return{type:"Character",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),C=!0);this.isClassAtom();){var w=this.classAtom(),B=w.type==="Character";if(B&&this.isRangeDash()){this.consumeChar("-");var v=this.classAtom(),D=v.type==="Character";if(D){if(v.value=this.input.length)throw Error("Unexpected end of input");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(w){C.push(w)}):C.push(p)}function o(p,C){if(p[C]===!0)throw"duplicate flag "+C;p[C]=!0}function a(p){if(p===void 0)throw Error("Internal Error - Should never get here!")}function l(){throw Error("Internal Error - Should never get here!")}var c,u=[];for(c=n("0");c<=n("9");c++)u.push(c);var g=[n("_")].concat(u);for(c=n("a");c<=n("z");c++)g.push(c);for(c=n("A");c<=n("Z");c++)g.push(c);var f=[n(" "),n("\f"),n(` -`),n("\r"),n(" "),n("\v"),n(" "),n("\xA0"),n("\u1680"),n("\u2000"),n("\u2001"),n("\u2002"),n("\u2003"),n("\u2004"),n("\u2005"),n("\u2006"),n("\u2007"),n("\u2008"),n("\u2009"),n("\u200A"),n("\u2028"),n("\u2029"),n("\u202F"),n("\u205F"),n("\u3000"),n("\uFEFF")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var w=p[C];p.hasOwnProperty(C)&&(w.type!==void 0?this.visit(w):Array.isArray(w)&&w.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case"Pattern":this.visitPattern(p);break;case"Flags":this.visitFlags(p);break;case"Disjunction":this.visitDisjunction(p);break;case"Alternative":this.visitAlternative(p);break;case"StartAnchor":this.visitStartAnchor(p);break;case"EndAnchor":this.visitEndAnchor(p);break;case"WordBoundary":this.visitWordBoundary(p);break;case"NonWordBoundary":this.visitNonWordBoundary(p);break;case"Lookahead":this.visitLookahead(p);break;case"NegativeLookahead":this.visitNegativeLookahead(p);break;case"Character":this.visitCharacter(p);break;case"Set":this.visitSet(p);break;case"Group":this.visitGroup(p);break;case"GroupBackReference":this.visitGroupBackReference(p);break;case"Quantifier":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:"0.5.0"}})});var ky=y(hf=>{"use strict";Object.defineProperty(hf,"__esModule",{value:!0});hf.clearRegExpParserCache=hf.getRegExpAst=void 0;var tye=Py(),Dy={},rye=new tye.RegExpParser;function iye(r){var e=r.toString();if(Dy.hasOwnProperty(e))return Dy[e];var t=rye.pattern(e);return Dy[e]=t,t}hf.getRegExpAst=iye;function nye(){Dy={}}hf.clearRegExpParserCache=nye});var Yj=y(dn=>{"use strict";var sye=dn&&dn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dn,"__esModule",{value:!0});dn.canMatchCharCode=dn.firstCharOptimizedIndices=dn.getOptimizedStartCodesIndices=dn.failedOptimizationPrefixMsg=void 0;var Kj=Py(),As=Gt(),Hj=ky(),Da=wx(),Gj="Complement Sets are not supported for first char optimization";dn.failedOptimizationPrefixMsg=`Unable to use "first char" lexer optimizations: -`;function oye(r,e){e===void 0&&(e=!1);try{var t=(0,Hj.getRegExpAst)(r),i=Fy(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===Gj)e&&(0,As.PRINT_WARNING)(""+dn.failedOptimizationPrefixMsg+(" Unable to optimize: < "+r.toString()+` > -`)+` Complement Sets cannot be automatically optimized. - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n="";e&&(n=` - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,As.PRINT_ERROR)(dn.failedOptimizationPrefixMsg+` -`+(" Failed parsing: < "+r.toString()+` > -`)+(" Using the regexp-to-ast library version: "+Kj.VERSION+` -`)+" Please open an issue at: https://github.com/bd82/regexp-to-ast/issues"+n)}}return[]}dn.getOptimizedStartCodesIndices=oye;function Fy(r,e,t){switch(r.type){case"Disjunction":for(var i=0;i=Da.minOptimizationVal)for(var f=u.from>=Da.minOptimizationVal?u.from:Da.minOptimizationVal,h=u.to,p=(0,Da.charCodeToOptimizedIndex)(f),C=(0,Da.charCodeToOptimizedIndex)(h),w=p;w<=C;w++)e[w]=w}}});break;case"Group":Fy(o.value,e,t);break;default:throw Error("Non Exhaustive Match")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type==="Group"&&yx(o)===!1||o.type!=="Group"&&a===!1)break}break;default:throw Error("non exhaustive match!")}return(0,As.values)(e)}dn.firstCharOptimizedIndices=Fy;function Ry(r,e,t){var i=(0,Da.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&aye(r,e)}function aye(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,Da.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,Da.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function Uj(r,e){return(0,As.find)(r.value,function(t){if(typeof t=="number")return(0,As.contains)(e,t);var i=t;return(0,As.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function yx(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,As.isArray)(r.value)?(0,As.every)(r.value,yx):yx(r.value):!1}var Aye=function(r){sye(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case"Lookahead":this.visitLookahead(t);return;case"NegativeLookahead":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,As.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?Uj(t,this.targetCharCodes)===void 0&&(this.found=!0):Uj(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(Kj.BaseRegExpVisitor);function lye(r,e){if(e instanceof RegExp){var t=(0,Hj.getRegExpAst)(e),i=new Aye(r);return i.visit(t),i.found}else return(0,As.find)(e,function(n){return(0,As.contains)(r,n.charCodeAt(0))})!==void 0}dn.canMatchCharCode=lye});var wx=y(Je=>{"use strict";var jj=Je&&Je.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Je,"__esModule",{value:!0});Je.charCodeToOptimizedIndex=Je.minOptimizationVal=Je.buildLineBreakIssueMessage=Je.LineTerminatorOptimizedTester=Je.isShortPattern=Je.isCustomPattern=Je.cloneEmptyGroups=Je.performWarningRuntimeChecks=Je.performRuntimeChecks=Je.addStickyFlag=Je.addStartOfInput=Je.findUnreachablePatterns=Je.findModesThatDoNotExist=Je.findInvalidGroupType=Je.findDuplicatePatterns=Je.findUnsupportedFlags=Je.findStartOfInputAnchor=Je.findEmptyMatchRegExps=Je.findEndOfInputAnchor=Je.findInvalidPatterns=Je.findMissingPatterns=Je.validatePatterns=Je.analyzeTokenTypes=Je.enableSticky=Je.disableSticky=Je.SUPPORT_STICKY=Je.MODES=Je.DEFAULT_MODE=void 0;var qj=Py(),ir=Jd(),Se=Gt(),pf=Yj(),Jj=ky(),Do="PATTERN";Je.DEFAULT_MODE="defaultMode";Je.MODES="modes";Je.SUPPORT_STICKY=typeof new RegExp("(?:)").sticky=="boolean";function cye(){Je.SUPPORT_STICKY=!1}Je.disableSticky=cye;function uye(){Je.SUPPORT_STICKY=!0}Je.enableSticky=uye;function gye(r,e){e=(0,Se.defaults)(e,{useSticky:Je.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` -`],tracer:function(v,D){return D()}});var t=e.tracer;t("initCharCodeToOptimizedIndexMap",function(){wye()});var i;t("Reject Lexer.NA",function(){i=(0,Se.reject)(r,function(v){return v[Do]===ir.Lexer.NA})});var n=!1,s;t("Transform Patterns",function(){n=!1,s=(0,Se.map)(i,function(v){var D=v[Do];if((0,Se.isRegExp)(D)){var T=D.source;return T.length===1&&T!=="^"&&T!=="$"&&T!=="."&&!D.ignoreCase?T:T.length===2&&T[0]==="\\"&&!(0,Se.contains)(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],T[1])?T[1]:e.useSticky?Qx(D):bx(D)}else{if((0,Se.isFunction)(D))return n=!0,{exec:D};if((0,Se.has)(D,"exec"))return n=!0,D;if(typeof D=="string"){if(D.length===1)return D;var H=D.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),j=new RegExp(H);return e.useSticky?Qx(j):bx(j)}else throw Error("non exhaustive match")}})});var o,a,l,c,u;t("misc mapping",function(){o=(0,Se.map)(i,function(v){return v.tokenTypeIdx}),a=(0,Se.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,Se.isString)(D))return D;if((0,Se.isUndefined)(D))return!1;throw Error("non exhaustive match")}}),l=(0,Se.map)(i,function(v){var D=v.LONGER_ALT;if(D){var T=(0,Se.isArray)(D)?(0,Se.map)(D,function(H){return(0,Se.indexOf)(i,H)}):[(0,Se.indexOf)(i,D)];return T}}),c=(0,Se.map)(i,function(v){return v.PUSH_MODE}),u=(0,Se.map)(i,function(v){return(0,Se.has)(v,"POP_MODE")})});var g;t("Line Terminator Handling",function(){var v=oq(e.lineTerminatorCharacters);g=(0,Se.map)(i,function(D){return!1}),e.positionTracking!=="onlyOffset"&&(g=(0,Se.map)(i,function(D){if((0,Se.has)(D,"LINE_BREAKS"))return D.LINE_BREAKS;if(nq(D,v)===!1)return(0,pf.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t("Misc Mapping #2",function(){f=(0,Se.map)(i,vx),h=(0,Se.map)(s,iq),p=(0,Se.reduce)(i,function(v,D){var T=D.GROUP;return(0,Se.isString)(T)&&T!==ir.Lexer.SKIPPED&&(v[T]=[]),v},{}),C=(0,Se.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var w=!0,B=[];return e.safeMode||t("First Char Optimization",function(){B=(0,Se.reduce)(i,function(v,D,T){if(typeof D.PATTERN=="string"){var H=D.PATTERN.charCodeAt(0),j=Sx(H);Bx(v,j,C[T])}else if((0,Se.isArray)(D.START_CHARS_HINT)){var $;(0,Se.forEach)(D.START_CHARS_HINT,function(W){var Z=typeof W=="string"?W.charCodeAt(0):W,A=Sx(Z);$!==A&&($=A,Bx(v,A,C[T]))})}else if((0,Se.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)w=!1,e.ensureOptimizations&&(0,Se.PRINT_ERROR)(""+pf.failedOptimizationPrefixMsg+(" Unable to analyze < "+D.PATTERN.toString()+` > pattern. -`)+` The regexp unicode flag is not currently supported by the regexp-to-ast library. - This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,pf.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,Se.isEmpty)(V)&&(w=!1),(0,Se.forEach)(V,function(W){Bx(v,W,C[T])})}else e.ensureOptimizations&&(0,Se.PRINT_ERROR)(""+pf.failedOptimizationPrefixMsg+(" TokenType: <"+D.name+`> is using a custom token pattern without providing parameter. -`)+` This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),w=!1;return v},[])}),t("ArrayPacking",function(){B=(0,Se.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:w}}Je.analyzeTokenTypes=gye;function fye(r,e){var t=[],i=Wj(r);t=t.concat(i.errors);var n=zj(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(hye(s)),t=t.concat(eq(s)),t=t.concat(tq(s,e)),t=t.concat(rq(s)),t}Je.validatePatterns=fye;function hye(r){var e=[],t=(0,Se.filter)(r,function(i){return(0,Se.isRegExp)(i[Do])});return e=e.concat(Vj(t)),e=e.concat(_j(t)),e=e.concat(Zj(t)),e=e.concat($j(t)),e=e.concat(Xj(t)),e}function Wj(r){var e=(0,Se.filter)(r,function(n){return!(0,Se.has)(n,Do)}),t=(0,Se.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,Se.difference)(r,e);return{errors:t,valid:i}}Je.findMissingPatterns=Wj;function zj(r){var e=(0,Se.filter)(r,function(n){var s=n[Do];return!(0,Se.isRegExp)(s)&&!(0,Se.isFunction)(s)&&!(0,Se.has)(s,"exec")&&!(0,Se.isString)(s)}),t=(0,Se.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,Se.difference)(r,e);return{errors:t,valid:i}}Je.findInvalidPatterns=zj;var pye=/[^\\][\$]/;function Vj(r){var e=function(n){jj(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(qj.BaseRegExpVisitor),t=(0,Se.filter)(r,function(n){var s=n[Do];try{var o=(0,Jj.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return pye.test(s.source)}}),i=(0,Se.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' - See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Je.findEndOfInputAnchor=Vj;function Xj(r){var e=(0,Se.filter)(r,function(i){var n=i[Do];return n.test("")}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Je.findEmptyMatchRegExps=Xj;var dye=/[^\\[][\^]|^\^/;function _j(r){var e=function(n){jj(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(qj.BaseRegExpVisitor),t=(0,Se.filter)(r,function(n){var s=n[Do];try{var o=(0,Jj.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return dye.test(s.source)}}),i=(0,Se.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Je.findStartOfInputAnchor=_j;function Zj(r){var e=(0,Se.filter)(r,function(i){var n=i[Do];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Je.findUnsupportedFlags=Zj;function $j(r){var e=[],t=(0,Se.map)(r,function(s){return(0,Se.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,Se.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,Se.compact)(t);var i=(0,Se.filter)(t,function(s){return s.length>1}),n=(0,Se.map)(i,function(s){var o=(0,Se.map)(s,function(l){return l.name}),a=(0,Se.first)(s).PATTERN;return{message:"The same RegExp pattern ->"+a+"<-"+("has been used in all of the following Token Types: "+o.join(", ")+" <-"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Je.findDuplicatePatterns=$j;function eq(r){var e=(0,Se.filter)(r,function(i){if(!(0,Se.has)(i,"GROUP"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,Se.isString)(n)}),t=(0,Se.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Je.findInvalidGroupType=eq;function tq(r,e){var t=(0,Se.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,Se.contains)(e,n.PUSH_MODE)}),i=(0,Se.map)(t,function(n){var s="Token Type: ->"+n.name+"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->"+n.PUSH_MODE+"<-which does not exist";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Je.findModesThatDoNotExist=tq;function rq(r){var e=[],t=(0,Se.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,Se.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,Se.isRegExp)(o)&&mye(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,Se.forEach)(r,function(i,n){(0,Se.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n"+i.name+"<-")+`in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Je.findUnreachablePatterns=rq;function Cye(r,e){if((0,Se.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,Se.isFunction)(e))return e(r,0,[],{});if((0,Se.has)(e,"exec"))return e.exec(r,0,[],{});if(typeof e=="string")return e===r;throw Error("non exhaustive match")}}function mye(r){var e=[".","\\","[","]","|","^","$","(",")","?","*","+","{"];return(0,Se.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function bx(r){var e=r.ignoreCase?"i":"";return new RegExp("^(?:"+r.source+")",e)}Je.addStartOfInput=bx;function Qx(r){var e=r.ignoreCase?"iy":"y";return new RegExp(""+r.source,e)}Je.addStickyFlag=Qx;function Eye(r,e,t){var i=[];return(0,Se.has)(r,Je.DEFAULT_MODE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Je.DEFAULT_MODE+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,Se.has)(r,Je.MODES)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Je.MODES+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,Se.has)(r,Je.MODES)&&(0,Se.has)(r,Je.DEFAULT_MODE)&&!(0,Se.has)(r.modes,r.defaultMode)&&i.push({message:"A MultiMode Lexer cannot be initialized with a "+Je.DEFAULT_MODE+": <"+r.defaultMode+`>which does not exist -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,Se.has)(r,Je.MODES)&&(0,Se.forEach)(r.modes,function(n,s){(0,Se.forEach)(n,function(o,a){(0,Se.isUndefined)(o)&&i.push({message:"A Lexer cannot be initialized using an undefined Token Type. Mode:"+("<"+s+"> at index: <"+a+`> -`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Je.performRuntimeChecks=Eye;function Iye(r,e,t){var i=[],n=!1,s=(0,Se.compact)((0,Se.flatten)((0,Se.mapValues)(r.modes,function(l){return l}))),o=(0,Se.reject)(s,function(l){return l[Do]===ir.Lexer.NA}),a=oq(t);return e&&(0,Se.forEach)(o,function(l){var c=nq(l,a);if(c!==!1){var u=sq(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,Se.has)(l,"LINE_BREAKS")?l.LINE_BREAKS===!0&&(n=!0):(0,pf.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. - This Lexer has been defined to track line and column information, - But none of the Token Types can be identified as matching a line terminator. - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS - for details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Je.performWarningRuntimeChecks=Iye;function yye(r){var e={},t=(0,Se.keys)(r);return(0,Se.forEach)(t,function(i){var n=r[i];if((0,Se.isArray)(n))e[i]=[];else throw Error("non exhaustive match")}),e}Je.cloneEmptyGroups=yye;function vx(r){var e=r.PATTERN;if((0,Se.isRegExp)(e))return!1;if((0,Se.isFunction)(e))return!0;if((0,Se.has)(e,"exec"))return!0;if((0,Se.isString)(e))return!1;throw Error("non exhaustive match")}Je.isCustomPattern=vx;function iq(r){return(0,Se.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Je.isShortPattern=iq;Je.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t Token Type -`)+(" Root cause: "+e.errMsg+`. -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. -`+(" The problem is in the <"+r.name+`> Token Type -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK";throw Error("non exhaustive match")}Je.buildLineBreakIssueMessage=sq;function oq(r){var e=(0,Se.map)(r,function(t){return(0,Se.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function Bx(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Je.minOptimizationVal=256;var Ny=[];function Sx(r){return r255?255+~~(r/255):r}}});var df=y(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var ei=Gt();function Bye(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=Bye;function bye(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=bye;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function Qye(r){var e=aq(r);Aq(e),cq(e),lq(e),(0,ei.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=Qye;function aq(r){for(var e=(0,ei.cloneArr)(r),t=r,i=!0;i;){t=(0,ei.compact)((0,ei.flatten)((0,ei.map)(t,function(s){return s.CATEGORIES})));var n=(0,ei.difference)(t,e);e=e.concat(n),(0,ei.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=aq;function Aq(r){(0,ei.forEach)(r,function(e){uq(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),xx(e)&&!(0,ei.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),xx(e)||(e.CATEGORIES=[]),gq(e)||(e.categoryMatches=[]),fq(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=Aq;function lq(r){(0,ei.forEach)(r,function(e){e.categoryMatches=[],(0,ei.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=lq;function cq(r){(0,ei.forEach)(r,function(e){Px([],e)})}Nt.assignCategoriesMapProp=cq;function Px(r,e){(0,ei.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,ei.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,ei.contains)(i,t)||Px(i,t)})}Nt.singleAssignCategoriesToksMap=Px;function uq(r){return(0,ei.has)(r,"tokenTypeIdx")}Nt.hasShortKeyProperty=uq;function xx(r){return(0,ei.has)(r,"CATEGORIES")}Nt.hasCategoriesProperty=xx;function gq(r){return(0,ei.has)(r,"categoryMatches")}Nt.hasExtendingTokensTypesProperty=gq;function fq(r){return(0,ei.has)(r,"categoryMatchesMap")}Nt.hasExtendingTokensTypesMapProperty=fq;function Sye(r){return(0,ei.has)(r,"tokenTypeIdx")}Nt.isTokenType=Sye});var Dx=y(Ty=>{"use strict";Object.defineProperty(Ty,"__esModule",{value:!0});Ty.defaultLexerErrorProvider=void 0;Ty.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return"Unable to pop Lexer Mode after encountering Token ->"+r.image+"<- The Mode Stack is empty"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return"unexpected character: ->"+r.charAt(e)+"<- at offset: "+e+","+(" skipped "+t+" characters.")}}});var Jd=y(Rc=>{"use strict";Object.defineProperty(Rc,"__esModule",{value:!0});Rc.Lexer=Rc.LexerDefinitionErrorType=void 0;var Vs=wx(),nr=Gt(),vye=df(),xye=Dx(),Pye=ky(),Dye;(function(r){r[r.MISSING_PATTERN=0]="MISSING_PATTERN",r[r.INVALID_PATTERN=1]="INVALID_PATTERN",r[r.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",r[r.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",r[r.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",r[r.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",r[r.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",r[r.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",r[r.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",r[r.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",r[r.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",r[r.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",r[r.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK"})(Dye=Rc.LexerDefinitionErrorType||(Rc.LexerDefinitionErrorType={}));var Wd={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` -`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:xye.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(Wd);var kye=function(){function r(e,t){var i=this;if(t===void 0&&(t=Wd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. -a boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(Wd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",function(){var s,o=!0;i.TRACE_INIT("Lexer Config handling",function(){if(i.config.lineTerminatorsPattern===Wd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=Vs.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===Wd.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[Vs.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[Vs.DEFAULT_MODE]=Vs.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT("performRuntimeChecks",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,Vs.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT("performWarningRuntimeChecks",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,Vs.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT("Mode: <"+g+"> processing",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT("validatePatterns",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,Vs.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,vye.augmentTokenTypes)(u);var f;i.TRACE_INIT("analyzeTokenTypes",function(){f=(0,Vs.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`----------------------- -`);throw new Error(`Errors detected in definition of Lexer: -`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT("Choosing sub-methods implementations",function(){if(Vs.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid config option: "'+i.config.positionTracking+'"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT("Failed Optimization Warnings",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error("Lexer Modes: < "+u.join(", ")+` > cannot be optimized. - Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT("clearRegExpParserCache",function(){(0,Pye.clearRegExpParserCache)()}),i.TRACE_INIT("toFastProperties",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`----------------------- -`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: -`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,w,B,v,D,T=e,H=T.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),Z=[],A=this.trackStartLines?1:void 0,ae=this.trackStartLines?1:void 0,ge=(0,Vs.cloneEmptyGroups)(this.emptyGroups),_=this.trackStartLines,L=this.config.lineTerminatorsPattern,N=0,ue=[],we=[],Te=[],Pe=[];Object.freeze(Pe);var Le=void 0;function se(){return ue}function Ae(dr){var Bi=(0,Vs.charCodeToOptimizedIndex)(dr),_n=we[Bi];return _n===void 0?Pe:_n}var be=function(dr){if(Te.length===1&&dr.tokenType.PUSH_MODE===void 0){var Bi=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(dr);Z.push({offset:dr.startOffset,line:dr.startLine!==void 0?dr.startLine:void 0,column:dr.startColumn!==void 0?dr.startColumn:void 0,length:dr.image.length,message:Bi})}else{Te.pop();var _n=(0,nr.last)(Te);ue=i.patternIdxToConfig[_n],we=i.charCodeToPatternIdxToConfig[_n],N=ue.length;var pa=i.canModeBeOptimized[_n]&&i.config.safeMode===!1;we&&pa?Le=Ae:Le=se}};function fe(dr){Te.push(dr),we=this.charCodeToPatternIdxToConfig[dr],ue=this.patternIdxToConfig[dr],N=ue.length,N=ue.length;var Bi=this.canModeBeOptimized[dr]&&this.config.safeMode===!1;we&&Bi?Le=Ae:Le=se}fe.call(this,t);for(var le;jc.length){c=a,u=g,le=tt;break}}}break}}if(c!==null){if(f=c.length,h=le.group,h!==void 0&&(p=le.tokenTypeIdx,C=this.createTokenInstance(c,j,p,le.tokenType,A,ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,ae=this.computeNewColumn(ae,f),_===!0&&le.canLineTerminator===!0){var It=0,Ur=void 0,oi=void 0;L.lastIndex=0;do Ur=L.test(c),Ur===!0&&(oi=L.lastIndex-1,It++);while(Ur===!0);It!==0&&(A=A+It,ae=f-oi,this.updateTokenEndLineColumnLocation(C,h,oi,It,A,ae,f))}this.handleModes(le,be,fe,C)}else{for(var pi=j,pr=A,di=ae,ai=!1;!ai&&j <"+e+">");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",r.NA=/NOT_APPLICABLE/,r}();Rc.Lexer=kye});var HA=y(Si=>{"use strict";Object.defineProperty(Si,"__esModule",{value:!0});Si.tokenMatcher=Si.createTokenInstance=Si.EOF=Si.createToken=Si.hasTokenLabel=Si.tokenName=Si.tokenLabel=void 0;var Xs=Gt(),Rye=Jd(),kx=df();function Fye(r){return wq(r)?r.LABEL:r.name}Si.tokenLabel=Fye;function Nye(r){return r.name}Si.tokenName=Nye;function wq(r){return(0,Xs.isString)(r.LABEL)&&r.LABEL!==""}Si.hasTokenLabel=wq;var Tye="parent",hq="categories",pq="label",dq="group",Cq="push_mode",mq="pop_mode",Eq="longer_alt",Iq="line_breaks",yq="start_chars_hint";function Bq(r){return Lye(r)}Si.createToken=Bq;function Lye(r){var e=r.pattern,t={};if(t.name=r.name,(0,Xs.isUndefined)(e)||(t.PATTERN=e),(0,Xs.has)(r,Tye))throw`The parent property is no longer supported. -See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,Xs.has)(r,hq)&&(t.CATEGORIES=r[hq]),(0,kx.augmentTokenTypes)([t]),(0,Xs.has)(r,pq)&&(t.LABEL=r[pq]),(0,Xs.has)(r,dq)&&(t.GROUP=r[dq]),(0,Xs.has)(r,mq)&&(t.POP_MODE=r[mq]),(0,Xs.has)(r,Cq)&&(t.PUSH_MODE=r[Cq]),(0,Xs.has)(r,Eq)&&(t.LONGER_ALT=r[Eq]),(0,Xs.has)(r,Iq)&&(t.LINE_BREAKS=r[Iq]),(0,Xs.has)(r,yq)&&(t.START_CHARS_HINT=r[yq]),t}Si.EOF=Bq({name:"EOF",pattern:Rye.Lexer.NA});(0,kx.augmentTokenTypes)([Si.EOF]);function Oye(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Si.createTokenInstance=Oye;function Mye(r,e){return(0,kx.tokenStructuredMatcher)(r,e)}Si.tokenMatcher=Mye});var Cn=y(Wt=>{"use strict";var ka=Wt&&Wt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.serializeProduction=Wt.serializeGrammar=Wt.Terminal=Wt.Alternation=Wt.RepetitionWithSeparator=Wt.Repetition=Wt.RepetitionMandatoryWithSeparator=Wt.RepetitionMandatory=Wt.Option=Wt.Alternative=Wt.Rule=Wt.NonTerminal=Wt.AbstractProduction=void 0;var lr=Gt(),Uye=HA(),ko=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,lr.forEach)(this.definition,function(t){t.accept(e)})},r}();Wt.AbstractProduction=ko;var bq=function(r){ka(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(ko);Wt.NonTerminal=bq;var Qq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText="",(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Rule=Qq;var Sq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Alternative=Sq;var vq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Option=vq;var xq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionMandatory=xq;var Pq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionMandatoryWithSeparator=Pq;var Dq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.Repetition=Dq;var kq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return e}(ko);Wt.RepetitionWithSeparator=kq;var Rq=function(r){ka(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,lr.assign)(i,(0,lr.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(ko);Wt.Alternation=Rq;var Ly=function(){function r(e){this.idx=1,(0,lr.assign)(this,(0,lr.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();Wt.Terminal=Ly;function Kye(r){return(0,lr.map)(r,zd)}Wt.serializeGrammar=Kye;function zd(r){function e(s){return(0,lr.map)(s,zd)}if(r instanceof bq){var t={type:"NonTerminal",name:r.nonTerminalName,idx:r.idx};return(0,lr.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof Sq)return{type:"Alternative",definition:e(r.definition)};if(r instanceof vq)return{type:"Option",idx:r.idx,definition:e(r.definition)};if(r instanceof xq)return{type:"RepetitionMandatory",idx:r.idx,definition:e(r.definition)};if(r instanceof Pq)return{type:"RepetitionMandatoryWithSeparator",idx:r.idx,separator:zd(new Ly({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof kq)return{type:"RepetitionWithSeparator",idx:r.idx,separator:zd(new Ly({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof Dq)return{type:"Repetition",idx:r.idx,definition:e(r.definition)};if(r instanceof Rq)return{type:"Alternation",idx:r.idx,definition:e(r.definition)};if(r instanceof Ly){var i={type:"Terminal",name:r.terminalType.name,label:(0,Uye.tokenLabel)(r.terminalType),idx:r.idx};(0,lr.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,lr.isRegExp)(n)?n.source:n),i}else{if(r instanceof Qq)return{type:"Rule",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error("non exhaustive match")}}}Wt.serializeProduction=zd});var My=y(Oy=>{"use strict";Object.defineProperty(Oy,"__esModule",{value:!0});Oy.RestWalker=void 0;var Rx=Gt(),mn=Cn(),Hye=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,Rx.forEach)(e.definition,function(n,s){var o=(0,Rx.drop)(e.definition,s+1);if(n instanceof mn.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof mn.Terminal)i.walkTerminal(n,o,t);else if(n instanceof mn.Alternative)i.walkFlat(n,o,t);else if(n instanceof mn.Option)i.walkOption(n,o,t);else if(n instanceof mn.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof mn.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof mn.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof mn.Repetition)i.walkMany(n,o,t);else if(n instanceof mn.Alternation)i.walkOr(n,o,t);else throw Error("non exhaustive match")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new mn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=Fq(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new mn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=Fq(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,Rx.forEach)(e.definition,function(o){var a=new mn.Alternative({definition:[o]});n.walk(a,s)})},r}();Oy.RestWalker=Hye;function Fq(r,e,t){var i=[new mn.Option({definition:[new mn.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var Cf=y(Uy=>{"use strict";Object.defineProperty(Uy,"__esModule",{value:!0});Uy.GAstVisitor=void 0;var Ro=Cn(),Gye=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case Ro.NonTerminal:return this.visitNonTerminal(t);case Ro.Alternative:return this.visitAlternative(t);case Ro.Option:return this.visitOption(t);case Ro.RepetitionMandatory:return this.visitRepetitionMandatory(t);case Ro.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case Ro.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case Ro.Repetition:return this.visitRepetition(t);case Ro.Alternation:return this.visitAlternation(t);case Ro.Terminal:return this.visitTerminal(t);case Ro.Rule:return this.visitRule(t);default:throw Error("non exhaustive match")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();Uy.GAstVisitor=Gye});var Xd=y(Ui=>{"use strict";var Yye=Ui&&Ui.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ui,"__esModule",{value:!0});Ui.collectMethods=Ui.DslMethodsCollectorVisitor=Ui.getProductionDslName=Ui.isBranchingProd=Ui.isOptionalProd=Ui.isSequenceProd=void 0;var Vd=Gt(),Qr=Cn(),jye=Cf();function qye(r){return r instanceof Qr.Alternative||r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionMandatory||r instanceof Qr.RepetitionMandatoryWithSeparator||r instanceof Qr.RepetitionWithSeparator||r instanceof Qr.Terminal||r instanceof Qr.Rule}Ui.isSequenceProd=qye;function Fx(r,e){e===void 0&&(e=[]);var t=r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionWithSeparator;return t?!0:r instanceof Qr.Alternation?(0,Vd.some)(r.definition,function(i){return Fx(i,e)}):r instanceof Qr.NonTerminal&&(0,Vd.contains)(e,r)?!1:r instanceof Qr.AbstractProduction?(r instanceof Qr.NonTerminal&&e.push(r),(0,Vd.every)(r.definition,function(i){return Fx(i,e)})):!1}Ui.isOptionalProd=Fx;function Jye(r){return r instanceof Qr.Alternation}Ui.isBranchingProd=Jye;function Wye(r){if(r instanceof Qr.NonTerminal)return"SUBRULE";if(r instanceof Qr.Option)return"OPTION";if(r instanceof Qr.Alternation)return"OR";if(r instanceof Qr.RepetitionMandatory)return"AT_LEAST_ONE";if(r instanceof Qr.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(r instanceof Qr.RepetitionWithSeparator)return"MANY_SEP";if(r instanceof Qr.Repetition)return"MANY";if(r instanceof Qr.Terminal)return"CONSUME";throw Error("non exhaustive match")}Ui.getProductionDslName=Wye;var Nq=function(r){Yye(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator="-",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+"Terminal";(0,Vd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+"Terminal";(0,Vd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(jye.GAstVisitor);Ui.DslMethodsCollectorVisitor=Nq;var Ky=new Nq;function zye(r){Ky.reset(),r.accept(Ky);var e=Ky.dslMethods;return Ky.reset(),e}Ui.collectMethods=zye});var Tx=y(Fo=>{"use strict";Object.defineProperty(Fo,"__esModule",{value:!0});Fo.firstForTerminal=Fo.firstForBranching=Fo.firstForSequence=Fo.first=void 0;var Hy=Gt(),Tq=Cn(),Nx=Xd();function Gy(r){if(r instanceof Tq.NonTerminal)return Gy(r.referencedRule);if(r instanceof Tq.Terminal)return Mq(r);if((0,Nx.isSequenceProd)(r))return Lq(r);if((0,Nx.isBranchingProd)(r))return Oq(r);throw Error("non exhaustive match")}Fo.first=Gy;function Lq(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,Nx.isOptionalProd)(s),e=e.concat(Gy(s)),i=i+1,n=t.length>i;return(0,Hy.uniq)(e)}Fo.firstForSequence=Lq;function Oq(r){var e=(0,Hy.map)(r.definition,function(t){return Gy(t)});return(0,Hy.uniq)((0,Hy.flatten)(e))}Fo.firstForBranching=Oq;function Mq(r){return[r.terminalType]}Fo.firstForTerminal=Mq});var Lx=y(Yy=>{"use strict";Object.defineProperty(Yy,"__esModule",{value:!0});Yy.IN=void 0;Yy.IN="_~IN~_"});var Yq=y(ls=>{"use strict";var Vye=ls&&ls.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(ls,"__esModule",{value:!0});ls.buildInProdFollowPrefix=ls.buildBetweenProdsFollowPrefix=ls.computeAllProdsFollows=ls.ResyncFollowsWalker=void 0;var Xye=My(),_ye=Tx(),Uq=Gt(),Kq=Lx(),Zye=Cn(),Hq=function(r){Vye(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=Gq(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new Zye.Alternative({definition:o}),l=(0,_ye.first)(a);this.follows[s]=l},e}(Xye.RestWalker);ls.ResyncFollowsWalker=Hq;function $ye(r){var e={};return(0,Uq.forEach)(r,function(t){var i=new Hq(t).startWalking();(0,Uq.assign)(e,i)}),e}ls.computeAllProdsFollows=$ye;function Gq(r,e){return r.name+e+Kq.IN}ls.buildBetweenProdsFollowPrefix=Gq;function ewe(r){var e=r.terminalType.name;return e+r.idx+Kq.IN}ls.buildInProdFollowPrefix=ewe});var _d=y(Ra=>{"use strict";Object.defineProperty(Ra,"__esModule",{value:!0});Ra.defaultGrammarValidatorErrorProvider=Ra.defaultGrammarResolverErrorProvider=Ra.defaultParserErrorProvider=void 0;var mf=HA(),twe=Gt(),_s=Gt(),Ox=Cn(),jq=Xd();Ra.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,mf.hasTokenLabel)(e),o=s?"--> "+(0,mf.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+t.image+"' <--";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o="Expecting: ",a=(0,_s.first)(t).image,l=` -but found: '`+a+"'";if(n)return o+n+l;var c=(0,_s.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,_s.map)(c,function(h){return"["+(0,_s.map)(h,function(p){return(0,mf.tokenLabel)(p)}).join(", ")+"]"}),g=(0,_s.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: -`+g.join(` -`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s="Expecting: ",o=(0,_s.first)(t).image,a=` -but found: '`+o+"'";if(i)return s+i+a;var l=(0,_s.map)(e,function(u){return"["+(0,_s.map)(u,function(g){return(0,mf.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: - `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(Ra.defaultParserErrorProvider);Ra.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- -inside top level rule: ->`+r.name+"<-";return t}};Ra.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Ox.Terminal?u.terminalType.name:u instanceof Ox.NonTerminal?u.nonTerminalName:""}var i=r.name,n=(0,_s.first)(e),s=n.idx,o=(0,jq.getProductionDslName)(n),a=t(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` - appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. - For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES - `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` -`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar. -`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+r.name+`>. -`)+`To resolve this make sure each Terminal and Non-Terminal names are unique -This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,_s.map)(r.prefixPath,function(n){return(0,mf.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous alternatives: <"+r.ambiguityIndices.join(" ,")+`> due to common lookahead prefix -`+("in inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,_s.map)(r.prefixPath,function(n){return(0,mf.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous Alternatives Detected: <"+r.ambiguityIndices.join(" ,")+"> in "+(" inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,jq.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t="The repetition <"+e+"> within Rule <"+r.topLevelRule.name+`> can never consume any tokens. -This could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return"deprecated"},buildEmptyAlternationError:function(r){var e="Ambiguous empty alternative: <"+(r.emptyChoiceIdx+1)+">"+(" in inside <"+r.topLevelRule.name+`> Rule. -`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives: -`+(" inside <"+r.topLevelRule.name+`> Rule. - has `+(r.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=twe.map(r.leftRecursionPath,function(s){return s.name}),i=e+" --> "+t.concat([e]).join(" --> "),n=`Left Recursion found in grammar. -`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) -`)+(`without consuming any Tokens. The grammar path that causes this is: - `+i+` -`)+` To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return"deprecated"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Ox.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+r.grammarName+"<-";return t}}});var Wq=y(GA=>{"use strict";var rwe=GA&&GA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(GA,"__esModule",{value:!0});GA.GastRefResolverVisitor=GA.resolveGrammar=void 0;var iwe=Hn(),qq=Gt(),nwe=Cf();function swe(r,e){var t=new Jq(r,e);return t.resolveRefs(),t.errors}GA.resolveGrammar=swe;var Jq=function(r){rwe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,qq.forEach)((0,qq.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:iwe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(nwe.GAstVisitor);GA.GastRefResolverVisitor=Jq});var $d=y(Lr=>{"use strict";var Fc=Lr&&Lr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Lr,"__esModule",{value:!0});Lr.nextPossibleTokensAfter=Lr.possiblePathsFrom=Lr.NextTerminalAfterAtLeastOneSepWalker=Lr.NextTerminalAfterAtLeastOneWalker=Lr.NextTerminalAfterManySepWalker=Lr.NextTerminalAfterManyWalker=Lr.AbstractNextTerminalAfterProductionWalker=Lr.NextAfterTokenWalker=Lr.AbstractNextPossibleTokensWalker=void 0;var zq=My(),Ut=Gt(),owe=Tx(),Dt=Cn(),Vq=function(r){Fc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,Ut.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Ut.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Ut.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(zq.RestWalker);Lr.AbstractNextPossibleTokensWalker=Vq;var awe=function(r){Fc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new Dt.Alternative({definition:s});this.possibleTokTypes=(0,owe.first)(o),this.found=!0}},e}(Vq);Lr.NextAfterTokenWalker=awe;var Zd=function(r){Fc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(zq.RestWalker);Lr.AbstractNextTerminalAfterProductionWalker=Zd;var Awe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterManyWalker=Awe;var lwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterManySepWalker=lwe;var cwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterAtLeastOneWalker=cwe;var uwe=function(r){Fc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Ut.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof Dt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(Zd);Lr.NextTerminalAfterAtLeastOneSepWalker=uwe;function Xq(r,e,t){t===void 0&&(t=[]),t=(0,Ut.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Ut.drop)(r,n+1))}function o(c){var u=Xq(s(c),e,t);return i.concat(u)}for(;t.length=0;ge--){var _=B.definition[ge],L={idx:p,def:_.definition.concat((0,Ut.drop)(h)),ruleStack:C,occurrenceStack:w};g.push(L),g.push(o)}else if(B instanceof Dt.Alternative)g.push({idx:p,def:B.definition.concat((0,Ut.drop)(h)),ruleStack:C,occurrenceStack:w});else if(B instanceof Dt.Rule)g.push(fwe(B,p,C,w));else throw Error("non exhaustive match")}}return u}Lr.nextPossibleTokensAfter=gwe;function fwe(r,e,t,i){var n=(0,Ut.cloneArr)(t);n.push(r.name);var s=(0,Ut.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var eC=y(_t=>{"use strict";var $q=_t&&_t.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(_t,"__esModule",{value:!0});_t.areTokenCategoriesNotUsed=_t.isStrictPrefixOfPath=_t.containsPath=_t.getLookaheadPathsForOptionalProd=_t.getLookaheadPathsForOr=_t.lookAheadSequenceFromAlternatives=_t.buildSingleAlternativeLookaheadFunction=_t.buildAlternativesLookAheadFunc=_t.buildLookaheadFuncForOptionalProd=_t.buildLookaheadFuncForOr=_t.getProdType=_t.PROD_TYPE=void 0;var sr=Gt(),_q=$d(),hwe=My(),jy=df(),YA=Cn(),pwe=Cf(),li;(function(r){r[r.OPTION=0]="OPTION",r[r.REPETITION=1]="REPETITION",r[r.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",r[r.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",r[r.ALTERNATION=5]="ALTERNATION"})(li=_t.PROD_TYPE||(_t.PROD_TYPE={}));function dwe(r){if(r instanceof YA.Option)return li.OPTION;if(r instanceof YA.Repetition)return li.REPETITION;if(r instanceof YA.RepetitionMandatory)return li.REPETITION_MANDATORY;if(r instanceof YA.RepetitionMandatoryWithSeparator)return li.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof YA.RepetitionWithSeparator)return li.REPETITION_WITH_SEPARATOR;if(r instanceof YA.Alternation)return li.ALTERNATION;throw Error("non exhaustive match")}_t.getProdType=dwe;function Cwe(r,e,t,i,n,s){var o=tJ(r,e,t),a=Kx(o)?jy.tokenStructuredMatcherNoCategories:jy.tokenStructuredMatcher;return s(o,i,a,n)}_t.buildLookaheadFuncForOr=Cwe;function mwe(r,e,t,i,n,s){var o=rJ(r,e,n,t),a=Kx(o)?jy.tokenStructuredMatcherNoCategories:jy.tokenStructuredMatcher;return s(o[0],a,i)}_t.buildLookaheadFuncForOptionalProd=mwe;function Ewe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u{"use strict";var Hx=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,"__esModule",{value:!0});zt.checkPrefixAlternativesAmbiguities=zt.validateSomeNonEmptyLookaheadPath=zt.validateTooManyAlts=zt.RepetionCollector=zt.validateAmbiguousAlternationAlternatives=zt.validateEmptyOrAlternative=zt.getFirstNoneTerminal=zt.validateNoLeftRecursion=zt.validateRuleIsOverridden=zt.validateRuleDoesNotAlreadyExist=zt.OccurrenceValidationCollector=zt.identifyProductionForDuplicates=zt.validateGrammar=void 0;var er=Gt(),Sr=Gt(),No=Hn(),Gx=Xd(),Ef=eC(),bwe=$d(),Zs=Cn(),Yx=Cf();function Qwe(r,e,t,i,n){var s=er.map(r,function(h){return Swe(h,i)}),o=er.map(r,function(h){return jx(h,h,i)}),a=[],l=[],c=[];(0,Sr.every)(o,Sr.isEmpty)&&(a=(0,Sr.map)(r,function(h){return AJ(h,i)}),l=(0,Sr.map)(r,function(h){return lJ(h,e,i)}),c=gJ(r,e,i));var u=Pwe(r,t,i),g=(0,Sr.map)(r,function(h){return uJ(h,i)}),f=(0,Sr.map)(r,function(h){return aJ(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}zt.validateGrammar=Qwe;function Swe(r,e){var t=new oJ;r.accept(t);var i=t.allProductions,n=er.groupBy(i,nJ),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,Gx.getProductionDslName)(l),g={message:c,type:No.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=sJ(l);return f&&(g.parameter=f),g});return o}function nJ(r){return(0,Gx.getProductionDslName)(r)+"_#_"+r.idx+"_#_"+sJ(r)}zt.identifyProductionForDuplicates=nJ;function sJ(r){return r instanceof Zs.Terminal?r.terminalType.name:r instanceof Zs.NonTerminal?r.nonTerminalName:""}var oJ=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}(Yx.GAstVisitor);zt.OccurrenceValidationCollector=oJ;function aJ(r,e,t,i){var n=[],s=(0,Sr.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:No.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}zt.validateRuleDoesNotAlreadyExist=aJ;function vwe(r,e,t){var i=[],n;return er.contains(e,r)||(n="Invalid rule override, rule: ->"+r+"<- cannot be overridden in the grammar: ->"+t+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:No.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}zt.validateRuleIsOverridden=vwe;function jx(r,e,t,i){i===void 0&&(i=[]);var n=[],s=tC(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:No.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),jx(r,u,t,g)});return n.concat(er.flatten(c))}zt.validateNoLeftRecursion=jx;function tC(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof Zs.NonTerminal)e.push(t.referencedRule);else if(t instanceof Zs.Alternative||t instanceof Zs.Option||t instanceof Zs.RepetitionMandatory||t instanceof Zs.RepetitionMandatoryWithSeparator||t instanceof Zs.RepetitionWithSeparator||t instanceof Zs.Repetition)e=e.concat(tC(t.definition));else if(t instanceof Zs.Alternation)e=er.flatten(er.map(t.definition,function(o){return tC(o.definition)}));else if(!(t instanceof Zs.Terminal))throw Error("non exhaustive match");var i=(0,Gx.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(tC(s))}else return e}zt.getFirstNoneTerminal=tC;var qx=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}(Yx.GAstVisitor);function AJ(r,e){var t=new qx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,bwe.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:No.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}zt.validateEmptyOrAlternative=AJ;function lJ(r,e,t){var i=new qx;r.accept(i);var n=i.alternations;n=(0,Sr.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,Ef.getLookaheadPathsForOr)(l,r,c,a),g=xwe(u,a,r,t),f=fJ(u,a,r,t);return o.concat(g,f)},[]);return s}zt.validateAmbiguousAlternationAlternatives=lJ;var cJ=function(r){Hx(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}(Yx.GAstVisitor);zt.RepetionCollector=cJ;function uJ(r,e){var t=new qx;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:No.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}zt.validateTooManyAlts=uJ;function gJ(r,e,t){var i=[];return(0,Sr.forEach)(r,function(n){var s=new cJ;n.accept(s);var o=s.allProductions;(0,Sr.forEach)(o,function(a){var l=(0,Ef.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,Ef.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,Sr.isEmpty)((0,Sr.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:No.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}zt.validateSomeNonEmptyLookaheadPath=gJ;function xwe(r,e,t,i){var n=[],s=(0,Sr.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,Sr.forEach)(l,function(u){var g=[c];(0,Sr.forEach)(r,function(f,h){c!==h&&(0,Ef.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,Ef.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,Sr.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:No.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function fJ(r,e,t,i){var n=[],s=(0,Sr.reduce)(r,function(o,a,l){var c=(0,Sr.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,Sr.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,Sr.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(If,"__esModule",{value:!0});If.validateGrammar=If.resolveGrammar=void 0;var Wx=Gt(),Dwe=Wq(),kwe=Jx(),hJ=_d();function Rwe(r){r=(0,Wx.defaults)(r,{errMsgProvider:hJ.defaultGrammarResolverErrorProvider});var e={};return(0,Wx.forEach)(r.rules,function(t){e[t.name]=t}),(0,Dwe.resolveGrammar)(e,r.errMsgProvider)}If.resolveGrammar=Rwe;function Fwe(r){return r=(0,Wx.defaults)(r,{errMsgProvider:hJ.defaultGrammarValidatorErrorProvider}),(0,kwe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}If.validateGrammar=Fwe});var yf=y(En=>{"use strict";var rC=En&&En.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(En,"__esModule",{value:!0});En.EarlyExitException=En.NotAllInputParsedException=En.NoViableAltException=En.MismatchedTokenException=En.isRecognitionException=void 0;var Nwe=Gt(),dJ="MismatchedTokenException",CJ="NoViableAltException",mJ="EarlyExitException",EJ="NotAllInputParsedException",IJ=[dJ,CJ,mJ,EJ];Object.freeze(IJ);function Twe(r){return(0,Nwe.contains)(IJ,r.name)}En.isRecognitionException=Twe;var qy=function(r){rC(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),Lwe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=dJ,s}return e}(qy);En.MismatchedTokenException=Lwe;var Owe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=CJ,s}return e}(qy);En.NoViableAltException=Owe;var Mwe=function(r){rC(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=EJ,n}return e}(qy);En.NotAllInputParsedException=Mwe;var Uwe=function(r){rC(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=mJ,s}return e}(qy);En.EarlyExitException=Uwe});var Vx=y(Ki=>{"use strict";Object.defineProperty(Ki,"__esModule",{value:!0});Ki.attemptInRepetitionRecovery=Ki.Recoverable=Ki.InRuleRecoveryException=Ki.IN_RULE_RECOVERY_EXCEPTION=Ki.EOF_FOLLOW_KEY=void 0;var Jy=HA(),cs=Gt(),Kwe=yf(),Hwe=Lx(),Gwe=Hn();Ki.EOF_FOLLOW_KEY={};Ki.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function zx(r){this.name=Ki.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Ki.InRuleRecoveryException=zx;zx.prototype=Error.prototype;var Ywe=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,cs.has)(e,"recoveryEnabled")?e.recoveryEnabled:Gwe.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=yJ)},r.prototype.getTokenToInsert=function(e){var t=(0,Jy.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new Kwe.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,cs.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new zx("sad sad panda")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,cs.isEmpty)(t))return!1;var n=this.LA(1),s=(0,cs.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,cs.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,cs.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Ki.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,cs.map)(t,function(n,s){return s===0?Ki.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,cs.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,cs.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Ki.EOF_FOLLOW_KEY)return[Jy.EOF];var t=e.ruleName+e.idxInCallingRule+Hwe.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,Jy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,cs.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,cs.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,cs.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Ki.Recoverable=Ywe;function yJ(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=Jy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Ki.attemptInRepetitionRecovery=yJ});var Wy=y(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.getKeyForAutomaticLookahead=qt.AT_LEAST_ONE_SEP_IDX=qt.MANY_SEP_IDX=qt.AT_LEAST_ONE_IDX=qt.MANY_IDX=qt.OPTION_IDX=qt.OR_IDX=qt.BITS_FOR_ALT_IDX=qt.BITS_FOR_RULE_IDX=qt.BITS_FOR_OCCURRENCE_IDX=qt.BITS_FOR_METHOD_TYPE=void 0;qt.BITS_FOR_METHOD_TYPE=4;qt.BITS_FOR_OCCURRENCE_IDX=8;qt.BITS_FOR_RULE_IDX=12;qt.BITS_FOR_ALT_IDX=8;qt.OR_IDX=1<{"use strict";Object.defineProperty(zy,"__esModule",{value:!0});zy.LooksAhead=void 0;var Fa=eC(),$s=Gt(),wJ=Hn(),Na=Wy(),Nc=Xd(),qwe=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,$s.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:wJ.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,$s.has)(e,"maxLookahead")?e.maxLookahead:wJ.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,$s.isES2015MapSupported)()?new Map:[],(0,$s.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,$s.forEach)(e,function(i){t.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,Nc.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,$s.forEach)(s,function(g){var f=g.idx===0?"":g.idx;t.TRACE_INIT(""+(0,Nc.getProductionDslName)(g)+f,function(){var h=(0,Fa.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,Na.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],Na.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,$s.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,Na.MANY_IDX,Fa.PROD_TYPE.REPETITION,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,Na.OPTION_IDX,Fa.PROD_TYPE.OPTION,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,Na.AT_LEAST_ONE_IDX,Fa.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,Na.AT_LEAST_ONE_SEP_IDX,Fa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,Nc.getProductionDslName)(g))}),(0,$s.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,Na.MANY_SEP_IDX,Fa.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,Nc.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(t===0?"":t),function(){var l=(0,Fa.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,Na.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,Fa.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,Fa.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,Na.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();zy.LooksAhead=qwe});var bJ=y(To=>{"use strict";Object.defineProperty(To,"__esModule",{value:!0});To.addNoneTerminalToCst=To.addTerminalToCst=To.setNodeLocationFull=To.setNodeLocationOnlyOffset=void 0;function Jwe(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset{"use strict";Object.defineProperty(jA,"__esModule",{value:!0});jA.defineNameProp=jA.functionName=jA.classNameFromInstance=void 0;var Xwe=Gt();function _we(r){return SJ(r.constructor)}jA.classNameFromInstance=_we;var QJ="name";function SJ(r){var e=r.name;return e||"anonymous"}jA.functionName=SJ;function Zwe(r,e){var t=Object.getOwnPropertyDescriptor(r,QJ);return(0,Xwe.isUndefined)(t)||t.configurable?(Object.defineProperty(r,QJ,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}jA.defineNameProp=Zwe});var kJ=y(vi=>{"use strict";Object.defineProperty(vi,"__esModule",{value:!0});vi.validateRedundantMethods=vi.validateMissingCstMethods=vi.validateVisitor=vi.CstVisitorDefinitionError=vi.createBaseVisitorConstructorWithDefaults=vi.createBaseSemanticVisitorConstructor=vi.defaultVisit=void 0;var us=Gt(),iC=Xx();function vJ(r,e){for(var t=(0,us.keys)(r),i=t.length,n=0;n: - `+(""+s.join(` - -`).replace(/\n/g,` - `)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}vi.createBaseSemanticVisitorConstructor=$we;function eBe(r,e,t){var i=function(){};(0,iC.defineNameProp)(i,r+"BaseSemanticsWithDefaults");var n=Object.create(t.prototype);return(0,us.forEach)(e,function(s){n[s]=vJ}),i.prototype=n,i.prototype.constructor=i,i}vi.createBaseVisitorConstructorWithDefaults=eBe;var _x;(function(r){r[r.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",r[r.MISSING_METHOD=1]="MISSING_METHOD"})(_x=vi.CstVisitorDefinitionError||(vi.CstVisitorDefinitionError={}));function xJ(r,e){var t=PJ(r,e),i=DJ(r,e);return t.concat(i)}vi.validateVisitor=xJ;function PJ(r,e){var t=(0,us.map)(e,function(i){if(!(0,us.isFunction)(r[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,iC.functionName)(r.constructor)+" CST Visitor.",type:_x.MISSING_METHOD,methodName:i}});return(0,us.compact)(t)}vi.validateMissingCstMethods=PJ;var tBe=["constructor","visit","validateVisitor"];function DJ(r,e){var t=[];for(var i in r)(0,us.isFunction)(r[i])&&!(0,us.contains)(tBe,i)&&!(0,us.contains)(e,i)&&t.push({msg:"Redundant visitor method: <"+i+"> on "+(0,iC.functionName)(r.constructor)+` CST Visitor -There is no Grammar Rule corresponding to this method's name. -`,type:_x.REDUNDANT_METHOD,methodName:i});return t}vi.validateRedundantMethods=DJ});var FJ=y(Vy=>{"use strict";Object.defineProperty(Vy,"__esModule",{value:!0});Vy.TreeBuilder=void 0;var wf=bJ(),ti=Gt(),RJ=kJ(),rBe=Hn(),iBe=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,ti.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:rBe.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=ti.NOOP,this.cstFinallyStateUpdate=ti.NOOP,this.cstPostTerminal=ti.NOOP,this.cstPostNonTerminal=ti.NOOP,this.cstPostRule=ti.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=wf.setNodeLocationFull,this.setNodeLocationFromNode=wf.setNodeLocationFull,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=wf.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=wf.setNodeLocationOnlyOffset,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=ti.NOOP,this.setNodeLocationFromNode=ti.NOOP,this.cstPostRule=ti.NOOP,this.setInitialNodeLocation=ti.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,wf.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,wf.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,ti.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,RJ.createBaseSemanticVisitorConstructor)(this.className,(0,ti.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,ti.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,RJ.createBaseVisitorConstructorWithDefaults)(this.className,(0,ti.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();Vy.TreeBuilder=iBe});var TJ=y(Xy=>{"use strict";Object.defineProperty(Xy,"__esModule",{value:!0});Xy.LexerAdapter=void 0;var NJ=Hn(),nBe=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):NJ.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?NJ.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();Xy.LexerAdapter=nBe});var OJ=y(_y=>{"use strict";Object.defineProperty(_y,"__esModule",{value:!0});_y.RecognizerApi=void 0;var LJ=Gt(),sBe=yf(),Zx=Hn(),oBe=_d(),aBe=Jx(),ABe=Cn(),lBe=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Zx.DEFAULT_RULE_CONFIG),(0,LJ.contains)(this.definedRulesNames,e)){var n=oBe.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Zx.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Zx.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,aBe.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,sBe.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,ABe.serializeGrammar)((0,LJ.values)(this.gastProductionsCache))},r}();_y.RecognizerApi=lBe});var HJ=y($y=>{"use strict";Object.defineProperty($y,"__esModule",{value:!0});$y.RecognizerEngine=void 0;var kr=Gt(),Gn=Wy(),Zy=yf(),MJ=eC(),Bf=$d(),UJ=Hn(),cBe=Vx(),KJ=HA(),nC=df(),uBe=Xx(),gBe=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,uBe.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=nC.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,kr.has)(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 - For Further details.`);if((0,kr.isArray)(e)){if((0,kr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. - Note that the first argument for the parser constructor - is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 - For Further details.`)}if((0,kr.isArray)(e))this.tokensMap=(0,kr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,kr.has)(e,"modes")&&(0,kr.every)((0,kr.flatten)((0,kr.values)(e.modes)),nC.isTokenType)){var i=(0,kr.flatten)((0,kr.values)(e.modes)),n=(0,kr.uniq)(i);this.tokensMap=(0,kr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,kr.isObject)(e))this.tokensMap=(0,kr.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=KJ.EOF;var s=(0,kr.every)((0,kr.values)(e),function(o){return(0,kr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?nC.tokenStructuredMatcherNoCategories:nC.tokenStructuredMatcher,(0,nC.augmentTokenTypes)((0,kr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,kr.has)(i,"resyncEnabled")?i.resyncEnabled:UJ.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,kr.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:UJ.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(Gn.OR_IDX,t),n=(0,kr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new Zy.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,Zy.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new Zy.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===cBe.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,kr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),KJ.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();$y.RecognizerEngine=gBe});var YJ=y(ew=>{"use strict";Object.defineProperty(ew,"__esModule",{value:!0});ew.ErrorHandler=void 0;var $x=yf(),eP=Gt(),GJ=eC(),fBe=Hn(),hBe=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,eP.has)(e,"errorMessageProvider")?e.errorMessageProvider:fBe.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,$x.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,eP.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(r.prototype,"errors",{get:function(){return(0,eP.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,GJ.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new $x.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,GJ.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new $x.NoViableAltException(c,this.LA(1),l))},r}();ew.ErrorHandler=hBe});var JJ=y(tw=>{"use strict";Object.defineProperty(tw,"__esModule",{value:!0});tw.ContentAssist=void 0;var jJ=$d(),qJ=Gt(),pBe=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,qJ.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,jJ.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,qJ.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new jJ.NextAfterTokenWalker(n,e).startWalking();return s},r}();tw.ContentAssist=pBe});var e3=y(nw=>{"use strict";Object.defineProperty(nw,"__esModule",{value:!0});nw.GastRecorder=void 0;var In=Gt(),Lo=Cn(),dBe=Jd(),XJ=df(),_J=HA(),CBe=Hn(),mBe=Wy(),iw={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(iw);var WJ=!0,zJ=Math.pow(2,mBe.BITS_FOR_OCCURRENCE_IDX)-1,ZJ=(0,_J.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:dBe.Lexer.NA});(0,XJ.augmentTokenTypes)([ZJ]);var $J=(0,_J.createTokenInstance)(ZJ,`This IToken indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze($J);var EBe={name:`This CSTNode indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},IBe=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var t=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var t=0;t<10;t++){var i=t>0?t:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return CBe.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Lo.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` - This error was thrown during the "grammar recording phase" For more info see: - https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return sC.call(this,Lo.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){sC.call(this,Lo.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){sC.call(this,Lo.RepetitionMandatoryWithSeparator,t,e,WJ)},r.prototype.manyInternalRecord=function(e,t){sC.call(this,Lo.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){sC.call(this,Lo.RepetitionWithSeparator,t,e,WJ)},r.prototype.orInternalRecord=function(e,t){return yBe.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(rw(t),!e||(0,In.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,In.peek)(this.recordingProdStack),o=e.ruleName,a=new Lo.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?EBe:iw},r.prototype.consumeInternalRecord=function(e,t,i){if(rw(t),!(0,XJ.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,In.peek)(this.recordingProdStack),o=new Lo.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),$J},r}();nw.GastRecorder=IBe;function sC(r,e,t,i){i===void 0&&(i=!1),rw(t);var n=(0,In.peek)(this.recordingProdStack),s=(0,In.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,In.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),iw}function yBe(r,e){var t=this;rw(e);var i=(0,In.peek)(this.recordingProdStack),n=(0,In.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Lo.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,In.has)(r,"MAX_LOOKAHEAD")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,In.some)(s,function(l){return(0,In.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,In.forEach)(s,function(l){var c=new Lo.Alternative({definition:[]});o.definition.push(c),(0,In.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,In.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),iw}function VJ(r){return r===0?"":""+r}function rw(r){if(r<0||r>zJ){var e=new Error("Invalid DSL Method idx value: <"+r+`> - `+("Idx value must be a none negative value smaller than "+(zJ+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var r3=y(sw=>{"use strict";Object.defineProperty(sw,"__esModule",{value:!0});sw.PerformanceTracer=void 0;var t3=Gt(),wBe=Hn(),BBe=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,t3.has)(e,"traceInitPerf")){var t=e.traceInitPerf,i=typeof t=="number";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=wBe.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,t3.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r}();sw.PerformanceTracer=BBe});var i3=y(ow=>{"use strict";Object.defineProperty(ow,"__esModule",{value:!0});ow.applyMixins=void 0;function bBe(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}ow.applyMixins=bBe});var Hn=y(Cr=>{"use strict";var o3=Cr&&Cr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Cr,"__esModule",{value:!0});Cr.EmbeddedActionsParser=Cr.CstParser=Cr.Parser=Cr.EMPTY_ALT=Cr.ParserDefinitionErrorType=Cr.DEFAULT_RULE_CONFIG=Cr.DEFAULT_PARSER_CONFIG=Cr.END_OF_FILE=void 0;var _i=Gt(),QBe=Yq(),n3=HA(),a3=_d(),s3=pJ(),SBe=Vx(),vBe=BJ(),xBe=FJ(),PBe=TJ(),DBe=OJ(),kBe=HJ(),RBe=YJ(),FBe=JJ(),NBe=e3(),TBe=r3(),LBe=i3();Cr.END_OF_FILE=(0,n3.createTokenInstance)(n3.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(Cr.END_OF_FILE);Cr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:a3.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});Cr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var OBe;(function(r){r[r.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",r[r.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",r[r.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",r[r.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",r[r.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",r[r.LEFT_RECURSION=5]="LEFT_RECURSION",r[r.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",r[r.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",r[r.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",r[r.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",r[r.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",r[r.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(OBe=Cr.ParserDefinitionErrorType||(Cr.ParserDefinitionErrorType={}));function MBe(r){return r===void 0&&(r=void 0),function(){return r}}Cr.EMPTY_ALT=MBe;var aw=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,_i.has)(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. - Please use the flag on the relevant DSL method instead. - See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES - For further details.`);this.skipValidations=(0,_i.has)(t,"skipValidations")?t.skipValidations:Cr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,_i.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,_i.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,s3.resolveGrammar)({rules:(0,_i.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,_i.isEmpty)(n)&&e.skipValidations===!1){var s=(0,s3.validateGrammar)({rules:(0,_i.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,_i.values)(e.tokensMap),errMsgProvider:a3.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,_i.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,QBe.computeAllProdsFollows)((0,_i.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,_i.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,_i.isEmpty)(e.definitionErrors))throw t=(0,_i.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: - `+t.join(` -------------------------------- -`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();Cr.Parser=aw;(0,LBe.applyMixins)(aw,[SBe.Recoverable,vBe.LooksAhead,xBe.TreeBuilder,PBe.LexerAdapter,kBe.RecognizerEngine,DBe.RecognizerApi,RBe.ErrorHandler,FBe.ContentAssist,NBe.GastRecorder,TBe.PerformanceTracer]);var UBe=function(r){o3(e,r);function e(t,i){i===void 0&&(i=Cr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,_i.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(aw);Cr.CstParser=UBe;var KBe=function(r){o3(e,r);function e(t,i){i===void 0&&(i=Cr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,_i.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(aw);Cr.EmbeddedActionsParser=KBe});var l3=y(Aw=>{"use strict";Object.defineProperty(Aw,"__esModule",{value:!0});Aw.createSyntaxDiagramsCode=void 0;var A3=Ix();function HBe(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+A3.VERSION+"/diagrams/":i,s=t.css,o=s===void 0?"https://unpkg.com/chevrotain@"+A3.VERSION+"/diagrams/diagrams.css":s,a=` - - - - - -`,l=` - -`,c=` - ``` @@ -93,22 +89,12 @@ window.initialize( If you need to inline multiple JS or CSS files, you can concatenate them for now, and separate contents of each file with an `\n` symbol. _This can be a point of improvement (add support for file lists)_. -## Fancy mode - -You may have noticed the fancy mode in previous snippets: - -```dm -window.initialize(fancy = TRUE) -``` - -This removes the native window titlebar and border, which effectively turns window into a floating panel. TGUI heavily uses this option to draw completely custom, fancy windows. You can use it too, but not having the default titlebar limits usability of the browser window, since you can't even close it or drag around without implementing that functionality yourself. This mode might be useful for creating popups and tooltips. - ## Communication It is very often necessary to exchange data between DM and JS, and in vanilla BYOND programming it is a huge pain in the butt, because the `browse()` API is very convoluted, out of box it can send only strings, and sending data back to DM requires using hrefs. ``` -location.href='byond://?src=12345¶m=1' +location.href = '?src=12345¶m=1' ``` If you're familiar with the href syntax of BYOND topic calls, then perhaps this doesn't surprise you, but this API artificially limits you to sending 2048 characters of string-typed data; you need to reinvent the wheel if you want to send something more complex than strings. It differs from the way you send messages from DM. And it's very hard to read as well. @@ -138,9 +124,9 @@ Finally, message can contain custom properties, and how you use them is _complet ```js Byond.sendMessage({ - type: 'click', - payload: { buttonId: 1 }, - popup_section: 'left', + type: 'click', + payload: { buttonId: 1 }, + popup_section: 'left', }); ``` @@ -160,15 +146,15 @@ To receive it in JS, you have two different syntaxes. First one is the most verb ```js Byond.subscribe(function (type, payload) { - if (type === 'alert') { - window.alert(payload.text); - return; - } - if (type === 'other') { - // ... - return; - } - // ... + if (type === 'alert') { + window.alert(payload.text); + return; + } + if (type === 'other') { + // ... + return; + } + // ... }); ``` @@ -176,7 +162,7 @@ Second one is more compact, because it already filters messages by type and pass ```js Byond.subscribeTo('alert', function (payload) { - window.alert(payload.text); + window.alert(payload.text); }); ``` @@ -186,7 +172,7 @@ To send a message from JS, you can use the `Byond.sendMessage()` function. ```js Byond.sendMessage('click', { - button: 'explode-mech', + button: 'explode-mech', }); ``` @@ -209,8 +195,8 @@ You can send messages with custom fields in case if you want to bypass JSON seri ```js Byond.sendMessage({ - type: 'something', - ref: '[0x12345678]', + type: 'something', + ref: '[0x12345678]', }); ``` @@ -244,7 +230,7 @@ Id of the current tgui window can be accessed via `Byond.windowId`, and below in ```js Byond.winset(Byond.windowId, { - size: '1280x640', + size: '1280x640', }); ``` @@ -255,10 +241,10 @@ Little known feature, but you can also get non-UI parameters on the client by us ```js // Fetch URL of a server client is currently connected to Byond.winget(null, 'url').then((serverUrl) => { - // Connect to this server - Byond.call(serverUrl); - // Close our client because it is now connecting in background - Byond.command('.quit'); + // Connect to this server + Byond.call(serverUrl); + // Close our client because it is now connecting in background + Byond.command('.quit'); }); ``` diff --git a/tgui/docs/tutorial-and-examples.md b/tgui/docs/tutorial-and-examples.md index 97630f6b213..4c61fecb773 100644 --- a/tgui/docs/tutorial-and-examples.md +++ b/tgui/docs/tutorial-and-examples.md @@ -124,31 +124,31 @@ snippet (make sure component name matches the file name): ```jsx import { useBackend } from '../backend'; -import { Button, LabeledList, Section } from '../components'; +import { Button, LabeledList, Section } from 'tgui-core/components'; import { Window } from '../layouts'; -export const SampleInterface = (props, context) => { - const { act, data } = useBackend(context); - // Extract `health` and `color` variables from the `data` object. - const { health, color } = data; - return ( - - -

    - - {health} - {color} - -
    - - - ); +export const SampleInterface = (props) => { + const { act, data } = useBackend(context); + // Extract `health` and `color` variables from the `data` object. + const { health, color } = data; + return ( + + +
    + + {health} + {color} + +
    +
    +
    + ); }; ``` @@ -188,11 +188,11 @@ After compiling the code above, this is what it becomes: ```js createElement( - 'div', - { className: 'color-' + status }, - 'You are in ', - status, - ' condition!', + 'div', + { className: 'color-' + status }, + 'You are in ', + status, + ' condition!', ); ``` @@ -227,11 +227,11 @@ and builds a new array based on what was returned by that function. ```jsx - {items.map((item) => ( - - {item.content} - - ))} + {items.map((item) => ( + + {item.content} + + ))} ``` @@ -246,31 +246,31 @@ JSX code, and wrap it into a second, smaller React component: ```jsx import { useBackend } from '../backend'; -import { Button, LabeledList, Section } from '../components'; +import { Button, LabeledList, Section } from 'tgui-core/components'; import { Window } from '../layouts'; -export const SampleInterface = (props, context) => { - return ( - - - - - - ); +export const SampleInterface = (props) => { + return ( + + + + + + ); }; -const HealthStatus = (props, context) => { - const { act, data } = useBackend(context); - const { user } = props; - const { health, color } = data; - return ( -
    - - {health} - {color} - -
    - ); +const HealthStatus = (props) => { + const { act, data } = useBackend(context); + const { user } = props; + const { health, color } = data; + return ( +
    + + {health} + {color} + +
    + ); }; ``` @@ -292,7 +292,7 @@ upon code review): data["var"] = var return data -/obj/copypasta/ui_act(action, params) +/obj/copypasta/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) return switch(action) @@ -308,25 +308,30 @@ And the template: ```jsx import { useBackend } from '../backend'; -import { Button, LabeledList, Section } from '../components'; +import { Button, LabeledList, Section } from 'tgui-core/components'; import { Window } from '../layouts'; -export type UIData = { - -} - -export const SampleInterface = (props, context) => { - const { act, data } = useBackend(context); - - return ( - - -
    - -
    -
    -
    - ); +export const SampleInterface = (props) => { + const { act, data } = useBackend(context); + // Extract `health` and `color` variables from the `data` object. + const { health, color } = data; + return ( + + +
    + + {health} + {color} + +
    +
    +
    + ); }; - ``` diff --git a/tgui/docs/writing-tests.md b/tgui/docs/writing-tests.md index 633e73bcd1a..daa29115d9e 100644 --- a/tgui/docs/writing-tests.md +++ b/tgui/docs/writing-tests.md @@ -6,7 +6,7 @@ It's quite simple: create a file ending in `.test.ts` or `.spec.ts` (usually wit ```js test('something', () => { - expect('a').toBe('a'); + expect('a').toBe('a'); }); ``` diff --git a/tgui/global.d.ts b/tgui/global.d.ts index d21ac79b0f8..e88281c4987 100644 --- a/tgui/global.d.ts +++ b/tgui/global.d.ts @@ -6,6 +6,7 @@ // Webpack asset modules. // Should match extensions used in webpack config. +/// declare module '*.png' { const content: string; export default content; @@ -21,6 +22,16 @@ declare module '*.svg' { export default content; } +declare module '*.scss' { + const content: string; + export default content; +} + +declare module '*.sass' { + const content: string; + export default content; +} + namespace JSX { interface IntrinsicElements { marquee: any; @@ -47,29 +58,9 @@ type ByondType = { IS_BYOND: boolean; /** - * Version of Trident engine of Internet Explorer. Null if N/A. + * Version of Blink engine of WebView2. Null if N/A. */ - TRIDENT: number | null; - - /** - * True if browser is IE8 or lower. - */ - IS_LTE_IE8: boolean; - - /** - * True if browser is IE9 or lower. - */ - IS_LTE_IE9: boolean; - - /** - * True if browser is IE10 or lower. - */ - IS_LTE_IE10: boolean; - - /** - * True if browser is IE11 or lower. - */ - IS_LTE_IE11: boolean; + BLINK: number | null; /** * If `true`, unhandled errors and common mistakes result in a blue screen @@ -83,6 +74,11 @@ type ByondType = { */ strictMode: boolean; + /** + * The external URL for the IndexedDB IFrame to use as the origin + */ + storageCdn: string; + /** * Makes a BYOND call. * @@ -115,14 +111,14 @@ type ByondType = { * * Returns a promise with a key-value object containing all properties. */ - winget(id: string | null): Promise; + winget(id: string | null): Promise>; /** * Retrieves all properties of the BYOND skin element. * * Returns a promise with a key-value object containing all properties. */ - winget(id: string | null, propName: '*'): Promise; + winget(id: string | null, propName: '*'): Promise>; /** * Retrieves an exactly one property of the BYOND skin element, @@ -138,7 +134,7 @@ type ByondType = { * * Returns a promise with a key-value object containing listed properties. */ - winget(id: string | null, propNames: string[]): Promise; + winget(id: string | null, propNames: string[]): Promise>; /** * Assigns properties to BYOND skin elements in bulk. @@ -162,11 +158,6 @@ type ByondType = { */ parseJson(text: string): any; - /** - * Downloads a blob, platform-agnostic - */ - saveBlob(blob: Blob, filename: string, ext: string): void; - /** * Sends a message to `/datum/tgui_window` which hosts this window instance. */ @@ -193,16 +184,36 @@ type ByondType = { * Loads a script into the document. */ loadJs(url: string): void; + + /** + * Maps icons to their ref + */ + iconRefMap: Record; + + /** + * Downloads a blob, platform-agnostic + */ + saveBlob(blob: Blob, filename: string, ext: string): void; }; /** * Object that provides access to Byond Skin API and is available in * any tgui application. */ -const Byond: ByondType; +const Byond: ByondType = {}; interface Window { Byond: ByondType; - __store__: Store; - __augmentStack__: (store: Store) => StackAugmentor; + __augmentStack__: (stack: string, error?: Error) => string; + + // IE IndexedDB stuff. + msIndexedDB: IDBFactory; + msIDBTransaction: IDBTransaction; + + // 516 byondstorage API. + hubStorage: Storage; + domainStorage: Storage; + serverStorage: Storage; + + __chatRenderer__: any; } diff --git a/tgui/happydom.ts b/tgui/happydom.ts new file mode 100644 index 00000000000..e3799b44740 --- /dev/null +++ b/tgui/happydom.ts @@ -0,0 +1,5 @@ +import { GlobalRegistrator } from '@happy-dom/global-registrator'; + +GlobalRegistrator.register(); + +import 'tgui/__mocks__/setup.ts'; diff --git a/tgui/package.json b/tgui/package.json index b6dd1a99eee..208b9001305 100644 --- a/tgui/package.json +++ b/tgui/package.json @@ -1,63 +1,31 @@ { - "private": true, - "name": "tgui-workspace", - "version": "4.3.1", - "packageManager": "yarn@3.3.1", - "workspaces": [ - "packages/*" - ], - "scripts": { - "tgui:analyze": "webpack --analyze", - "tgui:bench": "webpack --env TGUI_BENCH=1 && node packages/tgui-bench/index.js", - "tgui:build": "BROWSERSLIST_IGNORE_OLD_DATA=true webpack", - "tgui:dev": "node --experimental-modules packages/tgui-dev-server/index.js", - "tgui:lint": "eslint packages --ext .js,.cjs,.ts,.tsx", - "tgui:prettier": "prettier --check .", - "tgui:sonar": "eslint packages --ext .js,.cjs,.ts,.tsx -c .eslintrc-sonar.yml", - "tgui:test": "jest --watch", - "tgui:test-simple": "CI=true jest --color", - "tgui:test-ci": "CI=true jest --color --collect-coverage", - "tgui:tsc": "tsc" - }, - "dependencies": { - "@babel/core": "^7.15.0", - "@babel/eslint-parser": "^7.15.0", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-transform-jscript": "^7.14.5", - "@babel/preset-env": "^7.15.0", - "@babel/preset-typescript": "^7.15.0", - "@types/jest": "^29.2.4", - "@types/jsdom": "^20.0.1", - "@types/node": "14.x", - "@types/webpack": "^5.28.0", - "@types/webpack-env": "^1.18.0", - "@typescript-eslint/parser": "^5.47.1", - "babel-jest": "^27.0.6", - "babel-loader": "^8.2.2", - "babel-plugin-inferno": "^6.3.0", - "babel-plugin-transform-remove-console": "^6.9.4", - "common": "workspace:*", - "css-loader": "^5.2.7", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-radar": "^0.2.1", - "eslint-plugin-react": "^7.24.0", - "eslint-plugin-unused-imports": "^1.1.4", - "file-loader": "^6.2.0", - "inferno": "^7.4.8", - "jest": "^27.0.6", - "jest-circus": "^27.0.6", - "jsdom": "^16.7.0", - "mini-css-extract-plugin": "^1.6.2", - "prettier": "^3.1.1", - "sass": "^1.37.5", - "sass-loader": "^11.1.1", - "style-loader": "^2.0.0", - "terser-webpack-plugin": "^5.1.4", - "typescript": "^4.9.5", - "url-loader": "^4.1.1", - "webpack": "^5.104.1", - "webpack-bundle-analyzer": "^4.4.2", - "webpack-cli": "^4.7.2" - } + "name": "tgui-workspace", + "version": "6.0.0", + "devDependencies": { + "@happy-dom/global-registrator": "^20.0.11", + "@rspack/cli": "^1.6.8", + "@rspack/core": "^1.6.8", + "@testing-library/react": "^16.3.2", + "@types/bun": "^1.3.5", + "@types/react": "^19.2.7", + "@types/react-dom": "^19.2.3", + "@types/webpack-env": "^1.18.8", + "@types/wicg-file-system-access": "^2023.10.6", + "css-loader": "^7.1.2", + "sass-embedded": "^1.97.1", + "sass-loader": "^16.0.6", + "typescript": "^5.8.3" + }, + "packageManager": "bun@1.2.16", + "private": true, + "scripts": { + "tgui:analyze": "rspack --analyze", + "tgui:build": "rspack build", + "tgui:dev": "bun --smol packages/tgui-dev-server/index.ts", + "tgui:test": "bun test", + "tgui:tsc": "tsc" + }, + "workspaces": [ + "packages/*" + ] } diff --git a/tgui/packages/common/assets.ts b/tgui/packages/common/assets.ts new file mode 100644 index 00000000000..958d472ca4e --- /dev/null +++ b/tgui/packages/common/assets.ts @@ -0,0 +1,30 @@ +const EXCLUDED_PATTERNS = [/v4shim/i]; + +export function loadStyleSheet(payload: string): void { + Byond.loadCss(payload); +} + +export function loadMappings( + payload: Record, + /** Lets you insert your own independent asset map. */ + map: Record, +): void { + for (const name in payload) { + // Skip anything that matches excluded patterns + if (EXCLUDED_PATTERNS.some((regex) => regex.test(name))) { + continue; + } + + const url = payload[name]; + const ext = name.split('.').pop(); + + map[name] = url; + + if (ext === 'css') { + Byond.loadCss(url); + } + if (ext === 'js') { + Byond.loadJs(url); + } + } +} diff --git a/tgui/packages/common/collections.spec.ts b/tgui/packages/common/collections.spec.ts deleted file mode 100644 index ef35a95cb3e..00000000000 --- a/tgui/packages/common/collections.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { range, zip } from './collections'; - -// Type assertions, these will lint if the types are wrong. -const _zip1: [string, number] = zip(['a'], [1])[0]; - -describe('range', () => { - test('range(0, 5)', () => { - expect(range(0, 5)).toEqual([0, 1, 2, 3, 4]); - }); -}); - -describe('zip', () => { - test("zip(['a', 'b', 'c'], [1, 2, 3, 4])", () => { - expect(zip(['a', 'b', 'c'], [1, 2, 3, 4])).toEqual([ - ['a', 1], - ['b', 2], - ['c', 3], - ]); - }); -}); diff --git a/tgui/packages/common/collections.ts b/tgui/packages/common/collections.ts index 5bfcee85884..438ad19a4d2 100644 --- a/tgui/packages/common/collections.ts +++ b/tgui/packages/common/collections.ts @@ -4,260 +4,6 @@ * @license MIT */ -/** - * Iterates over elements of collection, returning an array of all elements - * iteratee returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * If collection is 'null' or 'undefined', it will be returned "as is" - * without emitting any errors (which can be useful in some cases). - */ -export const filter = - (iterateeFn: (input: T, index: number, collection: T[]) => boolean) => - (collection: T[]): T[] => { - if (collection === null || collection === undefined) { - return collection; - } - if (Array.isArray(collection)) { - const result: T[] = []; - for (let i = 0; i < collection.length; i++) { - const item = collection[i]; - if (iterateeFn(item, i, collection)) { - result.push(item); - } - } - return result; - } - throw new Error(`filter() can't iterate on type ${typeof collection}`); - }; - -type MapFunction = { - ( - iterateeFn: (value: T, index: number, collection: T[]) => U, - ): (collection: T[]) => U[]; - - ( - iterateeFn: (value: T, index: K, collection: Record) => U, - ): (collection: Record) => U[]; -}; - -/** - * Creates an array of values by running each element in collection - * thru an iteratee function. The iteratee is invoked with three - * arguments: (value, index|key, collection). - * - * If collection is 'null' or 'undefined', it will be returned "as is" - * without emitting any errors (which can be useful in some cases). - */ -export const map: MapFunction = - (iterateeFn) => - (collection: T[]): U[] => { - if (collection === null || collection === undefined) { - return collection; - } - - if (Array.isArray(collection)) { - return collection.map(iterateeFn); - } - - if (typeof collection === 'object') { - return Object.entries(collection).map(([key, value]) => { - return iterateeFn(value, key, collection); - }); - } - - throw new Error(`map() can't iterate on type ${typeof collection}`); - }; - -/** - * Given a collection, will run each element through an iteratee function. - * Will then filter out undefined values. - */ -export const filterMap = ( - collection: T[], - iterateeFn: (value: T) => U | undefined, -): U[] => { - const finalCollection: U[] = []; - - for (const value of collection) { - const output = iterateeFn(value); - if (output !== undefined) { - finalCollection.push(output); - } - } - - return finalCollection; -}; - -const COMPARATOR = (objA, objB) => { - const criteriaA = objA.criteria; - const criteriaB = objB.criteria; - const length = criteriaA.length; - for (let i = 0; i < length; i++) { - const a = criteriaA[i]; - const b = criteriaB[i]; - if (a < b) { - return -1; - } - if (a > b) { - return 1; - } - } - return 0; -}; - -/** - * Creates an array of elements, sorted in ascending order by the results - * of running each element in a collection thru each iteratee. - * - * Iteratees are called with one argument (value). - */ -export const sortBy = - (...iterateeFns: ((input: T) => unknown)[]) => - (array: T[]): T[] => { - if (!Array.isArray(array)) { - return array; - } - let length = array.length; - // Iterate over the array to collect criteria to sort it by - let mappedArray: { - criteria: unknown[]; - value: T; - }[] = []; - for (let i = 0; i < length; i++) { - const value = array[i]; - mappedArray.push({ - criteria: iterateeFns.map((fn) => fn(value)), - value, - }); - } - // Sort criteria using the base comparator - mappedArray.sort(COMPARATOR); - - // Unwrap values - const values: T[] = []; - while (length--) { - values[length] = mappedArray[length].value; - } - return values; - }; - -export const sort = sortBy(); - -export const sortStrings = sortBy(); - -/** - * Returns a range of numbers from start to end, exclusively. - * For example, range(0, 5) will return [0, 1, 2, 3, 4]. - */ -export const range = (start: number, end: number): number[] => - new Array(end - start).fill(null).map((_, index) => index + start); - -/** - * A fast implementation of reduce. - */ -export const reduce = (reducerFn, initialValue) => (array) => { - const length = array.length; - let i; - let result; - if (initialValue === undefined) { - i = 1; - result = array[0]; - } else { - i = 0; - result = initialValue; - } - for (; i < length; i++) { - result = reducerFn(result, array[i], i, array); - } - return result; -}; - -/** - * Creates a duplicate-free version of an array, using SameValueZero for - * equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * It accepts iteratee which is invoked for each element in array to generate - * the criterion by which uniqueness is computed. The order of result values - * is determined by the order they occur in the array. The iteratee is - * invoked with one argument: value. - */ -export const uniqBy = - (iterateeFn?: (value: T) => unknown) => - (array: T[]): T[] => { - const { length } = array; - const result: T[] = []; - const seen: unknown[] = iterateeFn ? [] : result; - let index = -1; - // prettier-ignore - outer: - while (++index < length) { - let value: T | 0 = array[index]; - const computed = iterateeFn ? iterateeFn(value) : value; - if (computed === computed) { - let seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iterateeFn) { - seen.push(computed); - } - result.push(value); - } else if (!seen.includes(computed)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - }; - -export const uniq = uniqBy(); - -type Zip = { - [I in keyof T]: T[I] extends (infer U)[] ? U : never; -}[]; - -/** - * Creates an array of grouped elements, the first of which contains - * the first elements of the given arrays, the second of which contains - * the second elements of the given arrays, and so on. - */ -export const zip = (...arrays: T): Zip => { - if (arrays.length === 0) { - return []; - } - const numArrays = arrays.length; - const numValues = arrays[0].length; - const result: Zip = []; - for (let valueIndex = 0; valueIndex < numValues; valueIndex++) { - const entry: unknown[] = []; - for (let arrayIndex = 0; arrayIndex < numArrays; arrayIndex++) { - entry.push(arrays[arrayIndex][valueIndex]); - } - - // I tried everything to remove this any, and have no idea how to do it. - result.push(entry as any); - } - return result; -}; - -/** - * This method is like "zip" except that it accepts iteratee to - * specify how grouped values should be combined. The iteratee is - * invoked with the elements of each group. - */ -export const zipWith = - (iterateeFn: (...values: T[]) => U) => - (...arrays: T[][]): U[] => { - return map((values: T[]) => iterateeFn(...values))(zip(...arrays)); - }; - const binarySearch = ( getKey: (value: T) => U, collection: readonly T[], @@ -293,55 +39,12 @@ const binarySearch = ( return compare > insertingKey ? middle : middle + 1; }; -export const binaryInsertWith = - (getKey: (value: T) => U) => - (collection: readonly T[], value: T) => { - const copy = [...collection]; - copy.splice(binarySearch(getKey, collection, value), 0, value); - return copy; - }; - -/** - * This method takes a collection of items and a number, returning a collection - * of collections, where the maximum amount of items in each is that second arg - */ -export const paginate = (collection: T[], maxPerPage: number): T[][] => { - const pages: T[][] = []; - let page: T[] = []; - let itemsToAdd = maxPerPage; - - for (const item of collection) { - page.push(item); - itemsToAdd--; - if (!itemsToAdd) { - itemsToAdd = maxPerPage; - pages.push(page); - page = []; - } - } - if (page.length) { - pages.push(page); - } - return pages; -}; - -const isObject = (obj: unknown) => typeof obj === 'object' && obj !== null; - -// Does a deep merge of two objects. DO NOT FEED CIRCULAR OBJECTS!! -export const deepMerge = (...objects: any[]): any => { - const target = {}; - for (const object of objects) { - for (const key of Object.keys(object)) { - const targetValue = target[key]; - const objectValue = object[key]; - if (Array.isArray(targetValue) && Array.isArray(objectValue)) { - target[key] = [...targetValue, ...objectValue]; - } else if (isObject(targetValue) && isObject(objectValue)) { - target[key] = deepMerge(targetValue, objectValue); - } else { - target[key] = objectValue; - } - } - } - return target; +export const binaryInsertWith = ( + collection: readonly T[], + value: T, + getKey: (value: T) => U, +): T[] => { + const copy = [...collection]; + copy.splice(binarySearch(getKey, collection, value), 0, value); + return copy; }; diff --git a/tgui/packages/common/color.js b/tgui/packages/common/color.js deleted file mode 100644 index 59935931d82..00000000000 --- a/tgui/packages/common/color.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -const EPSILON = 0.0001; - -export class Color { - constructor(r = 0, g = 0, b = 0, a = 1) { - this.r = r; - this.g = g; - this.b = b; - this.a = a; - } - - toString() { - // Alpha component needs to permit fractional values, so cannot use | - let alpha = parseFloat(this.a); - if (isNaN(alpha)) { - alpha = 1; - } - return `rgba(${this.r | 0}, ${this.g | 0}, ${this.b | 0}, ${alpha})`; - } - - // Darkens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. - darken(percent) { - percent /= 100; - return new Color( - this.r - this.r * percent, - this.g - this.g * percent, - this.b - this.b * percent, - this.a, - ); - } - - // Brightens a color by a given percent. Returns a color, which can have toString called to get it's rgba() css value. - lighten(percent) { - // No point in rewriting code we already have. - return this.darken(-percent); - } -} - -/** - * Creates a color from the CSS hex color notation. - */ -Color.fromHex = (hex) => - new Color( - parseInt(hex.substr(1, 2), 16), - parseInt(hex.substr(3, 2), 16), - parseInt(hex.substr(5, 2), 16), - ); - -/** - * Linear interpolation of two colors. - */ -Color.lerp = (c1, c2, n) => - new Color( - (c2.r - c1.r) * n + c1.r, - (c2.g - c1.g) * n + c1.g, - (c2.b - c1.b) * n + c1.b, - (c2.a - c1.a) * n + c1.a, - ); - -/** - * Loops up the color in the provided list of colors - * with linear interpolation. - */ -Color.lookup = (value, colors = []) => { - const len = colors.length; - if (len < 2) { - throw new Error('Needs at least two colors!'); - } - const scaled = value * (len - 1); - if (value < EPSILON) { - return colors[0]; - } - if (value >= 1 - EPSILON) { - return colors[len - 1]; - } - const ratio = scaled % 1; - const index = scaled | 0; - return Color.lerp(colors[index], colors[index + 1], ratio); -}; diff --git a/tgui/packages/common/events.js b/tgui/packages/common/events.js deleted file mode 100644 index 7eeff511aa5..00000000000 --- a/tgui/packages/common/events.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -export class EventEmitter { - constructor() { - this.listeners = {}; - } - - on(name, listener) { - this.listeners[name] = this.listeners[name] || []; - this.listeners[name].push(listener); - } - - off(name, listener) { - const listeners = this.listeners[name]; - if (!listeners) { - throw new Error(`There is no listeners for "${name}"`); - } - this.listeners[name] = listeners.filter((existingListener) => { - return existingListener !== listener; - }); - } - - emit(name, ...params) { - const listeners = this.listeners[name]; - if (!listeners) { - return; - } - for (let i = 0, len = listeners.length; i < len; i += 1) { - const listener = listeners[i]; - listener(...params); - } - } - - clear() { - this.listeners = {}; - } -} diff --git a/tgui/packages/common/exhaustive.ts b/tgui/packages/common/exhaustive.ts deleted file mode 100644 index bc41757515b..00000000000 --- a/tgui/packages/common/exhaustive.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Throws an error such that a non-exhaustive check will error at compile time - * when using TypeScript, rather than at runtime. - * - * For example: - * enum Color { Red, Green, Blue } - * switch (color) { - * case Color.Red: - * return "red"; - * case Color.Green: - * return "green"; - * default: - * // This will error at compile time that we forgot blue. - * exhaustiveCheck(color); - * } - */ -export const exhaustiveCheck = (input: never) => { - throw new Error(`Unhandled case: ${input}`); -}; diff --git a/tgui/packages/common/fp.js b/tgui/packages/common/fp.js deleted file mode 100644 index ba7df09d407..00000000000 --- a/tgui/packages/common/fp.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Creates a function that returns the result of invoking the given - * functions, where each successive invocation is supplied the return - * value of the previous. - */ -// prettier-ignore -export const flow = (...funcs) => (input, ...rest) => { - let output = input; - for (let func of funcs) { - // Recurse into the array of functions - if (Array.isArray(func)) { - output = flow(...func)(output, ...rest); - } - else if (func) { - output = func(output, ...rest); - } - } - return output; -}; - -/** - * Composes single-argument functions from right to left. - * - * All functions might accept a context in form of additional arguments. - * If the resulting function is called with more than 1 argument, rest of - * the arguments are passed to all functions unchanged. - * - * @param {...Function} funcs The functions to compose - * @returns {Function} A function obtained by composing the argument functions - * from right to left. For example, compose(f, g, h) is identical to doing - * (input, ...rest) => f(g(h(input, ...rest), ...rest), ...rest) - */ -export const compose = (...funcs) => { - if (funcs.length === 0) { - return (arg) => arg; - } - if (funcs.length === 1) { - return funcs[0]; - } - // prettier-ignore - return funcs.reduce((a, b) => (value, ...rest) => - a(b(value, ...rest), ...rest)); -}; diff --git a/tgui/packages/common/keycodes.js b/tgui/packages/common/keycodes.js deleted file mode 100644 index 8f18b154b56..00000000000 --- a/tgui/packages/common/keycodes.js +++ /dev/null @@ -1,86 +0,0 @@ -/** - * All possible browser keycodes, in one file. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -export const KEY_BACKSPACE = 8; -export const KEY_TAB = 9; -export const KEY_ENTER = 13; -export const KEY_SHIFT = 16; -export const KEY_CTRL = 17; -export const KEY_ALT = 18; -export const KEY_PAUSE = 19; -export const KEY_CAPSLOCK = 20; -export const KEY_ESCAPE = 27; -export const KEY_SPACE = 32; -export const KEY_PAGEUP = 33; -export const KEY_PAGEDOWN = 34; -export const KEY_END = 35; -export const KEY_HOME = 36; -export const KEY_LEFT = 37; -export const KEY_UP = 38; -export const KEY_RIGHT = 39; -export const KEY_DOWN = 40; -export const KEY_INSERT = 45; -export const KEY_DELETE = 46; -export const KEY_0 = 48; -export const KEY_1 = 49; -export const KEY_2 = 50; -export const KEY_3 = 51; -export const KEY_4 = 52; -export const KEY_5 = 53; -export const KEY_6 = 54; -export const KEY_7 = 55; -export const KEY_8 = 56; -export const KEY_9 = 57; -export const KEY_A = 65; -export const KEY_B = 66; -export const KEY_C = 67; -export const KEY_D = 68; -export const KEY_E = 69; -export const KEY_F = 70; -export const KEY_G = 71; -export const KEY_H = 72; -export const KEY_I = 73; -export const KEY_J = 74; -export const KEY_K = 75; -export const KEY_L = 76; -export const KEY_M = 77; -export const KEY_N = 78; -export const KEY_O = 79; -export const KEY_P = 80; -export const KEY_Q = 81; -export const KEY_R = 82; -export const KEY_S = 83; -export const KEY_T = 84; -export const KEY_U = 85; -export const KEY_V = 86; -export const KEY_W = 87; -export const KEY_X = 88; -export const KEY_Y = 89; -export const KEY_Z = 90; -export const KEY_F1 = 112; -export const KEY_F2 = 113; -export const KEY_F3 = 114; -export const KEY_F4 = 115; -export const KEY_F5 = 116; -export const KEY_F6 = 117; -export const KEY_F7 = 118; -export const KEY_F8 = 119; -export const KEY_F9 = 120; -export const KEY_F10 = 121; -export const KEY_F11 = 122; -export const KEY_F12 = 123; -export const KEY_SEMICOLON = 186; -export const KEY_EQUAL = 187; -export const KEY_COMMA = 188; -export const KEY_MINUS = 189; -export const KEY_PERIOD = 190; -export const KEY_SLASH = 191; -export const KEY_LEFT_BRACKET = 219; -export const KEY_BACKSLASH = 220; -export const KEY_RIGHT_BRACKET = 221; -export const KEY_QUOTE = 222; diff --git a/tgui/packages/common/keys.ts b/tgui/packages/common/keys.ts deleted file mode 100644 index b3e6a4e814f..00000000000 --- a/tgui/packages/common/keys.ts +++ /dev/null @@ -1,139 +0,0 @@ -/** - * ### Key codes. - * event.keyCode is deprecated, use this reference instead. - * - * Handles modifier keys (Shift, Alt, Control) and arrow keys. - * - * For alphabetical keys, use the actual character (e.g. 'a') instead of the key code. - * Don't access Esc or Escape directly, use isEscape() instead - * - * Something isn't here that you want? Just add it: - * @url https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values - * @usage - * ```ts - * import { KEY } from 'tgui/common/keys'; - * - * if (event.key === KEY.Enter) { - * // do something - * } - * ``` - * - * - */ -export enum KEY { - A = 'a', - Alt = 'Alt', - Backspace = 'Backspace', - Control = 'Control', - D = 'd', - Delete = 'Delete', - Down = 'ArrowDown', - E = 'e', - End = 'End', - Enter = 'Enter', - Esc = 'Esc', - Escape = 'Escape', - Home = 'Home', - Insert = 'Insert', - Left = 'ArrowLeft', - N = 'n', - PageDown = 'PageDown', - PageUp = 'PageUp', - Right = 'ArrowRight', - S = 's', - Shift = 'Shift', - Space = ' ', - Tab = 'Tab', - Up = 'ArrowUp', - W = 'w', - Z = 'z', -} - -/** - * ### isEscape - * - * Checks if the user has hit the 'ESC' key on their keyboard. - * There's a weirdness in BYOND where this could be either the string - * 'Escape' or 'Esc' depending on the browser. This function handles - * both cases. - * - * @param key - the key to check, typically from event.key - * @returns true if key is Escape or Esc, false otherwise - */ -export function isEscape(key: string): boolean { - return key === KEY.Esc || key === KEY.Escape; -} - -/** - * ### isAlphabetic - * - * Checks if the user has hit any alphabetic key (a - z) - * - * @param key - the key to check, typically from event.key - * @returns true if key is in the range of a-z - */ -export function isAlphabetic(key: string): boolean { - return key >= KEY.A && key <= KEY.Z; -} - -/** - * ### isNumeric - * - * Checks if the user has hit any numeric key (0 - 9) - * - * @param key - the key to check, typically from event.key - * @returns true if key is in the range of 0 - 9 - */ -export function isNumeric(key: string): boolean { - return key >= '0' && key <= '9'; -} - -/** - * ### isCardinal - * - * Checks if the user has hit any cardinal key (n s w e) - * - * @param key - the key to check, typically from event.key - * @returns true if key matches any cardinal n s w e - */ -export function isCardinal(key: string): boolean { - return key === KEY.N || key === KEY.S || key === KEY.W || key === KEY.E; -} - -/** - * ### isArrow - * - * Checks if the user has hit any arrow key - * - * @param key - the key to check, typically from event.key - * @returns true if key matches any arrow keys - */ -export function isArrow(key: string): boolean { - return ( - key === KEY.Up || key === KEY.Down || key === KEY.Left || key === KEY.Right - ); -} - -/** - * ### isWasd - * - * Checks if the user has hit any w a s d key - * - * @param key - the key to check, typically from event.key - * @returns true if key matches any w a s d - */ -export function isWasd(key: string): boolean { - return key === KEY.W || key === KEY.A || key === KEY.S || key === KEY.D; -} - -/** - * ### isMovement - * - * Checks if the user has hit any movement key (w a s d and arrow keys) - * - * @param key - the key to check, typically from event.key - * @returns true if key matches any movement key w a s d and arrow keys - */ -export function isMovement(key: string): boolean { - return isWasd(key) || isArrow(key); -} diff --git a/tgui/packages/common/math.ts b/tgui/packages/common/math.ts deleted file mode 100644 index b9f7bfda9d5..00000000000 --- a/tgui/packages/common/math.ts +++ /dev/null @@ -1,107 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -// Further modified for Aurora - -/** - * Limits a number to the range between 'min' and 'max'. - */ -export const clamp = (value, min, max) => { - return value < min ? min : value > max ? max : value; -}; - -/** - * Limits a number between 0 and 1. - */ -export const clamp01 = (value) => { - return value < 0 ? 0 : value > 1 ? 1 : value; -}; - -/** - * Scales a number to fit into the range between min and max. - */ -export const scale = (value, min, max) => { - return (value - min) / (max - min); -}; - -/** - * Robust number rounding. - * - * Adapted from Locutus, see: http://locutus.io/php/math/round/ - * - * @param {number} value - * @param {number} precision - * @return {number} - */ -export const round = (value, precision) => { - if (!value || isNaN(value)) { - return value; - } - // helper variables - let m, f, isHalf, sgn; - // making sure precision is integer - precision |= 0; - m = Math.pow(10, precision); - value *= m; - // sign of the number - sgn = +(value > 0) | -(value < 0); - // isHalf = value % 1 === 0.5 * sgn; - isHalf = Math.abs(value % 1) >= 0.4999999999854481; - f = Math.floor(value); - if (isHalf) { - // rounds .5 away from zero - value = f + (sgn > 0); - } - return (isHalf ? value : Math.round(value)) / m; -}; - -/** - * Returns a string representing a number in fixed point notation. - */ -export const toFixed = (value, fractionDigits = 0) => { - return Number(value).toFixed(Math.max(fractionDigits, 0)); -}; - -/** - * Checks whether a value is within the provided range. - * - * Range is an array of two numbers, for example: [0, 15]. - */ -export const inRange = (value, range) => { - return range && value >= range[0] && value <= range[1]; -}; - -/** - * Walks over the object with ranges, comparing value against every range, - * and returns the key of the first matching range. - * - * Range is an array of two numbers, for example: [0, 15]. - */ -export const keyOfMatchingRange = (value, ranges) => { - for (let rangeName of Object.keys(ranges)) { - const range = ranges[rangeName]; - if (inRange(value, range)) { - return rangeName; - } - } -}; - -/** - * Get number of digits following the decimal point in a number - */ -export const numberOfDecimalDigits = (value) => { - if (Math.floor(value) !== value) { - return value.toString().split('.')[1].length || 0; - } - return 0; -}; - -// Linear interpolation between two values. -export const lerp = (value1: number, value2: number, amount: number) => { - amount = amount < 0 ? 0 : amount; - amount = amount > 1 ? 1 : amount; - return value1 + (value2 - value1) * amount; -}; diff --git a/tgui/packages/common/package.json b/tgui/packages/common/package.json index bbf99bf1cad..f40c3b79237 100644 --- a/tgui/packages/common/package.json +++ b/tgui/packages/common/package.json @@ -1,5 +1,8 @@ { - "private": true, - "name": "common", - "version": "4.3.1" + "name": "common", + "version": "4.3.1", + "dependencies": { + "es-toolkit": "^1.39.3" + }, + "private": true } diff --git a/tgui/packages/common/perf.js b/tgui/packages/common/perf.ts similarity index 50% rename from tgui/packages/common/perf.js rename to tgui/packages/common/perf.ts index 591aa3537de..a7dfefc1e1c 100644 --- a/tgui/packages/common/perf.js +++ b/tgui/packages/common/perf.ts @@ -14,46 +14,57 @@ const FRAME_DURATION = 1000 / FPS; // True if Performance API is supported const supportsPerf = !!window.performance?.now; // High precision markers -let hpMarkersByName = {}; +const hpMarkersByName: Record = {}; // Low precision markers -let lpMarkersByName = {}; +const lpMarkersByName: Record = {}; /** * Marks a certain spot in the code for later measurements. */ -const mark = (name, timestamp) => { +function mark(name: string, timestamp?: number): void { if (process.env.NODE_ENV !== 'production') { if (supportsPerf && !timestamp) { hpMarkersByName[name] = performance.now(); } lpMarkersByName[name] = timestamp || Date.now(); } -}; +} /** * Calculates and returns the difference between two markers as a string. * * Use logger.log() to print the measurement. */ -const measure = (markerNameA, markerNameB) => { - if (process.env.NODE_ENV !== 'production') { - let markerA = hpMarkersByName[markerNameA]; - let markerB = hpMarkersByName[markerNameB]; - if (!markerA || !markerB) { - markerA = lpMarkersByName[markerNameA]; - markerB = lpMarkersByName[markerNameB]; - } - const duration = Math.abs(markerB - markerA); - return formatDuration(duration); - } -}; +function measure(markerNameA: string, markerNameB: string): string | undefined { + if (process.env.NODE_ENV === 'production') return; -const formatDuration = (duration) => { + let markerA = hpMarkersByName[markerNameA]; + let markerB = hpMarkersByName[markerNameB]; + + if (!markerA || !markerB) { + markerA = lpMarkersByName[markerNameA]; + markerB = lpMarkersByName[markerNameB]; + } + + const duration = Math.abs(markerB - markerA); + + return formatDuration(duration); +} + +/** + * Formats a duration in milliseconds and frames. + */ +function formatDuration(duration: number): string { const durationInFrames = duration / FRAME_DURATION; - // prettier-ignore - return duration.toFixed(duration < 10 ? 1 : 0) + 'ms ' - + '(' + durationInFrames.toFixed(2) + ' frames)'; -}; + + return ( + duration.toFixed(duration < 10 ? 1 : 0) + + 'ms ' + + '(' + + durationInFrames.toFixed(2) + + ' frames)' + ); +} export const perf = { mark, diff --git a/tgui/packages/common/random.ts b/tgui/packages/common/random.ts deleted file mode 100644 index fbf9030b1ba..00000000000 --- a/tgui/packages/common/random.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { clamp } from './math'; - -/** - * Returns random number between lowerBound exclusive and upperBound inclusive - */ -export const randomNumber = (lowerBound: number, upperBound: number) => { - return Math.random() * (upperBound - lowerBound) + lowerBound; -}; - -/** - * Returns random integer between lowerBound exclusive and upperBound inclusive - */ -export const randomInteger = (lowerBound: number, upperBound: number) => { - lowerBound = Math.ceil(lowerBound); - upperBound = Math.floor(upperBound); - return Math.floor(Math.random() * (upperBound - lowerBound) + lowerBound); -}; - -/** - * Returns random array element - */ -export const randomPick = (array: T[]) => { - return array[Math.floor(Math.random() * array.length)]; -}; - -/** - * Return 1 with probability P percent; otherwise 0 - */ -export const randomProb = (probability: number) => { - const normalized = clamp(probability, 0, 100) / 100; - return Math.random() <= normalized; -}; diff --git a/tgui/packages/common/react.spec.ts b/tgui/packages/common/react.spec.ts deleted file mode 100644 index 44102fdc971..00000000000 --- a/tgui/packages/common/react.spec.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @file - * @copyright 2021 Aleksej Komarov - * @license MIT - */ - -import { classes } from './react'; - -describe('classes', () => { - test('empty', () => { - expect(classes([])).toBe(''); - }); - - test('result contains inputs', () => { - const output = classes(['foo', 'bar', false, true, 0, 1, 'baz']); - expect(output).toContain('foo'); - expect(output).toContain('bar'); - expect(output).toContain('baz'); - }); -}); diff --git a/tgui/packages/common/react.ts b/tgui/packages/common/react.ts deleted file mode 100644 index 8e42d0971ab..00000000000 --- a/tgui/packages/common/react.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Helper for conditionally adding/removing classes in React - */ -export const classes = (classNames: (string | BooleanLike)[]) => { - let className = ''; - for (let i = 0; i < classNames.length; i++) { - const part = classNames[i]; - if (typeof part === 'string') { - className += part + ' '; - } - } - return className; -}; - -/** - * Normalizes children prop, so that it is always an array of VDom - * elements. - */ -export const normalizeChildren = (children: T | T[]) => { - if (Array.isArray(children)) { - return children.flat().filter((value) => value) as T[]; - } - if (typeof children === 'object') { - return [children]; - } - return []; -}; - -/** - * Shallowly checks if two objects are different. - * Credit: https://github.com/developit/preact-compat - */ -export const shallowDiffers = (a: object, b: object) => { - let i; - for (i in a) { - if (!(i in b)) { - return true; - } - } - for (i in b) { - if (a[i] !== b[i]) { - return true; - } - } - return false; -}; - -/** - * Default inferno hooks for pure components. - */ -export const pureComponentHooks = { - onComponentShouldUpdate: (lastProps, nextProps) => { - return shallowDiffers(lastProps, nextProps); - }, -}; - -/** - * A helper to determine whether the object is renderable by React. - */ -export const canRender = (value: unknown) => { - // prettier-ignore - return value !== undefined - && value !== null - && typeof value !== 'boolean'; -}; - -/** - * A common case in tgui, when you pass a value conditionally, these are - * the types that can fall through the condition. - */ -export type BooleanLike = number | boolean | null | undefined; diff --git a/tgui/packages/common/redux.test.ts b/tgui/packages/common/redux.test.ts index 0a29a92e0ce..0a5d8c143cb 100644 --- a/tgui/packages/common/redux.test.ts +++ b/tgui/packages/common/redux.test.ts @@ -1,10 +1,12 @@ +import { describe, expect, it } from 'bun:test'; + import { - Action, - Reducer, + type Action, applyMiddleware, combineReducers, createAction, createStore, + type Reducer, } from './redux'; // Dummy Reducer @@ -30,12 +32,12 @@ const increment = createAction('INCREMENT'); const decrement = createAction('DECREMENT'); describe('Redux implementation tests', () => { - test('createStore works', () => { + it('createStore works', () => { const store = createStore(counterReducer); expect(store.getState()).toBe(0); }); - test('createStore with applyMiddleware works', () => { + it('createStore with applyMiddleware works', () => { const store = createStore( counterReducer, applyMiddleware(loggingMiddleware), @@ -43,7 +45,7 @@ describe('Redux implementation tests', () => { expect(store.getState()).toBe(0); }); - test('dispatch works', () => { + it('dispatch works', () => { const store = createStore(counterReducer); store.dispatch(increment()); expect(store.getState()).toBe(1); @@ -51,7 +53,7 @@ describe('Redux implementation tests', () => { expect(store.getState()).toBe(0); }); - test('combineReducers works', () => { + it('combineReducers works', () => { const rootReducer = combineReducers({ counter: counterReducer, }); @@ -59,7 +61,7 @@ describe('Redux implementation tests', () => { expect(store.getState()).toEqual({ counter: 0 }); }); - test('createAction works', () => { + it('createAction works', () => { const incrementAction = increment(); expect(incrementAction).toEqual({ type: 'INCREMENT' }); const decrementAction = decrement(); diff --git a/tgui/packages/common/redux.ts b/tgui/packages/common/redux.ts index 1503de3c7d7..33275884714 100644 --- a/tgui/packages/common/redux.ts +++ b/tgui/packages/common/redux.ts @@ -4,6 +4,8 @@ * @license MIT */ +type Fn = (...args: any[]) => any; + export type Reducer = ( state: State | undefined, action: ActionType, @@ -36,7 +38,7 @@ export type Dispatch = ( action: ActionType, ) => void; -type StoreEnhancer = (createStoreFunction: Function) => Function; +type StoreEnhancer = (createStoreFunction: Fn) => Fn; type PreparedAction = { payload?: any; @@ -56,7 +58,7 @@ export const createStore = ( } let currentState: State; - let listeners: Array<() => void> = []; + const listeners: Array<() => void> = []; const getState = (): State => currentState; @@ -95,7 +97,7 @@ export const applyMiddleware = ( return (reducer, ...args): Store => { const store = createStoreFunction(reducer, ...args); - let dispatch: Dispatch = () => { + let dispatch: Dispatch = (action, ...args) => { throw new Error( 'Dispatching while constructing your middleware is not allowed.', ); @@ -163,7 +165,7 @@ export const combineReducers = ( * @param {string} type The action type to use for created actions. * @param {any} prepare (optional) a method that takes any number of arguments * and returns { payload } or { payload, meta }. If this is given, the - * resulting action creator will pass it's arguments to this method to + * resulting action creator will pass its arguments to this method to * calculate payload & meta. * * @public @@ -194,19 +196,3 @@ export const createAction = ( return actionCreator; }; - -// Implementation specific -// -------------------------------------------------------- - -export const useDispatch = (context: { - store: Store; -}): Dispatch => { - return context.store.dispatch; -}; - -export const useSelector = ( - context: { store: Store }, - selector: (state: State) => Selected, -): Selected => { - return selector(context.store.getState()); -}; diff --git a/tgui/packages/common/storage.js b/tgui/packages/common/storage.js deleted file mode 100644 index 869ffd84990..00000000000 --- a/tgui/packages/common/storage.js +++ /dev/null @@ -1,308 +0,0 @@ -/** - * Browser-agnostic abstraction of key-value web storage. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -export const IMPL_MEMORY = 0; -export const IMPL_HUB_STORAGE = 1; -export const IMPL_INDEXED_DB = 2; -export const IMPL_IFRAME_INDEXED_DB = 3; - -const INDEXED_DB_VERSION = 1; -const INDEXED_DB_NAME = 'tgui'; -const INDEXED_DB_STORE_NAME = 'storage-v1'; - -const READ_ONLY = 'readonly'; -const READ_WRITE = 'readwrite'; - -const testGeneric = (testFn) => () => { - try { - return Boolean(testFn()); - } catch { - return false; - } -}; - -const testHubStorage = testGeneric( - () => window.hubStorage && window.hubStorage.getItem, -); - -// TODO: Remove with 516 -// prettier-ignore -const testIndexedDb = testGeneric(() => ( - (window.indexedDB || window.msIndexedDB) - && (window.IDBTransaction || window.msIDBTransaction) -)); - -class MemoryBackend { - constructor() { - this.impl = IMPL_MEMORY; - this.store = {}; - } - - async get(key) { - return this.store[key]; - } - - async set(key, value) { - this.store[key] = value; - } - - async remove(key) { - this.store[key] = undefined; - } - - async clear() { - this.store = {}; - } -} - -class HubStorageBackend { - constructor() { - this.impl = IMPL_HUB_STORAGE; - } - - async get(key) { - const value = await window.hubStorage.getItem('aurora-' + key); - if (typeof value === 'string') { - return JSON.parse(value); - } - } - - async set(key, value) { - window.hubStorage.setItem('aurora-' + key, JSON.stringify(value)); - } - - async remove(key) { - window.hubStorage.removeItem('aurora-' + key); - } - - async clear() { - window.hubStorage.clear(); - } -} - -class IFrameIndexedDbBackend { - constructor() { - this.impl = IMPL_IFRAME_INDEXED_DB; - } - - async ready() { - const iframe = document.createElement('iframe'); - iframe.style.display = 'none'; - iframe.src = Byond.storageCdn; - - const completePromise = new Promise((resolve) => { - iframe.onload = () => resolve(this); - }); - - this.documentElement = document.body.appendChild(iframe); - this.iframeWindow = this.documentElement.contentWindow; - - return completePromise; - } - - async get(key) { - const promise = new Promise((resolve) => { - window.addEventListener('message', (message) => { - if (message.data.key && message.data.key === key) { - resolve(message.data.value); - } - }); - }); - - this.iframeWindow.postMessage({ type: 'get', key: key }, '*'); - return promise; - } - - async set(key, value) { - this.iframeWindow.postMessage({ type: 'set', key: key, value: value }, '*'); - } - - async remove(key) { - this.iframeWindow.postMessage({ type: 'remove', key: key }, '*'); - } - - async clear() { - this.iframeWindow.postMessage({ type: 'clear' }, '*'); - } - - async ping() { - const promise = new Promise((resolve) => { - window.addEventListener('message', (message) => { - if (message.data === true) { - resolve(true); - } - }); - - setTimeout(() => resolve(false), 100); - }); - - this.iframeWindow.postMessage({ type: 'ping' }, '*'); - return promise; - } - - async processChatMessages(messages) { - this.iframeWindow.postMessage( - { type: 'processChatMessages', messages: messages }, - '*', - ); - } - - async getChatMessages() { - const promise = new Promise((resolve) => { - window.addEventListener('message', (message) => { - if (message.data.messages) { - resolve(message.data.messages); - } - }); - }); - - this.iframeWindow.postMessage({ type: 'getChatMessages' }, '*'); - return promise; - } - - async setNumberStored(number) { - this.iframeWindow.postMessage( - { type: 'setNumberStored', newMax: number }, - '*', - ); - } - - async destroy() { - document.body.removeChild(this.documentElement); - this.documentElement = null; - this.iframeWindow = null; - } -} - -class IndexedDbBackend { - // TODO: Remove with 516 - constructor() { - this.impl = IMPL_INDEXED_DB; - /** @type {Promise} */ - this.dbPromise = new Promise((resolve, reject) => { - const indexedDB = window.indexedDB || window.msIndexedDB; - const req = indexedDB.open(INDEXED_DB_NAME, INDEXED_DB_VERSION); - req.onupgradeneeded = () => { - try { - req.result.createObjectStore(INDEXED_DB_STORE_NAME); - } catch (err) { - reject(new Error('Failed to upgrade IDB: ' + req.error)); - } - }; - req.onsuccess = () => resolve(req.result); - req.onerror = () => { - reject(new Error('Failed to open IDB: ' + req.error)); - }; - }); - } - - async getStore(mode) { - // prettier-ignore - return this.dbPromise.then((db) => db - .transaction(INDEXED_DB_STORE_NAME, mode) - .objectStore(INDEXED_DB_STORE_NAME)); - } - - async get(key) { - const store = await this.getStore(READ_ONLY); - return new Promise((resolve, reject) => { - const req = store.get(key); - req.onsuccess = () => resolve(req.result); - req.onerror = () => reject(req.error); - }); - } - - async set(key, value) { - // NOTE: We deliberately make this operation transactionless - const store = await this.getStore(READ_WRITE); - store.put(value, key); - } - - async remove(key) { - // NOTE: We deliberately make this operation transactionless - const store = await this.getStore(READ_WRITE); - store.delete(key); - } - - async clear() { - // NOTE: We deliberately make this operation transactionless - const store = await this.getStore(READ_WRITE); - store.clear(); - } -} - -/** - * Web Storage Proxy object, which selects the best backend available - * depending on the environment. - */ -export class StorageProxy { - constructor() { - this.backendPromise = (async () => { - if (!Byond.TRIDENT) { - if (Byond.storageCdn) { - const iframe = new IFrameIndexedDbBackend(); - await iframe.ready(); - - if ((await iframe.ping()) === true) { - return iframe; - } - - iframe.destroy(); - } - - if (!testHubStorage()) { - Byond.winset(null, 'browser-options', '+byondstorage'); - - return new Promise((resolve) => { - const listener = () => { - document.removeEventListener('byondstorageupdated', listener); - resolve(new HubStorageBackend()); - }; - - document.addEventListener('byondstorageupdated', listener); - }); - } - return new HubStorageBackend(); - } - // TODO: Remove with 516 - if (testIndexedDb()) { - try { - const backend = new IndexedDbBackend(); - await backend.dbPromise; - return backend; - } catch {} - } - console.warn( - 'No supported storage backend found. Using in-memory storage.', - ); - return new MemoryBackend(); - })(); - } - - async get(key) { - const backend = await this.backendPromise; - return backend.get(key); - } - - async set(key, value) { - const backend = await this.backendPromise; - return backend.set(key, value); - } - - async remove(key) { - const backend = await this.backendPromise; - return backend.remove(key); - } - - async clear() { - const backend = await this.backendPromise; - return backend.clear(); - } -} - -export const storage = new StorageProxy(); diff --git a/tgui/packages/common/storage.ts b/tgui/packages/common/storage.ts new file mode 100644 index 00000000000..2af369fc71b --- /dev/null +++ b/tgui/packages/common/storage.ts @@ -0,0 +1,261 @@ +/** + * Browser-agnostic abstraction of key-value web storage. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +export const IMPL_MEMORY = 0; +export const IMPL_HUB_STORAGE = 1; +export const IMPL_IFRAME_INDEXED_DB = 2; + +type StorageImplementation = + | typeof IMPL_MEMORY + | typeof IMPL_HUB_STORAGE + | typeof IMPL_IFRAME_INDEXED_DB; + +type StorageBackend = { + impl: StorageImplementation; + get(key: string): Promise; + set(key: string, value: any): Promise; + remove(key: string): Promise; + clear(): Promise; +}; + +const testGeneric = (testFn: () => boolean) => (): boolean => { + try { + return Boolean(testFn()); + } catch { + return false; + } +}; + +const testHubStorage = testGeneric( + () => window.hubStorage && !!window.hubStorage.getItem, +); + +class MemoryBackend implements StorageBackend { + private store: Record; + public impl: StorageImplementation; + + constructor() { + this.impl = IMPL_MEMORY; + this.store = {}; + } + + async get(key: string): Promise { + return this.store[key]; + } + + async set(key: string, value: any): Promise { + this.store[key] = value; + } + + async remove(key: string): Promise { + this.store[key] = undefined; + } + + async clear(): Promise { + this.store = {}; + } +} + +class HubStorageBackend implements StorageBackend { + public impl: StorageImplementation; + + constructor() { + this.impl = IMPL_HUB_STORAGE; + } + + async get(key: string): Promise { + const value = await window.hubStorage.getItem(key); + if (typeof value === 'string') { + return JSON.parse(value); + } + return undefined; + } + + async set(key: string, value: any): Promise { + window.hubStorage.setItem(key, JSON.stringify(value)); + } + + async remove(key: string): Promise { + window.hubStorage.removeItem(key); + } + + async clear(): Promise { + window.hubStorage.clear(); + } +} + +class IFrameIndexedDbBackend implements StorageBackend { + public impl: StorageImplementation; + + private documentElement: HTMLIFrameElement; + private iframeWindow: Window; + + constructor() { + this.impl = IMPL_IFRAME_INDEXED_DB; + } + + async ready(): Promise { + const iframe = document.createElement('iframe'); + iframe.style.display = 'none'; + iframe.src = Byond.storageCdn; + + const completePromise: Promise = new Promise((resolve) => { + iframe.onload = () => resolve(true); + }); + + this.documentElement = document.body.appendChild(iframe); + if (!this.documentElement.contentWindow) { + return new Promise((res) => res(false)); + } + + this.iframeWindow = this.documentElement.contentWindow; + + return completePromise; + } + + async get(key: string): Promise { + const promise = new Promise((resolve) => { + window.addEventListener('message', (message) => { + if (message.data.key && message.data.key === key) { + resolve(message.data.value); + } + }); + }); + + this.iframeWindow.postMessage({ type: 'get', key: key }, '*'); + return promise; + } + + async set(key: string, value: any): Promise { + this.iframeWindow.postMessage({ type: 'set', key: key, value: value }, '*'); + } + + async remove(key: string): Promise { + this.iframeWindow.postMessage({ type: 'remove', key: key }, '*'); + } + + async clear(): Promise { + this.iframeWindow.postMessage({ type: 'clear' }, '*'); + } + + async ping(): Promise { + const promise: Promise = new Promise((resolve) => { + window.addEventListener('message', (message) => { + if (message.data === true) { + resolve(true); + } + }); + + setTimeout(() => resolve(false), 100); + }); + + this.iframeWindow.postMessage({ type: 'ping' }, '*'); + return promise; + } + + async destroy(): Promise { + document.body.removeChild(this.documentElement); + } +} + +/** + * Web Storage Proxy object, which selects the best backend available + * depending on the environment. + */ +class StorageProxy implements StorageBackend { + private backendPromise: Promise; + public impl: StorageImplementation = IMPL_MEMORY; + + constructor() { + this.backendPromise = (async () => { + if (testHubStorage()) { + return new HubStorageBackend(); + } + + if (Byond.storageCdn) { + const iframe = new IFrameIndexedDbBackend(); + const iframeReady = await iframe.ready(); + + if (iframeReady && (await iframe.ping()) === true) { + if (await iframe.get('byondstorage-migrated')) return iframe; + + Byond.winset(null, 'browser-options', '+byondstorage'); + + await new Promise((resolve) => { + document.addEventListener('byondstorageupdated', async () => { + setTimeout(() => { + const hub = new HubStorageBackend(); + + for (const setting of [ + 'panel-settings', + 'chat-state', + 'chat-messages', + ]) { + hub + .get(setting) + .then((settings) => iframe.set(setting, settings)); + } + + iframe.set('byondstorage-migrated', true); + Byond.winset(null, 'browser-options', '-byondstorage'); + + resolve(); + }, 1); + }); + }); + + return iframe; + } + + iframe.destroy(); + + } + + if (Byond.IS_BYOND) { + Byond.winset(null, 'browser-options', '+byondstorage'); + + return new Promise((resolve) => { + const listener = () => { + document.removeEventListener('byondstorageupdated', listener); + resolve(new HubStorageBackend()); + }; + + document.addEventListener('byondstorageupdated', listener); + }); + } + + console.warn( + 'No supported storage backend found. Using in-memory storage.', + ); + + return new MemoryBackend(); + })(); + } + + async get(key: string): Promise { + const backend = await this.backendPromise; + return backend.get(key); + } + + async set(key: string, value: any): Promise { + const backend = await this.backendPromise; + return backend.set(key, value); + } + + async remove(key: string): Promise { + const backend = await this.backendPromise; + return backend.remove(key); + } + + async clear(): Promise { + const backend = await this.backendPromise; + return backend.clear(); + } +} + +export const storage = new StorageProxy(); diff --git a/tgui/packages/common/string.babel-plugin.cjs b/tgui/packages/common/string.babel-plugin.cjs deleted file mode 100644 index 97ca67c6ea4..00000000000 --- a/tgui/packages/common/string.babel-plugin.cjs +++ /dev/null @@ -1,73 +0,0 @@ -/** - * This plugin saves overall about 10KB on the final bundle size, so it's - * sort of worth it. - * - * We are using a .cjs extension because: - * - * 1. Webpack CLI only supports CommonJS modules; - * 2. tgui-dev-server supports both, but we still need to signal NodeJS - * to import it as a CommonJS module, hence .cjs extension. - * - * We need to copy-paste the whole "multiline" function because we can't - * synchronously import an ES module from a CommonJS module. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Removes excess whitespace and indentation from the string. - */ -const multiline = (str) => { - const lines = str.split('\n'); - // Determine base indentation - let minIndent; - for (let line of lines) { - for (let indent = 0; indent < line.length; indent++) { - const char = line[indent]; - if (char !== ' ') { - if (minIndent === undefined || indent < minIndent) { - minIndent = indent; - } - break; - } - } - } - if (!minIndent) { - minIndent = 0; - } - // Remove this base indentation and trim the resulting string - // from both ends. - return lines - .map((line) => line.substr(minIndent).trimRight()) - .join('\n') - .trim(); -}; - -const StringPlugin = (ref) => { - return { - visitor: { - TaggedTemplateExpression: (path) => { - if (path.node.tag.name === 'multiline') { - const { quasi } = path.node; - if (quasi.expressions.length > 0) { - throw new Error('Multiline tag does not support expressions!'); - } - if (quasi.quasis.length > 1) { - throw new Error('Quasis is longer than 1'); - } - const { value } = quasi.quasis[0]; - value.raw = multiline(value.raw); - value.cooked = multiline(value.cooked); - path.replaceWith(quasi); - } - }, - }, - }; -}; - -module.exports = { - __esModule: true, - default: StringPlugin, -}; diff --git a/tgui/packages/common/string.js b/tgui/packages/common/string.js deleted file mode 100644 index 5906d83cb84..00000000000 --- a/tgui/packages/common/string.js +++ /dev/null @@ -1,196 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Removes excess whitespace and indentation from the string. - */ -export const multiline = (str) => { - if (Array.isArray(str)) { - // Small stub to allow usage as a template tag - return multiline(str.join('')); - } - const lines = str.split('\n'); - // Determine base indentation - let minIndent; - for (let line of lines) { - for (let indent = 0; indent < line.length; indent++) { - const char = line[indent]; - if (char !== ' ') { - if (minIndent === undefined || indent < minIndent) { - minIndent = indent; - } - break; - } - } - } - if (!minIndent) { - minIndent = 0; - } - // Remove this base indentation and trim the resulting string - // from both ends. - return lines - .map((line) => line.substr(minIndent).trimRight()) - .join('\n') - .trim(); -}; - -/** - * Creates a glob pattern matcher. - * - * Matches strings with wildcards. - * - * Example: createGlobPattern('*@domain')('user@domain') === true - */ -export const createGlobPattern = (pattern) => { - const escapeString = (str) => str.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&'); - // prettier-ignore - const regex = new RegExp('^' - + pattern.split(/\*+/).map(escapeString).join('.*') - + '$'); - return (str) => regex.test(str); -}; - -/** - * Creates a search terms matcher. - * - * Returns true if given string matches the search text. - * - * @template T - * @param {string} searchText - * @param {(obj: T) => string} stringifier - * @returns {(obj: T) => boolean} - */ -export const createSearch = (searchText, stringifier) => { - const preparedSearchText = searchText.toLowerCase().trim(); - return (obj) => { - if (!preparedSearchText) { - return true; - } - const str = stringifier ? stringifier(obj) : obj; - if (!str) { - return false; - } - return str.toLowerCase().includes(preparedSearchText); - }; -}; - -/** - * Capitalizes a word and lowercases the rest. - * @param {string} str - * @returns {string} capitalized string - * - * @example capitalize('heLLo') === 'Hello' - */ -export const capitalize = (str) => { - // Handle array - if (Array.isArray(str)) { - return str.map(capitalize); - } - // Handle string - return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); -}; - -/** - * Similar to capitalize, this takes a string and replaces all first letters - * of any words. - * - * @param {string} str - * @return {string} The string with the first letters capitalized. - * - * @example capitalizeAll('heLLo woRLd') === 'HeLLo WoRLd' - */ -export const capitalizeAll = (str) => { - return str.replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase()); -}; - -/** - * Capitalizes only the first letter of the str. - * - * @param {string} str - * @return {string} capitalized string - * - * @example capitalizeFirst('heLLo woRLd') === 'HeLLo woRLd' - */ -export const capitalizeFirst = (str) => { - return str.replace(/^\w/, (letter) => letter.toUpperCase()); -}; - -export const toTitleCase = (str) => { - // Handle array - if (Array.isArray(str)) { - return str.map(toTitleCase); - } - // Pass non-string - if (typeof str !== 'string') { - return str; - } - // Handle string - const WORDS_UPPER = ['Id', 'Tv']; - // prettier-ignore - const WORDS_LOWER = [ - 'A', 'An', 'And', 'As', 'At', 'But', 'By', 'For', 'For', 'From', 'In', - 'Into', 'Near', 'Nor', 'Of', 'On', 'Onto', 'Or', 'The', 'To', 'With', - ]; - let currentStr = str.replace(/([^\W_]+[^\s-]*) */g, (str) => { - return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase(); - }); - for (let word of WORDS_LOWER) { - const regex = new RegExp('\\s' + word + '\\s', 'g'); - currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); - } - for (let word of WORDS_UPPER) { - const regex = new RegExp('\\b' + word + '\\b', 'g'); - currentStr = currentStr.replace(regex, (str) => str.toLowerCase()); - } - return currentStr; -}; - -/** - * Decodes HTML entities, and removes unnecessary HTML tags. - * - * @param {String} str Encoded HTML string - * @return {String} Decoded HTML string - */ -export const decodeHtmlEntities = (str) => { - if (!str) { - return str; - } - const translate_re = /&(nbsp|amp|quot|lt|gt|apos);/g; - const translate = { - nbsp: ' ', - amp: '&', - quot: '"', - lt: '<', - gt: '>', - apos: "'", - }; - // prettier-ignore - return str - // Newline tags - .replace(/
    /gi, '\n') - .replace(/<\/?[a-z0-9-_]+[^>]*>/gi, '') - // Basic entities - .replace(translate_re, (match, entity) => translate[entity]) - // Decimal entities - .replace(/&#?([0-9]+);/gi, (match, numStr) => { - const num = parseInt(numStr, 10); - return String.fromCharCode(num); - }) - // Hex entities - .replace(/&#x?([0-9a-f]+);/gi, (match, numStr) => { - const num = parseInt(numStr, 16); - return String.fromCharCode(num); - }); -}; - -/** - * Converts an object into a query string, - */ -// prettier-ignore -export const buildQueryString = obj => Object.keys(obj) - .map(key => encodeURIComponent(key) - + '=' + encodeURIComponent(obj[key])) - .join('&'); diff --git a/tgui/packages/common/timer.js b/tgui/packages/common/timer.js deleted file mode 100644 index 715b713e027..00000000000 --- a/tgui/packages/common/timer.js +++ /dev/null @@ -1,58 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Returns a function, that, as long as it continues to be invoked, will - * not be triggered. The function will be called after it stops being - * called for N milliseconds. If `immediate` is passed, trigger the - * function on the leading edge, instead of the trailing. - */ -export const debounce = (fn, time, immediate = false) => { - let timeout; - return (...args) => { - const later = () => { - timeout = null; - if (!immediate) { - fn(...args); - } - }; - const callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, time); - if (callNow) { - fn(...args); - } - }; -}; - -/** - * Returns a function, that, when invoked, will only be triggered at most once - * during a given window of time. - */ -export const throttle = (fn, time) => { - let previouslyRun, queuedToRun; - return function invokeFn(...args) { - const now = Date.now(); - queuedToRun = clearTimeout(queuedToRun); - if (!previouslyRun || now - previouslyRun >= time) { - fn.apply(null, args); - previouslyRun = now; - } else { - queuedToRun = setTimeout( - invokeFn.bind(null, ...args), - time - (now - previouslyRun), - ); - } - }; -}; - -/** - * Suspends an asynchronous function for N milliseconds. - * - * @param {number} time - */ -export const sleep = (time) => - new Promise((resolve) => setTimeout(resolve, time)); diff --git a/tgui/packages/common/type-safety.test.ts b/tgui/packages/common/type-safety.test.ts new file mode 100644 index 00000000000..f572a19781d --- /dev/null +++ b/tgui/packages/common/type-safety.test.ts @@ -0,0 +1,53 @@ +import { describe, it } from 'bun:test'; +import assert from 'node:assert/strict'; +import * as z from 'zod'; +import { smoothMerge } from './type-safety'; + +describe('smoothMerge', () => { + it('merges valid fields from source into target', () => { + const schema = z.object({ + a: z.string(), + b: z.number(), + }); + + const source = { a: 'hello', b: 'not a number', c: true }; + const target = { a: 'default', b: 42 }; + + const result = smoothMerge({ schema, source, target }); + assert.deepEqual(result, { a: 'hello', b: 42 }); + }); + + it('returns target if source is empty', () => { + const schema = z.object({ + a: z.string(), + }); + + const source = {}; + const target = { a: 'default' }; + const result = smoothMerge({ schema, source, target }); + assert.deepEqual(result, target); + }); + + it('completely ignores an object if its not in the schema', () => { + const schema = z.object({ + a: z.string(), + b: z.number(), + }); + + const source = { + c: 1, + d: [1, 2, 3], + }; + + const target = { + a: 'default', + b: 42, + }; + + const result = smoothMerge({ schema, source, target }); + assert.deepEqual(result, { + a: 'default', + b: 42, + }); + }); +}); diff --git a/tgui/packages/common/type-safety.ts b/tgui/packages/common/type-safety.ts new file mode 100644 index 00000000000..71e1c6aa568 --- /dev/null +++ b/tgui/packages/common/type-safety.ts @@ -0,0 +1,56 @@ +import type { ZodObject } from 'zod'; + +type MergeInput = { + /** + * A zod object. + * @see Writing a Zod Schema: https://zod.dev/basics + */ + schema: ZodObject; + /** The input getting merged */ + source: Record; + /** The defaults, which is the shape of the output */ + target: TObj; +}; + +/** + * Merges two objects together while validating the output against a zod schema. + * Different than just parsing - it does not throw errors, it simply discards + * invalid fields and invalid value types. + * + * @example + * + * ```ts + * const schema = z.object({ + * a: z.string(), + * b: z.number(), + * }); + * + * const source = { a: 'hello', b: 'not a number', c: true }; + * const target = { a: 'default', b: 42 }; + * + * const result = smoothMerge({ schema, source, target }); + * // result is { a: 'hello', b: 42 } + * ``` + */ +export function smoothMerge>( + input: MergeInput, +): TObj { + if (Object.keys(input.source).length === 0) return input.target; + + const validated = {}; + + for (const [key, value] of Object.entries(input.source)) { + // Skip keys that are not in the schema + if (!(key in input.schema.shape)) continue; + + const fieldSchema = input.schema.shape[key]; + const result = fieldSchema.safeParse(value); + + // Only assign fields which pass validation + if (result.success) { + validated[key] = result.data; + } + } + + return { ...input.target, ...validated }; +} diff --git a/tgui/packages/common/types.ts b/tgui/packages/common/types.ts deleted file mode 100644 index e219bd3b7e1..00000000000 --- a/tgui/packages/common/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Returns the arguments of a function F as an array. - */ -// prettier-ignore -export type ArgumentsOf - = F extends (...args: infer A) => unknown ? A : never; diff --git a/tgui/packages/common/uuid.js b/tgui/packages/common/uuid.js deleted file mode 100644 index 33d765fcab0..00000000000 --- a/tgui/packages/common/uuid.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -/** - * Creates a UUID v4 string - * - * @return {string} - */ -export const createUuid = () => { - let d = new Date().getTime(); - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => { - const r = ((d + Math.random() * 16) % 16) | 0; - d = Math.floor(d / 16); - // prettier-ignore - return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16); - }); -}; diff --git a/tgui/packages/common/vector.js b/tgui/packages/common/vector.js deleted file mode 100644 index b1f85f7429d..00000000000 --- a/tgui/packages/common/vector.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * N-dimensional vector manipulation functions. - * - * Vectors are plain number arrays, i.e. [x, y, z]. - * - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { map, reduce, zipWith } from './collections'; - -const ADD = (a, b) => a + b; -const SUB = (a, b) => a - b; -const MUL = (a, b) => a * b; -const DIV = (a, b) => a / b; - -export const vecAdd = (...vecs) => { - return reduce((a, b) => zipWith(ADD)(a, b))(vecs); -}; - -export const vecSubtract = (...vecs) => { - return reduce((a, b) => zipWith(SUB)(a, b))(vecs); -}; - -export const vecMultiply = (...vecs) => { - return reduce((a, b) => zipWith(MUL)(a, b))(vecs); -}; - -export const vecDivide = (...vecs) => { - return reduce((a, b) => zipWith(DIV)(a, b))(vecs); -}; - -export const vecScale = (vec, n) => { - return map((x) => x * n)(vec); -}; - -export const vecInverse = (vec) => { - return map((x) => -x)(vec); -}; - -export const vecLength = (vec) => { - return Math.sqrt(reduce(ADD)(zipWith(MUL)(vec, vec))); -}; - -export const vecNormalize = (vec) => { - return vecDivide(vec, vecLength(vec)); -}; diff --git a/tgui/packages/common/vector.ts b/tgui/packages/common/vector.ts new file mode 100644 index 00000000000..78d22c35d11 --- /dev/null +++ b/tgui/packages/common/vector.ts @@ -0,0 +1,55 @@ +/** + * N-dimensional vector manipulation functions. + * + * Vectors are plain number arrays, i.e. [x, y, z]. + * + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { zip } from 'es-toolkit'; +import { map, reduce } from 'es-toolkit/compat'; + +const ADD = (a: number, b: number): number => a + b; +const SUB = (a: number, b: number): number => a - b; +const MUL = (a: number, b: number): number => a * b; +const DIV = (a: number, b: number): number => a / b; + +export type Vector = number[]; + +// It's really not ideal to bypass the type system and use `as Vector` +// however, there isn't a more eloquent way to type these + +export const vecAdd = (...vecs: Vector[]): Vector => { + return map(zip(...vecs) as Vector[], (x) => reduce(x, ADD)) as Vector; +}; + +export const vecSubtract = (...vecs: Vector[]): Vector => { + return map(zip(...vecs) as Vector[], (x) => reduce(x, SUB)) as Vector; +}; + +export const vecMultiply = (...vecs: Vector[]): Vector => { + return map(zip(...vecs) as Vector[], (x) => reduce(x, MUL)) as Vector; +}; + +export const vecDivide = (...vecs: Vector[]): Vector => { + return map(zip(...vecs) as Vector[], (x) => reduce(x, DIV)) as Vector; +}; + +export const vecScale = (vec: Vector, n: number): Vector => { + return map(vec, (x) => x * n); +}; + +export const vecInverse = (vec: Vector): Vector => { + return map(vec, (x) => -x); +}; + +export const vecLength = (vec: Vector): number => { + return Math.sqrt(reduce(vecMultiply(vec, vec), ADD) as number); +}; + +export const vecNormalize = (vec: Vector): Vector => { + const length = vecLength(vec); + return map(vec, (c) => c / length); +}; diff --git a/tgui/packages/tgfont/README_ICON_TUTORIAL.txt b/tgui/packages/tgfont/README_ICON_TUTORIAL.md similarity index 100% rename from tgui/packages/tgfont/README_ICON_TUTORIAL.txt rename to tgui/packages/tgfont/README_ICON_TUTORIAL.md diff --git a/tgui/packages/tgfont/config.cjs b/tgui/packages/tgfont/config.cjs deleted file mode 100644 index 73d96ac6ce9..00000000000 --- a/tgui/packages/tgfont/config.cjs +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @file - * @copyright 2021 AnturK https://github.com/AnturK - * @license MIT - */ - -module.exports = { - name: 'tgfont', - inputDir: './icons', - normalize: true, - outputDir: './dist', - fontTypes: ['woff2', 'eot'], - assetTypes: ['css'], - prefix: 'tg', - formatOptions: { - preserveAspectRatio: true, - }, -}; diff --git a/tgui/packages/tgfont/icons/air-tank-slash.svg b/tgui/packages/tgfont/icons/air-tank-slash.svg index 37ffcb5b880..8c33265f334 100644 --- a/tgui/packages/tgfont/icons/air-tank-slash.svg +++ b/tgui/packages/tgfont/icons/air-tank-slash.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/air-tank.svg b/tgui/packages/tgfont/icons/air-tank.svg index 7d1e0774719..b55f4e7b3aa 100644 --- a/tgui/packages/tgfont/icons/air-tank.svg +++ b/tgui/packages/tgfont/icons/air-tank.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/bad-touch.svg b/tgui/packages/tgfont/icons/bad-touch.svg index 795f4c2d840..dba8df87497 100644 --- a/tgui/packages/tgfont/icons/bad-touch.svg +++ b/tgui/packages/tgfont/icons/bad-touch.svg @@ -1,46 +1 @@ - -image/svg+xml - - - - - - - - - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/image-minus.svg b/tgui/packages/tgfont/icons/image-minus.svg index 8c3231917ff..6fb74bd54fb 100644 --- a/tgui/packages/tgfont/icons/image-minus.svg +++ b/tgui/packages/tgfont/icons/image-minus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/image-plus.svg b/tgui/packages/tgfont/icons/image-plus.svg index 1658509429e..e8b9bec62e7 100644 --- a/tgui/packages/tgfont/icons/image-plus.svg +++ b/tgui/packages/tgfont/icons/image-plus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/nanotrasen-logo.svg b/tgui/packages/tgfont/icons/nanotrasen-logo.svg index b74a415d4d2..7cdc98573f4 100644 --- a/tgui/packages/tgfont/icons/nanotrasen-logo.svg +++ b/tgui/packages/tgfont/icons/nanotrasen-logo.svg @@ -1,3 +1 @@ - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/non-binary.svg b/tgui/packages/tgfont/icons/non-binary.svg index c708c26d985..c2178ec1b36 100644 --- a/tgui/packages/tgfont/icons/non-binary.svg +++ b/tgui/packages/tgfont/icons/non-binary.svg @@ -1,44 +1 @@ - -image/svg+xml - - - - - - - - - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/prosthetic-full.svg b/tgui/packages/tgfont/icons/prosthetic-full.svg index 7d221244edc..f9054947044 100644 --- a/tgui/packages/tgfont/icons/prosthetic-full.svg +++ b/tgui/packages/tgfont/icons/prosthetic-full.svg @@ -1,27 +1 @@ - -image/svg+xml - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/prosthetic-leg.svg b/tgui/packages/tgfont/icons/prosthetic-leg.svg index f4e16dccfb6..9db9fb5cde4 100644 --- a/tgui/packages/tgfont/icons/prosthetic-leg.svg +++ b/tgui/packages/tgfont/icons/prosthetic-leg.svg @@ -1,35 +1 @@ - -image/svg+xml - - - - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/sound-minus.svg b/tgui/packages/tgfont/icons/sound-minus.svg index df51179d4b5..1da5d4fa5b0 100644 --- a/tgui/packages/tgfont/icons/sound-minus.svg +++ b/tgui/packages/tgfont/icons/sound-minus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/sound-plus.svg b/tgui/packages/tgfont/icons/sound-plus.svg index c5f40d53b56..33be2c9176f 100644 --- a/tgui/packages/tgfont/icons/sound-plus.svg +++ b/tgui/packages/tgfont/icons/sound-plus.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/tgui/packages/tgfont/icons/syndicate-logo.svg b/tgui/packages/tgfont/icons/syndicate-logo.svg index 423dd7c6275..8086d3319a1 100644 --- a/tgui/packages/tgfont/icons/syndicate-logo.svg +++ b/tgui/packages/tgfont/icons/syndicate-logo.svg @@ -1,13 +1 @@ - - - - - - image/svg+xml - - - - - - - + \ No newline at end of file diff --git a/tgui/packages/tgfont/mkdist.cjs b/tgui/packages/tgfont/mkdist.cjs deleted file mode 100644 index 85634bd265d..00000000000 --- a/tgui/packages/tgfont/mkdist.cjs +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @file - * @copyright 2021 AnturK https://github.com/AnturK - * @license MIT - */ - -// Change working directory to project root -process.chdir(__dirname); - -// Silently make a dist folder -try { - require('fs').mkdirSync('dist'); -} catch (err) {} diff --git a/tgui/packages/tgfont/package.json b/tgui/packages/tgfont/package.json index 9459aa12969..e98f7aa5b43 100644 --- a/tgui/packages/tgfont/package.json +++ b/tgui/packages/tgfont/package.json @@ -1,11 +1,13 @@ { - "private": true, - "name": "tgfont", - "version": "1.0.0", - "scripts": { - "tgfont:build": "node mkdist.cjs && fantasticon --config config.cjs" - }, - "dependencies": { - "fantasticon": "^1.2.2" - } + "private": true, + "name": "tgfont", + "type": "module", + "version": "2.0.0", + "scripts": { + "tgfont:build": "svgo icons && node svgtofont.mjs" + }, + "dependencies": { + "svgo": "^3.3.2", + "svgtofont": "^6.3.2" + } } diff --git a/tgui/packages/tgfont/static/tgfont.css b/tgui/packages/tgfont/static/tgfont.css index 3af3e9bbe02..6bdf310a502 100644 --- a/tgui/packages/tgfont/static/tgfont.css +++ b/tgui/packages/tgfont/static/tgfont.css @@ -1,56 +1,67 @@ @font-face { - font-family: 'tgfont'; - src: - url('./tgfont.woff2?ac4105718bed41e8015b97ba87c9ec71') format('woff2'), - url('./tgfont.eot?ac4105718bed41e8015b97ba87c9ec71#iefix') - format('embedded-opentype'); + font-family: "tgfont"; + src: url("tgfont.woff2?t=1747971548188") format("woff2"); } -i[class^='tg-']:before, -i[class*=' tg-']:before { - font-family: tgfont !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; +[class^="tg-"], +[class*=" tg-"] { + /* biome-ignore lint/complexity/noImportantStyles: Just leave it */ + font-family: "tgfont" !important; + font-size: inherit; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } -.tg-air-tank-slash:before { - content: '\f101'; +:root { + /* biome-ignore-start lint/suspicious/noUselessEscapeInString: The escapes are needed */ + --tg-air-tank-slash: "\ea01"; + --tg-air-tank: "\ea02"; + --tg-bad-touch: "\ea03"; + --tg-image-minus: "\ea04"; + --tg-image-plus: "\ea05"; + --tg-nanotrasen-logo: "\ea06"; + --tg-non-binary: "\ea07"; + --tg-prosthetic-full: "\ea08"; + --tg-prosthetic-leg: "\ea09"; + --tg-sound-minus: "\ea0a"; + --tg-sound-plus: "\ea0b"; + --tg-syndicate-logo: "\ea0c"; + /* biome-ignore-end lint/suspicious/noUselessEscapeInString: The escapes are needed */ } -.tg-air-tank:before { - content: '\f102'; +.tg-air-tank-slash::before { + content: var(--tg-air-tank-slash); } -.tg-bad-touch:before { - content: '\f103'; +.tg-air-tank::before { + content: var(--tg-air-tank); } -.tg-image-minus:before { - content: '\f104'; +.tg-bad-touch::before { + content: var(--tg-bad-touch); } -.tg-image-plus:before { - content: '\f105'; +.tg-image-minus::before { + content: var(--tg-image-minus); } -.tg-nanotrasen-logo:before { - content: '\f106'; +.tg-image-plus::before { + content: var(--tg-image-plus); } -.tg-non-binary:before { - content: '\f107'; +.tg-nanotrasen-logo::before { + content: var(--tg-nanotrasen-logo); } -.tg-prosthetic-full:before { - content: '\f108'; +.tg-non-binary::before { + content: var(--tg-non-binary); } -.tg-prosthetic-leg:before { - content: '\f109'; +.tg-prosthetic-full::before { + content: var(--tg-prosthetic-full); } -.tg-sound-minus:before { - content: '\f10a'; +.tg-prosthetic-leg::before { + content: var(--tg-prosthetic-leg); } -.tg-sound-plus:before { - content: '\f10b'; +.tg-sound-minus::before { + content: var(--tg-sound-minus); } -.tg-syndicate-logo:before { - content: '\f10c'; +.tg-sound-plus::before { + content: var(--tg-sound-plus); +} +.tg-syndicate-logo::before { + content: var(--tg-syndicate-logo); } diff --git a/tgui/packages/tgfont/static/tgfont.eot b/tgui/packages/tgfont/static/tgfont.eot deleted file mode 100644 index 9b08d348391680c701c025db4d1e35df1b4acf74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4292 zcmd^CU2J1V6`q+pGxyKF_KkmT;y8}i&f003I2${*+ucpJs>OGsKSWQd<2x|sKU;j5BfK1pN#I?w`CF?#{mdue7Ifjv&=Ypgbv&jz8$g#5z zK6GdH>qnme@itH|-1p#YdEsy8eungsH*yK{C(uuC zG#=lim_b~`*P&u`@{}reDUb3JBmrQn7hZGq%-ImgD^obdSS8wiYh927Jh{6 zsV<5dx8T%8!cLz#cY!#qMz2j$g!`kx_(7bu)>j+8G&PfgPmNMgD3Lyf9xc%4hye0D z`88-$gZ4QD`5vXje(qrGP&vPH*D`s%Px~R?x>48?ta6=;mLOHZ&fXq<8Z7``+auS& z@>jrb_jc(5=m7GTKMi^yD+o~@hOYDxUnU{TpepIpXyFmiIZ^qdECRhBf>hF{szyJs zl7W}QGD&n;Y+{~`WF%Bs{{LR!2b7onT5VDIE&$(~$h^MFKGh-`3RG13@T&sl-##Lx zKxIxJ9#x=ns;>tCpOZfFSb@sGz8L`GK>CQF0u{-=9ROm3CLpn{LrvGA} zV9&B&Xv^9Q+PnNIB^z;^qEo;kWQ^QOW^mY)38{O!%oXNOQN38Nm6P#$VV35KGCod| z<=T8P>99h*c8b>Oi{Jo{r>9RicFqgE`|ab;hmH&v4L4<5oYys5e^NJ6p)l9NOd3+2 zq2_I|cVZ8paKa-Kp~t^_{QIGie8!B8YTV){xM5EkV?F0W85 z)J{;vek;w%i004?Jw+D*^JTEg3{|e4rS+tznCPS)3x{LjPeoISv`*8LquKDCqxXxG z@rP5V-Csq$DE`$#USsSu*LB{|Lo8;^Nu62ZHr=8^qmIXfZLyTbN5aJ^q09I6aLjRH zyExeR|i1Aj!wFqtA1atAz;&&e?wPbyOv=zO7=$X6>cFsbJX3lxJ1cYjbv z%BlRTdHE{xZ=CuS-C4#mTvb1~n+txNpBLt~Gz|H3X}kmthojM_zT+{;yaiRg!nvyn zp}Cx&;&+2RZHn`T+8boGHDH&Lh z*w?i3KihId@F*8Yltnktk7id+S(SrfnmB-dL>o1gtN3D0lW|0*iZ~r|z30cL>h7Cd zEQk_v5kX6iQIVkzMUo<3)P9sp$3daXnwIF$?V*&42ZB5H}m<=c70glMKY(UC$5XFWYFb*e>- z`-Nd@v54k{lT2tKOEQf+l-nVVk4Y+ZTV{mD9Ii2LT1;cYW$N=6-1}g$PGTevkLlMp zs+U}(IBZJPyG{yr?6vum>KHgV&qIb0`pNZ^g|c}=UXaGTpoV-y8nkia6gjX?p430$ z$?ze%(CUpHe_-?f^pHxg1Y6r*{rWEF{L)S8sXGD6Tey3l!)f(ta*2Enx4bnxD3G@f zO~f-i5l6&Jw3tsI9~K$Bfjq!(zFy0yJgQU+MWlyUi6gI&CPico_-pm*BCS@ca9(1c ztAwwR)W?x+sx5j!``OW{q@P zGiGu@85&d?Grde*!?;~V^izzAm}&A+#`tAZ^%@{-!FdGKz94sH8eIsEO;3O+z$H9pW_Bw`O{c_M2t9G}u-CiCD3~(jT>0WIwuP-66zC1$y1M*uO>;M1& diff --git a/tgui/packages/tgfont/static/tgfont.woff2 b/tgui/packages/tgfont/static/tgfont.woff2 index d443fb92c91378605fdae10ae5c1c308e61a187b..2586080a0d9b8da3491d4c1e47d2d89ec441f7e5 100644 GIT binary patch literal 2472 zcmV;Z30L-aPew8T0RR91012o73jhEB01`w100~$C0RR9100000000000000000000 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 diff --git a/tgui/packages/tgfont/svgtofont.mjs b/tgui/packages/tgfont/svgtofont.mjs new file mode 100644 index 00000000000..6f5c5a3fb24 --- /dev/null +++ b/tgui/packages/tgfont/svgtofont.mjs @@ -0,0 +1,20 @@ +import svgtofont from 'svgtofont'; + +/** @type {import('svgtofont').SvgToFontOptions} */ +const config = { + classNamePrefix: 'tg', + css: { + include: /\.css$/, + }, + dist: './dist', + emptyDist: true, + excludeFormat: ['eot', 'svg', 'symbol.svg', 'ttf', 'woff'], + fontName: 'tgfont', + src: './icons', + svgicons2svgfont: { + normalize: true, + }, + useCSSVars: true, +}; + +svgtofont(config).catch(console.error); diff --git a/tgui/packages/tgui-bench/entrypoint.tsx b/tgui/packages/tgui-bench/entrypoint.tsx deleted file mode 100644 index 377848fe3ae..00000000000 --- a/tgui/packages/tgui-bench/entrypoint.tsx +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @file - * @copyright 2021 Aleksej Komarov - * @license MIT - */ - -import { setupGlobalEvents } from 'tgui/events'; -import 'tgui/styles/main.scss'; -import Benchmark from './lib/benchmark'; - -const sendMessage = (obj: any) => { - const req = new XMLHttpRequest(); - req.open('POST', `/message`, false); - req.setRequestHeader('Content-Type', 'application/json;charset=UTF-8'); - req.timeout = 250; - req.send(JSON.stringify(obj)); -}; - -const setupApp = async () => { - // Delay setup - if (document.readyState === 'loading') { - document.addEventListener('DOMContentLoaded', setupApp); - return; - } - - setupGlobalEvents({ - ignoreWindowFocus: true, - }); - - const requireTest = require.context('./tests', false, /\.test\./); - - for (const file of requireTest.keys()) { - sendMessage({ type: 'suite-start', file }); - try { - const tests = requireTest(file); - await new Promise((resolve) => { - const suite = new Benchmark.Suite(file, { - onCycle(e) { - sendMessage({ - type: 'suite-cycle', - message: String(e.target), - }); - }, - onComplete() { - // This message is somewhat useless, but leaving it here in case - // someone has an idea how to show more useful data. - // sendMessage({ - // type: 'suite-complete', - // message: 'Fastest is ' + this.filter('fastest').map('name'), - // }); - resolve(); - }, - onError(e) { - sendMessage({ type: 'error', e }); - resolve(); - }, - }); - for (const [name, fn] of Object.entries(tests)) { - if (typeof fn === 'function') { - suite.add(name, fn); - } - } - suite.run(); - }); - } catch (error) { - sendMessage({ type: 'error', error }); - } - } - sendMessage({ type: 'finished' }); -}; - -setupApp(); diff --git a/tgui/packages/tgui-bench/index.js b/tgui/packages/tgui-bench/index.js deleted file mode 100644 index 9f6aee20996..00000000000 --- a/tgui/packages/tgui-bench/index.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * @file - * @copyright 2021 Aleksej Komarov - * @license MIT - */ - -const fs = require('fs'); -const path = require('path'); -const { exec } = require('child_process'); -const { fastify } = require('fastify'); - -process.chdir(__dirname); - -const sleep = (time) => new Promise((resolve) => setTimeout(resolve, time)); - -const IE_TIMEOUT_SECONDS = 60; - -const setup = async () => { - const server = fastify(); - - let hasResponded = false; - - let assets = ''; - assets += `\n`; - - const publicDir = path.resolve(__dirname, '../../public'); - const page = fs - .readFileSync(path.join(publicDir, 'tgui.html'), 'utf-8') - .replace('\n', assets); - - server.register(require('fastify-static'), { - root: publicDir, - }); - - server.get('/', async (req, res) => { - return res.type('text/html').send(page); - }); - - server.post('/message', async (req, res) => { - if (!hasResponded) { - process.stdout.write('\n'); - hasResponded = true; - } - const { type, ...rest } = req.body; - if (type === 'suite-start') { - console.log(`=> Test '${rest.file}'`); - return res.send(); - } - if (type === 'suite-cycle') { - console.log(rest.message); - return res.send(); - } - if (type === 'suite-complete') { - console.log(rest.message); - return res.send(); - } - if (type === 'finished') { - await res.send(); - process.exit(0); - } - // Unhandled message - console.log(req.body); - return res.send(); - }); - - try { - await server.listen(3002, '0.0.0.0'); - } catch (err) { - console.error(err); - process.exit(1); - } - - if (process.platform === 'win32') { - exec(`start "" "iexplore" "http://127.0.0.1:3002"`); - } - - console.log('Waiting for Internet Explorer to respond.'); - for (let i = 0; i < IE_TIMEOUT_SECONDS; i++) { - await sleep(1000); - if (hasResponded) { - return; - } - process.stdout.write('.'); - } - process.stdout.write('\n'); - console.error('Did not receive a response, exiting.'); - process.exit(1); -}; - -setup(); diff --git a/tgui/packages/tgui-bench/lib/benchmark.d.ts b/tgui/packages/tgui-bench/lib/benchmark.d.ts deleted file mode 100644 index 3eac568d418..00000000000 --- a/tgui/packages/tgui-bench/lib/benchmark.d.ts +++ /dev/null @@ -1,219 +0,0 @@ -/* eslint-disable */ -// Type definitions for Benchmark v2.1.4 -// Project: https://benchmarkjs.com -// Definitions by: Asana -// Charlie Fish -// Blair Zajac -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -declare class Benchmark { - static filter(arr: T[], callback: (value: T) => any, thisArg?: any): T[]; - static filter(arr: T[], filter: string, thisArg?: any): T[]; - static formatNumber(num: number): string; - static join(obj: Object, separator1?: string, separator2?: string): string; - static invoke( - benches: Benchmark[], - name: string | Object, - ...args: any[] - ): any[]; - static runInContext(context: Object): Function; - - static each(obj: Object | any[], callback: Function, thisArg?: any): void; - static forEach(arr: T[], callback: (value: T) => any, thisArg?: any): void; - static forOwn(obj: Object, callback: Function, thisArg?: any): void; - static has(obj: Object, path: any[] | string): boolean; - static indexOf(arr: T[], value: T, fromIndex?: number): number; - static map(arr: T[], callback: (value: T) => K, thisArg?: any): K[]; - static reduce( - arr: T[], - callback: (accumulator: K, value: T) => K, - thisArg?: any, - ): K; - - static options: Benchmark.Options; - static platform: Benchmark.Platform; - static support: Benchmark.Support; - static version: string; - - constructor(fn: Function | string, options?: Benchmark.Options); - constructor(name: string, fn: Function | string, options?: Benchmark.Options); - constructor(name: string, options?: Benchmark.Options); - constructor(options: Benchmark.Options); - - id: number; - name: string; - count: number; - cycles: number; - hz: number; - compiled: Function | string; - error: Error; - fn: Function | string; - aborted: boolean; - running: boolean; - setup: Function | string; - teardown: Function | string; - - stats: Benchmark.Stats; - times: Benchmark.Times; - - abort(): Benchmark; - clone(options: Benchmark.Options): Benchmark; - compare(benchmark: Benchmark): number; - emit(type: string | Object): any; - listeners(type: string): Function[]; - off(type?: string, listener?: Function): Benchmark; - off(types: string[]): Benchmark; - on(type?: string, listener?: Function): Benchmark; - on(types: string[]): Benchmark; - reset(): Benchmark; - run(options?: Benchmark.Options): Benchmark; - toString(): string; -} - -declare namespace Benchmark { - export interface Options { - async?: boolean | undefined; - defer?: boolean | undefined; - delay?: number | undefined; - id?: string | undefined; - initCount?: number | undefined; - maxTime?: number | undefined; - minSamples?: number | undefined; - minTime?: number | undefined; - name?: string | undefined; - onAbort?: Function | undefined; - onComplete?: Function | undefined; - onCycle?: Function | undefined; - onError?: Function | undefined; - onReset?: Function | undefined; - onStart?: Function | undefined; - setup?: Function | string | undefined; - teardown?: Function | string | undefined; - fn?: Function | string | undefined; - queued?: boolean | undefined; - } - - export interface Platform { - description: string; - layout: string; - product: string; - name: string; - manufacturer: string; - os: string; - prerelease: string; - version: string; - toString(): string; - } - - export interface Support { - browser: boolean; - timeout: boolean; - decompilation: boolean; - } - - export interface Stats { - moe: number; - rme: number; - sem: number; - deviation: number; - mean: number; - sample: any[]; - variance: number; - } - - export interface Times { - cycle: number; - elapsed: number; - period: number; - timeStamp: number; - } - - export class Deferred { - constructor(clone: Benchmark); - - benchmark: Benchmark; - cycles: number; - elapsed: number; - timeStamp: number; - - resolve(): void; - } - - export interface Target { - options: Options; - async?: boolean | undefined; - defer?: boolean | undefined; - delay?: number | undefined; - initCount?: number | undefined; - maxTime?: number | undefined; - minSamples?: number | undefined; - minTime?: number | undefined; - name?: string | undefined; - fn?: Function | undefined; - id: number; - stats?: Stats | undefined; - times?: Times | undefined; - running: boolean; - count?: number | undefined; - compiled?: Function | undefined; - cycles?: number | undefined; - hz?: number | undefined; - } - - export class Event { - constructor(type: string | Object); - - aborted: boolean; - cancelled: boolean; - currentTarget: Object; - result: any; - target: Target; - timeStamp: number; - type: string; - } - - export class Suite { - static options: { name: string }; - - constructor(name?: string, options?: Options); - - length: number; - aborted: boolean; - running: boolean; - - abort(): Suite; - add(name: string, fn: Function | string, options?: Options): Suite; - add(fn: Function | string, options?: Options): Suite; - add(name: string, options?: Options): Suite; - add(options: Options): Suite; - clone(options: Options): Suite; - emit(type: string | Object): any; - filter(callback: Function | string): Suite; - join(separator?: string): string; - listeners(type: string): Function[]; - off(type?: string, callback?: Function): Suite; - off(types: string[]): Suite; - on(type?: string, callback?: Function): Suite; - on(types: string[]): Suite; - push(benchmark: Benchmark): number; - reset(): Suite; - run(options?: Options): Suite; - reverse(): any[]; - sort(compareFn: (a: any, b: any) => number): any[]; - splice(start: number, deleteCount?: number): any[]; - unshift(benchmark: Benchmark): number; - - each(callback: Function): Suite; - forEach(callback: Function): Suite; - indexOf(value: any): number; - map(callback: Function | string): any[]; - reduce(callback: Function, accumulator: T): T; - - pop(): Function; - shift(): Benchmark; - slice(start: number, end: number): any[]; - slice(start: number, deleteCount: number, ...values: any[]): any[]; - } -} - -export = Benchmark; diff --git a/tgui/packages/tgui-bench/lib/benchmark.js b/tgui/packages/tgui-bench/lib/benchmark.js deleted file mode 100644 index 0837678decf..00000000000 --- a/tgui/packages/tgui-bench/lib/benchmark.js +++ /dev/null @@ -1,2760 +0,0 @@ -/* eslint-disable */ -/*! - * Benchmark.js - * Copyright 2010-2016 Mathias Bynens - * Based on JSLitmus.js, copyright Robert Kieffer - * Modified by John-David Dalton - * Manually stripped from useless junk by /tg/station13 maintainers. - * Available under MIT license - */ -// prettier-ignore -module.exports = (function() { - 'use strict'; - - /** Used as a safe reference for `undefined` in pre ES5 environments. */ - var undefined; - - /** Used to determine if values are of the language type Object. */ - var objectTypes = { - 'function': true, - 'object': true - }; - - /** Used as a reference to the global object. */ - var root = (objectTypes[typeof window] && window) || this; - - /** Detect free variable `define`. */ - var freeDefine = false; - - /** Used to assign each benchmark an incremented id. */ - var counter = 0; - - /** Used to detect primitive types. */ - var rePrimitive = /^(?:boolean|number|string|undefined)$/; - - /** Used to make every compiled test unique. */ - var uidCounter = 0; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Date', 'Function', 'Math', 'Object', 'RegExp', 'String', '_', - 'clearTimeout', 'chrome', 'chromium', 'document', 'navigator', 'phantom', - 'platform', 'process', 'runtime', 'setTimeout' - ]; - - /** Used to avoid hz of Infinity. */ - var divisors = { - '1': 4096, - '2': 512, - '3': 64, - '4': 8, - '5': 0 - }; - - /** - * T-Distribution two-tailed critical values for 95% confidence. - * For more info see http://www.itl.nist.gov/div898/handbook/eda/section3/eda3672.htm. - */ - var tTable = { - '1': 12.706, '2': 4.303, '3': 3.182, '4': 2.776, '5': 2.571, '6': 2.447, - '7': 2.365, '8': 2.306, '9': 2.262, '10': 2.228, '11': 2.201, '12': 2.179, - '13': 2.16, '14': 2.145, '15': 2.131, '16': 2.12, '17': 2.11, '18': 2.101, - '19': 2.093, '20': 2.086, '21': 2.08, '22': 2.074, '23': 2.069, '24': 2.064, - '25': 2.06, '26': 2.056, '27': 2.052, '28': 2.048, '29': 2.045, '30': 2.042, - 'infinity': 1.96 - }; - - /** - * Critical Mann-Whitney U-values for 95% confidence. - * For more info see http://www.saburchill.com/IBbiology/stats/003.html. - */ - var uTable = { - '5': [0, 1, 2], - '6': [1, 2, 3, 5], - '7': [1, 3, 5, 6, 8], - '8': [2, 4, 6, 8, 10, 13], - '9': [2, 4, 7, 10, 12, 15, 17], - '10': [3, 5, 8, 11, 14, 17, 20, 23], - '11': [3, 6, 9, 13, 16, 19, 23, 26, 30], - '12': [4, 7, 11, 14, 18, 22, 26, 29, 33, 37], - '13': [4, 8, 12, 16, 20, 24, 28, 33, 37, 41, 45], - '14': [5, 9, 13, 17, 22, 26, 31, 36, 40, 45, 50, 55], - '15': [5, 10, 14, 19, 24, 29, 34, 39, 44, 49, 54, 59, 64], - '16': [6, 11, 15, 21, 26, 31, 37, 42, 47, 53, 59, 64, 70, 75], - '17': [6, 11, 17, 22, 28, 34, 39, 45, 51, 57, 63, 67, 75, 81, 87], - '18': [7, 12, 18, 24, 30, 36, 42, 48, 55, 61, 67, 74, 80, 86, 93, 99], - '19': [7, 13, 19, 25, 32, 38, 45, 52, 58, 65, 72, 78, 85, 92, 99, 106, 113], - '20': [8, 14, 20, 27, 34, 41, 48, 55, 62, 69, 76, 83, 90, 98, 105, 112, 119, 127], - '21': [8, 15, 22, 29, 36, 43, 50, 58, 65, 73, 80, 88, 96, 103, 111, 119, 126, 134, 142], - '22': [9, 16, 23, 30, 38, 45, 53, 61, 69, 77, 85, 93, 101, 109, 117, 125, 133, 141, 150, 158], - '23': [9, 17, 24, 32, 40, 48, 56, 64, 73, 81, 89, 98, 106, 115, 123, 132, 140, 149, 157, 166, 175], - '24': [10, 17, 25, 33, 42, 50, 59, 67, 76, 85, 94, 102, 111, 120, 129, 138, 147, 156, 165, 174, 183, 192], - '25': [10, 18, 27, 35, 44, 53, 62, 71, 80, 89, 98, 107, 117, 126, 135, 145, 154, 163, 173, 182, 192, 201, 211], - '26': [11, 19, 28, 37, 46, 55, 64, 74, 83, 93, 102, 112, 122, 132, 141, 151, 161, 171, 181, 191, 200, 210, 220, 230], - '27': [11, 20, 29, 38, 48, 57, 67, 77, 87, 97, 107, 118, 125, 138, 147, 158, 168, 178, 188, 199, 209, 219, 230, 240, 250], - '28': [12, 21, 30, 40, 50, 60, 70, 80, 90, 101, 111, 122, 132, 143, 154, 164, 175, 186, 196, 207, 218, 228, 239, 250, 261, 272], - '29': [13, 22, 32, 42, 52, 62, 73, 83, 94, 105, 116, 127, 138, 149, 160, 171, 182, 193, 204, 215, 226, 238, 249, 260, 271, 282, 294], - '30': [13, 23, 33, 43, 54, 65, 76, 87, 98, 109, 120, 131, 143, 154, 166, 177, 189, 200, 212, 223, 235, 247, 258, 270, 282, 293, 305, 317] - }; - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new `Benchmark` function using the given `context` object. - * - * @static - * @memberOf Benchmark - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `Benchmark` function. - */ - function runInContext(context) { - // Exit early if unable to acquire lodash. - var _ = context && context._ || require('lodash') || root._; - if (!_) { - Benchmark.runInContext = runInContext; - return Benchmark; - } - // Avoid issues with some ES3 environments that attempt to use values, named - // after built-in constructors like `Object`, for the creation of literals. - // ES5 clears this up by stating that literals must use built-in constructors. - // See http://es5.github.io/#x11.1.5. - context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root; - - /** Native constructor references. */ - var Array = context.Array, - Date = context.Date, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String; - - /** Used for `Array` and `Object` method references. */ - var arrayRef = [], - objectProto = Object.prototype; - - /** Native method shortcuts. */ - var abs = Math.abs, - clearTimeout = context.clearTimeout, - floor = Math.floor, - log = Math.log, - max = Math.max, - min = Math.min, - pow = Math.pow, - push = arrayRef.push, - setTimeout = context.setTimeout, - shift = arrayRef.shift, - slice = arrayRef.slice, - sqrt = Math.sqrt, - toString = objectProto.toString, - unshift = arrayRef.unshift; - - /** Detect DOM document object. */ - var doc = isHostType(context, 'document') && context.document; - - /** Used to access Node.js's high resolution timer. */ - var processObject = isHostType(context, 'process') && context.process; - - /** Used to prevent a `removeChild` memory leak in IE < 9. */ - var trash = doc && doc.createElement('div'); - - /** Used to integrity check compiled tests. */ - var uid = 'uid' + _.now(); - - /** Used to avoid infinite recursion when methods call each other. */ - var calledBy = {}; - - /** - * An object used to flag environments/features. - * - * @static - * @memberOf Benchmark - * @type Object - */ - var support = {}; - - (function() { - - /** - * Detect if running in a browser environment. - * - * @memberOf Benchmark.support - * @type boolean - */ - support.browser = doc && isHostType(context, 'navigator') && !isHostType(context, 'phantom'); - - /** - * Detect if the Timers API exists. - * - * @memberOf Benchmark.support - * @type boolean - */ - support.timeout = isHostType(context, 'setTimeout') && isHostType(context, 'clearTimeout'); - - /** - * Detect if function decompilation is support. - * - * @name decompilation - * @memberOf Benchmark.support - * @type boolean - */ - try { - // Safari 2.x removes commas in object literals from `Function#toString` results. - // See http://webk.it/11609 for more details. - // Firefox 3.6 and Opera 9.25 strip grouping parentheses from `Function#toString` results. - // See http://bugzil.la/559438 for more details. - support.decompilation = Function( - ('return (' + (function(x) { return { 'x': '' + (1 + x) + '', 'y': 0 }; }) + ')') - // Avoid issues with code added by Istanbul. - .replace(/__cov__[^;]+;/g, '') - )()(0).x === '1'; - } catch(e) { - support.decompilation = false; - } - }()); - - /** - * Timer object used by `clock()` and `Deferred#resolve`. - * - * @private - * @type Object - */ - var timer = { - - /** - * The timer namespace object or constructor. - * - * @private - * @memberOf timer - * @type {Function|Object} - */ - 'ns': Date, - - /** - * Starts the deferred timer. - * - * @private - * @memberOf timer - * @param {Object} deferred The deferred instance. - */ - 'start': null, // Lazy defined in `clock()`. - - /** - * Stops the deferred timer. - * - * @private - * @memberOf timer - * @param {Object} deferred The deferred instance. - */ - 'stop': null // Lazy defined in `clock()`. - }; - - /*------------------------------------------------------------------------*/ - - /** - * The Benchmark constructor. - * - * Note: The Benchmark constructor exposes a handful of lodash methods to - * make working with arrays, collections, and objects easier. The lodash - * methods are: - * [`each/forEach`](https://lodash.com/docs#forEach), [`forOwn`](https://lodash.com/docs#forOwn), - * [`has`](https://lodash.com/docs#has), [`indexOf`](https://lodash.com/docs#indexOf), - * [`map`](https://lodash.com/docs#map), and [`reduce`](https://lodash.com/docs#reduce) - * - * @constructor - * @param {string} name A name to identify the benchmark. - * @param {Function|string} fn The test to benchmark. - * @param {Object} [options={}] Options object. - * @example - * - * // basic usage (the `new` operator is optional) - * var bench = new Benchmark(fn); - * - * // or using a name first - * var bench = new Benchmark('foo', fn); - * - * // or with options - * var bench = new Benchmark('foo', fn, { - * - * // displayed by `Benchmark#toString` if `name` is not available - * 'id': 'xyz', - * - * // called when the benchmark starts running - * 'onStart': onStart, - * - * // called after each run cycle - * 'onCycle': onCycle, - * - * // called when aborted - * 'onAbort': onAbort, - * - * // called when a test errors - * 'onError': onError, - * - * // called when reset - * 'onReset': onReset, - * - * // called when the benchmark completes running - * 'onComplete': onComplete, - * - * // compiled/called before the test loop - * 'setup': setup, - * - * // compiled/called after the test loop - * 'teardown': teardown - * }); - * - * // or name and options - * var bench = new Benchmark('foo', { - * - * // a flag to indicate the benchmark is deferred - * 'defer': true, - * - * // benchmark test function - * 'fn': function(deferred) { - * // call `Deferred#resolve` when the deferred test is finished - * deferred.resolve(); - * } - * }); - * - * // or options only - * var bench = new Benchmark({ - * - * // benchmark name - * 'name': 'foo', - * - * // benchmark test as a string - * 'fn': '[1,2,3,4].sort()' - * }); - * - * // a test's `this` binding is set to the benchmark instance - * var bench = new Benchmark('foo', function() { - * 'My name is '.concat(this.name); // "My name is foo" - * }); - */ - function Benchmark(name, fn, options) { - var bench = this; - - // Allow instance creation without the `new` operator. - if (!(bench instanceof Benchmark)) { - return new Benchmark(name, fn, options); - } - // Juggle arguments. - if (_.isPlainObject(name)) { - // 1 argument (options). - options = name; - } - else if (_.isFunction(name)) { - // 2 arguments (fn, options). - options = fn; - fn = name; - } - else if (_.isPlainObject(fn)) { - // 2 arguments (name, options). - options = fn; - fn = null; - bench.name = name; - } - else { - // 3 arguments (name, fn [, options]). - bench.name = name; - } - setOptions(bench, options); - - bench.id || (bench.id = ++counter); - bench.fn == null && (bench.fn = fn); - - bench.stats = cloneDeep(bench.stats); - bench.times = cloneDeep(bench.times); - } - - /** - * The Deferred constructor. - * - * @constructor - * @memberOf Benchmark - * @param {Object} clone The cloned benchmark instance. - */ - function Deferred(clone) { - var deferred = this; - if (!(deferred instanceof Deferred)) { - return new Deferred(clone); - } - deferred.benchmark = clone; - clock(deferred); - } - - /** - * The Event constructor. - * - * @constructor - * @memberOf Benchmark - * @param {Object|string} type The event type. - */ - function Event(type) { - var event = this; - if (type instanceof Event) { - return type; - } - return (event instanceof Event) - ? _.assign(event, { 'timeStamp': _.now() }, typeof type == 'string' ? { 'type': type } : type) - : new Event(type); - } - - /** - * The Suite constructor. - * - * Note: Each Suite instance has a handful of wrapped lodash methods to - * make working with Suites easier. The wrapped lodash methods are: - * [`each/forEach`](https://lodash.com/docs#forEach), [`indexOf`](https://lodash.com/docs#indexOf), - * [`map`](https://lodash.com/docs#map), and [`reduce`](https://lodash.com/docs#reduce) - * - * @constructor - * @memberOf Benchmark - * @param {string} name A name to identify the suite. - * @param {Object} [options={}] Options object. - * @example - * - * // basic usage (the `new` operator is optional) - * var suite = new Benchmark.Suite; - * - * // or using a name first - * var suite = new Benchmark.Suite('foo'); - * - * // or with options - * var suite = new Benchmark.Suite('foo', { - * - * // called when the suite starts running - * 'onStart': onStart, - * - * // called between running benchmarks - * 'onCycle': onCycle, - * - * // called when aborted - * 'onAbort': onAbort, - * - * // called when a test errors - * 'onError': onError, - * - * // called when reset - * 'onReset': onReset, - * - * // called when the suite completes running - * 'onComplete': onComplete - * }); - */ - function Suite(name, options) { - var suite = this; - - // Allow instance creation without the `new` operator. - if (!(suite instanceof Suite)) { - return new Suite(name, options); - } - // Juggle arguments. - if (_.isPlainObject(name)) { - // 1 argument (options). - options = name; - } else { - // 2 arguments (name [, options]). - suite.name = name; - } - setOptions(suite, options); - } - - /*------------------------------------------------------------------------*/ - - /** - * A specialized version of `_.cloneDeep` which only clones arrays and plain - * objects assigning all other values by reference. - * - * @private - * @param {*} value The value to clone. - * @returns {*} The cloned value. - */ - var cloneDeep = _.partial(_.cloneDeepWith, _, function(value) { - // Only clone primitives, arrays, and plain objects. - return (_.isObject(value) && !_.isArray(value) && !_.isPlainObject(value)) - ? value - : undefined; - }); - - /** - * Creates a function from the given arguments string and body. - * - * @private - * @param {string} args The comma separated function arguments. - * @param {string} body The function body. - * @returns {Function} The new function. - */ - function createFunction() { - // Lazy define. - createFunction = function(args, body) { - var result, - anchor = freeDefine ? freeDefine.amd : Benchmark, - prop = uid + 'createFunction'; - - runScript((freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '=function(' + args + '){' + body + '}'); - result = anchor[prop]; - delete anchor[prop]; - return result; - }; - // Fix JaegerMonkey bug. - // For more information see http://bugzil.la/639720. - createFunction = support.browser && (createFunction('', 'return"' + uid + '"') || _.noop)() == uid ? createFunction : Function; - return createFunction.apply(null, arguments); - } - - /** - * Delay the execution of a function based on the benchmark's `delay` property. - * - * @private - * @param {Object} bench The benchmark instance. - * @param {Object} fn The function to execute. - */ - function delay(bench, fn) { - bench._timerId = _.delay(fn, bench.delay * 1e3); - } - - /** - * Destroys the given element. - * - * @private - * @param {Element} element The element to destroy. - */ - function destroyElement(element) { - trash.appendChild(element); - trash.innerHTML = ''; - } - - /** - * Gets the name of the first argument from a function's source. - * - * @private - * @param {Function} fn The function. - * @returns {string} The argument name. - */ - function getFirstArgument(fn) { - return (!_.has(fn, 'toString') && - (/^[\s(]*function[^(]*\(([^\s,)]+)/.exec(fn) || 0)[1]) || ''; - } - - /** - * Computes the arithmetic mean of a sample. - * - * @private - * @param {Array} sample The sample. - * @returns {number} The mean. - */ - function getMean(sample) { - return (_.reduce(sample, function(sum, x) { - return sum + x; - }) / sample.length) || 0; - } - - /** - * Gets the source code of a function. - * - * @private - * @param {Function} fn The function. - * @returns {string} The function's source code. - */ - function getSource(fn) { - var result = ''; - if (isStringable(fn)) { - result = String(fn); - } else if (support.decompilation) { - // Escape the `{` for Firefox 1. - result = _.result(/^[^{]+\{([\s\S]*)\}\s*$/.exec(fn), 1); - } - // Trim string. - result = (result || '').replace(/^\s+|\s+$/g, ''); - - // Detect strings containing only the "use strict" directive. - return /^(?:\/\*+[\w\W]*?\*\/|\/\/.*?[\n\r\u2028\u2029]|\s)*(["'])use strict\1;?$/.test(result) - ? '' - : result; - } - - /** - * Checks if an object is of the specified class. - * - * @private - * @param {*} value The value to check. - * @param {string} name The name of the class. - * @returns {boolean} Returns `true` if the value is of the specified class, else `false`. - */ - function isClassOf(value, name) { - return value != null && toString.call(value) == '[object ' + name + ']'; - } - - /** - * Host objects can return type values that are different from their actual - * data type. The objects we are concerned with usually return non-primitive - * types of "object", "function", or "unknown". - * - * @private - * @param {*} object The owner of the property. - * @param {string} property The property to check. - * @returns {boolean} Returns `true` if the property value is a non-primitive, else `false`. - */ - function isHostType(object, property) { - if (object == null) { - return false; - } - var type = typeof object[property]; - return !rePrimitive.test(type) && (type != 'object' || !!object[property]); - } - - /** - * Checks if a value can be safely coerced to a string. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if the value can be coerced, else `false`. - */ - function isStringable(value) { - return _.isString(value) || (_.has(value, 'toString') && _.isFunction(value.toString)); - } - - /** - * Runs a snippet of JavaScript via script injection. - * - * @private - * @param {string} code The code to run. - */ - function runScript(code) { - var anchor = freeDefine ? define.amd : Benchmark, - script = doc.createElement('script'), - sibling = doc.getElementsByTagName('script')[0], - parent = sibling.parentNode, - prop = uid + 'runScript', - prefix = '(' + (freeDefine ? 'define.amd.' : 'Benchmark.') + prop + '||function(){})();'; - - // Firefox 2.0.0.2 cannot use script injection as intended because it executes - // asynchronously, but that's OK because script injection is only used to avoid - // the previously commented JaegerMonkey bug. - try { - // Remove the inserted script *before* running the code to avoid differences - // in the expected script element count/order of the document. - script.appendChild(doc.createTextNode(prefix + code)); - anchor[prop] = function() { destroyElement(script); }; - } catch(e) { - parent = parent.cloneNode(false); - sibling = null; - script.text = code; - } - parent.insertBefore(script, sibling); - delete anchor[prop]; - } - - /** - * A helper function for setting options/event handlers. - * - * @private - * @param {Object} object The benchmark or suite instance. - * @param {Object} [options={}] Options object. - */ - function setOptions(object, options) { - options = object.options = _.assign({}, cloneDeep(object.constructor.options), cloneDeep(options)); - - _.forOwn(options, function(value, key) { - if (value != null) { - // Add event listeners. - if (/^on[A-Z]/.test(key)) { - _.each(key.split(' '), function(key) { - object.on(key.slice(2).toLowerCase(), value); - }); - } else if (!_.has(object, key)) { - object[key] = cloneDeep(value); - } - } - }); - } - - /*------------------------------------------------------------------------*/ - - /** - * Handles cycling/completing the deferred benchmark. - * - * @memberOf Benchmark.Deferred - */ - function resolve() { - var deferred = this, - clone = deferred.benchmark, - bench = clone._original; - - if (bench.aborted) { - // cycle() -> clone cycle/complete event -> compute()'s invoked bench.run() cycle/complete. - deferred.teardown(); - clone.running = false; - cycle(deferred); - } - else if (++deferred.cycles < clone.count) { - clone.compiled.call(deferred, context, timer); - } - else { - timer.stop(deferred); - deferred.teardown(); - delay(clone, function() { cycle(deferred); }); - } - } - - /*------------------------------------------------------------------------*/ - - /** - * A generic `Array#filter` like method. - * - * @static - * @memberOf Benchmark - * @param {Array} array The array to iterate over. - * @param {Function|string} callback The function/alias called per iteration. - * @returns {Array} A new array of values that passed callback filter. - * @example - * - * // get odd numbers - * Benchmark.filter([1, 2, 3, 4, 5], function(n) { - * return n % 2; - * }); // -> [1, 3, 5]; - * - * // get fastest benchmarks - * Benchmark.filter(benches, 'fastest'); - * - * // get slowest benchmarks - * Benchmark.filter(benches, 'slowest'); - * - * // get benchmarks that completed without erroring - * Benchmark.filter(benches, 'successful'); - */ - function filter(array, callback) { - if (callback === 'successful') { - // Callback to exclude those that are errored, unrun, or have hz of Infinity. - callback = function(bench) { - return bench.cycles && _.isFinite(bench.hz) && !bench.error; - }; - } - else if (callback === 'fastest' || callback === 'slowest') { - // Get successful, sort by period + margin of error, and filter fastest/slowest. - var result = filter(array, 'successful').sort(function(a, b) { - a = a.stats; b = b.stats; - return (a.mean + a.moe > b.mean + b.moe ? 1 : -1) * (callback === 'fastest' ? 1 : -1); - }); - - return _.filter(result, function(bench) { - return result[0].compare(bench) == 0; - }); - } - return _.filter(array, callback); - } - - /** - * Converts a number to a more readable comma-separated string representation. - * - * @static - * @memberOf Benchmark - * @param {number} number The number to convert. - * @returns {string} The more readable string representation. - */ - function formatNumber(number) { - number = String(number).split('.'); - return number[0].replace(/(?=(?:\d{3})+$)(?!\b)/g, ',') + - (number[1] ? '.' + number[1] : ''); - } - - /** - * Invokes a method on all items in an array. - * - * @static - * @memberOf Benchmark - * @param {Array} benches Array of benchmarks to iterate over. - * @param {Object|string} name The name of the method to invoke OR options object. - * @param {...*} [args] Arguments to invoke the method with. - * @returns {Array} A new array of values returned from each method invoked. - * @example - * - * // invoke `reset` on all benchmarks - * Benchmark.invoke(benches, 'reset'); - * - * // invoke `emit` with arguments - * Benchmark.invoke(benches, 'emit', 'complete', listener); - * - * // invoke `run(true)`, treat benchmarks as a queue, and register invoke callbacks - * Benchmark.invoke(benches, { - * - * // invoke the `run` method - * 'name': 'run', - * - * // pass a single argument - * 'args': true, - * - * // treat as queue, removing benchmarks from front of `benches` until empty - * 'queued': true, - * - * // called before any benchmarks have been invoked. - * 'onStart': onStart, - * - * // called between invoking benchmarks - * 'onCycle': onCycle, - * - * // called after all benchmarks have been invoked. - * 'onComplete': onComplete - * }); - */ - function invoke(benches, name) { - var args, - bench, - queued, - index = -1, - eventProps = { 'currentTarget': benches }, - options = { 'onStart': _.noop, 'onCycle': _.noop, 'onComplete': _.noop }, - result = _.toArray(benches); - - /** - * Invokes the method of the current object and if synchronous, fetches the next. - */ - function execute() { - var listeners, - async = isAsync(bench); - - if (async) { - // Use `getNext` as the first listener. - bench.on('complete', getNext); - listeners = bench.events.complete; - listeners.splice(0, 0, listeners.pop()); - } - // Execute method. - result[index] = _.isFunction(bench && bench[name]) ? bench[name].apply(bench, args) : undefined; - // If synchronous return `true` until finished. - return !async && getNext(); - } - - /** - * Fetches the next bench or executes `onComplete` callback. - */ - function getNext(event) { - var cycleEvent, - last = bench, - async = isAsync(last); - - if (async) { - last.off('complete', getNext); - last.emit('complete'); - } - // Emit "cycle" event. - eventProps.type = 'cycle'; - eventProps.target = last; - cycleEvent = Event(eventProps); - options.onCycle.call(benches, cycleEvent); - - // Choose next benchmark if not exiting early. - if (!cycleEvent.aborted && raiseIndex() !== false) { - bench = queued ? benches[0] : result[index]; - if (isAsync(bench)) { - delay(bench, execute); - } - else if (async) { - // Resume execution if previously asynchronous but now synchronous. - while (execute()) {} - } - else { - // Continue synchronous execution. - return true; - } - } else { - // Emit "complete" event. - eventProps.type = 'complete'; - options.onComplete.call(benches, Event(eventProps)); - } - // When used as a listener `event.aborted = true` will cancel the rest of - // the "complete" listeners because they were already called above and when - // used as part of `getNext` the `return false` will exit the execution while-loop. - if (event) { - event.aborted = true; - } else { - return false; - } - } - - /** - * Checks if invoking `Benchmark#run` with asynchronous cycles. - */ - function isAsync(object) { - // Avoid using `instanceof` here because of IE memory leak issues with host objects. - var async = args[0] && args[0].async; - return name == 'run' && (object instanceof Benchmark) && - ((async == null ? object.options.async : async) && support.timeout || object.defer); - } - - /** - * Raises `index` to the next defined index or returns `false`. - */ - function raiseIndex() { - index++; - - // If queued remove the previous bench. - if (queued && index > 0) { - shift.call(benches); - } - // If we reached the last index then return `false`. - return (queued ? benches.length : index < result.length) - ? index - : (index = false); - } - // Juggle arguments. - if (_.isString(name)) { - // 2 arguments (array, name). - args = slice.call(arguments, 2); - } else { - // 2 arguments (array, options). - options = _.assign(options, name); - name = options.name; - args = _.isArray(args = 'args' in options ? options.args : []) ? args : [args]; - queued = options.queued; - } - // Start iterating over the array. - if (raiseIndex() !== false) { - // Emit "start" event. - bench = result[index]; - eventProps.type = 'start'; - eventProps.target = bench; - options.onStart.call(benches, Event(eventProps)); - - // End early if the suite was aborted in an "onStart" listener. - if (name == 'run' && (benches instanceof Suite) && benches.aborted) { - // Emit "cycle" event. - eventProps.type = 'cycle'; - options.onCycle.call(benches, Event(eventProps)); - // Emit "complete" event. - eventProps.type = 'complete'; - options.onComplete.call(benches, Event(eventProps)); - } - // Start method execution. - else { - if (isAsync(bench)) { - delay(bench, execute); - } else { - while (execute()) {} - } - } - } - return result; - } - - /** - * Creates a string of joined array values or object key-value pairs. - * - * @static - * @memberOf Benchmark - * @param {Array|Object} object The object to operate on. - * @param {string} [separator1=','] The separator used between key-value pairs. - * @param {string} [separator2=': '] The separator used between keys and values. - * @returns {string} The joined result. - */ - function join(object, separator1, separator2) { - var result = [], - length = (object = Object(object)).length, - arrayLike = length === length >>> 0; - - separator2 || (separator2 = ': '); - _.each(object, function(value, key) { - result.push(arrayLike ? value : key + separator2 + value); - }); - return result.join(separator1 || ','); - } - - /*------------------------------------------------------------------------*/ - - /** - * Aborts all benchmarks in the suite. - * - * @name abort - * @memberOf Benchmark.Suite - * @returns {Object} The suite instance. - */ - function abortSuite() { - var event, - suite = this, - resetting = calledBy.resetSuite; - - if (suite.running) { - event = Event('abort'); - suite.emit(event); - if (!event.cancelled || resetting) { - // Avoid infinite recursion. - calledBy.abortSuite = true; - suite.reset(); - delete calledBy.abortSuite; - - if (!resetting) { - suite.aborted = true; - invoke(suite, 'abort'); - } - } - } - return suite; - } - - /** - * Adds a test to the benchmark suite. - * - * @memberOf Benchmark.Suite - * @param {string} name A name to identify the benchmark. - * @param {Function|string} fn The test to benchmark. - * @param {Object} [options={}] Options object. - * @returns {Object} The suite instance. - * @example - * - * // basic usage - * suite.add(fn); - * - * // or using a name first - * suite.add('foo', fn); - * - * // or with options - * suite.add('foo', fn, { - * 'onCycle': onCycle, - * 'onComplete': onComplete - * }); - * - * // or name and options - * suite.add('foo', { - * 'fn': fn, - * 'onCycle': onCycle, - * 'onComplete': onComplete - * }); - * - * // or options only - * suite.add({ - * 'name': 'foo', - * 'fn': fn, - * 'onCycle': onCycle, - * 'onComplete': onComplete - * }); - */ - function add(name, fn, options) { - var suite = this, - bench = new Benchmark(name, fn, options), - event = Event({ 'type': 'add', 'target': bench }); - - if (suite.emit(event), !event.cancelled) { - suite.push(bench); - } - return suite; - } - - /** - * Creates a new suite with cloned benchmarks. - * - * @name clone - * @memberOf Benchmark.Suite - * @param {Object} options Options object to overwrite cloned options. - * @returns {Object} The new suite instance. - */ - function cloneSuite(options) { - var suite = this, - result = new suite.constructor(_.assign({}, suite.options, options)); - - // Copy own properties. - _.forOwn(suite, function(value, key) { - if (!_.has(result, key)) { - result[key] = value && _.isFunction(value.clone) - ? value.clone() - : cloneDeep(value); - } - }); - return result; - } - - /** - * An `Array#filter` like method. - * - * @name filter - * @memberOf Benchmark.Suite - * @param {Function|string} callback The function/alias called per iteration. - * @returns {Object} A new suite of benchmarks that passed callback filter. - */ - function filterSuite(callback) { - var suite = this, - result = new suite.constructor(suite.options); - - result.push.apply(result, filter(suite, callback)); - return result; - } - - /** - * Resets all benchmarks in the suite. - * - * @name reset - * @memberOf Benchmark.Suite - * @returns {Object} The suite instance. - */ - function resetSuite() { - var event, - suite = this, - aborting = calledBy.abortSuite; - - if (suite.running && !aborting) { - // No worries, `resetSuite()` is called within `abortSuite()`. - calledBy.resetSuite = true; - suite.abort(); - delete calledBy.resetSuite; - } - // Reset if the state has changed. - else if ((suite.aborted || suite.running) && - (suite.emit(event = Event('reset')), !event.cancelled)) { - suite.aborted = suite.running = false; - if (!aborting) { - invoke(suite, 'reset'); - } - } - return suite; - } - - /** - * Runs the suite. - * - * @name run - * @memberOf Benchmark.Suite - * @param {Object} [options={}] Options object. - * @returns {Object} The suite instance. - * @example - * - * // basic usage - * suite.run(); - * - * // or with options - * suite.run({ 'async': true, 'queued': true }); - */ - function runSuite(options) { - var suite = this; - - suite.reset(); - suite.running = true; - options || (options = {}); - - invoke(suite, { - 'name': 'run', - 'args': options, - 'queued': options.queued, - 'onStart': function(event) { - suite.emit(event); - }, - 'onCycle': function(event) { - var bench = event.target; - if (bench.error) { - suite.emit({ 'type': 'error', 'target': bench }); - } - suite.emit(event); - event.aborted = suite.aborted; - }, - 'onComplete': function(event) { - suite.running = false; - suite.emit(event); - } - }); - return suite; - } - - /*------------------------------------------------------------------------*/ - - /** - * Executes all registered listeners of the specified event type. - * - * @memberOf Benchmark, Benchmark.Suite - * @param {Object|string} type The event type or object. - * @param {...*} [args] Arguments to invoke the listener with. - * @returns {*} Returns the return value of the last listener executed. - */ - function emit(type) { - var listeners, - object = this, - event = Event(type), - events = object.events, - args = (arguments[0] = event, arguments); - - event.currentTarget || (event.currentTarget = object); - event.target || (event.target = object); - delete event.result; - - if (events && (listeners = _.has(events, event.type) && events[event.type])) { - _.each(listeners.slice(), function(listener) { - if ((event.result = listener.apply(object, args)) === false) { - event.cancelled = true; - } - return !event.aborted; - }); - } - return event.result; - } - - /** - * Returns an array of event listeners for a given type that can be manipulated - * to add or remove listeners. - * - * @memberOf Benchmark, Benchmark.Suite - * @param {string} type The event type. - * @returns {Array} The listeners array. - */ - function listeners(type) { - var object = this, - events = object.events || (object.events = {}); - - return _.has(events, type) ? events[type] : (events[type] = []); - } - - /** - * Unregisters a listener for the specified event type(s), - * or unregisters all listeners for the specified event type(s), - * or unregisters all listeners for all event types. - * - * @memberOf Benchmark, Benchmark.Suite - * @param {string} [type] The event type. - * @param {Function} [listener] The function to unregister. - * @returns {Object} The current instance. - * @example - * - * // unregister a listener for an event type - * bench.off('cycle', listener); - * - * // unregister a listener for multiple event types - * bench.off('start cycle', listener); - * - * // unregister all listeners for an event type - * bench.off('cycle'); - * - * // unregister all listeners for multiple event types - * bench.off('start cycle complete'); - * - * // unregister all listeners for all event types - * bench.off(); - */ - function off(type, listener) { - var object = this, - events = object.events; - - if (!events) { - return object; - } - _.each(type ? type.split(' ') : events, function(listeners, type) { - var index; - if (typeof listeners == 'string') { - type = listeners; - listeners = _.has(events, type) && events[type]; - } - if (listeners) { - if (listener) { - index = _.indexOf(listeners, listener); - if (index > -1) { - listeners.splice(index, 1); - } - } else { - listeners.length = 0; - } - } - }); - return object; - } - - /** - * Registers a listener for the specified event type(s). - * - * @memberOf Benchmark, Benchmark.Suite - * @param {string} type The event type. - * @param {Function} listener The function to register. - * @returns {Object} The current instance. - * @example - * - * // register a listener for an event type - * bench.on('cycle', listener); - * - * // register a listener for multiple event types - * bench.on('start cycle', listener); - */ - function on(type, listener) { - var object = this, - events = object.events || (object.events = {}); - - _.each(type.split(' '), function(type) { - (_.has(events, type) - ? events[type] - : (events[type] = []) - ).push(listener); - }); - return object; - } - - /*------------------------------------------------------------------------*/ - - /** - * Aborts the benchmark without recording times. - * - * @memberOf Benchmark - * @returns {Object} The benchmark instance. - */ - function abort() { - var event, - bench = this, - resetting = calledBy.reset; - - if (bench.running) { - event = Event('abort'); - bench.emit(event); - if (!event.cancelled || resetting) { - // Avoid infinite recursion. - calledBy.abort = true; - bench.reset(); - delete calledBy.abort; - - if (support.timeout) { - clearTimeout(bench._timerId); - delete bench._timerId; - } - if (!resetting) { - bench.aborted = true; - bench.running = false; - } - } - } - return bench; - } - - /** - * Creates a new benchmark using the same test and options. - * - * @memberOf Benchmark - * @param {Object} options Options object to overwrite cloned options. - * @returns {Object} The new benchmark instance. - * @example - * - * var bizarro = bench.clone({ - * 'name': 'doppelganger' - * }); - */ - function clone(options) { - var bench = this, - result = new bench.constructor(_.assign({}, bench, options)); - - // Correct the `options` object. - result.options = _.assign({}, cloneDeep(bench.options), cloneDeep(options)); - - // Copy own custom properties. - _.forOwn(bench, function(value, key) { - if (!_.has(result, key)) { - result[key] = cloneDeep(value); - } - }); - - return result; - } - - /** - * Determines if a benchmark is faster than another. - * - * @memberOf Benchmark - * @param {Object} other The benchmark to compare. - * @returns {number} Returns `-1` if slower, `1` if faster, and `0` if indeterminate. - */ - function compare(other) { - var bench = this; - - // Exit early if comparing the same benchmark. - if (bench == other) { - return 0; - } - var critical, - zStat, - sample1 = bench.stats.sample, - sample2 = other.stats.sample, - size1 = sample1.length, - size2 = sample2.length, - maxSize = max(size1, size2), - minSize = min(size1, size2), - u1 = getU(sample1, sample2), - u2 = getU(sample2, sample1), - u = min(u1, u2); - - function getScore(xA, sampleB) { - return _.reduce(sampleB, function(total, xB) { - return total + (xB > xA ? 0 : xB < xA ? 1 : 0.5); - }, 0); - } - - function getU(sampleA, sampleB) { - return _.reduce(sampleA, function(total, xA) { - return total + getScore(xA, sampleB); - }, 0); - } - - function getZ(u) { - return (u - ((size1 * size2) / 2)) / sqrt((size1 * size2 * (size1 + size2 + 1)) / 12); - } - // Reject the null hypothesis the two samples come from the - // same population (i.e. have the same median) if... - if (size1 + size2 > 30) { - // ...the z-stat is greater than 1.96 or less than -1.96 - // http://www.statisticslectures.com/topics/mannwhitneyu/ - zStat = getZ(u); - return abs(zStat) > 1.96 ? (u == u1 ? 1 : -1) : 0; - } - // ...the U value is less than or equal the critical U value. - critical = maxSize < 5 || minSize < 3 ? 0 : uTable[maxSize][minSize - 3]; - return u <= critical ? (u == u1 ? 1 : -1) : 0; - } - - /** - * Reset properties and abort if running. - * - * @memberOf Benchmark - * @returns {Object} The benchmark instance. - */ - function reset() { - var bench = this; - if (bench.running && !calledBy.abort) { - // No worries, `reset()` is called within `abort()`. - calledBy.reset = true; - bench.abort(); - delete calledBy.reset; - return bench; - } - var event, - index = 0, - changes = [], - queue = []; - - // A non-recursive solution to check if properties have changed. - // For more information see http://www.jslab.dk/articles/non.recursive.preorder.traversal.part4. - var data = { - 'destination': bench, - 'source': _.assign({}, cloneDeep(bench.constructor.prototype), cloneDeep(bench.options)) - }; - - do { - _.forOwn(data.source, function(value, key) { - var changed, - destination = data.destination, - currValue = destination[key]; - - // Skip pseudo private properties like `_timerId` which could be a - // Java object in environments like RingoJS. - if (key.charAt(0) == '_') { - return; - } - if (value && typeof value == 'object') { - if (_.isArray(value)) { - // Check if an array value has changed to a non-array value. - if (!_.isArray(currValue)) { - changed = currValue = []; - } - // Check if an array has changed its length. - if (currValue.length != value.length) { - changed = currValue = currValue.slice(0, value.length); - currValue.length = value.length; - } - } - // Check if an object has changed to a non-object value. - else if (!currValue || typeof currValue != 'object') { - changed = currValue = {}; - } - // Register a changed object. - if (changed) { - changes.push({ 'destination': destination, 'key': key, 'value': currValue }); - } - queue.push({ 'destination': currValue, 'source': value }); - } - // Register a changed primitive. - else if (value !== currValue && !(value == null || _.isFunction(value))) { - changes.push({ 'destination': destination, 'key': key, 'value': value }); - } - }); - } - while ((data = queue[index++])); - - // If changed emit the `reset` event and if it isn't cancelled reset the benchmark. - if (changes.length && (bench.emit(event = Event('reset')), !event.cancelled)) { - _.each(changes, function(data) { - data.destination[data.key] = data.value; - }); - } - return bench; - } - - /** - * Displays relevant benchmark information when coerced to a string. - * - * @name toString - * @memberOf Benchmark - * @returns {string} A string representation of the benchmark instance. - */ - function toStringBench() { - var bench = this, - error = bench.error, - hz = bench.hz, - id = bench.id, - stats = bench.stats, - size = stats.sample.length, - pm = '\xb1', - result = bench.name || (_.isNaN(id) ? id : ''); - - if (error) { - var errorStr; - if (!_.isObject(error)) { - errorStr = String(error); - } else if (!_.isError(Error)) { - errorStr = join(error); - } else { - // Error#name and Error#message properties are non-enumerable. - errorStr = join(_.assign({ 'name': error.name, 'message': error.message }, error)); - } - result += ': ' + errorStr; - } - else { - result += ' x ' + formatNumber(hz.toFixed(hz < 100 ? 2 : 0)) + ' ops/sec ' + pm + - stats.rme.toFixed(2) + '% (' + size + ' run' + (size == 1 ? '' : 's') + ' sampled)'; - } - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Clocks the time taken to execute a test per cycle (secs). - * - * @private - * @param {Object} bench The benchmark instance. - * @returns {number} The time taken. - */ - function clock() { - var options = Benchmark.options, - templateData = {}, - timers = [{ 'ns': timer.ns, 'res': max(0.0015, getRes('ms')), 'unit': 'ms' }]; - - // Lazy define for hi-res timers. - clock = function(clone) { - var deferred; - - if (clone instanceof Deferred) { - deferred = clone; - clone = deferred.benchmark; - } - var bench = clone._original, - stringable = isStringable(bench.fn), - count = bench.count = clone.count, - decompilable = stringable || (support.decompilation && (clone.setup !== _.noop || clone.teardown !== _.noop)), - id = bench.id, - name = bench.name || (typeof id == 'number' ? '' : id), - result = 0; - - // Init `minTime` if needed. - clone.minTime = bench.minTime || (bench.minTime = bench.options.minTime = options.minTime); - - // Compile in setup/teardown functions and the test loop. - // Create a new compiled test, instead of using the cached `bench.compiled`, - // to avoid potential engine optimizations enabled over the life of the test. - var funcBody = deferred - ? 'var d#=this,${fnArg}=d#,m#=d#.benchmark._original,f#=m#.fn,su#=m#.setup,td#=m#.teardown;' + - // When `deferred.cycles` is `0` then... - 'if(!d#.cycles){' + - // set `deferred.fn`, - 'd#.fn=function(){var ${fnArg}=d#;if(typeof f#=="function"){try{${fn}\n}catch(e#){f#(d#)}}else{${fn}\n}};' + - // set `deferred.teardown`, - 'd#.teardown=function(){d#.cycles=0;if(typeof td#=="function"){try{${teardown}\n}catch(e#){td#()}}else{${teardown}\n}};' + - // execute the benchmark's `setup`, - 'if(typeof su#=="function"){try{${setup}\n}catch(e#){su#()}}else{${setup}\n};' + - // start timer, - 't#.start(d#);' + - // and then execute `deferred.fn` and return a dummy object. - '}d#.fn();return{uid:"${uid}"}' - - : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count,n#=t#.ns;${setup}\n${begin};' + - 'while(i#--){${fn}\n}${end};${teardown}\nreturn{elapsed:r#,uid:"${uid}"}'; - - var compiled = bench.compiled = clone.compiled = createCompiled(bench, decompilable, deferred, funcBody), - isEmpty = !(templateData.fn || stringable); - - try { - if (isEmpty) { - // Firefox may remove dead code from `Function#toString` results. - // For more information see http://bugzil.la/536085. - throw new Error('The test "' + name + '" is empty. This may be the result of dead code removal.'); - } - else if (!deferred) { - // Pretest to determine if compiled code exits early, usually by a - // rogue `return` statement, by checking for a return object with the uid. - bench.count = 1; - compiled = decompilable && (compiled.call(bench, context, timer) || {}).uid == templateData.uid && compiled; - bench.count = count; - } - } catch(e) { - compiled = null; - clone.error = e || new Error(String(e)); - bench.count = count; - } - // Fallback when a test exits early or errors during pretest. - if (!compiled && !deferred && !isEmpty) { - funcBody = ( - stringable || (decompilable && !clone.error) - ? 'function f#(){${fn}\n}var r#,s#,m#=this,i#=m#.count' - : 'var r#,s#,m#=this,f#=m#.fn,i#=m#.count' - ) + - ',n#=t#.ns;${setup}\n${begin};m#.f#=f#;while(i#--){m#.f#()}${end};' + - 'delete m#.f#;${teardown}\nreturn{elapsed:r#}'; - - compiled = createCompiled(bench, decompilable, deferred, funcBody); - - try { - // Pretest one more time to check for errors. - bench.count = 1; - compiled.call(bench, context, timer); - bench.count = count; - delete clone.error; - } - catch(e) { - bench.count = count; - if (!clone.error) { - clone.error = e || new Error(String(e)); - } - } - } - // If no errors run the full test loop. - if (!clone.error) { - compiled = bench.compiled = clone.compiled = createCompiled(bench, decompilable, deferred, funcBody); - result = compiled.call(deferred || bench, context, timer).elapsed; - } - return result; - }; - - /*----------------------------------------------------------------------*/ - - /** - * Creates a compiled function from the given function `body`. - */ - function createCompiled(bench, decompilable, deferred, body) { - var fn = bench.fn, - fnArg = deferred ? getFirstArgument(fn) || 'deferred' : ''; - - templateData.uid = uid + uidCounter++; - - _.assign(templateData, { - 'setup': decompilable ? getSource(bench.setup) : interpolate('m#.setup()'), - 'fn': decompilable ? getSource(fn) : interpolate('m#.fn(' + fnArg + ')'), - 'fnArg': fnArg, - 'teardown': decompilable ? getSource(bench.teardown) : interpolate('m#.teardown()') - }); - - // Use API of chosen timer. - if (timer.unit == 'ns') { - _.assign(templateData, { - 'begin': interpolate('s#=n#()'), - 'end': interpolate('r#=n#(s#);r#=r#[0]+(r#[1]/1e9)') - }); - } - else if (timer.unit == 'us') { - if (timer.ns.stop) { - _.assign(templateData, { - 'begin': interpolate('s#=n#.start()'), - 'end': interpolate('r#=n#.microseconds()/1e6') - }); - } else { - _.assign(templateData, { - 'begin': interpolate('s#=n#()'), - 'end': interpolate('r#=(n#()-s#)/1e6') - }); - } - } - else if (timer.ns.now) { - _.assign(templateData, { - 'begin': interpolate('s#=n#.now()'), - 'end': interpolate('r#=(n#.now()-s#)/1e3') - }); - } - else { - _.assign(templateData, { - 'begin': interpolate('s#=new n#().getTime()'), - 'end': interpolate('r#=(new n#().getTime()-s#)/1e3') - }); - } - // Define `timer` methods. - timer.start = createFunction( - interpolate('o#'), - interpolate('var n#=this.ns,${begin};o#.elapsed=0;o#.timeStamp=s#') - ); - - timer.stop = createFunction( - interpolate('o#'), - interpolate('var n#=this.ns,s#=o#.timeStamp,${end};o#.elapsed=r#') - ); - - // Create compiled test. - return createFunction( - interpolate('window,t#'), - 'var global = window, clearTimeout = global.clearTimeout, setTimeout = global.setTimeout;\n' + - interpolate(body) - ); - } - - /** - * Gets the current timer's minimum resolution (secs). - */ - function getRes(unit) { - var measured, - begin, - count = 30, - divisor = 1e3, - ns = timer.ns, - sample = []; - - // Get average smallest measurable time. - while (count--) { - if (unit == 'us') { - divisor = 1e6; - if (ns.stop) { - ns.start(); - while (!(measured = ns.microseconds())) {} - } else { - begin = ns(); - while (!(measured = ns() - begin)) {} - } - } - else if (unit == 'ns') { - divisor = 1e9; - begin = (begin = ns())[0] + (begin[1] / divisor); - while (!(measured = ((measured = ns())[0] + (measured[1] / divisor)) - begin)) {} - divisor = 1; - } - else if (ns.now) { - begin = ns.now(); - while (!(measured = ns.now() - begin)) {} - } - else { - begin = new ns().getTime(); - while (!(measured = new ns().getTime() - begin)) {} - } - // Check for broken timers. - if (measured > 0) { - sample.push(measured); - } else { - sample.push(Infinity); - break; - } - } - // Convert to seconds. - return getMean(sample) / divisor; - } - - /** - * Interpolates a given template string. - */ - function interpolate(string) { - // Replaces all occurrences of `#` with a unique number and template tokens with content. - return _.template(string.replace(/\#/g, /\d+/.exec(templateData.uid)))(templateData); - } - - /*----------------------------------------------------------------------*/ - - // Detect Chrome's microsecond timer: - // enable benchmarking via the --enable-benchmarking command - // line switch in at least Chrome 7 to use chrome.Interval - try { - if ((timer.ns = new (context.chrome || context.chromium).Interval)) { - timers.push({ 'ns': timer.ns, 'res': getRes('us'), 'unit': 'us' }); - } - } catch(e) {} - - // Detect Node.js's nanosecond resolution timer available in Node.js >= 0.8. - if (processObject && typeof (timer.ns = processObject.hrtime) == 'function') { - timers.push({ 'ns': timer.ns, 'res': getRes('ns'), 'unit': 'ns' }); - } - // Pick timer with highest resolution. - timer = _.minBy(timers, 'res'); - - // Error if there are no working timers. - if (timer.res == Infinity) { - throw new Error('Benchmark.js was unable to find a working timer.'); - } - // Resolve time span required to achieve a percent uncertainty of at most 1%. - // For more information see http://spiff.rit.edu/classes/phys273/uncert/uncert.html. - options.minTime || (options.minTime = max(timer.res / 2 / 0.01, 0.05)); - return clock.apply(null, arguments); - } - - /*------------------------------------------------------------------------*/ - - /** - * Computes stats on benchmark results. - * - * @private - * @param {Object} bench The benchmark instance. - * @param {Object} options The options object. - */ - function compute(bench, options) { - options || (options = {}); - - var async = options.async, - elapsed = 0, - initCount = bench.initCount, - minSamples = bench.minSamples, - queue = [], - sample = bench.stats.sample; - - /** - * Adds a clone to the queue. - */ - function enqueue() { - queue.push(bench.clone({ - '_original': bench, - 'events': { - 'abort': [update], - 'cycle': [update], - 'error': [update], - 'start': [update] - } - })); - } - - /** - * Updates the clone/original benchmarks to keep their data in sync. - */ - function update(event) { - var clone = this, - type = event.type; - - if (bench.running) { - if (type == 'start') { - // Note: `clone.minTime` prop is inited in `clock()`. - clone.count = bench.initCount; - } - else { - if (type == 'error') { - bench.error = clone.error; - } - if (type == 'abort') { - bench.abort(); - bench.emit('cycle'); - } else { - event.currentTarget = event.target = bench; - bench.emit(event); - } - } - } else if (bench.aborted) { - // Clear abort listeners to avoid triggering bench's abort/cycle again. - clone.events.abort.length = 0; - clone.abort(); - } - } - - /** - * Determines if more clones should be queued or if cycling should stop. - */ - function evaluate(event) { - var critical, - df, - mean, - moe, - rme, - sd, - sem, - variance, - clone = event.target, - done = bench.aborted, - now = _.now(), - size = sample.push(clone.times.period), - maxedOut = size >= minSamples && (elapsed += now - clone.times.timeStamp) / 1e3 > bench.maxTime, - times = bench.times, - varOf = function(sum, x) { return sum + pow(x - mean, 2); }; - - // Exit early for aborted or unclockable tests. - if (done || clone.hz == Infinity) { - maxedOut = !(size = sample.length = queue.length = 0); - } - - if (!done) { - // Compute the sample mean (estimate of the population mean). - mean = getMean(sample); - // Compute the sample variance (estimate of the population variance). - variance = _.reduce(sample, varOf, 0) / (size - 1) || 0; - // Compute the sample standard deviation (estimate of the population standard deviation). - sd = sqrt(variance); - // Compute the standard error of the mean (a.k.a. the standard deviation of the sampling distribution of the sample mean). - sem = sd / sqrt(size); - // Compute the degrees of freedom. - df = size - 1; - // Compute the critical value. - critical = tTable[Math.round(df) || 1] || tTable.infinity; - // Compute the margin of error. - moe = sem * critical; - // Compute the relative margin of error. - rme = (moe / mean) * 100 || 0; - - _.assign(bench.stats, { - 'deviation': sd, - 'mean': mean, - 'moe': moe, - 'rme': rme, - 'sem': sem, - 'variance': variance - }); - - // Abort the cycle loop when the minimum sample size has been collected - // and the elapsed time exceeds the maximum time allowed per benchmark. - // We don't count cycle delays toward the max time because delays may be - // increased by browsers that clamp timeouts for inactive tabs. For more - // information see https://developer.mozilla.org/en/window.setTimeout#Inactive_tabs. - if (maxedOut) { - // Reset the `initCount` in case the benchmark is rerun. - bench.initCount = initCount; - bench.running = false; - done = true; - times.elapsed = (now - times.timeStamp) / 1e3; - } - if (bench.hz != Infinity) { - bench.hz = 1 / mean; - times.cycle = mean * bench.count; - times.period = mean; - } - } - // If time permits, increase sample size to reduce the margin of error. - if (queue.length < 2 && !maxedOut) { - enqueue(); - } - // Abort the `invoke` cycle when done. - event.aborted = done; - } - - // Init queue and begin. - enqueue(); - invoke(queue, { - 'name': 'run', - 'args': { 'async': async }, - 'queued': true, - 'onCycle': evaluate, - 'onComplete': function() { bench.emit('complete'); } - }); - } - - /*------------------------------------------------------------------------*/ - - /** - * Cycles a benchmark until a run `count` can be established. - * - * @private - * @param {Object} clone The cloned benchmark instance. - * @param {Object} options The options object. - */ - function cycle(clone, options) { - options || (options = {}); - - var deferred; - if (clone instanceof Deferred) { - deferred = clone; - clone = clone.benchmark; - } - var clocked, - cycles, - divisor, - event, - minTime, - period, - async = options.async, - bench = clone._original, - count = clone.count, - times = clone.times; - - // Continue, if not aborted between cycles. - if (clone.running) { - // `minTime` is set to `Benchmark.options.minTime` in `clock()`. - cycles = ++clone.cycles; - clocked = deferred ? deferred.elapsed : clock(clone); - minTime = clone.minTime; - - if (cycles > bench.cycles) { - bench.cycles = cycles; - } - if (clone.error) { - event = Event('error'); - event.message = clone.error; - clone.emit(event); - if (!event.cancelled) { - clone.abort(); - } - } - } - // Continue, if not errored. - if (clone.running) { - // Compute the time taken to complete last test cycle. - bench.times.cycle = times.cycle = clocked; - // Compute the seconds per operation. - period = bench.times.period = times.period = clocked / count; - // Compute the ops per second. - bench.hz = clone.hz = 1 / period; - // Avoid working our way up to this next time. - bench.initCount = clone.initCount = count; - // Do we need to do another cycle? - clone.running = clocked < minTime; - - if (clone.running) { - // Tests may clock at `0` when `initCount` is a small number, - // to avoid that we set its count to something a bit higher. - if (!clocked && (divisor = divisors[clone.cycles]) != null) { - count = floor(4e6 / divisor); - } - // Calculate how many more iterations it will take to achieve the `minTime`. - if (count <= clone.count) { - count += Math.ceil((minTime - clocked) / period); - } - clone.running = count != Infinity; - } - } - // Should we exit early? - event = Event('cycle'); - clone.emit(event); - if (event.aborted) { - clone.abort(); - } - // Figure out what to do next. - if (clone.running) { - // Start a new cycle. - clone.count = count; - if (deferred) { - clone.compiled.call(deferred, context, timer); - } else if (async) { - delay(clone, function() { cycle(clone, options); }); - } else { - cycle(clone); - } - } - else { - // Fix TraceMonkey bug associated with clock fallbacks. - // For more information see http://bugzil.la/509069. - if (support.browser) { - runScript(uid + '=1;delete ' + uid); - } - // We're done. - clone.emit('complete'); - } - } - - /*------------------------------------------------------------------------*/ - - /** - * Runs the benchmark. - * - * @memberOf Benchmark - * @param {Object} [options={}] Options object. - * @returns {Object} The benchmark instance. - * @example - * - * // basic usage - * bench.run(); - * - * // or with options - * bench.run({ 'async': true }); - */ - function run(options) { - var bench = this, - event = Event('start'); - - // Set `running` to `false` so `reset()` won't call `abort()`. - bench.running = false; - bench.reset(); - bench.running = true; - - bench.count = bench.initCount; - bench.times.timeStamp = _.now(); - bench.emit(event); - - if (!event.cancelled) { - options = { 'async': ((options = options && options.async) == null ? bench.async : options) && support.timeout }; - - // For clones created within `compute()`. - if (bench._original) { - if (bench.defer) { - Deferred(bench); - } else { - cycle(bench, options); - } - } - // For original benchmarks. - else { - compute(bench, options); - } - } - return bench; - } - - /*------------------------------------------------------------------------*/ - - // Firefox 1 erroneously defines variable and argument names of functions on - // the function itself as non-configurable properties with `undefined` values. - // The bugginess continues as the `Benchmark` constructor has an argument - // named `options` and Firefox 1 will not assign a value to `Benchmark.options`, - // making it non-writable in the process, unless it is the first property - // assigned by for-in loop of `_.assign()`. - _.assign(Benchmark, { - - /** - * The default options copied by benchmark instances. - * - * @static - * @memberOf Benchmark - * @type Object - */ - 'options': { - - /** - * A flag to indicate that benchmark cycles will execute asynchronously - * by default. - * - * @memberOf Benchmark.options - * @type boolean - */ - 'async': false, - - /** - * A flag to indicate that the benchmark clock is deferred. - * - * @memberOf Benchmark.options - * @type boolean - */ - 'defer': false, - - /** - * The delay between test cycles (secs). - * @memberOf Benchmark.options - * @type number - */ - 'delay': 0.005, - - /** - * Displayed by `Benchmark#toString` when a `name` is not available - * (auto-generated if absent). - * - * @memberOf Benchmark.options - * @type string - */ - 'id': undefined, - - /** - * The default number of times to execute a test on a benchmark's first cycle. - * - * @memberOf Benchmark.options - * @type number - */ - 'initCount': 1, - - /** - * The maximum time a benchmark is allowed to run before finishing (secs). - * - * Note: Cycle delays aren't counted toward the maximum time. - * - * @memberOf Benchmark.options - * @type number - */ - 'maxTime': 5, - - /** - * The minimum sample size required to perform statistical analysis. - * - * @memberOf Benchmark.options - * @type number - */ - 'minSamples': 5, - - /** - * The time needed to reduce the percent uncertainty of measurement to 1% (secs). - * - * @memberOf Benchmark.options - * @type number - */ - 'minTime': 0, - - /** - * The name of the benchmark. - * - * @memberOf Benchmark.options - * @type string - */ - 'name': undefined, - - /** - * An event listener called when the benchmark is aborted. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onAbort': undefined, - - /** - * An event listener called when the benchmark completes running. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onComplete': undefined, - - /** - * An event listener called after each run cycle. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onCycle': undefined, - - /** - * An event listener called when a test errors. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onError': undefined, - - /** - * An event listener called when the benchmark is reset. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onReset': undefined, - - /** - * An event listener called when the benchmark starts running. - * - * @memberOf Benchmark.options - * @type Function - */ - 'onStart': undefined - }, - - /** - * Platform object with properties describing things like browser name, - * version, and operating system. See [`platform.js`](https://mths.be/platform). - * - * @static - * @memberOf Benchmark - * @type Object - */ - 'platform': context.platform || require('platform') || ({ - 'description': context.navigator && context.navigator.userAgent || null, - 'layout': null, - 'product': null, - 'name': null, - 'manufacturer': null, - 'os': null, - 'prerelease': null, - 'version': null, - 'toString': function() { - return this.description || ''; - } - }), - - /** - * The semantic version number. - * - * @static - * @memberOf Benchmark - * @type string - */ - 'version': '2.1.2' - }); - - _.assign(Benchmark, { - 'filter': filter, - 'formatNumber': formatNumber, - 'invoke': invoke, - 'join': join, - 'runInContext': runInContext, - 'support': support - }); - - // Add lodash methods to Benchmark. - _.each(['each', 'forEach', 'forOwn', 'has', 'indexOf', 'map', 'reduce'], function(methodName) { - Benchmark[methodName] = _[methodName]; - }); - - /*------------------------------------------------------------------------*/ - - _.assign(Benchmark.prototype, { - - /** - * The number of times a test was executed. - * - * @memberOf Benchmark - * @type number - */ - 'count': 0, - - /** - * The number of cycles performed while benchmarking. - * - * @memberOf Benchmark - * @type number - */ - 'cycles': 0, - - /** - * The number of executions per second. - * - * @memberOf Benchmark - * @type number - */ - 'hz': 0, - - /** - * The compiled test function. - * - * @memberOf Benchmark - * @type {Function|string} - */ - 'compiled': undefined, - - /** - * The error object if the test failed. - * - * @memberOf Benchmark - * @type Object - */ - 'error': undefined, - - /** - * The test to benchmark. - * - * @memberOf Benchmark - * @type {Function|string} - */ - 'fn': undefined, - - /** - * A flag to indicate if the benchmark is aborted. - * - * @memberOf Benchmark - * @type boolean - */ - 'aborted': false, - - /** - * A flag to indicate if the benchmark is running. - * - * @memberOf Benchmark - * @type boolean - */ - 'running': false, - - /** - * Compiled into the test and executed immediately **before** the test loop. - * - * @memberOf Benchmark - * @type {Function|string} - * @example - * - * // basic usage - * var bench = Benchmark({ - * 'setup': function() { - * var c = this.count, - * element = document.getElementById('container'); - * while (c--) { - * element.appendChild(document.createElement('div')); - * } - * }, - * 'fn': function() { - * element.removeChild(element.lastChild); - * } - * }); - * - * // compiles to something like: - * var c = this.count, - * element = document.getElementById('container'); - * while (c--) { - * element.appendChild(document.createElement('div')); - * } - * var start = new Date; - * while (count--) { - * element.removeChild(element.lastChild); - * } - * var end = new Date - start; - * - * // or using strings - * var bench = Benchmark({ - * 'setup': '\ - * var a = 0;\n\ - * (function() {\n\ - * (function() {\n\ - * (function() {', - * 'fn': 'a += 1;', - * 'teardown': '\ - * }())\n\ - * }())\n\ - * }())' - * }); - * - * // compiles to something like: - * var a = 0; - * (function() { - * (function() { - * (function() { - * var start = new Date; - * while (count--) { - * a += 1; - * } - * var end = new Date - start; - * }()) - * }()) - * }()) - */ - 'setup': _.noop, - - /** - * Compiled into the test and executed immediately **after** the test loop. - * - * @memberOf Benchmark - * @type {Function|string} - */ - 'teardown': _.noop, - - /** - * An object of stats including mean, margin or error, and standard deviation. - * - * @memberOf Benchmark - * @type Object - */ - 'stats': { - - /** - * The margin of error. - * - * @memberOf Benchmark#stats - * @type number - */ - 'moe': 0, - - /** - * The relative margin of error (expressed as a percentage of the mean). - * - * @memberOf Benchmark#stats - * @type number - */ - 'rme': 0, - - /** - * The standard error of the mean. - * - * @memberOf Benchmark#stats - * @type number - */ - 'sem': 0, - - /** - * The sample standard deviation. - * - * @memberOf Benchmark#stats - * @type number - */ - 'deviation': 0, - - /** - * The sample arithmetic mean (secs). - * - * @memberOf Benchmark#stats - * @type number - */ - 'mean': 0, - - /** - * The array of sampled periods. - * - * @memberOf Benchmark#stats - * @type Array - */ - 'sample': [], - - /** - * The sample variance. - * - * @memberOf Benchmark#stats - * @type number - */ - 'variance': 0 - }, - - /** - * An object of timing data including cycle, elapsed, period, start, and stop. - * - * @memberOf Benchmark - * @type Object - */ - 'times': { - - /** - * The time taken to complete the last cycle (secs). - * - * @memberOf Benchmark#times - * @type number - */ - 'cycle': 0, - - /** - * The time taken to complete the benchmark (secs). - * - * @memberOf Benchmark#times - * @type number - */ - 'elapsed': 0, - - /** - * The time taken to execute the test once (secs). - * - * @memberOf Benchmark#times - * @type number - */ - 'period': 0, - - /** - * A timestamp of when the benchmark started (ms). - * - * @memberOf Benchmark#times - * @type number - */ - 'timeStamp': 0 - } - }); - - _.assign(Benchmark.prototype, { - 'abort': abort, - 'clone': clone, - 'compare': compare, - 'emit': emit, - 'listeners': listeners, - 'off': off, - 'on': on, - 'reset': reset, - 'run': run, - 'toString': toStringBench - }); - - /*------------------------------------------------------------------------*/ - - _.assign(Deferred.prototype, { - - /** - * The deferred benchmark instance. - * - * @memberOf Benchmark.Deferred - * @type Object - */ - 'benchmark': null, - - /** - * The number of deferred cycles performed while benchmarking. - * - * @memberOf Benchmark.Deferred - * @type number - */ - 'cycles': 0, - - /** - * The time taken to complete the deferred benchmark (secs). - * - * @memberOf Benchmark.Deferred - * @type number - */ - 'elapsed': 0, - - /** - * A timestamp of when the deferred benchmark started (ms). - * - * @memberOf Benchmark.Deferred - * @type number - */ - 'timeStamp': 0 - }); - - _.assign(Deferred.prototype, { - 'resolve': resolve - }); - - /*------------------------------------------------------------------------*/ - - _.assign(Event.prototype, { - - /** - * A flag to indicate if the emitters listener iteration is aborted. - * - * @memberOf Benchmark.Event - * @type boolean - */ - 'aborted': false, - - /** - * A flag to indicate if the default action is cancelled. - * - * @memberOf Benchmark.Event - * @type boolean - */ - 'cancelled': false, - - /** - * The object whose listeners are currently being processed. - * - * @memberOf Benchmark.Event - * @type Object - */ - 'currentTarget': undefined, - - /** - * The return value of the last executed listener. - * - * @memberOf Benchmark.Event - * @type Mixed - */ - 'result': undefined, - - /** - * The object to which the event was originally emitted. - * - * @memberOf Benchmark.Event - * @type Object - */ - 'target': undefined, - - /** - * A timestamp of when the event was created (ms). - * - * @memberOf Benchmark.Event - * @type number - */ - 'timeStamp': 0, - - /** - * The event type. - * - * @memberOf Benchmark.Event - * @type string - */ - 'type': '' - }); - - /*------------------------------------------------------------------------*/ - - /** - * The default options copied by suite instances. - * - * @static - * @memberOf Benchmark.Suite - * @type Object - */ - Suite.options = { - - /** - * The name of the suite. - * - * @memberOf Benchmark.Suite.options - * @type string - */ - 'name': undefined - }; - - /*------------------------------------------------------------------------*/ - - _.assign(Suite.prototype, { - - /** - * The number of benchmarks in the suite. - * - * @memberOf Benchmark.Suite - * @type number - */ - 'length': 0, - - /** - * A flag to indicate if the suite is aborted. - * - * @memberOf Benchmark.Suite - * @type boolean - */ - 'aborted': false, - - /** - * A flag to indicate if the suite is running. - * - * @memberOf Benchmark.Suite - * @type boolean - */ - 'running': false - }); - - _.assign(Suite.prototype, { - 'abort': abortSuite, - 'add': add, - 'clone': cloneSuite, - 'emit': emit, - 'filter': filterSuite, - 'join': arrayRef.join, - 'listeners': listeners, - 'off': off, - 'on': on, - 'pop': arrayRef.pop, - 'push': push, - 'reset': resetSuite, - 'run': runSuite, - 'reverse': arrayRef.reverse, - 'shift': shift, - 'slice': slice, - 'sort': arrayRef.sort, - 'splice': arrayRef.splice, - 'unshift': unshift - }); - - /*------------------------------------------------------------------------*/ - - // Expose Deferred, Event, and Suite. - _.assign(Benchmark, { - 'Deferred': Deferred, - 'Event': Event, - 'Suite': Suite - }); - - /*------------------------------------------------------------------------*/ - - // Add lodash methods as Suite methods. - _.each(['each', 'forEach', 'indexOf', 'map', 'reduce'], function(methodName) { - var func = _[methodName]; - Suite.prototype[methodName] = function() { - var args = [this]; - push.apply(args, arguments); - return func.apply(_, args); - }; - }); - - // Avoid array-like object bugs with `Array#shift` and `Array#splice` - // in Firefox < 10 and IE < 9. - _.each(['pop', 'shift', 'splice'], function(methodName) { - var func = arrayRef[methodName]; - - Suite.prototype[methodName] = function() { - var value = this, - result = func.apply(value, arguments); - - if (value.length === 0) { - delete value[0]; - } - return result; - }; - }); - - // Avoid buggy `Array#unshift` in IE < 8 which doesn't return the new - // length of the array. - Suite.prototype.unshift = function() { - var value = this; - unshift.apply(value, arguments); - return value.length; - }; - - return Benchmark; - } - - /*--------------------------------------------------------------------------*/ - - var Benchmark = runInContext(); - - window.Benchmark = Benchmark; - - return Benchmark; - -}.call(this)); diff --git a/tgui/packages/tgui-bench/package.json b/tgui/packages/tgui-bench/package.json deleted file mode 100644 index eb0ca5b5a88..00000000000 --- a/tgui/packages/tgui-bench/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "private": true, - "name": "tgui-bench", - "version": "4.3.1", - "dependencies": { - "common": "workspace:*", - "fastify": "^3.29.4", - "fastify-static": "^4.2.3", - "inferno": "^7.4.8", - "inferno-vnode-flags": "^7.4.8", - "lodash": "^4.18.1", - "platform": "^1.3.6", - "tgui": "workspace:*" - } -} diff --git a/tgui/packages/tgui-bench/tests/Button.test.tsx b/tgui/packages/tgui-bench/tests/Button.test.tsx deleted file mode 100644 index 6b806d720ab..00000000000 --- a/tgui/packages/tgui-bench/tests/Button.test.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import { linkEvent } from 'inferno'; -import { Button } from 'tgui/components'; -import { createRenderer } from 'tgui/renderer'; - -const render = createRenderer(); - -const handleClick = () => undefined; - -export const SingleButton = () => { - const node = ; - render(node); -}; - -export const SingleButtonWithCallback = () => { - const node = ; - render(node); -}; - -export const SingleButtonWithLinkEvent = () => { - const node = ( - - ); - render(node); -}; - -export const ListOfButtons = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ; - nodes.push(node); - } - render(
    {nodes}
    ); -}; - -export const ListOfButtonsWithCallback = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
    {nodes}
    ); -}; - -export const ListOfButtonsWithLinkEvent = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
    {nodes}
    ); -}; - -export const ListOfButtonsWithIcons = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
    {nodes}
    ); -}; - -export const ListOfButtonsWithTooltips = () => { - const nodes: JSX.Element[] = []; - for (let i = 0; i < 100; i++) { - const node = ( - - ); - nodes.push(node); - } - render(
    {nodes}
    ); -}; diff --git a/tgui/packages/tgui-bench/tests/Flex.test.tsx b/tgui/packages/tgui-bench/tests/Flex.test.tsx deleted file mode 100644 index 66c039a1908..00000000000 --- a/tgui/packages/tgui-bench/tests/Flex.test.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Flex } from 'tgui/components'; -import { createRenderer } from 'tgui/renderer'; - -const render = createRenderer(); - -export const Default = () => { - const node = ( - - Text {Math.random()} - - Text {Math.random()} - - - ); - render(node); -}; diff --git a/tgui/packages/tgui-bench/tests/Stack.test.tsx b/tgui/packages/tgui-bench/tests/Stack.test.tsx deleted file mode 100644 index ce7f5599e72..00000000000 --- a/tgui/packages/tgui-bench/tests/Stack.test.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Stack } from 'tgui/components'; -import { createRenderer } from 'tgui/renderer'; - -const render = createRenderer(); - -export const Default = () => { - const node = ( - - Text {Math.random()} - - Text {Math.random()} - - - ); - render(node); -}; diff --git a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx b/tgui/packages/tgui-bench/tests/Tooltip.test.tsx deleted file mode 100644 index 9dae16f5c03..00000000000 --- a/tgui/packages/tgui-bench/tests/Tooltip.test.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { Box, Tooltip } from 'tgui/components'; -import { createRenderer } from 'tgui/renderer'; - -const render = createRenderer(); - -export const ListOfTooltips = () => { - const nodes: JSX.Element[] = []; - - for (let i = 0; i < 100; i++) { - nodes.push( - - - Tooltip #{i} - - , - ); - } - - render(
    {nodes}
    ); -}; diff --git a/tgui/packages/tgui-chat-dark/index.ts b/tgui/packages/tgui-chat-dark/index.ts new file mode 100644 index 00000000000..dd105da9774 --- /dev/null +++ b/tgui/packages/tgui-chat-dark/index.ts @@ -0,0 +1 @@ +import '../tgui-panel/styles/tgchat/chat-dark.scss'; diff --git a/tgui/packages/tgui-dev-server/dreamseeker.js b/tgui/packages/tgui-dev-server/dreamseeker.js deleted file mode 100644 index af4bfe891cb..00000000000 --- a/tgui/packages/tgui-dev-server/dreamseeker.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { exec } from 'child_process'; -import { promisify } from 'util'; -import { createLogger } from './logging.js'; -import { require } from './require.js'; - -const axios = require('axios'); -const logger = createLogger('dreamseeker'); - -const instanceByPid = new Map(); - -export class DreamSeeker { - constructor(pid, addr) { - this.pid = pid; - this.addr = addr; - this.client = axios.create({ - baseURL: `http://${addr}/`, - }); - } - - topic(params = {}) { - // prettier-ignore - const query = Object.keys(params) - .map(key => encodeURIComponent(key) - + '=' + encodeURIComponent(params[key])) - .join('&'); - logger.log( - `topic call at ${this.client.defaults.baseURL + '/dummy?' + query}`, - ); - return this.client.get('/dummy?' + query); - } -} - -/** - * @param {number[]} pids - * @returns {DreamSeeker[]} - */ -DreamSeeker.getInstancesByPids = async (pids) => { - if (process.platform !== 'win32') { - return []; - } - const instances = []; - const pidsToResolve = []; - for (let pid of pids) { - const instance = instanceByPid.get(pid); - if (instance) { - instances.push(instance); - } else { - pidsToResolve.push(pid); - } - } - if (pidsToResolve.length > 0) { - try { - const command = 'netstat -ano | findstr TCP | findstr 0.0.0.0:0'; - const { stdout } = await promisify(exec)(command, { - // Max buffer of 1MB (default is 200KB) - maxBuffer: 1024 * 1024, - }); - // Line format: - // proto addr mask mode pid - const entries = []; - const lines = stdout.split('\r\n'); - for (let line of lines) { - const words = line.match(/\S+/g); - if (!words || words.length === 0) { - continue; - } - const entry = { - addr: words[1], - pid: parseInt(words[4], 10), - }; - if (pidsToResolve.includes(entry.pid)) { - entries.push(entry); - } - } - const len = entries.length; - logger.log('found', len, plural('instance', len)); - for (let entry of entries) { - const { pid, addr } = entry; - const instance = new DreamSeeker(pid, addr); - instances.push(instance); - instanceByPid.set(pid, instance); - } - } catch (err) { - if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') { - logger.error(err.message, err.code); - } else { - logger.error(err); - } - return []; - } - } - return instances; -}; - -const plural = (word, n) => (n !== 1 ? word + 's' : word); diff --git a/tgui/packages/tgui-dev-server/dreamseeker.ts b/tgui/packages/tgui-dev-server/dreamseeker.ts new file mode 100644 index 00000000000..90e26b914c4 --- /dev/null +++ b/tgui/packages/tgui-dev-server/dreamseeker.ts @@ -0,0 +1,115 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { exec } from 'node:child_process'; +import { promisify } from 'node:util'; + +import axios, { type AxiosInstance, type AxiosResponse } from 'axios'; + +import { createLogger } from './logging'; + +type Entry = { + addr: string; + pid: number; +}; + +const logger = createLogger('dreamseeker'); + +const instanceByPid = new Map(); + +export class DreamSeeker { + public pid: number; + public addr: string; + public client: AxiosInstance; + + constructor(pid: number, addr: string) { + this.pid = pid; + this.addr = addr; + this.client = axios.create({ + baseURL: `http://${addr}`, + }); + } + + topic(params: Record = {}): Promise { + const query = Object.keys(params) + .map( + (key) => + `${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`, + ) + .join('&'); + logger.log( + `topic call at ${this.client.defaults.baseURL}/dummy.htm?${query}`, + ); + return this.client.get(`/dummy.htm?${query}`); + } + + static async getInstancesByPids(pids: number[]): Promise { + const instances: DreamSeeker[] = []; + const pidsToResolve: number[] = []; + + for (const pid of pids) { + const instance = instanceByPid.get(pid); + if (instance) { + instances.push(instance); + } else { + pidsToResolve.push(pid); + } + } + + if (pidsToResolve.length === 0) { + return instances; + } + + const command = 'netstat -ano | findstr TCP | findstr 0.0.0.0:0'; + + try { + const { stdout } = await promisify(exec)(command, { + // Max buffer of 1MB (default is 200KB) + maxBuffer: 1024 * 1024, + }); + + // Line format: + // proto addr mask mode pid + const entries: Entry[] = []; + const lines = stdout.split('\r\n'); + + for (const line of lines) { + const words = line.match(/\S+/g); + if (!words || words.length === 0) { + continue; + } + const entry: Entry = { + addr: words[1], + pid: parseInt(words[4], 10), + }; + if (pidsToResolve.includes(entry.pid)) { + entries.push(entry); + } + } + + const len = entries.length; + logger.log('found', len, plural('instance', len)); + for (const entry of entries) { + const { pid, addr } = entry; + const instance = new DreamSeeker(pid, addr); + instances.push(instance); + instanceByPid.set(pid, instance); + } + } catch (err) { + if (err.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER') { + logger.error(err.message, err.code); + } else { + logger.error(err); + } + return []; + } + return instances; + } +} + +function plural(word: string, n: number): string { + return n !== 1 ? `${word}s` : word; +} diff --git a/tgui/packages/tgui-dev-server/index.js b/tgui/packages/tgui-dev-server/index.js deleted file mode 100644 index 199e93d8363..00000000000 --- a/tgui/packages/tgui-dev-server/index.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { createCompiler } from './webpack.js'; -import { reloadByondCache } from './reloader.js'; - -const noHot = process.argv.includes('--no-hot'); -const noTmp = process.argv.includes('--no-tmp'); -const reloadOnce = process.argv.includes('--reload'); - -const setupServer = async () => { - const compiler = await createCompiler({ - mode: 'development', - hot: !noHot, - devServer: true, - useTmpFolder: !noTmp, - }); - // Reload cache once - if (reloadOnce) { - await reloadByondCache(compiler.bundleDir); - return; - } - // Run a development server - await compiler.watch(); -}; - -setupServer(); diff --git a/tgui/packages/tgui-dev-server/index.ts b/tgui/packages/tgui-dev-server/index.ts new file mode 100644 index 00000000000..f7fe55851e4 --- /dev/null +++ b/tgui/packages/tgui-dev-server/index.ts @@ -0,0 +1,31 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import fs from 'node:fs'; + +import { reloadByondCache } from './reloader'; +import { RspackCompiler } from './webpack'; + +const reloadOnce = process.argv.includes('--reload'); + +async function setupServer() { + fs.mkdirSync('./public/.tmp', { recursive: true }); + + const compiler = new RspackCompiler(); + + await compiler.setup(); + + // Reload cache once + if (reloadOnce) { + await reloadByondCache(compiler.bundleDir); + return; + } + + // Run a development server + await compiler.watch(); +} + +setupServer(); diff --git a/tgui/packages/tgui-dev-server/link/client.cjs b/tgui/packages/tgui-dev-server/link/client.cjs deleted file mode 100644 index 1e21d42ce86..00000000000 --- a/tgui/packages/tgui-dev-server/link/client.cjs +++ /dev/null @@ -1,179 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -let socket; -const queue = []; -const subscribers = []; - -const ensureConnection = () => { - if (process.env.NODE_ENV !== 'production') { - if (!window.WebSocket) { - return; - } - if (!socket || socket.readyState === WebSocket.CLOSED) { - const DEV_SERVER_IP = process.env.DEV_SERVER_IP || '127.0.0.1'; - socket = new WebSocket(`ws://${DEV_SERVER_IP}:3000`); - socket.onopen = () => { - // Empty the message queue - while (queue.length !== 0) { - const msg = queue.shift(); - socket.send(msg); - } - }; - socket.onmessage = (event) => { - const msg = JSON.parse(event.data); - for (let subscriber of subscribers) { - subscriber(msg); - } - }; - } - } -}; - -if (process.env.NODE_ENV !== 'production') { - window.onunload = () => socket && socket.close(); -} - -const subscribe = (fn) => subscribers.push(fn); - -/** - * A json serializer which handles circular references and other junk. - */ -const serializeObject = (obj) => { - let refs = []; - const primitiveReviver = (value) => { - if (typeof value === 'number' && !Number.isFinite(value)) { - return { - __number__: String(value), - }; - } - if (typeof value === 'undefined') { - return { - __undefined__: true, - }; - } - return value; - }; - const objectReviver = (key, value) => { - if (typeof value === 'object') { - if (value === null) { - return value; - } - // Circular reference - if (refs.includes(value)) { - return '[circular ref]'; - } - refs.push(value); - // Error object - // prettier-ignore - const isError = value instanceof Error || ( - value.code && value.message && value.message.includes('Error') - ); - if (isError) { - return { - __error__: true, - string: String(value), - stack: value.stack, - }; - } - // Array - if (Array.isArray(value)) { - return value.map(primitiveReviver); - } - return value; - } - return primitiveReviver(value); - }; - const json = JSON.stringify(obj, objectReviver); - refs = null; - return json; -}; - -const sendMessage = (msg) => { - if (process.env.NODE_ENV !== 'production') { - const json = serializeObject(msg); - // Send message using WebSocket - if (window.WebSocket) { - ensureConnection(); - if (socket.readyState === WebSocket.OPEN) { - socket.send(json); - } else { - // Keep only 100 latest messages in the queue - if (queue.length > 100) { - queue.shift(); - } - queue.push(json); - } - } - // Send message using plain HTTP request. - else { - const DEV_SERVER_IP = process.env.DEV_SERVER_IP || '127.0.0.1'; - const req = new XMLHttpRequest(); - req.open('POST', `http://${DEV_SERVER_IP}:3001`, true); - req.timeout = 250; - req.send(json); - } - } -}; - -const sendLogEntry = (level, ns, ...args) => { - if (process.env.NODE_ENV !== 'production') { - try { - sendMessage({ - type: 'log', - payload: { - level, - ns: ns || 'client', - args, - }, - }); - } catch (err) {} - } -}; - -const setupHotReloading = () => { - if ( - // prettier-ignore - process.env.NODE_ENV !== 'production' - && process.env.WEBPACK_HMR_ENABLED - && window.WebSocket - ) { - if (module.hot) { - ensureConnection(); - sendLogEntry(0, null, 'setting up hot reloading'); - subscribe((msg) => { - const { type } = msg; - sendLogEntry(0, null, 'received', type); - if (type === 'hotUpdate') { - const status = module.hot.status(); - if (status !== 'idle') { - sendLogEntry(0, null, 'hot reload status:', status); - return; - } - module.hot - .check({ - ignoreUnaccepted: true, - ignoreDeclined: true, - ignoreErrored: true, - }) - .then((modules) => { - sendLogEntry(0, null, 'outdated modules', modules); - }) - .catch((err) => { - sendLogEntry(0, null, 'reload error', err); - }); - } - }); - } - } -}; - -module.exports = { - subscribe, - sendMessage, - sendLogEntry, - setupHotReloading, -}; diff --git a/tgui/packages/tgui-dev-server/link/client.ts b/tgui/packages/tgui-dev-server/link/client.ts new file mode 100644 index 00000000000..be283a67601 --- /dev/null +++ b/tgui/packages/tgui-dev-server/link/client.ts @@ -0,0 +1,172 @@ +type Messenger = (msg: any) => void; + +let socket: WebSocket | undefined; +const queue: string[] = []; +const subscribers: Messenger[] = []; + +function ensureConnection() { + if (socket) return; + console.log('Creating a connection'); + + socket = new WebSocket('ws://127.0.0.1:3000'); + + socket.onopen = () => { + // Empty the message queue + while (queue.length !== 0) { + const msg = queue.shift(); + if (msg) { + socket?.send(msg); + } + } + }; + + socket.onmessage = (event) => { + const msg = JSON.parse(event.data); + for (const subscriber of subscribers) { + subscriber(msg); + } + }; + + socket.onerror = (err) => { + console.log('WebSocket error:', err); + }; + + window.addEventListener('unload', () => socket?.close()); +} + +function primitiveReviver(value: unknown): any { + if (typeof value === 'number' && !Number.isFinite(value)) { + return { + __number__: String(value), + }; + } + if (typeof value === 'undefined') { + return { + __undefined__: true, + }; + } + return value; +} + +export function sendLogEntry( + level: number, + ns: string | null = 'client', + ...args: any[] +): void { + if (process.env.NODE_ENV === 'development') { + try { + sendMessage({ + type: 'log', + payload: { + level, + ns, + args, + }, + }); + } catch (err) {} + } +} + +export function sendMessage(msg: Record): void { + if (process.env.NODE_ENV === 'development' && socket) { + const json = serializeObject(msg); + // Send message using WebSocket + if (!window.WebSocket) return; + + ensureConnection(); + if (socket.readyState === WebSocket.OPEN) { + socket.send(json); + } else { + // Keep only 100 latest messages in the queue + if (queue.length > 100) { + queue.shift(); + } + queue.push(json); + } + } +} + +/** A json serializer which handles circular references and other junk. */ +function serializeObject(obj: Record): string { + let refs: string[] = []; + + function objectReviver(key: string, value: any) { + if (typeof value !== 'object') { + return primitiveReviver(value); + } + + if (value === null) { + return value; + } + // Circular reference + if (refs.includes(value)) { + return '[circular ref]'; + } + refs.push(value); + // Error object + const isError = + value instanceof Error || + (value.code && value.message?.includes('Error')); + if (isError) { + return { + __error__: true, + string: String(value), + stack: value.stack, + }; + } + // Array + if (Array.isArray(value)) { + return value.map(primitiveReviver); + } + return value; + } + + const json = JSON.stringify(obj, objectReviver); + refs = []; + return json; +} + +export function setupHotReloading(): void { + if (process.env.NODE_ENV === 'development' && window.WebSocket) { + console.log('Setting up hot reloading...'); + if (socket) { + socket.close(); + socket = undefined; + subscribers.length = 0; + } + ensureConnection(); + subscribe(({ type }) => { + if (type !== 'hotUpdate') return; + + const status = import.meta.webpackHot?.status(); + if (status === 'ready') { + import.meta.webpackHot + ?.apply({ + ignoreUnaccepted: true, + ignoreDeclined: true, + ignoreErrored: true, + }) + .then((modules) => { + console.log('outdated modules:', modules); + }) + .catch((err) => { + console.log(import.meta.webpackHot?.status()); + console.error('Hot reload error:', err); + }); + } else if (status === 'idle') { + import.meta.webpackHot + ?.check(true) + .then((updatedModules) => { + console.log('Updated modules:', updatedModules); + }) + .catch((err) => { + console.error('Hot reload error:', err); + }); + } + }); + } +} + +export function subscribe(fn: Messenger): void { + subscribers.push(fn); +} diff --git a/tgui/packages/tgui-dev-server/link/retrace.js b/tgui/packages/tgui-dev-server/link/retrace.ts similarity index 56% rename from tgui/packages/tgui-dev-server/link/retrace.js rename to tgui/packages/tgui-dev-server/link/retrace.ts index b7f4d4eacfb..6fd1bc27ab0 100644 --- a/tgui/packages/tgui-dev-server/link/retrace.js +++ b/tgui/packages/tgui-dev-server/link/retrace.ts @@ -1,46 +1,46 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ +import path from 'node:path'; -import fs from 'fs'; -import { basename } from 'path'; -import { createLogger } from '../logging.js'; -import { require } from '../require.js'; -import { resolveGlob } from '../util.js'; +import { SourceMapConsumer } from 'source-map'; +import { parse as parseStackTrace } from 'stacktrace-parser'; -const SourceMap = require('source-map'); -const { parse: parseStackTrace } = require('stacktrace-parser'); +import { createLogger } from '../logging'; +import { resolveGlob } from '../util'; + +type SourceMap = { + file: string; + consumer: SourceMapConsumer; +}; const logger = createLogger('retrace'); -const { SourceMapConsumer } = SourceMap; -const sourceMaps = []; +const sourceMaps: SourceMap[] = []; -export const loadSourceMaps = async (bundleDir) => { +export async function loadSourceMaps(bundleDir: string): Promise { // Destroy and garbage collect consumers while (sourceMaps.length !== 0) { - const { consumer } = sourceMaps.shift(); - consumer.destroy(); + const map = sourceMaps.shift(); + if (!map?.consumer) continue; + map.consumer.destroy(); } + // Load new sourcemaps - const paths = await resolveGlob(bundleDir, '*.map'); - for (let path of paths) { + const files = await resolveGlob(bundleDir, '*.map'); + for (const file of files) { try { - const file = basename(path).replace('.map', ''); - const consumer = await new SourceMapConsumer( - JSON.parse(fs.readFileSync(path, 'utf8')), - ); + const loc = path.resolve(bundleDir, file); + const parsed = await Bun.file(loc).json(); + const consumer = await new SourceMapConsumer(parsed); + sourceMaps.push({ file, consumer }); } catch (err) { logger.error(err); } } - logger.log(`loaded ${sourceMaps.length} source maps`); -}; -export const retrace = (stack) => { + logger.log(`loaded ${sourceMaps.length} source maps`); +} + +export function retrace(stack: string): string | undefined { if (typeof stack !== 'string') { logger.log('ERROR: Stack is not a string!', stack); return stack; @@ -53,7 +53,7 @@ export const retrace = (stack) => { } // Find the correct source map const sourceMap = sourceMaps.find((sourceMap) => { - return frame.file.includes(sourceMap.file); + return frame.file!.includes(sourceMap.file); }); if (!sourceMap) { return frame; @@ -61,9 +61,8 @@ export const retrace = (stack) => { // Map the frame const { consumer } = sourceMap; const mappedFrame = consumer.originalPositionFor({ - source: basename(frame.file), - line: frame.lineNumber, - column: frame.column, + line: frame.lineNumber || 0, + column: frame.column || 0, }); return { ...frame, @@ -79,10 +78,11 @@ export const retrace = (stack) => { return ` at ${methodName}`; } const compactPath = file - .replace(/^webpack:\/\/\/?/, './') + .replace(/^rspack:\/\/\/?/, './') .replace(/.*node_modules\//, ''); return ` at ${methodName} (${compactPath}:${lineNumber})`; }) .join('\n'); - return header + '\n' + mappedStack; -}; + + return `${header}\n${mappedStack}`; +} diff --git a/tgui/packages/tgui-dev-server/link/server.js b/tgui/packages/tgui-dev-server/link/server.js deleted file mode 100644 index 60cc78c1bd9..00000000000 --- a/tgui/packages/tgui-dev-server/link/server.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import http from 'http'; -import { inspect } from 'util'; -import { createLogger, directLog } from '../logging.js'; -import { require } from '../require.js'; -import { loadSourceMaps, retrace } from './retrace.js'; - -const WebSocket = require('ws'); - -const logger = createLogger('link'); - -const DEBUG = process.argv.includes('--debug'); - -export { loadSourceMaps }; - -export const setupLink = () => new LinkServer(); - -class LinkServer { - constructor() { - logger.log('setting up'); - this.wss = null; - this.setupWebSocketLink(); - this.setupHttpLink(); - } - - // WebSocket-based client link - setupWebSocketLink() { - const port = 3000; - this.wss = new WebSocket.Server({ port }); - this.wss.on('connection', (ws) => { - logger.log('client connected'); - ws.on('message', (json) => { - const msg = deserializeObject(json); - this.handleLinkMessage(ws, msg); - }); - ws.on('close', () => { - logger.log('client disconnected'); - }); - }); - logger.log(`listening on port ${port} (WebSocket)`); - } - - // One way HTTP-based client link for IE8 - setupHttpLink() { - const port = 3001; - this.httpServer = http.createServer((req, res) => { - if (req.method === 'POST') { - let body = ''; - req.on('data', (chunk) => { - body += chunk.toString(); - }); - req.on('end', () => { - const msg = deserializeObject(body); - this.handleLinkMessage(null, msg); - res.end(); - }); - return; - } - res.write('Hello'); - res.end(); - }); - this.httpServer.listen(port); - logger.log(`listening on port ${port} (HTTP)`); - } - - handleLinkMessage(ws, msg) { - const { type, payload } = msg; - if (type === 'log') { - const { level, ns, args } = payload; - // Skip debug messages - if (level <= 0 && !DEBUG) { - return; - } - // prettier-ignore - directLog(ns, ...args.map(arg => { - if (typeof arg === 'object') { - return inspect(arg, { - depth: Infinity, - colors: true, - compact: 8, - }); - } - return arg; - })); - return; - } - if (type === 'relay') { - for (let client of this.wss.clients) { - if (client === ws) { - continue; - } - this.sendMessage(client, msg); - } - return; - } - logger.log('unhandled message', msg); - } - - sendMessage(ws, msg) { - ws.send(JSON.stringify(msg)); - } - - broadcastMessage(msg) { - const clients = [...this.wss.clients]; - if (clients.length === 0) { - return; - } - logger.log(`broadcasting ${msg.type} to ${clients.length} clients`); - for (let client of clients) { - const json = JSON.stringify(msg); - client.send(json); - } - } -} - -const deserializeObject = (str) => { - return JSON.parse(str, (key, value) => { - if (typeof value === 'object' && value !== null) { - if (value.__undefined__) { - // NOTE: You should not rely on deserialized object's undefined, - // this is purely for inspection purposes. - return { - [inspect.custom]: () => undefined, - }; - } - if (value.__number__) { - return parseFloat(value.__number__); - } - if (value.__error__) { - if (!value.stack) { - return value.string; - } - return retrace(value.stack); - } - return value; - } - return value; - }); -}; diff --git a/tgui/packages/tgui-dev-server/link/server.ts b/tgui/packages/tgui-dev-server/link/server.ts new file mode 100644 index 00000000000..9b2ef1e4c85 --- /dev/null +++ b/tgui/packages/tgui-dev-server/link/server.ts @@ -0,0 +1,116 @@ +import { inspect } from 'node:util'; + +import type { ServerWebSocket } from 'bun'; + +import { createLogger, directLog } from '../logging'; +import { retrace } from './retrace'; + +let server: Bun.Server; +const logger = createLogger('link'); +const DEBUG = process.argv.includes('--debug'); + +export function setupLink() { + server = Bun.serve({ + fetch: upgradeServer, + development: true, + hostname: '127.0.0.1', + port: 3000, + websocket: { + open(ws) { + ws.subscribe('link'); + logger.log('client connected'); + }, + close(ws) { + ws.unsubscribe('link'); + logger.log('client disconnected'); + }, + message: handleLinkMessage, + }, + }); +} + +export function broadcastMessage(msg: Record): void { + const subscribers = server.subscriberCount('link'); + if (subscribers === 0) return; + + server?.publish('link', JSON.stringify(msg)); +} + +function deserializeObject(str: any): any { + return JSON.parse(str, (_key: string, value: any) => { + if (typeof value === 'object' && value !== null) { + if (value.__undefined__) { + // NOTE: You should not rely on deserialized object's undefined, + // this is purely for inspection purposes. + return { + [inspect.custom]: () => undefined, + }; + } + if (value.__number__) { + return parseFloat(value.__number__); + } + if (value.__error__) { + if (!value.stack) { + return value.string; + } + return retrace(value.stack); + } + return value; + } + return value; + }); +} + +function handleLinkMessage( + _ws: ServerWebSocket, + message: string | Buffer, +): void { + const deserializedMsg = deserializeObject(message); + const { type, payload } = deserializedMsg; + + if (type === 'log') { + const { level, ns, args } = payload; + // Skip debug messages + if (level <= 0 && !DEBUG) return; + + directLog( + ns, + ...args.map((arg) => { + if (typeof arg === 'object') { + return inspect(arg, { + depth: Infinity, + colors: true, + compact: 8, + }); + } + return arg; + }), + ); + + return; + } + if (type === 'relay') { + broadcastMessage(payload); + + return; + } + + logger.log('unhandled message', JSON.stringify(message)); +} + +function upgradeServer(req: Request, srv: Bun.Server) { + const client = crypto.randomUUID(); + + const upgraded = srv.upgrade(req, { + data: { + id: client, + createdAt: Date.now(), + }, + }); + + if (upgraded) { + return new Response('Ok'); + } else { + return new Response('Upgrade failed', { status: 500 }); + } +} diff --git a/tgui/packages/tgui-dev-server/logging.js b/tgui/packages/tgui-dev-server/logging.js deleted file mode 100644 index 4ec09008ff5..00000000000 --- a/tgui/packages/tgui-dev-server/logging.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -const inception = Date.now(); - -// Runtime detection -const isNode = process && process.release && process.release.name === 'node'; -let isChrome = false; -try { - isChrome = window.navigator.userAgent.toLowerCase().includes('chrome'); -} catch {} - -// Timestamping function -const getTimestamp = () => { - const timestamp = String(Date.now() - inception) - .padStart(4, '0') - .padStart(7, ' '); - const seconds = timestamp.substr(0, timestamp.length - 3); - const millis = timestamp.substr(-3); - return `${seconds}.${millis}`; -}; - -const getPrefix = (() => { - if (isNode) { - // Escape sequences - const ESC = { - dimmed: '\x1b[38;5;240m', - bright: '\x1b[37;1m', - reset: '\x1b[0m', - }; - return (ns) => [ - `${ESC.dimmed}${getTimestamp()} ${ESC.bright}${ns}${ESC.reset}`, - ]; - } - if (isChrome) { - // Styles - const styles = { - dimmed: 'color: #888', - bright: 'font-weight: bold', - }; - return (ns) => [ - `%c${getTimestamp()}%c ${ns}`, - styles.dimmed, - styles.bright, - ]; - } - // prettier-ignore - return ns => [ - `${getTimestamp()} ${ns}`, - ]; -})(); - -/** - * Creates a logger object. - */ -export const createLogger = (ns) => ({ - log: (...args) => console.log(...getPrefix(ns), ...args), - trace: (...args) => console.trace(...getPrefix(ns), ...args), - debug: (...args) => console.debug(...getPrefix(ns), ...args), - info: (...args) => console.info(...getPrefix(ns), ...args), - warn: (...args) => console.warn(...getPrefix(ns), ...args), - error: (...args) => console.error(...getPrefix(ns), ...args), -}); - -/** - * Explicitly log with chosen namespace. - */ -export const directLog = (ns, ...args) => - console.log(...getPrefix(ns), ...args); diff --git a/tgui/packages/tgui-dev-server/logging.ts b/tgui/packages/tgui-dev-server/logging.ts new file mode 100644 index 00000000000..bf46b365ce3 --- /dev/null +++ b/tgui/packages/tgui-dev-server/logging.ts @@ -0,0 +1,72 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +type Fn = (...args: any[]) => void; + +const inception = Date.now(); + +// Runtime detection. Yes, even in bun! +const isNode = process?.release?.name === 'node'; +let isChrome = false; +try { + isChrome = window.navigator.userAgent.toLowerCase().includes('chrome'); +} catch {} + +// Timestamping function +function getTimestamp(): string { + const timestamp = String(Date.now() - inception) + .padStart(4, '0') + .padStart(7, ' '); + const seconds = timestamp.slice(0, timestamp.length - 3); + const millis = timestamp.slice(-3); + + return `${seconds}.${millis}`; +} + +const getPrefix = (() => { + if (isNode) { + // Escape sequences + const ESC = { + dimmed: '\x1b[38;5;240m', + bright: '\x1b[37;1m', + reset: '\x1b[0m', + }; + return (ns: string) => [ + `${ESC.dimmed}${getTimestamp()} ${ESC.bright}${ns}${ESC.reset}`, + ]; + } + if (isChrome) { + // Styles + const styles = { + dimmed: 'color: #888', + bright: 'font-weight: bold', + }; + return (ns: string) => [ + `%c${getTimestamp()}%c ${ns}`, + styles.dimmed, + styles.bright, + ]; + } + + return (ns: string) => [`${getTimestamp()} ${ns}`]; +})(); + +/** Creates a logger object. */ +export function createLogger(ns: string): Record { + return { + log: (...args) => console.log(...getPrefix(ns), ...args), + trace: (...args) => console.trace(...getPrefix(ns), ...args), + debug: (...args) => console.debug(...getPrefix(ns), ...args), + info: (...args) => console.info(...getPrefix(ns), ...args), + warn: (...args) => console.warn(...getPrefix(ns), ...args), + error: (...args) => console.error(...getPrefix(ns), ...args), + }; +} + +/** Explicitly log with chosen namespace. */ +export function directLog(ns: string, ...args: any[]): void { + console.log(...getPrefix(ns), ...args); +} diff --git a/tgui/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index bd1ee1a5bd6..26049529bd6 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -1,13 +1,11 @@ { - "private": true, - "name": "tgui-dev-server", - "version": "4.3.1", - "type": "module", - "dependencies": { - "axios": "^1.15.0", - "glob": "^7.1.7", - "source-map": "^0.7.4", - "stacktrace-parser": "^0.1.10", - "ws": "^7.5.10" - } + "name": "tgui-dev-server", + "version": "6.0.0", + "dependencies": { + "axios": "^1.16.0", + "source-map": "^0.7.4", + "stacktrace-parser": "^0.1.11" + }, + "private": true, + "type": "module" } diff --git a/tgui/packages/tgui-dev-server/reloader.js b/tgui/packages/tgui-dev-server/reloader.ts similarity index 52% rename from tgui/packages/tgui-dev-server/reloader.js rename to tgui/packages/tgui-dev-server/reloader.ts index 427d1aecbd6..fdbb2aa066c 100644 --- a/tgui/packages/tgui-dev-server/reloader.js +++ b/tgui/packages/tgui-dev-server/reloader.ts @@ -4,16 +4,19 @@ * @license MIT */ -import fs from 'fs'; -import os from 'os'; -import { basename } from 'path'; -import { DreamSeeker } from './dreamseeker.js'; -import { createLogger } from './logging.js'; -import { resolveGlob, resolvePath } from './util.js'; -import { regQuery } from './winreg.js'; +import os from 'node:os'; +import path from 'node:path'; + +import { DreamSeeker } from './dreamseeker'; +import { createLogger } from './logging'; +import { resolveGlob, resolvePath } from './util'; +import { regQuery } from './winreg'; const logger = createLogger('reloader'); +// Basic glob pattern for bundle files +const bundleGlob = '*.{bundle,chunk,hot-update}.*'; + const HOME = os.homedir(); const SEARCH_LOCATIONS = [ // Custom location @@ -28,18 +31,20 @@ const SEARCH_LOCATIONS = [ `/mnt/c/Users/*/*/BYOND/cache`, ]; -let cacheRoot; +let cacheRoot: string; -export const findCacheRoot = async () => { +export async function findCacheRoot(): Promise { if (cacheRoot) { return cacheRoot; } logger.log('looking for byond cache'); // Find BYOND cache folders - for (let pattern of SEARCH_LOCATIONS) { + + for (const pattern of SEARCH_LOCATIONS) { if (!pattern) { continue; } + const paths = await resolveGlob(pattern); if (paths.length > 0) { cacheRoot = paths[0]; @@ -47,67 +52,66 @@ export const findCacheRoot = async () => { return cacheRoot; } } + // Query the Windows Registry if (process.platform === 'win32') { logger.log('querying windows registry'); - let userpath = await regQuery('HKCU\\Software\\Dantom\\BYOND', 'userpath'); + const userpath = await regQuery( + 'HKCU\\Software\\Dantom\\BYOND', + 'userpath', + ); if (userpath) { - // prettier-ignore - cacheRoot = userpath - .replace(/\\$/, '') - .replace(/\\/g, '/') - + '/cache'; - onCacheRootFound(cacheRoot); + cacheRoot = `${userpath.replace(/\\$/, '').replace(/\\/g, '/')}/cache`; + await onCacheRootFound(cacheRoot); return cacheRoot; } } logger.log('found no cache directories'); -}; +} -const onCacheRootFound = (cacheRoot) => { +async function onCacheRootFound(cacheRoot: string): Promise { logger.log(`found cache at '${cacheRoot}'`); // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 514. - fs.closeSync(fs.openSync(cacheRoot + '/dummy', 'w')); -}; + await Bun.write(`${cacheRoot}/dummy.htm`, ''); +} -export const reloadByondCache = async (bundleDir) => { +export async function reloadByondCache(bundleDir: string): Promise { const cacheRoot = await findCacheRoot(); - if (!cacheRoot) { - return; - } + if (!cacheRoot) return; + // Find tmp folders in cache - const cacheDirs = await resolveGlob(cacheRoot, './tmp*'); + const cacheDirs = await resolveGlob(cacheRoot, 'tmp*'); if (cacheDirs.length === 0) { logger.log('found no tmp folder in cache'); return; } - // Get dreamseeker instances - const pids = cacheDirs.map((cacheDir) => - parseInt(cacheDir.split('/cache/tmp').pop(), 10), - ); + + const pids = cacheDirs.map((cacheDir) => { + return parseInt(cacheDir.split('\\cache\\tmp')[1], 10); + }); + const dssPromise = DreamSeeker.getInstancesByPids(pids); // Copy assets - const assets = await resolveGlob( - bundleDir, - './*.+(bundle|chunk|hot-update).*', - ); - for (let cacheDir of cacheDirs) { - // Clear garbage - const garbage = await resolveGlob( - cacheDir, - './*.+(bundle|chunk|hot-update).*', - ); - try { - // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515. - fs.closeSync(fs.openSync(cacheDir + '/dummy', 'w')); + const assets = await resolveGlob(bundleDir, bundleGlob); + + for (const cacheDir of cacheDirs) { + // Clear garbage + const garbage = await resolveGlob(cacheDir, bundleGlob); + for (const file of garbage) { + await Bun.file(file).delete(); + } + + try { + // Plant a dummy browser window file, we'll be using this to avoid world topic. For byond 515-516. + await Bun.write(`${cacheDir}/dummy.htm`, ''); - for (let file of garbage) { - fs.unlinkSync(file); - } // Copy assets - for (let asset of assets) { - const destination = resolvePath(cacheDir, basename(asset)); - fs.writeFileSync(destination, fs.readFileSync(asset)); + for (const asset of assets) { + const destination = resolvePath(cacheDir, path.basename(asset)); + const input = Bun.file(asset); + const output = Bun.file(destination); + + await Bun.write(output, input); } logger.log(`copied ${assets.length} files to '${cacheDir}'`); } catch (err) { @@ -119,11 +123,11 @@ export const reloadByondCache = async (bundleDir) => { const dss = await dssPromise; if (dss.length > 0) { logger.log(`notifying dreamseeker`); - for (let dreamseeker of dss) { + for (const dreamseeker of dss) { dreamseeker.topic({ tgui: 1, type: 'cacheReloaded', }); } } -}; +} diff --git a/tgui/packages/tgui-dev-server/require.js b/tgui/packages/tgui-dev-server/require.ts similarity index 73% rename from tgui/packages/tgui-dev-server/require.js rename to tgui/packages/tgui-dev-server/require.ts index 0551d630fc6..d1f5ec4ce16 100644 --- a/tgui/packages/tgui-dev-server/require.js +++ b/tgui/packages/tgui-dev-server/require.ts @@ -4,6 +4,6 @@ * @license MIT */ -import { createRequire } from 'module'; +import { createRequire } from 'node:module'; export const require = createRequire(import.meta.url); diff --git a/tgui/packages/tgui-dev-server/util.js b/tgui/packages/tgui-dev-server/util.js deleted file mode 100644 index 9d07b96c71a..00000000000 --- a/tgui/packages/tgui-dev-server/util.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import fs from 'fs'; -import path from 'path'; -import { require } from './require.js'; - -const globPkg = require('glob'); - -export const resolvePath = path.resolve; - -/** - * Combines path.resolve with glob patterns. - */ -export const resolveGlob = (...sections) => { - const unsafePaths = globPkg.sync(path.resolve(...sections), { - strict: false, - silent: true, - }); - const safePaths = []; - for (let path of unsafePaths) { - try { - fs.statSync(path); - safePaths.push(path); - } catch {} - } - return safePaths; -}; diff --git a/tgui/packages/tgui-dev-server/util.ts b/tgui/packages/tgui-dev-server/util.ts new file mode 100644 index 00000000000..3c162b4abab --- /dev/null +++ b/tgui/packages/tgui-dev-server/util.ts @@ -0,0 +1,40 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import path from 'node:path'; + +import { Glob } from 'bun'; + +export const resolvePath = path.resolve; + +/** Combines path.resolve with glob patterns. */ +export async function resolveGlob( + directory: string, + pattern = '*', +): Promise { + // If no pattern is supplied, just return the directory if it exists + if (pattern === '*') { + try { + const stat = await Bun.file(directory).stat(); + if (stat?.isDirectory()) { + return [directory]; + } + } catch (e) { + return []; + } + return []; + } + + // Otherwise, use glob logic + const glob = new Glob(pattern); + const results: string[] = []; + + for await (const match of glob.scan({ onlyFiles: false, cwd: directory })) { + results.push(path.resolve(directory, match)); + } + + return results; +} diff --git a/tgui/packages/tgui-dev-server/webpack.js b/tgui/packages/tgui-dev-server/webpack.js deleted file mode 100644 index 139610b79ce..00000000000 --- a/tgui/packages/tgui-dev-server/webpack.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import fs from 'fs'; -import { createRequire } from 'module'; -import { dirname } from 'path'; -import { loadSourceMaps, setupLink } from './link/server.js'; -import { createLogger } from './logging.js'; -import { reloadByondCache } from './reloader.js'; -import { resolveGlob } from './util.js'; - -const logger = createLogger('webpack'); - -/** - * @param {any} config - * @return {WebpackCompiler} - */ -export const createCompiler = async (options) => { - const compiler = new WebpackCompiler(); - await compiler.setup(options); - return compiler; -}; - -class WebpackCompiler { - async setup(options) { - // Create a require context that is relative to project root - // and retrieve all necessary dependencies. - const requireFromRoot = createRequire(dirname(import.meta.url) + '/../..'); - const webpack = await requireFromRoot('webpack'); - const createConfig = await requireFromRoot('./webpack.config.js'); - const config = createConfig({}, options); - // Inject the HMR plugin into the config if we're using it - if (options.hot) { - config.plugins.push(new webpack.HotModuleReplacementPlugin()); - } - this.webpack = webpack; - this.config = config; - this.bundleDir = config.output.path; - } - - async watch() { - logger.log('setting up'); - // Setup link - const link = setupLink(); - // Instantiate the compiler - const compiler = this.webpack.webpack(this.config); - // Clear garbage before compiling - compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { - const files = await resolveGlob(this.bundleDir, './*.hot-update.*'); - logger.log(`clearing garbage (${files.length} files)`); - for (let file of files) { - fs.unlinkSync(file); - } - logger.log('compiling'); - }); - // Start reloading when it's finished - compiler.hooks.done.tap('tgui-dev-server', async (stats) => { - // Load source maps - await loadSourceMaps(this.bundleDir); - // Reload cache - await reloadByondCache(this.bundleDir); - // Notify all clients that update has happened - link.broadcastMessage({ - type: 'hotUpdate', - }); - }); - // Start watching - logger.log('watching for changes'); - compiler.watch({}, (err, stats) => { - if (err) { - logger.error('compilation error', err); - return; - } - stats - .toString(this.config.devServer.stats) - .split('\n') - .forEach((line) => logger.log(line)); - }); - } -} diff --git a/tgui/packages/tgui-dev-server/webpack.ts b/tgui/packages/tgui-dev-server/webpack.ts new file mode 100644 index 00000000000..3b1eb522dea --- /dev/null +++ b/tgui/packages/tgui-dev-server/webpack.ts @@ -0,0 +1,69 @@ +import { createRequire } from 'node:module'; + +import { config } from '../../rspack.config-dev'; +import { loadSourceMaps } from './link/retrace'; +import { broadcastMessage, setupLink } from './link/server'; +import { createLogger } from './logging'; +import { reloadByondCache } from './reloader'; +import { resolveGlob } from './util'; + +const logger = createLogger('rspack'); + +export class RspackCompiler { + rspack: any; + config: any; + bundleDir: string; + + async setup() { + // Create a require context that is relative to project root + // and retrieve all necessary dependencies. + const requireFromRoot = createRequire(`${import.meta.dirname}/../../..`); + const rspack = await requireFromRoot('@rspack/core'); + + this.rspack = rspack; + this.config = config; + this.bundleDir = config.output?.path || ''; + } + + async watch() { + logger.log('setting up'); + setupLink(); + // Instantiate the compiler + const compiler = this.rspack.rspack(this.config); + + // Clear garbage before compiling + compiler.hooks.watchRun.tapPromise('tgui-dev-server', async () => { + const files = await resolveGlob(this.bundleDir, '*.hot-update.*'); + for (const file of files) { + await Bun.file(file).delete(); + } + logger.log('compiling'); + }); + + // Start reloading when it's finished + compiler.hooks.done.tap('tgui-dev-server', async () => { + // Load source maps + await loadSourceMaps(this.bundleDir); + // Reload cache + await reloadByondCache(this.bundleDir); + // Notify all clients that update has happened + broadcastMessage({ + type: 'hotUpdate', + }); + }); + // Start watching + logger.log('watching for changes'); + compiler.watch({}, (err, stats) => { + if (err) { + logger.error('compilation error', err); + return; + } + stats + ?.toString(this.config.stats) + .split('\n') + .forEach((line) => { + logger.log(line); + }); + }); + } +} diff --git a/tgui/packages/tgui-dev-server/winreg.js b/tgui/packages/tgui-dev-server/winreg.ts similarity index 69% rename from tgui/packages/tgui-dev-server/winreg.js rename to tgui/packages/tgui-dev-server/winreg.ts index b61fddc1a25..c3c0a85a0bf 100644 --- a/tgui/packages/tgui-dev-server/winreg.js +++ b/tgui/packages/tgui-dev-server/winreg.ts @@ -6,39 +6,47 @@ * @license MIT */ -import { exec } from 'child_process'; -import { promisify } from 'util'; -import { createLogger } from './logging.js'; +import { exec } from 'node:child_process'; +import { promisify } from 'node:util'; + +import { createLogger } from './logging'; const logger = createLogger('winreg'); -export const regQuery = async (path, key) => { +/** Query a registry key. */ +export async function regQuery( + path: string, + key: string, +): Promise { if (process.platform !== 'win32') { - return null; + return; } try { const command = `reg query "${path}" /v ${key}`; const { stdout } = await promisify(exec)(command); const keyPattern = ` ${key} `; const indexOfKey = stdout.indexOf(keyPattern); + if (indexOfKey === -1) { logger.error('could not find the registry key'); - return null; + return; } + const indexOfEol = stdout.indexOf('\r\n', indexOfKey); if (indexOfEol === -1) { logger.error('could not find the end of the line'); - return null; + return; } + const indexOfValue = stdout.indexOf(' ', indexOfKey + keyPattern.length); if (indexOfValue === -1) { logger.error('could not find the start of the key value'); - return null; + return; } - const value = stdout.substring(indexOfValue + 4, indexOfEol); - return value; + + return stdout.substring(indexOfValue + 4, indexOfEol); } catch (err) { logger.error(err); - return null; + return; } -}; +} diff --git a/tgui/packages/tgui-panel/Notifications.js b/tgui/packages/tgui-panel/Notifications.tsx similarity index 80% rename from tgui/packages/tgui-panel/Notifications.js rename to tgui/packages/tgui-panel/Notifications.tsx index 2b92995287f..9c87ca633a7 100644 --- a/tgui/packages/tgui-panel/Notifications.js +++ b/tgui/packages/tgui-panel/Notifications.tsx @@ -4,15 +4,17 @@ * @license MIT */ -import { Flex } from 'tgui/components'; +import { Flex } from 'tgui-core/components'; -export const Notifications = (props) => { +export function Notifications(props) { const { children } = props; - return
    {children}
    ; -}; -const NotificationsItem = (props) => { + return
    {children}
    ; +} + +function NotificationsItem(props) { const { rightSlot, children } = props; + return ( @@ -23,6 +25,6 @@ const NotificationsItem = (props) => { )} ); -}; +} Notifications.Item = NotificationsItem; diff --git a/tgui/packages/tgui-panel/Panel.js b/tgui/packages/tgui-panel/Panel.tsx similarity index 50% rename from tgui/packages/tgui-panel/Panel.js rename to tgui/packages/tgui-panel/Panel.tsx index 18976735de9..7ad6ebed3d0 100644 --- a/tgui/packages/tgui-panel/Panel.js +++ b/tgui/packages/tgui-panel/Panel.tsx @@ -4,38 +4,38 @@ * @license MIT */ -import { Button, Section, Stack } from 'tgui/components'; +import { useAtom, useAtomValue } from 'jotai'; import { Pane } from 'tgui/layouts'; -import { NowPlayingWidget, useAudio } from './audio'; -import { ChatPanel, ChatTabs } from './chat'; -import { useGame } from './game'; +import { Button, Section, Stack } from 'tgui-core/components'; +import { visibleAtom } from './audio/atoms'; +import { NowPlayingWidget } from './audio/NowPlayingWidget'; +import { ChatPanel } from './chat/ChatPanel'; +import { ChatTabs } from './chat/ChatTabs'; +import { useChatPersistence } from './chat/use-chat-persistence'; +import { gameAtom } from './game/atoms'; +import { useKeepAlive } from './game/use-keep-alive'; import { Notifications } from './Notifications'; -import { PingIndicator } from './ping'; +import { PingIndicator } from './ping/PingIndicator'; import { ReconnectButton } from './reconnect'; -import { SettingsPanel, useSettings } from './settings'; +import { settingsVisibleAtom } from './settings/atoms'; +import { SettingsPanel } from './settings/SettingsPanel'; +import { useSettings } from './settings/use-settings'; + +export function Panel(props) { + const [audioVisible, setAudioVisible] = useAtom(visibleAtom); + const game = useAtomValue(gameAtom); + const { settings } = useSettings(); + const [settingsVisible, setSettingsVisible] = useAtom(settingsVisibleAtom); + useChatPersistence(); + useKeepAlive(); -export const Panel = (props, context) => { - // IE8-10: Needs special treatment due to missing Flex support - if (Byond.IS_LTE_IE10) { - return ; - } - const audio = useAudio(context); - const settings = useSettings(context); - const game = useGame(context); - if (process.env.NODE_ENV !== 'production') { - const { useDebug, KitchenSink } = require('tgui/debug'); - const debug = useDebug(context); - if (debug.kitchenSink) { - return ; - } - } return ( - +
    - + @@ -44,42 +44,40 @@ export const Panel = (props, context) => {
    - {audio.visible && ( + {audioVisible && (
    )} - {settings.visible && ( + {settingsVisible && ( )}
    - + @@ -101,29 +99,4 @@ export const Panel = (props, context) => { ); -}; - -const HoboPanel = (props, context) => { - const settings = useSettings(context); - return ( - - - - {(settings.visible && ) || ( - - )} - - - ); -}; +} diff --git a/tgui/packages/tgui-panel/app.tsx b/tgui/packages/tgui-panel/app.tsx new file mode 100644 index 00000000000..efe198ae3a7 --- /dev/null +++ b/tgui/packages/tgui-panel/app.tsx @@ -0,0 +1,12 @@ +import { Provider } from 'jotai'; +import { store } from './events/store'; +import { Panel } from './Panel'; + +/** Just an expandable wrapper for setup shenanigans and providers */ +export function App() { + return ( + + + + ); +} diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js b/tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx similarity index 51% rename from tgui/packages/tgui-panel/audio/NowPlayingWidget.js rename to tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx index af5380a7a5b..74f6f14c0c8 100644 --- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.js +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.tsx @@ -4,57 +4,62 @@ * @license MIT */ -import { toFixed } from 'common/math'; -import { useDispatch, useSelector } from 'common/redux'; -import { Button, Collapsible, Flex, Knob, Section } from 'tgui/components'; -import { useSettings } from '../settings'; -import { selectAudio } from './selectors'; +import { useAtomValue } from 'jotai'; +import { Button, Collapsible, Flex, Knob, Section } from 'tgui-core/components'; +import { toFixed } from 'tgui-core/math'; +import { useSettings } from '../settings/use-settings'; +import { metaAtom, playingAtom } from './atoms'; +import { player } from './handlers'; -export const NowPlayingWidget = (props, context) => { - const audio = useSelector(context, selectAudio), - dispatch = useDispatch(context), - settings = useSettings(context), - title = audio.meta?.title, - URL = audio.meta?.link, - Artist = audio.meta?.artist || 'Unknown Artist', - upload_date = audio.meta?.upload_date || 'Unknown Date', - album = audio.meta?.album || 'Unknown Album', - duration = audio.meta?.duration, - date = !isNaN(upload_date) - ? upload_date?.substring(0, 4) + - '-' + - upload_date?.substring(4, 6) + - '-' + - upload_date?.substring(6, 8) - : upload_date; +export function NowPlayingWidget(props) { + const { settings, updateSettings } = useSettings(); + const meta = useAtomValue(metaAtom); + const { + album = 'Unknown Album', + artist = 'Unknown Artist', + duration, + link, + title, + upload_date = 'Unknown Data', + } = meta || {}; + + const playing = useAtomValue(playingAtom); + + const date = !Number.isNaN(upload_date) + ? upload_date?.substring(0, 4) + + '-' + + upload_date?.substring(4, 6) + + '-' + + upload_date?.substring(6, 8) + : upload_date; return ( - {(audio.playing && ( + {playing ? ( { - +
    - {URL !== 'Song Link Hidden' && ( + {link !== 'Song Link Hidden' && ( - Url: {URL} + URL: {link} )} Duration: {duration} - {Artist !== 'Song Artist Hidden' && - Artist !== 'Unknown Artist' && ( + {artist !== 'Song Artist Hidden' && + artist !== 'Unknown Artist' && ( - Artist: {Artist} + Artist: {artist} )} {album !== 'Song Album Hidden' && album !== 'Unknown Album' && ( @@ -72,22 +77,14 @@ export const NowPlayingWidget = (props, context) => { } - )) || ( + ) : ( Nothing to play. )} - {audio.playing && ( + {playing && ( - - - - -
    - {MESSAGE_TYPES.filter( - (typeDef) => !typeDef.important && !typeDef.admin, - ).map((typeDef) => ( - - dispatch( - toggleAcceptedType({ - pageId: page.id, - type: typeDef.type, - }), - ) - } - > - {typeDef.name} - - ))} - - {MESSAGE_TYPES.filter( - (typeDef) => !typeDef.important && typeDef.admin, - ).map((typeDef) => ( - - dispatch( - toggleAcceptedType({ - pageId: page.id, - type: typeDef.type, - }), - ) - } - > - {typeDef.name} - - ))} - -
    -
    - ); -}; diff --git a/tgui/packages/tgui-panel/chat/ChatPageSettings.tsx b/tgui/packages/tgui-panel/chat/ChatPageSettings.tsx new file mode 100644 index 00000000000..5057cf22d40 --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatPageSettings.tsx @@ -0,0 +1,113 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { + Button, + Collapsible, + Divider, + Input, + Section, + Stack, +} from 'tgui-core/components'; +import { MESSAGE_TYPES } from './constants'; +import { useChatPages } from './use-chat-pages'; + +export function ChatPageSettings(props) { + const { + page, + moveChatLeft, + moveChatRight, + updateChatPage, + removeChatPage, + toggleAcceptedType, + } = useChatPages(); + + return ( +
    + + {!page.isMain && ( + + + + )} + + +
    + {MESSAGE_TYPES.filter( + (typeDef) => !typeDef.important && !typeDef.admin, + ).map((typeDef) => ( + toggleAcceptedType(typeDef.type)} + > + {typeDef.name} + + ))} + + {MESSAGE_TYPES.filter( + (typeDef) => !typeDef.important && typeDef.admin, + ).map((typeDef) => ( + toggleAcceptedType(typeDef.type)} + > + {typeDef.name} + + ))} + +
    +
    + ); +} diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.js b/tgui/packages/tgui-panel/chat/ChatPanel.js deleted file mode 100644 index 1577e933fb4..00000000000 --- a/tgui/packages/tgui-panel/chat/ChatPanel.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { shallowDiffers } from 'common/react'; -import { Component, createRef } from 'inferno'; -import { Button } from 'tgui/components'; -import { chatRenderer } from './renderer'; - -export class ChatPanel extends Component { - constructor() { - super(); - this.ref = createRef(); - this.state = { - scrollTracking: true, - }; - this.handleScrollTrackingChange = (value) => - this.setState({ - scrollTracking: value, - }); - } - - componentDidMount() { - chatRenderer.mount(this.ref.current); - chatRenderer.events.on( - 'scrollTrackingChanged', - this.handleScrollTrackingChange, - ); - this.componentDidUpdate(); - } - - componentWillUnmount() { - chatRenderer.events.off( - 'scrollTrackingChanged', - this.handleScrollTrackingChange, - ); - } - - componentDidUpdate(prevProps) { - requestAnimationFrame(() => { - chatRenderer.ensureScrollTracking(); - }); - const shouldUpdateStyle = - !prevProps || shallowDiffers(this.props, prevProps); - if (shouldUpdateStyle) { - chatRenderer.assignStyle({ - width: '100%', - 'white-space': 'pre-wrap', - 'font-size': this.props.fontSize, - 'line-height': this.props.lineHeight, - }); - } - } - - render() { - const { scrollTracking } = this.state; - return ( - <> -
    - {!scrollTracking && ( - - )} - - ); - } -} diff --git a/tgui/packages/tgui-panel/chat/ChatPanel.tsx b/tgui/packages/tgui-panel/chat/ChatPanel.tsx new file mode 100644 index 00000000000..17171ddf81b --- /dev/null +++ b/tgui/packages/tgui-panel/chat/ChatPanel.tsx @@ -0,0 +1,76 @@ +/** + * @file + * @copyright 2020 Aleksej Komarov + * @license MIT + */ + +import { useAtom, useAtomValue } from 'jotai'; +import { useEffect, useRef } from 'react'; +import { Button } from 'tgui-core/components'; +import { + chatPagesRecordAtom, + currentPageIdAtom, + scrollTrackingAtom, +} from './atom'; +import { chatRenderer } from './renderer'; +import type { Page } from './types'; + +type Props = { + fontSize?: string; + lineHeight: string | number; +}; + +export function ChatPanel(props: Props) { + const ref = useRef(null); + const scrollTracking = useAtomValue(scrollTrackingAtom); + // Page stuff + const currentPageId = useAtomValue(currentPageIdAtom); + const [pagesRecord, setPagesRecord] = useAtom(chatPagesRecordAtom); + + /** Mounts the renderer */ + useEffect(() => { + if (ref.current) { + chatRenderer.mount(ref.current); + } + }, []); + + /** Resets unread count when scroll tracking is enabled */ + useEffect(() => { + if (scrollTracking) { + const draft: Page = { + ...pagesRecord[currentPageId], + unreadCount: 0, + }; + + setPagesRecord({ + ...pagesRecord, + [currentPageId]: draft, + }); + } + }, [scrollTracking]); + + /** Updates the style of the chat panel */ + useEffect(() => { + chatRenderer.assignStyle({ + width: '100%', + 'white-space': 'pre-wrap', + 'font-size': props.fontSize, + 'line-height': props.lineHeight, + }); + }, [props.fontSize, props.lineHeight]); + + return ( + <> +
    + {!scrollTracking && ( + + )} + + ); +} diff --git a/tgui/packages/tgui-panel/chat/ChatTabs.js b/tgui/packages/tgui-panel/chat/ChatTabs.js deleted file mode 100644 index 601cd111589..00000000000 --- a/tgui/packages/tgui-panel/chat/ChatTabs.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { useDispatch, useSelector } from 'common/redux'; -import { Box, Tabs, Flex, Button } from 'tgui/components'; -import { changeChatPage, addChatPage } from './actions'; -import { selectChatPages, selectCurrentChatPage } from './selectors'; -import { openChatSettings } from '../settings/actions'; - -const UnreadCountWidget = ({ value }) => ( - - {Math.min(value, 99)} - -); - -export const ChatTabs = (props, context) => { - const pages = useSelector(context, selectChatPages); - const currentPage = useSelector(context, selectCurrentChatPage); - const dispatch = useDispatch(context); - return ( - - - - {pages.map((page) => ( - 0 && ( - - ) - } - onClick={() => - dispatch( - changeChatPage({ - pageId: page.id, - }), - ) - } - > - {page.name} - - ))} - - - - + /> ); -}; +} diff --git a/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx b/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx new file mode 100644 index 00000000000..cf0a8c19a5c --- /dev/null +++ b/tgui/packages/tgui-panel/settings/SettingsGeneral.tsx @@ -0,0 +1,202 @@ +import { useState } from 'react'; +import { + Button, + Collapsible, + Divider, + Input, + LabeledList, + Section, + Slider, + Stack, +} from 'tgui-core/components'; +import { toFixed } from 'tgui-core/math'; +import { capitalize } from 'tgui-core/string'; +import { chatRenderer } from '../chat/renderer'; +import { FONTS, THEMES } from './constants'; +import { resetPaneSplitters, setEditPaneSplitters } from './scaling'; +import { exportChatSettings, importChatSettings } from './settingsImExport'; +import { useSettings } from './use-settings'; + +export function SettingsGeneral(props) { + const { settings, updateSettings } = useSettings(); + const [freeFont, setFreeFont] = useState(false); + + const [editingPanes, setEditingPanes] = useState(false); + + return ( +
    + + + {THEMES.map((THEME) => ( + + ))} + + + + + + + + + + + + + + {!freeFont ? ( + { + setFreeFont(!freeFont); + }} + > + Custom font + + } + > + {FONTS.map((FONT) => ( + + ))} + + ) : ( + + + updateSettings({ + fontFamily: value, + }) + } + /> + + + )} + + + + + + toFixed(value)} + onChange={(_, value) => updateSettings({ fontSize: value })} + /> + + + + + toFixed(value, 2)} + onChange={(_, value) => + updateSettings({ + lineHeight: value, + }) + } + /> + + + + + + + + + + Import settings + + + + + + + chatRenderer.clearChat()} + > + Clear chat + + + +
    + ); +} diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.js b/tgui/packages/tgui-panel/settings/SettingsPanel.js deleted file mode 100644 index 9c49a6c6b94..00000000000 --- a/tgui/packages/tgui-panel/settings/SettingsPanel.js +++ /dev/null @@ -1,451 +0,0 @@ -/** - * @file - * @copyright 2020 Aleksej Komarov - * @license MIT - */ - -import { toFixed } from 'common/math'; -import { useLocalState } from 'tgui/backend'; -import { useDispatch, useSelector } from 'common/redux'; -import { - Box, - Button, - ColorBox, - Divider, - Dropdown, - Flex, - Input, - LabeledList, - NumberInput, - Section, - Stack, - Tabs, - TextArea, -} from 'tgui/components'; -import { ChatPageSettings } from '../chat'; -import { - rebuildChat, - saveChatToDisk, - clearChatMessages, -} from '../chat/actions'; -import { THEMES } from '../themes'; -import { - changeSettingsTab, - updateSettings, - addHighlightSetting, - removeHighlightSetting, - updateHighlightSetting, -} from './actions'; -import { SETTINGS_TABS, FONTS, MAX_HIGHLIGHT_SETTINGS } from './constants'; -import { resetPaneSplitters, setEditPaneSplitters } from './scaling'; -import { - selectActiveTab, - selectSettings, - selectHighlightSettings, - selectHighlightSettingById, -} from './selectors'; -import { IMPL_IFRAME_INDEXED_DB, storage } from 'common/storage'; - -export const SettingsPanel = (props, context) => { - const activeTab = useSelector(context, selectActiveTab); - const dispatch = useDispatch(context); - return ( - - -
    - - {SETTINGS_TABS.map((tab) => ( - - dispatch( - changeSettingsTab({ - tabId: tab.id, - }), - ) - } - > - {tab.name} - - ))} - -
    -
    - - {activeTab === 'general' && } - {activeTab === 'chatPage' && } - {activeTab === 'textHighlight' && } - -
    - ); -}; - -export const SettingsGeneral = (props, context) => { - const { theme, fontFamily, fontSize, lineHeight, maxMessages } = useSelector( - context, - selectSettings, - ); - const dispatch = useDispatch(context); - const [freeFont, setFreeFont] = useLocalState(context, 'freeFont', false); - const [editingPanes, setEditingPanes] = useLocalState( - context, - 'uiScaling', - false, - ); - return ( -
    - - - - dispatch( - updateSettings({ - theme: value, - }), - ) - } - /> - - - - - - - - - - - - - - - {(!freeFont && ( - - dispatch( - updateSettings({ - fontFamily: value, - }), - ) - } - /> - )) || ( - - dispatch( - updateSettings({ - fontFamily: value, - }), - ) - } - /> - )} - - - - -
    - ); -}; - -const TextHighlightSettings = (props, context) => { - const highlightSettings = useSelector(context, selectHighlightSettings); - const settings = useSelector(context, selectSettings); - const dispatch = useDispatch(context); - return ( -
    -
    - - {highlightSettings.map((id, i) => ( - - ))} - {highlightSettings.length < MAX_HIGHLIGHT_SETTINGS && ( - -
    - - - - - Can freeze the chat for a while. - - -
    - ); -}; - -const TextHighlightSetting = (props, context) => { - const { id, ...rest } = props; - const highlightSettingById = useSelector(context, selectHighlightSettingById); - const dispatch = useDispatch(context); - const { - highlightColor, - highlightText, - highlightWholeMessage, - backgroundHighlightColor, - backgroundHighlightOpacity, - matchWord, - matchCase, - } = highlightSettingById[id]; - return ( - - - -
    + + ); +} diff --git a/tgui/packages/tgui/stories/Collapsible.stories.js b/tgui/packages/tgui/stories/Collapsible.stories.js index eace08607ba..55e9fb0aac6 100644 --- a/tgui/packages/tgui/stories/Collapsible.stories.js +++ b/tgui/packages/tgui/stories/Collapsible.stories.js @@ -4,7 +4,7 @@ * @license MIT */ -import { Button, Collapsible, Section } from '../components'; +import { Button, Collapsible, Section } from 'tgui-core/components'; import { BoxWithSampleText } from './common'; export const meta = { @@ -12,7 +12,7 @@ export const meta = { render: () => , }; -const Story = (props, context) => { +const Story = (props) => { return (
    }> diff --git a/tgui/packages/tgui/stories/Collapsible.stories.tsx b/tgui/packages/tgui/stories/Collapsible.stories.tsx new file mode 100644 index 00000000000..24689697a1a --- /dev/null +++ b/tgui/packages/tgui/stories/Collapsible.stories.tsx @@ -0,0 +1,24 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { Button, Collapsible, Section } from 'tgui-core/components'; + +import { BoxWithSampleText } from './common'; + +export const meta = { + title: 'Collapsible', + render: () => , +}; + +function Story() { + return ( +
    + }> + + +
    + ); +} diff --git a/tgui/packages/tgui/stories/Flex.stories.js b/tgui/packages/tgui/stories/Flex.stories.js index 64dc79edfc4..73e5c755177 100644 --- a/tgui/packages/tgui/stories/Flex.stories.js +++ b/tgui/packages/tgui/stories/Flex.stories.js @@ -4,15 +4,15 @@ * @license MIT */ +import { Button, Flex, Section } from 'tgui-core/components'; import { useLocalState } from '../backend'; -import { Button, Flex, Section } from '../components'; export const meta = { title: 'Flex & Sections', render: () => , }; -const Story = (props, context) => { +const Story = (props) => { const [grow, setGrow] = useLocalState(context, 'fs_grow', 1); const [direction, setDirection] = useLocalState( context, diff --git a/tgui/packages/tgui/stories/Flex.stories.tsx b/tgui/packages/tgui/stories/Flex.stories.tsx new file mode 100644 index 00000000000..86333b8dc92 --- /dev/null +++ b/tgui/packages/tgui/stories/Flex.stories.tsx @@ -0,0 +1,68 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { useState } from 'react'; +import { Button, Flex, Section } from 'tgui-core/components'; + +export const meta = { + title: 'Flex & Sections', + render: () => , +}; + +function Story() { + const [grow, setGrow] = useState(1); + const [direction, setDirection] = useState('column'); + const [fill, setFill] = useState(true); + const [hasTitle, setHasTitle] = useState(true); + + return ( + + +
    + + + + +
    +
    + + + +
    + Content +
    +
    + +
    + Content +
    +
    +
    +
    +
    + ); +} diff --git a/tgui/packages/tgui/stories/Input.stories.js b/tgui/packages/tgui/stories/Input.stories.js index 66fcd602b32..9da0b4615d1 100644 --- a/tgui/packages/tgui/stories/Input.stories.js +++ b/tgui/packages/tgui/stories/Input.stories.js @@ -4,7 +4,6 @@ * @license MIT */ -import { useLocalState } from '../backend'; import { Box, DraggableControl, @@ -15,14 +14,15 @@ import { NumberInput, Section, Slider, -} from '../components'; +} from 'tgui-core/components'; +import { useLocalState } from '../backend'; export const meta = { title: 'Input', render: () => , }; -const Story = (props, context) => { +const Story = (props) => { const [number, setNumber] = useLocalState(context, 'number', 0); const [text, setText] = useLocalState(context, 'text', 'Sample text'); return ( @@ -46,52 +46,6 @@ const Story = (props, context) => { onChange={(e, value) => setNumber(value)} /> - - setNumber(value)} - /> - - - setNumber(value)} - /> - - - setNumber(value)} - /> - setNumber(value)} - /> - { dragMatrix={[0, -1]} step={1} stepPixelSize={5} - onDrag={(e, value) => setNumber(value)} + onChange={(e, value) => setNumber(value)} > {(control) => ( diff --git a/tgui/packages/tgui/stories/Input.stories.tsx b/tgui/packages/tgui/stories/Input.stories.tsx new file mode 100644 index 00000000000..5e5af5c2c36 --- /dev/null +++ b/tgui/packages/tgui/stories/Input.stories.tsx @@ -0,0 +1,74 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { + Box, + DraggableControl, + Icon, + Input, + Knob, + LabeledList, + NumberInput, + Section, + Slider, +} from 'tgui-core/components'; +import { useLocalState } from '../backend'; + +export const meta = { + title: 'Input', + render: () => , +}; + +const Story = (props) => { + const [string, setNumber] = useLocalState('string', 0); + const [text, setText] = useLocalState('text', 'Sample text'); + return ( +
    + + + setText(value)} /> + + + setNumber(value)} + /> + + + + setNumber(value)} + > + {(control) => ( + + + {control.inputElement} + + )} + + + + +
    + ); +}; diff --git a/tgui/packages/tgui/stories/LabeledList.stories.js b/tgui/packages/tgui/stories/LabeledList.stories.js index 2a94bb9c74b..c85f13313e9 100644 --- a/tgui/packages/tgui/stories/LabeledList.stories.js +++ b/tgui/packages/tgui/stories/LabeledList.stories.js @@ -4,14 +4,14 @@ * @license MIT */ -import { Button, LabeledList } from '../components'; +import { Button, LabeledList } from 'tgui-core/components'; export const meta = { title: 'LabeledList', render: () => , }; -const Story = (props, context) => { +const Story = (props) => { return ( <> diff --git a/tgui/packages/tgui/stories/LabeledList.stories.tsx b/tgui/packages/tgui/stories/LabeledList.stories.tsx new file mode 100644 index 00000000000..5dbfa8feb2a --- /dev/null +++ b/tgui/packages/tgui/stories/LabeledList.stories.tsx @@ -0,0 +1,73 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { Button, LabeledList } from 'tgui-core/components'; + +export const meta = { + title: 'LabeledList', + render: () => , +}; + +function Story() { + return ( + <> + + Entry 1 + Nodes as labels:}> + Entry 2 + + + Entry 3 + + + Entry 4 + + Test} label="Buttons prop"> + Entry 5 + + + + Entry 6 + + + Entry 7 + + + Entry 8 + + +
    +
    +
    + + + Entry 1 + + + Entry 2 + + + Entry 3 + + +
    +
    +
    + + + Entry 1 + + + + ); +} diff --git a/tgui/packages/tgui/stories/Popper.stories.js b/tgui/packages/tgui/stories/Popper.stories.js index 5a984ac6fea..548214ef46a 100644 --- a/tgui/packages/tgui/stories/Popper.stories.js +++ b/tgui/packages/tgui/stories/Popper.stories.js @@ -1,4 +1,4 @@ -import { Box, Popper } from '../components'; +import { Box, Popper } from 'tgui-core/components'; export const meta = { title: 'Popper', diff --git a/tgui/packages/tgui/stories/ProgressBar.stories.js b/tgui/packages/tgui/stories/ProgressBar.stories.js index a05f6b2e85c..4da721cd4bc 100644 --- a/tgui/packages/tgui/stories/ProgressBar.stories.js +++ b/tgui/packages/tgui/stories/ProgressBar.stories.js @@ -4,7 +4,6 @@ * @license MIT */ -import { useLocalState } from '../backend'; import { Box, Button, @@ -12,14 +11,15 @@ import { LabeledList, ProgressBar, Section, -} from '../components'; +} from 'tgui-core/components'; +import { useLocalState } from '../backend'; export const meta = { title: 'ProgressBar', render: () => , }; -const Story = (props, context) => { +const Story = (props) => { const [progress, setProgress] = useLocalState(context, 'progress', 0.5); const [color, setColor] = useLocalState(context, 'color', ''); diff --git a/tgui/packages/tgui/stories/ProgressBar.stories.tsx b/tgui/packages/tgui/stories/ProgressBar.stories.tsx new file mode 100644 index 00000000000..8e6314b421b --- /dev/null +++ b/tgui/packages/tgui/stories/ProgressBar.stories.tsx @@ -0,0 +1,54 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { useState } from 'react'; +import { + Box, + Button, + Input, + LabeledList, + ProgressBar, + Section, +} from 'tgui-core/components'; + +export const meta = { + title: 'ProgressBar', + render: () => , +}; + +function Story() { + const [progress, setProgress] = useState(0.5); + const [color, setColor] = useState(''); + + const color_data = color + ? { color: color } + : { + ranges: { + good: [0.5, Infinity], + bad: [-Infinity, 0.1], + average: [0, 0.5], + } as Record, + }; + + return ( +
    + + Value: {Number(progress).toFixed(1)} + + + + + + + + + + + + +
    + ); +} diff --git a/tgui/packages/tgui/stories/Stack.stories.js b/tgui/packages/tgui/stories/Stack.stories.js index 09d8066133d..0d84e6e9bb8 100644 --- a/tgui/packages/tgui/stories/Stack.stories.js +++ b/tgui/packages/tgui/stories/Stack.stories.js @@ -4,7 +4,7 @@ * @license MIT */ -import { Box, Section, Stack } from '../components'; +import { Box, Section, Stack } from 'tgui-core/components'; export const meta = { title: 'Stack', @@ -29,7 +29,7 @@ const SmallStackItems = () => ( ); -const Story = (props, context) => { +const Story = (props) => { return (
    diff --git a/tgui/packages/tgui/stories/Stack.stories.tsx b/tgui/packages/tgui/stories/Stack.stories.tsx new file mode 100644 index 00000000000..a92416250f1 --- /dev/null +++ b/tgui/packages/tgui/stories/Stack.stories.tsx @@ -0,0 +1,59 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { Box, Section, Stack } from 'tgui-core/components'; + +export const meta = { + title: 'Stack', + render: () => , +}; + +function Filler() { + return ( + + A + + ); +} + +function SmallStackItems() { + return ( + <> + + + + + + + + + ); +} + +function Story() { + return ( +
    + + + + + + + + + + + + + + + + + + +
    + ); +} diff --git a/tgui/packages/tgui/stories/Storage.stories.js b/tgui/packages/tgui/stories/Storage.stories.js index 3172a097d24..b667e88736c 100644 --- a/tgui/packages/tgui/stories/Storage.stories.js +++ b/tgui/packages/tgui/stories/Storage.stories.js @@ -5,7 +5,7 @@ */ import { storage } from 'common/storage'; -import { Button, LabeledList, NoticeBox, Section } from '../components'; +import { Button, LabeledList, NoticeBox, Section } from 'tgui-core/components'; import { formatSiUnit } from '../format'; export const meta = { @@ -13,7 +13,7 @@ export const meta = { render: () => , }; -const Story = (props, context) => { +const Story = (props) => { if (!window.localStorage) { return Local storage is not available.; } diff --git a/tgui/packages/tgui/stories/Storage.stories.tsx b/tgui/packages/tgui/stories/Storage.stories.tsx new file mode 100644 index 00000000000..c5234a1e31d --- /dev/null +++ b/tgui/packages/tgui/stories/Storage.stories.tsx @@ -0,0 +1,42 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { storage } from 'common/storage'; +import { Button, LabeledList, NoticeBox, Section } from 'tgui-core/components'; + +export const meta = { + title: 'Storage', + render: () => , +}; + +const Story = (props) => { + if (!window.localStorage) { + return Local storage is not available.; + } + + return ( +
    { + localStorage.clear(); + storage.clear(); + }} + > + Clear + + } + > + + + {localStorage.length} + + +
    + ); +}; diff --git a/tgui/packages/tgui/stories/Tabs.stories.js b/tgui/packages/tgui/stories/Tabs.stories.js index b2b51c3ea74..177354a8b3b 100644 --- a/tgui/packages/tgui/stories/Tabs.stories.js +++ b/tgui/packages/tgui/stories/Tabs.stories.js @@ -4,8 +4,8 @@ * @license MIT */ +import { Button, Section, Tabs } from 'tgui-core/components'; import { useLocalState } from '../backend'; -import { Button, Section, Tabs } from '../components'; export const meta = { title: 'Tabs', @@ -14,7 +14,7 @@ export const meta = { const TAB_RANGE = ['Tab #1', 'Tab #2', 'Tab #3', 'Tab #4']; -const Story = (props, context) => { +const Story = (props) => { const [tabProps, setTabProps] = useLocalState(context, 'tabProps', {}); return ( <> @@ -101,7 +101,7 @@ const Story = (props, context) => { ); }; -const TabsPrefab = (props, context) => { +const TabsPrefab = (props) => { const [tabIndex, setTabIndex] = useLocalState(context, 'tabIndex', 0); const [tabProps] = useLocalState(context, 'tabProps', {}); return ( diff --git a/tgui/packages/tgui/stories/Tabs.stories.tsx b/tgui/packages/tgui/stories/Tabs.stories.tsx new file mode 100644 index 00000000000..507a6c0b643 --- /dev/null +++ b/tgui/packages/tgui/stories/Tabs.stories.tsx @@ -0,0 +1,152 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { useState } from 'react'; +import { Button, Section, Tabs } from 'tgui-core/components'; + +export const meta = { + title: 'Tabs', + render: () => , +}; + +const TAB_RANGE = ['Tab #1', 'Tab #2', 'Tab #3', 'Tab #4'] as const; + +type TabProps = Partial<{ + centered: boolean; + fluid: boolean; + icon: boolean; + leftSlot: boolean; + rightSlot: boolean; + vertical: boolean; +}>; + +function Story() { + const [tabProps, setTabProps] = useState({}); + + return ( + <> +
    + + setTabProps({ + ...tabProps, + vertical: !tabProps.vertical, + }) + } + > + Vertical + + + setTabProps({ + ...tabProps, + leftSlot: !tabProps.leftSlot, + }) + } + > + leftSlot + + + setTabProps({ + ...tabProps, + rightSlot: !tabProps.rightSlot, + }) + } + > + rightSlot + + + setTabProps({ + ...tabProps, + icon: !tabProps.icon, + }) + } + > + icon + + + setTabProps({ + ...tabProps, + fluid: !tabProps.fluid, + }) + } + > + fluid + + + setTabProps({ + ...tabProps, + centered: !tabProps.centered, + }) + } + > + centered + +
    +
    + +
    +
    + + Some text +
    +
    + Section-less tabs appear the same as tabs in a fitted section: +
    + + + ); +} + +function TabsPrefab() { + const [tabIndex, setTabIndex] = useState(0); + const [tabProps] = useState({}); + + return ( + + {TAB_RANGE.map((text, i) => ( + + ) + } + rightSlot={ + tabProps.rightSlot && ( + + + + {positions.map((position) => ( + + ))} + +
    + ); +} diff --git a/tgui/packages/tgui/stories/common.js b/tgui/packages/tgui/stories/common.js index 08703e32d2d..e30dd817b2b 100644 --- a/tgui/packages/tgui/stories/common.js +++ b/tgui/packages/tgui/stories/common.js @@ -4,7 +4,7 @@ * @license MIT */ -import { Box } from '../components'; +import { Box } from 'tgui-core/components'; export const BoxWithSampleText = (props) => { return ( diff --git a/tgui/packages/tgui/stories/common.tsx b/tgui/packages/tgui/stories/common.tsx new file mode 100644 index 00000000000..3810dc39272 --- /dev/null +++ b/tgui/packages/tgui/stories/common.tsx @@ -0,0 +1,19 @@ +/** + * @file + * @copyright 2021 Aleksej Komarov + * @license MIT + */ + +import { Box } from 'tgui-core/components'; + +export function BoxWithSampleText(props) { + return ( + + Jackdaws love my big sphinx of quartz. + + The wide electrification of the southern provinces will give a powerful + impetus to the growth of agriculture. + + + ); +} diff --git a/tgui/packages/tgui/styles/assets/bg-deforest.svg b/tgui/packages/tgui/styles/assets/bg-deforest.svg new file mode 100644 index 00000000000..018c2e984bd --- /dev/null +++ b/tgui/packages/tgui/styles/assets/bg-deforest.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/tgui/packages/tgui/styles/atomic/candystripe.scss b/tgui/packages/tgui/styles/atomic/candystripe.scss deleted file mode 100644 index 30159bf99c3..00000000000 --- a/tgui/packages/tgui/styles/atomic/candystripe.scss +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.candystripe:nth-child(odd) { - background-color: rgba(0, 0, 0, 0.25); -} diff --git a/tgui/packages/tgui/styles/atomic/centered-image.scss b/tgui/packages/tgui/styles/atomic/centered-image.scss deleted file mode 100644 index cce5bfdf2c1..00000000000 --- a/tgui/packages/tgui/styles/atomic/centered-image.scss +++ /dev/null @@ -1,7 +0,0 @@ -.centered-image { - position: absolute; - height: 100%; - left: 50%; - top: 50%; - transform: translateX(-50%) translateY(-50%) scale(0.8); -} diff --git a/tgui/packages/tgui/styles/atomic/color.scss b/tgui/packages/tgui/styles/atomic/color.scss deleted file mode 100644 index e2563f86fa5..00000000000 --- a/tgui/packages/tgui/styles/atomic/color.scss +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../colors.scss'; - -$fg-map: colors.$fg-map !default; -$bg-map: colors.$bg-map !default; - -@each $color-name, $color-value in $fg-map { - .color-#{$color-name} { - color: $color-value !important; - } -} - -@each $color-name, $color-value in $bg-map { - .color-bg-#{$color-name} { - background-color: $color-value !important; - } -} diff --git a/tgui/packages/tgui/styles/atomic/debug-layout.scss b/tgui/packages/tgui/styles/atomic/debug-layout.scss deleted file mode 100644 index d015185927a..00000000000 --- a/tgui/packages/tgui/styles/atomic/debug-layout.scss +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.debug-layout, -.debug-layout *:not(g):not(path) { - color: rgba(255, 255, 255, 0.9) !important; - background: transparent !important; - outline: 1px solid rgba(255, 255, 255, 0.5) !important; - box-shadow: none !important; - filter: none !important; - - &:hover { - outline-color: rgba(255, 255, 255, 0.8) !important; - } -} diff --git a/tgui/packages/tgui/styles/atomic/fit-text.scss b/tgui/packages/tgui/styles/atomic/fit-text.scss deleted file mode 100644 index 1d49e13c8e3..00000000000 --- a/tgui/packages/tgui/styles/atomic/fit-text.scss +++ /dev/null @@ -1,14 +0,0 @@ -$mqIterations: 19; -@mixin fontResize($iterations) { - $i: 1; - @while $i <= $iterations { - @media all and (min-width: 100px * $i) { - .fit-text { - font-size: 0.1em * $i; - } - } - $i: $i + 1; - } -} - -@include fontResize($mqIterations); diff --git a/tgui/packages/tgui/styles/atomic/links.scss b/tgui/packages/tgui/styles/atomic/links.scss deleted file mode 100644 index 8754c3bc2e1..00000000000 --- a/tgui/packages/tgui/styles/atomic/links.scss +++ /dev/null @@ -1,12 +0,0 @@ -@use '../colors.scss'; - -a { - &:link, - &:visited { - color: colors.$blue; - } - &:hover, - &:active { - color: colors.$primary; - } -} diff --git a/tgui/packages/tgui/styles/atomic/outline.scss b/tgui/packages/tgui/styles/atomic/outline.scss deleted file mode 100644 index a91625de9ca..00000000000 --- a/tgui/packages/tgui/styles/atomic/outline.scss +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../colors.scss'; - -.outline-dotted { - outline-style: dotted !important; -} - -.outline-dashed { - outline-style: dashed !important; -} - -.outline-solid { - outline-style: solid !important; -} - -.outline-double { - outline-style: double !important; -} - -.outline-groove { - outline-style: groove !important; -} - -.outline-ridge { - outline-style: ridge !important; -} - -.outline-inset { - outline-style: inset !important; -} - -.outline-outset { - outline-style: outset !important; -} - -$fg-map: colors.$fg-map !default; -$bg-map: colors.$bg-map !default; - -@each $color-name, $color-value in $fg-map { - .outline-color-#{$color-name} { - outline: 0.167rem solid $color-value !important; - } -} diff --git a/tgui/packages/tgui/styles/atomic/text.scss b/tgui/packages/tgui/styles/atomic/text.scss deleted file mode 100644 index 4889041e6af..00000000000 --- a/tgui/packages/tgui/styles/atomic/text.scss +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.text-left { - text-align: left; -} - -.text-center { - text-align: center; -} - -.text-right { - text-align: right; -} - -.text-baseline { - text-align: baseline; -} - -.text-justify { - text-align: justify; -} - -.text-nowrap { - white-space: nowrap; -} - -.text-pre { - white-space: pre; -} - -.text-bold { - font-weight: bold; -} - -.text-italic { - font-style: italic; -} - -.text-underline { - text-decoration: underline; -} diff --git a/tgui/packages/tgui/styles/base_original.scss b/tgui/packages/tgui/styles/base_original.scss new file mode 100644 index 00000000000..3a99d5d28d7 --- /dev/null +++ b/tgui/packages/tgui/styles/base_original.scss @@ -0,0 +1,32 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +@use 'sass:color'; +@use 'sass:math'; + +$color-fg: #ffffff !default; +$color-bg: #252525 !default; +$color-bg-section: rgba(0, 0, 0, 0.33) !default; +$color-bg-grad-spread: 2% !default; +$color-bg-start: color.adjust( + $color-bg, + $lightness: $color-bg-grad-spread +) !default; +$color-bg-end: color.adjust( + $color-bg, + $lightness: -$color-bg-grad-spread +) !default; + +$unit: 12px; +$font-size: 1 * $unit !default; +$border-radius: 0.16em !default; + +@function em($px) { + @return 1em * math.div($px, $unit); +} + +@function rem($px) { + @return 1rem * math.div($px, $unit); +} diff --git a/tgui/packages/tgui/styles/colors.scss b/tgui/packages/tgui/styles/colors.scss index 1521c1e5f6f..0434c897022 100644 --- a/tgui/packages/tgui/styles/colors.scss +++ b/tgui/packages/tgui/styles/colors.scss @@ -22,7 +22,9 @@ $purple: #a333c8 !default; $pink: #e03997 !default; $brown: #a5673f !default; $grey: #767676 !default; +$gray: $grey !default; $light-grey: #aaa !default; +$light-gray: $light-grey !default; $silver: #c0c0c0 !default; $crimson: #dc143c !default; $cyan: #00ffff !default; @@ -41,15 +43,22 @@ $bg-lightness: -15% !default; $fg-lightness: 10% !default; @function bg($color) { - @return color.scale($color, $lightness: $bg-lightness); + @if meta.type-of($color) == 'color' { + @return color.scale($color, $lightness: $bg-lightness); + } + + @return hsl(from $color h s calc(l - var(--adjust-color))); } @function fg($color) { - @return color.scale($color, $lightness: $fg-lightness); + @if meta.type-of($color) == 'color' { + @return color.scale($color, $lightness: $fg-lightness); + } + + @return hsl(from $color h s calc(l + var(--adjust-color))); } // Mappings of color names - $_gen_map: ( 'black': $black, 'white': $white, @@ -65,7 +74,9 @@ $_gen_map: ( 'pink': $pink, 'brown': $brown, 'grey': $grey, + 'gray': $gray, 'light-grey': $light-grey, + 'light-gray': $light-gray, 'silver': $silver, 'crimson': $crimson, 'cyan': $cyan, @@ -78,23 +89,38 @@ $_gen_map: ( 'label': $label, ); -// Foreground color names for which to generate a color map +// Modern tgui-core atomic styles expect a generic color map. +$color-map-keys: map.keys($_gen_map) !default; +$color-map: (); +@each $color-name in $color-map-keys { + $color-map: map.merge( + $color-map, + ( + $color-name: map.get($_gen_map, $color-name), + ) + ); +} + +// Legacy Aurora theme styles configure these maps directly. $fg-map-keys: map.keys($_gen_map) !default; -// Background color names for which to generate a color map $bg-map-keys: map.keys($_gen_map) !default; $fg-map: (); @each $color-name in $fg-map-keys { - // prettier-ignore - $fg-map: map-merge($fg-map, ( - $color-name: fg(map.get($_gen_map, $color-name)), - )); + $fg-map: map.merge( + $fg-map, + ( + $color-name: fg(map.get($_gen_map, $color-name)), + ) + ); } $bg-map: (); @each $color-name in $bg-map-keys { - // prettier-ignore - $bg-map: map-merge($bg-map, ( - $color-name: bg(map.get($_gen_map, $color-name)), - )); + $bg-map: map.merge( + $bg-map, + ( + $color-name: bg(map.get($_gen_map, $color-name)), + ) + ); } diff --git a/tgui/packages/tgui/styles/colors_original.scss b/tgui/packages/tgui/styles/colors_original.scss new file mode 100644 index 00000000000..1521c1e5f6f --- /dev/null +++ b/tgui/packages/tgui/styles/colors_original.scss @@ -0,0 +1,100 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +@use 'sass:color'; +@use 'sass:map'; +@use 'sass:meta'; + +// Base colors +$black: #000000 !default; +$white: #ffffff !default; +$red: #db2828 !default; +$orange: #f2711c !default; +$yellow: #fbd608 !default; +$olive: #b5cc18 !default; +$green: #20b142 !default; +$teal: #00b5ad !default; +$blue: #2185d0 !default; +$violet: #6435c9 !default; +$purple: #a333c8 !default; +$pink: #e03997 !default; +$brown: #a5673f !default; +$grey: #767676 !default; +$light-grey: #aaa !default; +$silver: #c0c0c0 !default; +$crimson: #dc143c !default; +$cyan: #00ffff !default; +$gold: #ffd700 !default; +$magenta: #ff00ff !default; +$lime: #32cd32 !default; + +$primary: #4972a1 !default; +$good: #5baa27 !default; +$average: #f08f11 !default; +$bad: #db2828 !default; +$label: #7e90a7 !default; + +// Background and foreground color lightness ratios +$bg-lightness: -15% !default; +$fg-lightness: 10% !default; + +@function bg($color) { + @return color.scale($color, $lightness: $bg-lightness); +} + +@function fg($color) { + @return color.scale($color, $lightness: $fg-lightness); +} + +// Mappings of color names + +$_gen_map: ( + 'black': $black, + 'white': $white, + 'red': $red, + 'orange': $orange, + 'yellow': $yellow, + 'olive': $olive, + 'green': $green, + 'teal': $teal, + 'blue': $blue, + 'violet': $violet, + 'purple': $purple, + 'pink': $pink, + 'brown': $brown, + 'grey': $grey, + 'light-grey': $light-grey, + 'silver': $silver, + 'crimson': $crimson, + 'cyan': $cyan, + 'gold': $gold, + 'magenta': $magenta, + 'lime': $lime, + 'good': $good, + 'average': $average, + 'bad': $bad, + 'label': $label, +); + +// Foreground color names for which to generate a color map +$fg-map-keys: map.keys($_gen_map) !default; +// Background color names for which to generate a color map +$bg-map-keys: map.keys($_gen_map) !default; + +$fg-map: (); +@each $color-name in $fg-map-keys { + // prettier-ignore + $fg-map: map-merge($fg-map, ( + $color-name: fg(map.get($_gen_map, $color-name)), + )); +} + +$bg-map: (); +@each $color-name in $bg-map-keys { + // prettier-ignore + $bg-map: map-merge($bg-map, ( + $color-name: bg(map.get($_gen_map, $color-name)), + )); +} diff --git a/tgui/packages/tgui/styles/components/BlockQuote.scss b/tgui/packages/tgui/styles/components/BlockQuote.scss deleted file mode 100644 index 4e54030e5b6..00000000000 --- a/tgui/packages/tgui/styles/components/BlockQuote.scss +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; - -$color-default: colors.fg(colors.$label) !default; - -.BlockQuote { - color: $color-default; - border-left: base.em(2px) solid $color-default; - padding-left: 0.5em; - margin-bottom: 0.5em; - - &:last-child { - margin-bottom: 0; - } -} diff --git a/tgui/packages/tgui/styles/components/Button.scss b/tgui/packages/tgui/styles/components/Button.scss deleted file mode 100644 index f559cc26359..00000000000 --- a/tgui/packages/tgui/styles/components/Button.scss +++ /dev/null @@ -1,172 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -$color-default: colors.bg(colors.$primary) !default; -$color-disabled: #999999 !default; -$color-selected: colors.bg(colors.$green) !default; -$color-caution: colors.bg(colors.$yellow) !default; -$color-danger: colors.bg(colors.$red) !default; -$color-transparent-text: rgba(255, 255, 255, 0.5) !default; -$border-radius: base.$border-radius !default; -$bg-map: colors.$bg-map !default; - -@mixin button-color($color) { - // Adapt text color to background luminance to ensure high contast - $luminance: luminance($color); - $text-color: if($luminance > 0.4, rgba(0, 0, 0, 1), rgba(255, 255, 255, 1)); - - transition: - color 50ms, - background-color 50ms; - background-color: $color; - color: $text-color; - - &:hover { - transition: - color 0ms, - background-color 0ms; - } - - &:focus { - transition: - color 100ms, - background-color 100ms; - } - - &:hover, - &:focus { - background-color: lighten($color, 30%); - color: $text-color; - } -} - -.Button { - position: relative; - display: inline-block; - line-height: 1.667em; - padding: 0 0.5em; - margin-right: base.em(2px); - white-space: nowrap; - outline: 0; - border-radius: $border-radius; - margin-bottom: base.em(2px); - // Disable selection in buttons - user-select: none; - -ms-user-select: none; - - &:last-child { - margin-right: 0; - margin-bottom: 0; - } - - .fa, - .fas, - .far { - margin-left: -0.25em; - margin-right: -0.25em; - min-width: 1.333em; - text-align: center; - } -} - -.Button--hasContent { - // Add a margin to the icon to keep it separate from the text - .fa, - .fas, - .far { - margin-right: 0.25em; - } -} - -.Button--hasContent.Button--iconPosition--right { - .fa, - .fas, - .far { - margin-right: 0px; - margin-left: 3px; - } -} - -.Button--ellipsis { - overflow: hidden; - text-overflow: ellipsis; -} - -.Button--fluid { - display: block; - margin-left: 0; - margin-right: 0; -} - -.Button--circular { - border-radius: 50%; -} - -.Button--compact { - padding: 0 0.25em; - line-height: 1.333em; -} - -@each $color-name, $color-value in $bg-map { - .Button--color--#{$color-name} { - @include button-color($color-value); - } -} - -.Button--color--default { - @include button-color($color-default); -} - -.Button--color--caution { - @include button-color($color-caution); -} - -.Button--color--danger { - @include button-color($color-danger); -} - -.Button--color--transparent { - @include button-color(base.$color-bg); - background-color: rgba(base.$color-bg, 0); - color: $color-transparent-text; -} - -.Button--disabled { - background-color: $color-disabled !important; -} - -.Button--selected { - @include button-color($color-selected); -} - -.Button--flex { - display: inline-flex; //Inline even for fluid - flex-direction: column; -} - -.Button--flex--fluid { - width: 100%; -} - -.Button--verticalAlignContent--top { - justify-content: flex-start; -} - -.Button--verticalAlignContent--middle { - justify-content: center; -} - -.Button--verticalAlignContent--bottom { - justify-content: flex-end; -} - -.Button__content { - display: block; - align-self: stretch; -} diff --git a/tgui/packages/tgui/styles/components/ColorBox.scss b/tgui/packages/tgui/styles/components/ColorBox.scss deleted file mode 100644 index 739cacee0e4..00000000000 --- a/tgui/packages/tgui/styles/components/ColorBox.scss +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.ColorBox { - display: inline-block; - width: 1em; - height: 1em; - line-height: 1em; - text-align: center; -} diff --git a/tgui/packages/tgui/styles/components/Dialog.scss b/tgui/packages/tgui/styles/components/Dialog.scss deleted file mode 100644 index c7b7fd13261..00000000000 --- a/tgui/packages/tgui/styles/components/Dialog.scss +++ /dev/null @@ -1,105 +0,0 @@ -@use '../base'; - -$background-color: base.$color-bg !default; - -.Dialog { - position: fixed; - left: 0; - top: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.5); - display: flex; - align-items: center; - justify-content: center; -} - -.Dialog__content { - background-color: $background-color; - font-family: Consolas, monospace; - font-size: base.em(14px); - display: flex; - flex-direction: column; -} - -.Dialog__header { - display: flex; - height: 2em; - line-height: 1.928em; - background-color: rgba(0, 0, 0, 0.5); - user-select: none; - -ms-user-select: none; -} - -.Dialog__title { - display: inline; - font-style: italic; - margin-left: 1rem; - margin-right: 2rem; - flex-grow: 1; - opacity: 0.33; -} - -.Dialog__body { - margin: 2rem 1rem 2rem 1rem; - flex-grow: 1; -} - -.Dialog__footer { - display: flex; - flex-direction: row; - justify-content: flex-end; - padding: 1rem; - background-color: rgba(0, 0, 0, 0.25); -} - -.Dialog__button { - margin: 0 1rem 0 1rem; - height: 2rem; - min-width: 6rem; - text-align: center; -} - -.SaveAsDialog__inputs { - display: flex; - flex-direction: row; - align-items: center; - padding-left: 3rem; - justify-content: flex-end; - margin-right: 1rem; -} - -.SaveAsDialog__input { - margin-left: 1rem; - width: 80%; -} - -.SaveAsDialog__label { - vertical-align: center; -} - -.Dialog__FileList { - position: relative; - display: flex; - flex-wrap: wrap; - flex-grow: 1; - align-content: flex-start; - max-height: 20rem; - overflow: auto; - overflow-y: scroll; -} - -.Dialog__FileEntry { - text-align: center; - margin: 1rem; -} - -.Dialog__FileIcon { - display: inline-block; - margin: 0 0 1rem 0; - position: relative; - width: 6vh; - height: auto; - text-align: center; - cursor: default; -} diff --git a/tgui/packages/tgui/styles/components/Dimmer.scss b/tgui/packages/tgui/styles/components/Dimmer.scss deleted file mode 100644 index 32a43ce509e..00000000000 --- a/tgui/packages/tgui/styles/components/Dimmer.scss +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ -$background-dimness: 0.75 !default; - -.Dimmer { - // Align everything in the middle. - // A fat middle finger for anything less than IE11. - display: flex; - justify-content: center; - align-items: center; - // Fill positioned parent - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - // Dim everything around it - background-color: rgba(0, 0, 0, $background-dimness); - z-index: 1; -} diff --git a/tgui/packages/tgui/styles/components/Divider.scss b/tgui/packages/tgui/styles/components/Divider.scss deleted file mode 100644 index e4df190e62c..00000000000 --- a/tgui/packages/tgui/styles/components/Divider.scss +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -$color: rgba(255, 255, 255, 0.1) !default; -$thickness: base.em(2px) !default; -$spacing: 0.5em; - -.Divider--horizontal { - margin: $spacing 0; - - &:not(.Divider--hidden) { - border-top: $thickness solid $color; - } -} - -.Divider--vertical { - height: 100%; - margin: 0 $spacing; - - &:not(.Divider--hidden) { - border-left: $thickness solid $color; - } -} diff --git a/tgui/packages/tgui/styles/components/Dropdown.scss b/tgui/packages/tgui/styles/components/Dropdown.scss deleted file mode 100644 index 6909f8d9312..00000000000 --- a/tgui/packages/tgui/styles/components/Dropdown.scss +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -.Dropdown { - position: relative; -} - -.Dropdown__control { - position: relative; - display: inline-block; - font-family: Verdana, sans-serif; - font-size: base.em(12px); - width: base.em(100px); - line-height: base.em(17px); - user-select: none; -} - -.Dropdown__arrow-button { - float: right; - padding-left: 0.35em; - width: 1.2em; - height: base.em(22px); - border-left: base.em(1px) solid #000; - border-left: base.em(1px) solid rgba(0, 0, 0, 0.25); -} - -.Dropdown__menu { - position: absolute; - overflow-y: auto; - z-index: 5; - width: base.em(100px); - max-height: base.em(200px); - overflow-y: scroll; - border-radius: 0 0 base.em(2px) base.em(2px); - color: #fff; - background-color: #000; - background-color: rgba(0, 0, 0, 0.75); -} - -.Dropdown__menu-noscroll { - position: absolute; - overflow-y: auto; - z-index: 5; - width: base.em(100px); - max-height: base.em(200px); - border-radius: 0 0 base.em(2px) base.em(2px); - color: #fff; - background-color: #000; - background-color: rgba(0, 0, 0, 0.75); -} - -.Dropdown__menuentry { - padding: base.em(2px) base.em(4px); - font-family: Verdana, sans-serif; - font-size: base.em(12px); - line-height: base.em(17px); - transition: background-color 100ms ease-out; - - &:hover { - background-color: rgba(255, 255, 255, 0.2); - transition: background-color 0ms; - } -} - -.Dropdown__over { - top: auto; - bottom: 100%; -} - -.Dropdown__selected-text { - display: inline-block; - text-overflow: ellipsis; - white-space: nowrap; - height: base.em(17px); - width: calc(100% - 1.2em); -} diff --git a/tgui/packages/tgui/styles/components/Flex.scss b/tgui/packages/tgui/styles/components/Flex.scss deleted file mode 100644 index d4b6b8ec388..00000000000 --- a/tgui/packages/tgui/styles/components/Flex.scss +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.Flex { - display: -ms-flexbox; - display: flex; -} - -.Flex--inline { - display: inline-flex; -} - -.Flex--iefix { - display: block; -} - -.Flex--iefix.Flex--inline { - display: inline-block; -} - -.Flex__item--iefix { - display: inline-block; -} - -.Flex--iefix--column { - & > .Flex__item--iefix { - display: block; - } -} diff --git a/tgui/packages/tgui/styles/components/Icon.scss b/tgui/packages/tgui/styles/components/Icon.scss deleted file mode 100644 index 320117a65f3..00000000000 --- a/tgui/packages/tgui/styles/components/Icon.scss +++ /dev/null @@ -1,25 +0,0 @@ -/** - * @file - * @copyright 2020 - * @author ThePotato97 (https://github.com/ThePotato97) - * @license ISC - */ - -.IconStack > .Icon { - position: absolute; - width: 100%; - text-align: center; -} - -.IconStack { - position: relative; - display: inline-block; - height: 1.2em; - line-height: 2em; - vertical-align: middle; - - &:after { - color: transparent; - content: '.'; - } -} diff --git a/tgui/packages/tgui/styles/components/Input.scss b/tgui/packages/tgui/styles/components/Input.scss deleted file mode 100644 index 0e8e509df0b..00000000000 --- a/tgui/packages/tgui/styles/components/Input.scss +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../functions.scss' as *; - -$text-color: base.$color-fg !default; -$background-color: #0a0a0a !default; -$border-color: #88bfff !default; -$border-radius: base.$border-radius !default; -$font-family: Verdana, sans-serif !default; - -.Input { - position: relative; - display: inline-block; - width: base.em(120px); - border: base.em(1px) solid $border-color; - border: base.em(1px) solid rgba($border-color, 0.75); - border-radius: $border-radius; - color: $text-color; - background-color: $background-color; - padding: 0 base.em(4px); - margin-right: base.em(2px); - line-height: base.em(17px); - overflow: visible; -} - -.Input--fluid { - display: block; - width: auto; -} - -.Input__baseline { - display: inline-block; - color: transparent; -} - -.Input__input { - display: block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - border: 0; - outline: 0; - width: 100%; - font-size: base.em(12px); - line-height: base.em(17px); - height: base.em(17px); - margin: 0; - padding: 0 0.5em; - font-family: $font-family; - background-color: transparent; - color: $text-color; - color: inherit; - - &::placeholder { - font-style: italic; - color: #777; - color: rgba(255, 255, 255, 0.45); - } - - &:-ms-input-placeholder { - font-style: italic; - color: #777; - color: rgba(255, 255, 255, 0.45); - } -} - -.Input--monospace .Input__input { - font-family: 'Consolas', monospace; -} diff --git a/tgui/packages/tgui/styles/components/Knob.scss b/tgui/packages/tgui/styles/components/Knob.scss deleted file mode 100644 index 1a5f0d10a99..00000000000 --- a/tgui/packages/tgui/styles/components/Knob.scss +++ /dev/null @@ -1,131 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -$bg-map: colors.$bg-map !default; -$fg-map: colors.$fg-map !default; -$ring-color: #6a96c9 !default; -$knob-color: #333333 !default; -$popup-background-color: #000000 !default; -$popup-text-color: #ffffff !default; - -$inner-padding: 0.1em; - -.Knob { - position: relative; - font-size: 1rem; - width: 2.6em; - height: 2.6em; - margin: 0 auto; - margin-bottom: -0.2em; - cursor: n-resize; - - // Adjusts a baseline in a way, that makes knob middle-aligned - // when it flows with the text. - &:after { - content: '.'; - color: transparent; - line-height: 2.5em; - } -} - -.Knob__circle { - position: absolute; - top: $inner-padding; - bottom: $inner-padding; - left: $inner-padding; - right: $inner-padding; - margin: 0.3em; - background-color: $knob-color; - background-image: linear-gradient( - to bottom, - rgba(255, 255, 255, 0.15) 0%, - rgba(255, 255, 255, 0) 100% - ); - border-radius: 50%; - box-shadow: 0 0.05em 0.5em 0 rgba(0, 0, 0, 0.5); -} - -.Knob__cursorBox { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; -} - -.Knob__cursor { - position: relative; - top: 0.05em; - margin: 0 auto; - width: 0.2em; - height: 0.8em; - background-color: rgba(255, 255, 255, 0.9); -} - -.Knob__popupValue { - position: absolute; - top: -2rem; - right: 50%; - font-size: 1rem; - text-align: center; - padding: 0.25rem 0.5rem; - color: $popup-text-color; - background-color: $popup-background-color; - transform: translateX(50%); - white-space: nowrap; -} - -.Knob__ring { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - padding: $inner-padding; -} - -$pi: 3.1416; - -.Knob__ringTrackPivot { - transform: rotateZ(135deg); -} - -.Knob__ringTrack { - // transform-origin: 50% 50%; - fill: transparent; - stroke: rgba(255, 255, 255, 0.1); - stroke-width: 8; - stroke-linecap: round; - stroke-dasharray: 75 * $pi; -} - -.Knob__ringFillPivot { - transform: rotateZ(135deg); -} - -.Knob--bipolar .Knob__ringFillPivot { - transform: rotateZ(270deg); -} - -.Knob__ringFill { - fill: transparent; - stroke: $ring-color; - stroke-width: 8; - stroke-linecap: round; - stroke-dasharray: 100 * $pi; - transition: stroke 50ms ease-out; -} - -@each $color-name, $color-value in $fg-map { - .Knob--color--#{$color-name} { - .Knob__ringFill { - stroke: $color-value; - } - } -} diff --git a/tgui/packages/tgui/styles/components/LabeledList.scss b/tgui/packages/tgui/styles/components/LabeledList.scss deleted file mode 100644 index 94adf932549..00000000000 --- a/tgui/packages/tgui/styles/components/LabeledList.scss +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -.LabeledList { - display: table; - // IE8: Does not support calc - width: 100%; - // Compensate for negative margin - width: calc(100% + 1em); - border-collapse: collapse; - border-spacing: 0; - margin: -0.25em -0.5em; - margin-bottom: 0; - padding: 0; -} - -.LabeledList__row { - display: table-row; -} - -.LabeledList__row:last-child .LabeledList__cell { - padding-bottom: 0; -} - -.LabeledList__cell { - display: table-cell; - margin: 0; - padding: 0.25em 0.5em; - border: 0; - text-align: left; -} - -.LabeledList__label--nowrap { - width: 1%; - white-space: nowrap; - min-width: 5em; -} - -.LabeledList__buttons { - width: 0.1%; - white-space: nowrap; - text-align: right; - padding-top: base.em(1px); - padding-bottom: 0; -} diff --git a/tgui/packages/tgui/styles/components/MenuBar.scss b/tgui/packages/tgui/styles/components/MenuBar.scss deleted file mode 100644 index 0f5eb47380c..00000000000 --- a/tgui/packages/tgui/styles/components/MenuBar.scss +++ /dev/null @@ -1,75 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -$separator-color: base.$color-bg-section; -$background-color: base.$color-bg !default; -$dropdown-z-index: 5; - -.MenuBar { - display: flex; -} - -.MenuBar__font { - font-family: Verdana, sans-serif; - font-size: base.em(12px); - line-height: base.em(17px); -} - -.MenuBar__hover { - &:hover { - background-color: lighten($background-color, 30%); - transition: background-color 0ms; - } -} - -.MenuBar__MenuBarButton { - padding: 0.2rem 0.5rem 0.2rem 0.5rem; -} - -.MenuBar__menu { - position: absolute; - z-index: $dropdown-z-index; - background-color: $background-color; - padding: 0.3rem 0.3rem 0.3rem 0.3rem; - box-shadow: 4px 6px 5px -2px rgba(0, 0, 0, 0.55); -} - -.MenuBar__MenuItem { - z-index: $dropdown-z-index; - transition: background-color 100ms ease-out; - background-color: $background-color; - white-space: nowrap; - padding: 0.3rem 2rem 0.3rem 3rem; -} - -.MenuBar__MenuItemToggle { - padding: 0.3rem 2rem 0.3rem 0; -} - -.MenuBar__MenuItemToggle__check { - display: inline-block; - vertical-align: middle; - min-width: 3rem; - margin-left: 0.3rem; -} - -.MenuBar__over { - top: auto; - bottom: 100%; -} - -.MenuBar__MenuBarButton-text { - text-overflow: clip; - white-space: nowrap; - height: base.em(17px); -} - -.MenuBar__Separator { - display: block; - margin: 0.3rem 0.3rem 0.3rem 2.3rem; - border-top: 1px solid $separator-color; -} diff --git a/tgui/packages/tgui/styles/components/Modal.scss b/tgui/packages/tgui/styles/components/Modal.scss deleted file mode 100644 index 005ffe31656..00000000000 --- a/tgui/packages/tgui/styles/components/Modal.scss +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -$background-color: base.$color-bg !default; - -.Modal { - background-color: $background-color; - max-width: calc(100% - 1rem); - padding: 1rem; -} diff --git a/tgui/packages/tgui/styles/components/NoticeBox.scss b/tgui/packages/tgui/styles/components/NoticeBox.scss deleted file mode 100644 index 0394ffaa660..00000000000 --- a/tgui/packages/tgui/styles/components/NoticeBox.scss +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use 'sass:color'; -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -// NoticeBox -$background-color: #bb9b68 !default; -$color-stripes: rgba(0, 0, 0, 0.1) !default; -$color-border: #272727 !default; -$bg-map: colors.$bg-map !default; - -.NoticeBox { - // Adapt text color to background luminance to ensure high contast - $luminance: luminance($background-color); - $text-color: if($luminance > 0.35, rgba(0, 0, 0, 1), rgba(255, 255, 255, 1)); - - padding: 0.33em 0.5em; - margin-bottom: 0.5em; - box-shadow: none; - font-weight: bold; - font-style: italic; - color: $text-color; - background-color: $background-color; - background-image: repeating-linear-gradient( - -45deg, - transparent, - transparent base.em(10px), - $color-stripes base.em(10px), - $color-stripes base.em(20px) - ); -} - -@mixin box-color($color) { - $luminance: luminance($color); - $text-color: if($luminance > 0.35, rgba(0, 0, 0, 1), rgba(255, 255, 255, 1)); - color: $text-color; - background-color: color.adjust($color, $saturation: -15%, $lightness: -15%); -} - -@each $color-name, $color-value in $bg-map { - .NoticeBox--color--#{$color-name} { - @include box-color($color-value); - } -} - -.NoticeBox--type--info { - @include box-color(colors.$blue); -} - -.NoticeBox--type--success { - @include box-color(colors.$green); -} - -.NoticeBox--type--warning { - @include box-color(colors.$orange); -} - -.NoticeBox--type--danger { - @include box-color(colors.$red); -} diff --git a/tgui/packages/tgui/styles/components/NumberInput.scss b/tgui/packages/tgui/styles/components/NumberInput.scss deleted file mode 100644 index ef2aba4d474..00000000000 --- a/tgui/packages/tgui/styles/components/NumberInput.scss +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use 'sass:color'; -@use '../base.scss'; -@use '../functions.scss' as *; -@use './Input.scss'; - -$text-color: Input.$text-color !default; -$background-color: Input.$background-color !default; -$border-color: Input.$border-color !default; -$border-radius: Input.$border-radius !default; - -.NumberInput { - position: relative; - display: inline-block; - border: base.em(1px) solid $border-color; - border: base.em(1px) solid rgba($border-color, 0.75); - border-radius: $border-radius; - color: $border-color; - background-color: $background-color; - padding: 0 base.em(4px); - margin-right: base.em(2px); - line-height: base.em(17px); - text-align: right; - overflow: visible; - cursor: n-resize; -} - -.NumberInput--fluid { - display: block; -} - -.NumberInput__content { - margin-left: 0.5em; -} - -.NumberInput__barContainer { - position: absolute; - top: base.em(2px); - bottom: base.em(2px); - left: base.em(2px); -} - -.NumberInput__bar { - position: absolute; - bottom: 0; - left: 0; - width: base.em(3px); - box-sizing: border-box; - border-bottom: base.em(1px) solid $border-color; - background-color: $border-color; -} - -.NumberInput__input { - display: block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - border: 0; - outline: 0; - width: 100%; - font-size: base.em(12px); - line-height: base.em(17px); - height: base.em(17px); - margin: 0; - padding: 0 0.5em; - font-family: Verdana, sans-serif; - background-color: $background-color; - color: $text-color; - text-align: right; -} diff --git a/tgui/packages/tgui/styles/components/ProgressBar.scss b/tgui/packages/tgui/styles/components/ProgressBar.scss deleted file mode 100644 index e13d25e8375..00000000000 --- a/tgui/packages/tgui/styles/components/ProgressBar.scss +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -$color-default-fill: colors.bg(colors.$primary) !default; -$background-color: rgba(0, 0, 0, 0) !default; -$border-radius: base.$border-radius !default; -$bg-map: colors.$bg-map !default; - -.ProgressBar { - display: inline-block; - position: relative; - width: 100%; - padding: 0 0.5em; - border-width: base.em(1px) !important; - border-style: solid !important; - border-radius: $border-radius; - background-color: $background-color; - transition: border-color 900ms ease-out; -} - -.ProgressBar__fill { - position: absolute; - top: -0.5px; - left: 0px; - bottom: -0.5px; -} - -.ProgressBar__fill--animated { - transition: - background-color 900ms ease-out, - width 900ms ease-out; -} - -.ProgressBar__content { - position: relative; - line-height: base.em(17px); - width: 100%; - text-align: right; -} - -.ProgressBar--color--default { - border: base.em(1px) solid $color-default-fill; - - .ProgressBar__fill { - background-color: $color-default-fill; - } -} - -@each $color-name, $color-value in $bg-map { - .ProgressBar--color--#{$color-name} { - border-color: $color-value !important; - - .ProgressBar__fill { - background-color: $color-value; - } - } -} diff --git a/tgui/packages/tgui/styles/components/RoundGauge.scss b/tgui/packages/tgui/styles/components/RoundGauge.scss deleted file mode 100644 index be95519d646..00000000000 --- a/tgui/packages/tgui/styles/components/RoundGauge.scss +++ /dev/null @@ -1,88 +0,0 @@ -/** - * Copyright (c) 2020 bobbahbrown (https://github.com/bobbahbrown) - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss' as *; - -$fg-map: colors.$fg-map !default; -$ring-color: #6a96c9 !default; - -.RoundGauge { - font-size: 1rem; - width: 2.6em; - height: 1.3em; - margin: 0 auto; - margin-bottom: 0.2em; -} - -$pi: 3.1416; - -.RoundGauge__ringTrack { - fill: transparent; - stroke: rgba(255, 255, 255, 0.1); - stroke-width: 10; - stroke-dasharray: 50 * $pi; - stroke-dashoffset: 50 * $pi; -} - -.RoundGauge__ringFill { - fill: transparent; - stroke: $ring-color; - stroke-width: 10; - stroke-dasharray: 100 * $pi; - transition: stroke 50ms ease-out; -} - -.RoundGauge__needle, -.RoundGauge__ringFill { - transition: transform 50ms ease-in-out; -} - -.RoundGauge__needleLine, -.RoundGauge__needleMiddle { - fill: colors.$bad; -} - -.RoundGauge__alert { - fill-rule: evenodd; - clip-rule: evenodd; - stroke-linejoin: round; - stroke-miterlimit: 2; - fill: rgba(255, 255, 255, 0.1); -} - -.RoundGauge__alert.max { - fill: colors.$bad; -} - -@each $color-name, $color-value in $fg-map { - .RoundGauge--color--#{$color-name}.RoundGauge__ringFill { - stroke: $color-value; - } -} - -@each $color-name, $color-value in $fg-map { - .RoundGauge__alert--#{$color-name} { - fill: $color-value; - transition: opacity 0.6s cubic-bezier(0.25, 1, 0.5, 1); - animation: RoundGauge__alertAnim - 1s - cubic-bezier(0.34, 1.56, 0.64, 1) - infinite; - } -} - -@keyframes RoundGauge__alertAnim { - 0% { - opacity: 0.1; - } - 50% { - opacity: 1; - } - 100% { - opacity: 0.1; - } -} diff --git a/tgui/packages/tgui/styles/components/Section.scss b/tgui/packages/tgui/styles/components/Section.scss deleted file mode 100644 index d1f81b1f766..00000000000 --- a/tgui/packages/tgui/styles/components/Section.scss +++ /dev/null @@ -1,143 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use 'sass:color'; -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss'; - -$title-text-color: base.$color-fg !default; -$background-color: base.$color-bg-section !default; -$separator-color: colors.$primary !default; - -.Section { - position: relative; - margin-bottom: 0.5em; - background-color: functions.fake-alpha($background-color, base.$color-bg); - background-color: $background-color; - box-sizing: border-box; - - &:last-child { - margin-bottom: 0; - } -} - -.Section__title { - position: relative; - padding: 0.5em; - border-bottom: base.em(2px) solid $separator-color; -} - -.Section__titleText { - font-size: base.em(14px); - font-weight: bold; - color: $title-text-color; -} - -.Section__buttons { - position: absolute; - display: inline-block; - right: 0.5em; - margin-top: base.em(-1px); -} - -.Section__rest { - position: relative; -} - -.Section__content { - padding: 0.66em 0.5em; -} - -.Section--fitted > .Section__rest > .Section__content { - padding: 0; -} - -.Section--fill { - display: flex; - flex-direction: column; - height: 100%; -} - -.Section--fill > .Section__rest { - flex-grow: 1; -} - -.Section--fill > .Section__rest > .Section__content { - height: 100%; -} - -.Section--fill.Section--scrollable > .Section__rest > .Section__content { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.Section--fill.Section--iefix { - display: table !important; - width: 100% !important; - height: 100% !important; - border-collapse: collapse; - border-spacing: 0; - - & > .Section__rest { - display: table-row !important; - height: 100% !important; - } -} - -.Section--scrollable { - overflow-x: hidden; - overflow-y: hidden; - - & > .Section__rest > .Section__content { - overflow-y: scroll; - overflow-x: hidden; - } -} - -.Section--scrollableHorizontal { - overflow-x: hidden; - overflow-y: hidden; - - & > .Section__rest > .Section__content { - overflow-y: hidden; - overflow-x: scroll; - } -} - -.Section--scrollable.Section--scrollableHorizontal { - overflow-x: hidden; - overflow-y: hidden; - - & > .Section__rest > .Section__content { - overflow-y: scroll; - overflow-x: scroll; - } -} - -// Nested sections -.Section .Section { - background-color: transparent; - margin-left: -0.5em; - margin-right: -0.5em; - - // Remove extra space above the first nested section - &:first-child { - margin-top: -0.5em; - } -} - -// Level 2 section title -.Section .Section .Section__titleText { - font-size: base.em(13px); -} - -// Level 3 section title -.Section .Section .Section .Section__titleText { - font-size: base.em(12px); -} diff --git a/tgui/packages/tgui/styles/components/Slider.scss b/tgui/packages/tgui/styles/components/Slider.scss deleted file mode 100644 index 83baf71dc09..00000000000 --- a/tgui/packages/tgui/styles/components/Slider.scss +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; - -$cursor-color: base.$color-fg !default; -$popup-background-color: #000000 !default; -$popup-text-color: #ffffff !default; - -.Slider { - cursor: e-resize; -} - -.Slider__cursorOffset { - position: absolute; - top: 0; - left: 0; - bottom: 0; - transition: none !important; -} - -.Slider__cursor { - position: absolute; - top: 0; - right: base.em(-1px); - bottom: 0; - width: 0; - border-left: base.em(2px) solid $cursor-color; -} - -.Slider__pointer { - position: absolute; - right: base.em(-5px); - bottom: base.em(-4px); - width: 0; - height: 0; - border-left: base.em(5px) solid transparent; - border-right: base.em(5px) solid transparent; - border-bottom: base.em(5px) solid $cursor-color; -} - -.Slider__popupValue { - position: absolute; - right: 0; - top: -2rem; - font-size: 1rem; - padding: 0.25rem 0.5rem; - color: $popup-text-color; - background-color: $popup-background-color; - transform: translateX(50%); - white-space: nowrap; -} diff --git a/tgui/packages/tgui/styles/components/Stack.scss b/tgui/packages/tgui/styles/components/Stack.scss deleted file mode 100644 index ab2c6f24931..00000000000 --- a/tgui/packages/tgui/styles/components/Stack.scss +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Copyright (c) 2021 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use './Divider.scss'; - -.Stack--fill { - height: 100%; -} - -.Stack--horizontal > .Stack__item { - margin-left: 0.5em; - - &:first-child { - margin-left: 0; - } -} - -.Stack--vertical > .Stack__item { - margin-top: 0.5em; - - &:first-child { - margin-top: 0; - } -} - -.Stack--horizontal > .Stack__divider:not(.Stack__divider--hidden) { - border-left: Divider.$thickness solid Divider.$color; -} - -.Stack--vertical > .Stack__divider:not(.Stack__divider--hidden) { - border-top: Divider.$thickness solid Divider.$color; -} diff --git a/tgui/packages/tgui/styles/components/Table.scss b/tgui/packages/tgui/styles/components/Table.scss deleted file mode 100644 index ecc47e5ba9a..00000000000 --- a/tgui/packages/tgui/styles/components/Table.scss +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -.Table { - display: table; - width: 100%; - border-collapse: collapse; - border-spacing: 0; - margin: 0; -} - -.Table--collapsing { - width: auto; -} - -.Table__row { - display: table-row; -} - -.Table__cell { - display: table-cell; - padding: 0 0.25em; - - &:first-child { - padding-left: 0; - } - - &:last-child { - padding-right: 0; - } -} - -.Table__row--header .Table__cell, -.Table__cell--header { - font-weight: bold; - padding-bottom: 0.5em; -} - -.Table__cell--collapsing { - width: 1%; - white-space: nowrap; -} diff --git a/tgui/packages/tgui/styles/components/Tabs.scss b/tgui/packages/tgui/styles/components/Tabs.scss deleted file mode 100644 index 2ab09125027..00000000000 --- a/tgui/packages/tgui/styles/components/Tabs.scss +++ /dev/null @@ -1,144 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use 'sass:color'; -@use 'sass:math'; -@use '../base.scss'; -@use '../colors.scss'; - -$color-default: color.scale( - colors.fg(colors.$primary), - $lightness: 75% -) !default; -$text-color: rgba(255, 255, 255, 0.5) !default; -$text-color-selected: color.scale($color-default, $lightness: 25%) !default; -$tab-color: transparent !default; -$tab-color-hovered: rgba(255, 255, 255, 0.075) !default; -$tab-color-selected: rgba(255, 255, 255, 0.125) !default; -$border-radius: base.$border-radius !default; -$fg-map: colors.$fg-map !default; - -.Tabs { - display: flex; - align-items: stretch; - overflow: hidden; - background-color: base.$color-bg-section; -} - -.Tabs--fill { - height: 100%; -} - -// Interoperability with sections -.Section .Tabs { - background-color: transparent; -} - -.Section:not(.Section--fitted) .Tabs { - margin: 0 -0.5em 0.5em; - - &:first-child { - margin-top: -0.5em; - } -} - -.Tabs--vertical { - flex-direction: column; - padding: 0.25em 0 0.25em 0.25em; -} - -.Tabs--horizontal { - margin-bottom: 0.5em; - padding: 0.25em 0.25em 0 0.25em; - - &:last-child { - margin-bottom: 0; - } -} - -.Tabs__Tab { - flex-grow: 0; -} - -.Tabs--fluid .Tabs__Tab { - flex-grow: 1; -} - -.Tab { - display: flex; - align-items: center; - justify-content: space-between; - background-color: $tab-color; - color: $text-color; - min-height: 2.25em; - min-width: 4em; -} - -.Tab:not(.Tab--selected):hover { - background-color: $tab-color-hovered; -} - -.Tab--selected { - background-color: $tab-color-selected; - color: $text-color-selected; -} - -.Tab__text { - flex-grow: 1; - margin: 0 0.5em; -} - -.Tab__left { - min-width: 1.5em; - text-align: center; - margin-left: 0.25em; -} - -.Tab__right { - min-width: 1.5em; - text-align: center; - margin-right: 0.25em; -} - -.Tabs--horizontal { - .Tab { - border-top: math.div(1em, 6) solid transparent; - border-bottom: math.div(1em, 6) solid transparent; - border-top-left-radius: 0.25em; - border-top-right-radius: 0.25em; - } - - .Tab--selected { - border-bottom: math.div(1em, 6) solid $color-default; - } -} - -.Tabs--vertical { - .Tab { - min-height: 2em; - border-left: math.div(1em, 6) solid transparent; - border-right: math.div(1em, 6) solid transparent; - border-top-left-radius: 0.25em; - border-bottom-left-radius: 0.25em; - } - - .Tab--selected { - border-right: math.div(1em, 6) solid $color-default; - } -} - -@each $color-name, $color-value in $fg-map { - .Tab--selected.Tab--color--#{$color-name} { - color: color.scale($color-value, $lightness: 25%); - } - - .Tabs--horizontal .Tab--selected.Tab--color--#{$color-name} { - border-bottom-color: $color-value; - } - - .Tabs--vertical .Tab--selected.Tab--color--#{$color-name} { - border-right-color: $color-value; - } -} diff --git a/tgui/packages/tgui/styles/components/TextArea.scss b/tgui/packages/tgui/styles/components/TextArea.scss deleted file mode 100644 index ec8e0c7a317..00000000000 --- a/tgui/packages/tgui/styles/components/TextArea.scss +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../functions.scss' as *; -@use './Input.scss'; - -$text-color: Input.$text-color !default; -$background-color: Input.$background-color !default; -$border-color: Input.$border-color !default; -$border-radius: Input.$border-radius !default; - -.TextArea { - position: relative; - display: inline-block; - border: base.em(1px) solid $border-color; - border: base.em(1px) solid rgba($border-color, 0.75); - border-radius: $border-radius; - background-color: $background-color; - margin-right: base.em(2px); - line-height: base.em(17px); - box-sizing: border-box; - width: 100%; -} - -.TextArea--fluid { - display: block; - width: auto; - height: auto; -} - -.TextArea--noborder { - border: 0px; -} - -.TextArea__textarea.TextArea__textarea--scrollable { - overflow: auto; - overflow-x: hidden; - overflow-y: scroll; -} - -.TextArea__textarea { - display: block; - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - border: 0; - outline: 0; - width: 100%; - height: 100%; - font-size: 1em; - line-height: base.em(17px); - min-height: base.em(17px); - margin: 0; - padding: 0 0.5em; - font-family: inherit; - background-color: transparent; - color: inherit; - box-sizing: border-box; - // Make sure the div and the textarea wrap words in the same way - word-wrap: break-word; - overflow: hidden; - - &::placeholder { - font-style: italic; - color: #777; - color: rgba(255, 255, 255, 0.45); - } - - &:-ms-input-placeholder { - font-style: italic; - color: #777; - color: rgba(255, 255, 255, 0.45); - } -} - -.TextArea__textarea_custom { - overflow: visible; - white-space: pre-wrap; -} - -.TextArea__nowrap { - white-space: nowrap; - overflow-wrap: normal; - overflow-x: scroll; -} diff --git a/tgui/packages/tgui/styles/components/Tooltip.scss b/tgui/packages/tgui/styles/components/Tooltip.scss deleted file mode 100644 index 497813a206d..00000000000 --- a/tgui/packages/tgui/styles/components/Tooltip.scss +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) 2020 Aleksej Komarov - * SPDX-License-Identifier: MIT - */ - -@use '../base.scss'; -@use '../functions.scss' as *; - -$color: #ffffff !default; -$background-color: #000000 !default; -$border-radius: base.$border-radius !default; - -.Tooltip { - z-index: 2; - padding: 0.5em 0.75em; - pointer-events: none; - text-align: left; - transition: opacity 150ms ease-out; - background-color: $background-color; - color: $color; - box-shadow: 0.1em 0.1em 1.25em -0.1em rgba(0, 0, 0, 0.5); - border-radius: $border-radius; - max-width: base.em(250px); -} diff --git a/tgui/packages/tgui/styles/css-variables.scss b/tgui/packages/tgui/styles/css-variables.scss new file mode 100644 index 00000000000..bddcdb2ef80 --- /dev/null +++ b/tgui/packages/tgui/styles/css-variables.scss @@ -0,0 +1,13 @@ +/** + * Internal variables + * For more, see: https://github.com/tgstation/tgui-core + * Files: vars-colors.scss | vars-components.scss | vars-vaules.scss + */ + +:root { + /* TitleBar */ + --titlebar-background: var(--color-secondary); + --titlebar-text: var(--color-text-translucent-light); + --titlebar-shadow-color: var(--color-border-dark); + --titlebar-shadow-core: var(--color-border-dark); +} diff --git a/tgui/packages/tgui/styles/functions.scss b/tgui/packages/tgui/styles/functions.scss index 28185755e88..c4b512a3e17 100644 --- a/tgui/packages/tgui/styles/functions.scss +++ b/tgui/packages/tgui/styles/functions.scss @@ -3,15 +3,9 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:map'; @use 'sass:math'; -@use 'sass:meta'; -// Type-casting -// -------------------------------------------------------- - -// Get a unit-less numeric value +/* Type-casting: Get a unit-less numeric value */ @function num($value) { @if meta.type-of($value) != number { @error 'Could not convert `#{$value}` - must be `type-of number`'; @@ -23,60 +17,6 @@ @return math.div($value, $value * 0 + 1); } -// Color -// -------------------------------------------------------- - -// Increases perceptual color lightness. -@function lighten($color, $percent) { - $scaled: hsl( - color.hue($color), - color.saturation($color), - color.lightness($color) * (1 + num($percent)) - ); - $mixed: color.mix(#ffffff, $color, 100% * num($percent)); - @return color.mix($scaled, $mixed, 75%); -} - -// Returns the NTSC luminance of `$color` as a float (between 0 and 1). -// 1 is pure white, 0 is pure black. -@function luminance($color) { - $colors: ( - 'red': color.red($color), - 'green': color.green($color), - 'blue': color.blue($color), - ); - - @each $name, $value in $colors { - $adjusted: 0; - $value: math.div($value, 255); - @if $value < 0.03928 { - $value: math.div($value, 12.92); - } @else { - $value: math.div($value + 0.055, 1.055); - $value: math.pow($value, 2.4); - } - // prettier-ignore - $colors: map.merge($colors, ( - $name: $value, - )); - } - - // prettier-ignore - @return (map.get($colors, 'red') * .2126) - + (map.get($colors, 'green') * .7152) - + (map.get($colors, 'blue') * .0722); -} - -// Blends an RGBA color with a static background color based on its -// alpha channel. Returns an RGB color, which is compatible with IE8. -@function fake-alpha($color-rgba, $color-background) { - @return color.mix( - color.change($color-rgba, $alpha: 1), - $color-background, - color.alpha($color-rgba) * 100% - ); -} - // Multiplies our viewport units by the DPI scaling amount // to ensure that they display correctly when using differently-scaled windows @function vp($viewportUnit) { diff --git a/tgui/packages/tgui/styles/interfaces/Accounting.scss b/tgui/packages/tgui/styles/interfaces/Accounting.scss new file mode 100644 index 00000000000..d48ef846d73 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Accounting.scss @@ -0,0 +1,42 @@ +.Accounting__Toolbar { + outline: solid 1px; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); + color: grey; +} + +.Accounting__Window { + flex-direction: column; + outline: solid 1px black; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); +} + +.Accounting__WindowContent { + background-color: white; + outline: solid; + outline-style: outset; + outline-width: 2px; + outline-color: hsl(0, 0%, 85%); + background-color: rgb(195, 195, 195); +} + +.Accounting__TableHeader { + border-style: solid; + border-width: 2px; + border-left: 0px; + border-right: 0px; + border-bottom: 0px; +} + +.Accounting__TableCellSides { + border-style: solid; + border-width: 1px; + border-top: 0px; + border-right: 0px; + border-bottom: 0px; +} diff --git a/tgui/packages/tgui/styles/interfaces/AlertModal.scss b/tgui/packages/tgui/styles/interfaces/AlertModal.scss index beff2b5535e..2a531c4186b 100644 --- a/tgui/packages/tgui/styles/interfaces/AlertModal.scss +++ b/tgui/packages/tgui/styles/interfaces/AlertModal.scss @@ -17,14 +17,14 @@ .AlertModal__Loader { width: 100%; position: relative; - height: 4px; + height: var(--border-thickness-large); } .AlertModal__LoaderProgress { position: absolute; - transition: - background-color 500ms ease-out, - width 500ms ease-out; - background-color: colors.bg(colors.$primary); + transition-property: background-color, width; + transition-duration: var(--transition-time-slow); + transition-timing-function: ease-out; + background-color: var(--color-primary); height: 100%; } diff --git a/tgui/packages/tgui/styles/interfaces/AnomalyTower.scss b/tgui/packages/tgui/styles/interfaces/AnomalyTower.scss new file mode 100644 index 00000000000..340acd85c2d --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/AnomalyTower.scss @@ -0,0 +1,33 @@ +.AnomalyTower__HazardBg { + background-size: 42.42px 42.42px; // ~30 * sqrt(2) to avoid weird artifacts + background-image: repeating-linear-gradient( + 45deg, + #ffc107, + #ffc107 15px, + #000000 15px, + #000000 30px + ); + + border-style: outset; + border-color: #333333; +} + +.AnomalyTower__HazardButton { + border-radius: 50px; + border-style: outset; + border-color: #bebebe; + + box-shadow: 0 0 20px #0c0c0c; + + width: 100px; + height: 100px; + color: red; +} + +.AnomalyTower__Charge { + font-family: 'Consolas', monospace; + background-color: black; + + border-style: ridge; + border-color: #8f8f8f; +} diff --git a/tgui/packages/tgui/styles/interfaces/AntagInfoHeretic.scss b/tgui/packages/tgui/styles/interfaces/AntagInfoHeretic.scss new file mode 100644 index 00000000000..74b2b985282 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/AntagInfoHeretic.scss @@ -0,0 +1,193 @@ +.theme-Heretic { + --background-color: radial-gradient( + circle, + rgb(3, 3, 7) 54%, + rgb(9, 9, 26) 60%, + rgb(8, 5, 15) 80%, + rgb(13, 7, 26) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(3, 3, 7) 54%, + rgb(9, 9, 26) 60%, + rgb(8, 5, 15) 80%, + rgb(13, 7, 26) 100% + ); + + &--AshPath { + --background-color: radial-gradient( + circle, + rgba(24, 9, 9, 1) 54%, + rgba(31, 10, 10, 1) 60%, + rgba(46, 11, 11, 1) 80%, + rgba(47, 14, 14, 1) 100% + ); + --background-color-title: radial-gradient( + circle, + rgba(24, 9, 9, 1) 54%, + rgba(31, 10, 10, 1) 60%, + rgba(46, 11, 11, 1) 80%, + rgba(47, 14, 14, 1) 100% + ); + } + + &--RustPath { + // brown like poop + --background-color: radial-gradient( + circle, + rgba(120, 48, 9) 54%, + rgba(139, 48, 9) 60%, + rgb(150, 48, 9) 80%, + rgba(160, 48, 9) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(107, 48, 48) 54%, + rgb(211, 19, 19) 60%, + rgb(221, 84, 25) 80%, + rgb(230, 81, 12) 100% + ); + } + + &--FleshPath { + --background-color: radial-gradient( + circle, + rgb(153, 26, 26) 54%, + rgba(130, 9, 9, 1) 60%, + rgb(150, 33, 30) 80%, + rgb(141, 30, 26) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(100, 0, 0) 54%, + rgb(100, 2, 2) 60%, + rgba(150, 8, 5, 1) 80%, + rgb(200, 34, 0) 100% + ); + } + + &--VoidPath { + --background-color: radial-gradient( + circle, + rgb(13, 13, 66) 54%, + rgb(22, 22, 66) 60%, + rgb(25, 25, 99) 80%, + rgb(42, 42, 192) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(13, 13, 66) 54%, + rgb(22, 22, 66) 60%, + rgb(25, 25, 99) 80%, + rgb(42, 42, 192) 100% + ); + } + + &--BladePath { + --background-color: radial-gradient( + circle, + rgb(139, 141, 137) 54%, + rgb(139, 141, 137) 60%, + rgb(170, 188, 186) 80%, + rgba(185, 188, 182) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(139, 141, 137) 54%, + rgb(139, 141, 137) 60%, + rgb(170, 188, 186) 80%, + rgba(185, 188, 182) 100% + ); + } + + &--CosmicPath { + --background-color: radial-gradient( + circle, + rgb(78, 38, 110) 54%, + rgb(78, 38, 110) 60%, + rgb(78, 38, 110) 80%, + rgb(78, 38, 110) 100% + ); + --background-color-title: radial-gradient( + circle, + rgba(3, 3, 7, 1) 54%, + rgba(9, 9, 26, 1) 60%, + rgba(8, 5, 15, 1) 80%, + rgba(13, 7, 26, 1) 100% + ); + } + + &--LockPath { + --background-color: radial-gradient( + circle, + rgba(3, 3, 7, 1) 54%, + rgba(9, 9, 26, 1) 60%, + rgba(8, 5, 15, 1) 80%, + rgba(13, 7, 26, 1) 100% + ); + --background-color-title: radial-gradient( + circle, + rgba(3, 3, 7, 1) 54%, + rgba(9, 9, 26, 1) 60%, + rgba(8, 5, 15, 1) 80%, + rgba(13, 7, 26, 1) 100% + ); + } + + &--MoonPath { + --background-color: radial-gradient( + circle, + rgb(215, 179, 218) 54%, + rgb(163, 139, 165) 60%, + rgb(108, 92, 109) 80%, + rgba(13, 7, 26, 1) 100% + ); + --background-color-title: radial-gradient( + circle, + rgb(215, 179, 218) 54%, + rgb(163, 139, 165) 60%, + rgb(108, 92, 109) 80%, + rgba(13, 7, 26, 1) 100% + ); + } + + .TitleBar { + background: var(--background-color); + } + + .Window { + background: var(--background-color); + + &__content { + background-image: none; + } + } + + &--ascended { + --background-color: radial-gradient( + circle, + rgba(24, 9, 9, 1) 54%, + rgba(31, 10, 10, 1) 60%, + rgba(46, 11, 11, 1) 80%, + rgba(47, 14, 14, 1) 100% + ); + } +} + +.path-title { + padding: 0; + margin: 0; + text-align: center; +} + +.Passive { + margin: 0.5em 0; + background-color: #808080; + border-radius: 5px; + width: 50%; + padding: 0.5em; + + &--Active { + background-color: #62cc67; + } +} diff --git a/tgui/packages/tgui/styles/interfaces/Changelog.scss b/tgui/packages/tgui/styles/interfaces/Changelog.scss new file mode 100644 index 00000000000..f459f697a09 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Changelog.scss @@ -0,0 +1,13 @@ +.Changelog { + &__Button { + height: 22px; + } + + &__Cell { + padding: var(--space-s) 0; + + &--Icon { + width: 25px; + } + } +} diff --git a/tgui/packages/tgui/styles/interfaces/CivCargoHoldTerminal.scss b/tgui/packages/tgui/styles/interfaces/CivCargoHoldTerminal.scss new file mode 100644 index 00000000000..c3be10fe06e --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/CivCargoHoldTerminal.scss @@ -0,0 +1,23 @@ +.Tab_Flash { + box-shadow: 0 0 1px 2px #48abe0; + animation: shadowFade 0.5s forwards; +} + +@keyframes shadowFade { + to { + box-shadow: 0 0 0 0 #48abe0; + } +} + +.Marquee { + animation: marquee 5s linear infinite; +} + +@keyframes marquee { + 0% { + transform: translateX(100%); + } + 100% { + transform: translateX(-100%); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/ColorPicker.scss b/tgui/packages/tgui/styles/interfaces/ColorPicker.scss new file mode 100644 index 00000000000..f9d9d317695 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/ColorPicker.scss @@ -0,0 +1,150 @@ +/** + * MIT License + * https://github.com/omgovich/react-colorful/ + * + * Copyright (c) 2020 Vlad Shilov + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +@use '../colors.scss'; +@use '../base.scss'; + +.react-colorful { + position: relative; + display: flex; + flex-direction: column; + width: 200px; + height: 200px; + user-select: none; + cursor: default; +} + +.react-colorful__saturation_value { + position: relative; + flex-grow: 1; + border-color: transparent; /* Fixes https://github.com/omgovich/react-colorful/issues/139 */ + border-bottom: 12px solid #000; + border-radius: 8px 8px 0 0; + background-image: + linear-gradient(to top, rgba(0, 0, 0, 255), rgba(0, 0, 0, 0)), + linear-gradient(to right, rgba(255, 255, 255, 255), rgba(255, 255, 255, 0)); +} + +.react-colorful__pointer-fill, +.react-colorful__alpha-gradient { + content: ''; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + pointer-events: none; + border-radius: inherit; +} + +/* Improve elements rendering on light backgrounds */ +.react-colorful__alpha-gradient, +.react-colorful__saturation_value { + box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.05); +} + +.react-colorful__hue, +.react-colorful__r, +.react-colorful__g, +.react-colorful__b, +.react-colorful__alpha, +.react-colorful__saturation, +.react-colorful__value { + position: relative; + height: 24px; +} + +.react-colorful__hue { + background: linear-gradient( + to right, + #f00 0%, + #ff0 17%, + #0f0 33%, + #0ff 50%, + #00f 67%, + #f0f 83%, + #f00 100% + ); +} + +.react-colorful__r { + background: linear-gradient(to right, #000, #f00); +} + +.react-colorful__g { + background: linear-gradient(to right, #000, #0f0); +} + +.react-colorful__b { + background: linear-gradient(to right, #000, #00f); +} + +/* Round bottom corners of the last element: `Hue` for `ColorPicker` or `Alpha` for `AlphaColorPicker` */ +.react-colorful__last-control { + border-radius: 0 0 8px 8px; +} + +.react-colorful__interactive { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + border-radius: inherit; + outline: none; + /* Don't trigger the default scrolling behavior when the event is originating from this element */ + touch-action: none; +} + +.react-colorful__pointer { + position: absolute; + z-index: 1; + box-sizing: border-box; + width: 28px; + height: 28px; + transform: translate(-50%, -50%); + background-color: #cfcfcf; + border: 2px solid #cfcfcf; + border-radius: 50%; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4); +} + +.react-colorful__interactive:focus .react-colorful__pointer { + transform: translate(-50%, -50%) scale(1.1); + background-color: #fff; + border-color: #fff; +} + +/* Chessboard-like pattern for alpha related elements */ +.react-colorful__alpha, +.react-colorful__alpha-pointer { + background-color: #fff; + background-image: url('data:image/svg+xml,'); +} + +.react-colorful__saturation-pointer, +.react-colorful__value-pointer, +.react-colorful__hue-pointer, +.react-colorful__r-pointer, +.react-colorful__g-pointer, +.react-colorful__b-pointer { + z-index: 1; + width: 20px; + height: 20px; +} + +/* Display the saturation value pointer over the hue one */ +.react-colorful__saturation_value-pointer { + z-index: 3; +} diff --git a/tgui/packages/tgui/styles/interfaces/CrewManifest.scss b/tgui/packages/tgui/styles/interfaces/CrewManifest.scss index 6c70acf4abc..85895c60af1 100644 --- a/tgui/packages/tgui/styles/interfaces/CrewManifest.scss +++ b/tgui/packages/tgui/styles/interfaces/CrewManifest.scss @@ -1,51 +1,56 @@ -@use '../colors.scss'; - -$departmental-colors: ( - 'Command': #114dc1, - 'Command Support': #114dc1, - 'Security': #991818, - 'Engineering': #c67519, - 'Medical': #15903a, - 'Science': #a44799, - 'Operations': #593616, - 'Service': #90524b, - 'Civilian': #999999, - 'Equipment': #6c5b73, - 'Miscellaneous': #5d6a67, +$department_map: ( + 'Cargo': var(--color-brown), + 'Command': var(--color-yellow), + 'Security': var(--color-red), + 'Engineering': var(--color-orange), + 'Medical': var(--color-teal), + 'Misc': var(--color-white), + 'Science': var(--color-purple), + 'Service': var(--color-green), + 'Silicon': var(--color-pink), ); -$status-colors: ( - 'active': colors.$green, - 'ssd': colors.$orange, - 'missing': colors.$orange, - 'deceased': colors.$red, - 'physically-unfit': colors.$yellow, - 'disabled': colors.$yellow, - 'away-mission': colors.$blue, -); - -@each $dept, $color in $departmental-colors { - .text-dept-#{to-lower-case($dept)} { - color: $color !important; - } - .bg-dept-#{to-lower-case($dept)} { - background-color: $color !important; - } - .border-dept-#{to-lower-case($dept)} { - border-color: $color !important; - .Section { - &__title { - border-color: $color; - } - &__titleText { - color: $color; +.CrewManifest { + @each $department-name, $color-value in $department_map { + &--#{$department-name} { + .Section { + &__title { + border-color: $color-value; + } + &__titleText { + color: $color-value; + } } } } -} -@each $status, $color in $status-colors { - .manifest-indicator-#{$status} { - color: $color !important; + &__Cell { + padding: var(--space-s) 0; + + &--Rank { + color: var(--color-label); + } + } + + &__Icons { + padding: var(--space-s) var(--space-l); + text-align: right; + } + + &__Icon { + color: var(--color-label); + position: relative; + + &:not(:last-child) { + margin-right: var(--space-m); + } + + &--Chevron { + padding-right: var(--space-xs); + } + + &--Command { + color: var(--color-yellow); + } } } diff --git a/tgui/packages/tgui/styles/interfaces/DeForestLogo.scss b/tgui/packages/tgui/styles/interfaces/DeForestLogo.scss new file mode 100644 index 00000000000..5c247781bd0 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/DeForestLogo.scss @@ -0,0 +1,7 @@ +.deforest_logo { + background-color: hsl(150, 100%, 18%); + -webkit-mask-image: url('../assets/bg-deforest.svg'); + mask-image: url('../assets/bg-deforest.svg'); + mask-repeat: no-repeat; + mask-position: center; +} diff --git a/tgui/packages/tgui/styles/interfaces/DetectiveBoard.scss b/tgui/packages/tgui/styles/interfaces/DetectiveBoard.scss new file mode 100644 index 00000000000..d5adcaa4e0b --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/DetectiveBoard.scss @@ -0,0 +1,230 @@ +@use '../colors.scss'; +@use '../base.scss'; + +.BoardTab { + display: flex; + align-items: center; + justify-content: space-between; + color: var(--color-black); + min-height: 2.25em; + min-width: 4em; + border-radius: var(--border-radius-large) var(--border-radius-large) 0 0; + transform-origin: 50% 100%; + transition-property: background-color, transform; + transition-duration: var(--transition-time-medium); +} + +.BoardTab__Text { + margin-right: var(--space-m); +} + +.BoardTab__Contain { + flex-grow: 1; + margin: 0 var(--space-m); +} + +.BoardTab__Perspective:not(.BoardTab__Contain) { + perspective-origin: 50%; + transform: perspective(100px) rotateX(25deg); +} + +.BoardTab__Selected { + background-color: hsl(45, 82%, 66%); +} + +.BoardTabs { + display: flex; + align-items: stretch; + overflow: hidden; +} + +.Evidence__Pin { + box-shadow: var(--shadow-glow-small) hsla(0, 0%, 0%, 0.33); + background-color: hsl(0, 65%, 40%); + border-radius: var(--border-radius-circular); + width: 16px; + height: 16px; + transition: + transform 0.2s ease, + box-shadow 0.2s ease; + border: 1px solid hsla(0, 0%, 0%, 0.3); + background-image: radial-gradient( + circle at 30% 30%, + rgba(255, 255, 255, 0.5) 0%, + rgba(255, 255, 255, 0) 60% + ); +} + +.Evidence__Pin:hover { + transform: scale(1.2); + cursor: var(--cursor-pointer); + box-shadow: 0 0 12px hsla(0, 72%, 50%, 0.7); +} + +.Evidence__Pin--connecting { + background-color: hsl(0, 82%, 60%); + box-shadow: 0 0 15px hsla(0, 72%, 50%, 0.9); + transform: scale(1.3); +} + +.Evidence__Box { + cursor: var(--cursor-pointer); + box-shadow: 0 4px 12px hsla(0, 0%, 0%, 0.6); + padding: var(--space-m); + color: var(--color-black); + min-width: 200px; + max-width: 300px; + background-color: hsl(46, 39%, 94%); + border: 2px solid hsl(35, 30%, 50%); + user-select: none; + -ms-user-select: none; + text-wrap: wrap; + position: relative; + background-image: repeating-linear-gradient( + 0deg, + rgba(0, 0, 0, 0.06) 0px, + rgba(0, 0, 0, 0.06) 1px, + transparent 1px, + transparent 22px + ); + transition: all 0.3s ease; +} + +.Evidence__Box:hover { + box-shadow: 0 8px 16px hsla(0, 0%, 0%, 0.7); + transform: translateY(-4px) rotate(0.5deg); + border-color: hsl(35, 40%, 40%); + transition: transform 0.3s ease; +} + +.Evidence--dragging .Evidence__Box { + animation: card-sway 1s ease-in-out infinite; + box-shadow: 0 12px 24px hsla(0, 0%, 0%, 0.7); + transform: translateY(-8px) rotate(1deg) translateX(10px); + transition: all 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275); + border-color: hsl(35, 40%, 30%); + z-index: 100; +} + +.Evidence__Box::after { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient( + 135deg, + rgba(255, 255, 255, 0.3) 0%, + rgba(255, 255, 255, 0) 50% + ); + pointer-events: none; +} + +.Evidence__Box::before { + content: ''; + position: absolute; + top: 0; + right: 0; + width: 20px; + height: 20px; + background: linear-gradient( + 135deg, + transparent 0%, + transparent 50%, + rgba(0, 0, 0, 0.05) 50%, + rgba(0, 0, 0, 0.05) 100% + ); + pointer-events: none; +} + +.Evidence__Box__TextBox { + border-top: var(--border-thickness-tiny) dashed hsl(36, 29%, 80%); + text-wrap: wrap; + padding: var(--space-m) 0; + margin-top: var(--space-m); + max-width: 240px; + text-align: center; + font-family: 'Courier New', Courier, monospace; + color: #333; + + &.title { + border-top: none; + margin-top: 0; + font-weight: bold; + font-size: 1.1em; + color: #22131b; + text-transform: uppercase; + letter-spacing: 1px; + text-align: center; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5); + } +} + +.Board__Content { + position: relative; + background-color: hsl(45, 82%, 66%); + padding: var(--space-m); + overflow: hidden; + height: 95%; + background-image: + radial-gradient(circle, rgba(0, 0, 0, 0.1) 1px, transparent 1px), + radial-gradient(circle, rgba(0, 0, 0, 0.1) 1px, transparent 1px); + background-size: 16px 16px; + background-position: + 0 0, + 8px 8px; +} + +.Evidence__Icon { + image-rendering: pixelated; + margin-top: var(--space-m); + border: var(--border-thickness-large) solid hsl(0, 0%, 88%); + width: 100%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); + transition: transform 0.2s ease; + filter: sepia(20%); +} + +.Evidence__Icon:hover { + transform: scale(1.02); + filter: sepia(0%); +} + +@each $color-name, $color-value in colors.$color-map { + .BoardTab__#{$color-name} { + cursor: var(--cursor-pointer); + background-color: hsl(from $color-value h s calc(l + var(--adjust-color))); + color: var(--color-text-fixed-black); + } + + .BoardTab__#{$color-name}:hover { + background-color: hsl( + from $color-value h s calc(l + var(--adjust-color) * 2.5) + ); + } +} + +@keyframes float { + 0% { + transform: translateY(0px); + } + 50% { + transform: translateY(-5px); + } + 100% { + transform: translateY(0px); + } +} + +@keyframes card-sway { + 0% { + transform: rotate(-1deg) translateX(0); + } + 50% { + transform: rotate(1deg) translateX(5px); + } + 100% { + transform: rotate(-1deg) translateX(0); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/Emojipedia.scss b/tgui/packages/tgui/styles/interfaces/Emojipedia.scss new file mode 100644 index 00000000000..d6ec654cc80 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Emojipedia.scss @@ -0,0 +1,8 @@ +.emojipedia16x16 { + transform-origin: center; + margin: var(--space-m); + + &:hover { + transform: scale(1.5); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/EventLogger.scss b/tgui/packages/tgui/styles/interfaces/EventLogger.scss new file mode 100644 index 00000000000..f8e33cbf22b --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/EventLogger.scss @@ -0,0 +1,16 @@ +// Custom HTML tooltip shown on timeline mark hover, rendered at fixed position +.evlog-mark-tooltip { + position: fixed; + background: #1e1e2e; + border: 1px solid #555; + border-radius: 4px; + padding: 4px 8px; + white-space: pre-wrap; + font-size: 11px; + color: #ccc; + pointer-events: none; + z-index: 9999; + min-width: 120px; + max-width: 320px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.6); +} diff --git a/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss b/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss new file mode 100644 index 00000000000..c2135bc9b0e --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/ExperimentConfigure.scss @@ -0,0 +1,108 @@ +.ExperimentTechwebServer__Web, +.ExperimentConfigure__ExperimentPanel { + background: var(--color-black); + border: var(--border-thickness-tiny) solid var(--color-primary); + margin: var(--space-s) 0; + + &--selected { + border: var(--border-thickness-tiny) solid var(--button-background-selected); + } +} + +.ExperimentTechwebServer__WebHeader { + background: var(--color-primary); + padding: var(--space-xs); +} + +.ExperimentTechwebServer__WebName { + font-size: 18px; +} + +.ExperimentTechwebServer__WebContent { + padding: var(--space-sm); +} + +.ExperimentTechwebServer__WebContent > .LabeledList { + margin: var(--space-s) var(--space-s) var(--space-s) var(--space-xl); +} + +.ExperimentConfigure__ExperimentName { + font-weight: bold; + border-radius: 0; +} + +.ExperimentConfigure__ExperimentNameFakeButton { + background-color: var(--color-primary); + font-weight: bold; + border-radius: 0; + position: relative; + display: block; + margin-left: 0; + margin-right: 0; + white-space: nowrap; + line-height: var(--button-height); + padding: 0 var(--space-m); + margin-bottom: var(--space-xs); + border-radius: var(--button-border-radius); + outline: none; + &__content { + display: block; + align-self: stretch; + } +} + +.ExperimentConfigure__ExperimentContent { + /* prettier-ignore */ + padding: var(--space-s) calc(var(--space-xl) * 1.5) var(--space-s) var(--space-s); +} + +.ExperimentStage__Indicator { + font-weight: bold; + text-align: center; +} + +.ExperimentStage__StageContainer.complete .ExperimentStage__Description { + opacity: 0.4; + text-decoration: line-through; +} + +.ExperimentStage__StageContainer { + margin-bottom: var(--space-m); +} + +.ExperimentStage__Table { + border-collapse: separate; + border-spacing: var(--space-s) var(--space-s); +} + +.ExperimentConfigure__PerformExperiment { + text-align: center; + padding: var(--space-l) 0; +} + +.ExperimentConfigure__ExperimentsContainer { + height: 100%; + display: flex; + flex-direction: column; +} + +.ExperimentConfigure__ExperimentsContainer > :last-child { + flex: 1; +} + +// Required for the time being otherwise we'll end up coloring the tooltip +// by accident when we color the tag. +.ExperimentConfigure__TagContainer { + position: absolute; + right: 0; + top: 0; +} + +.ExperimentConfigure__PerformanceHint * { + position: absolute; + width: 100%; + height: 100%; + right: 0; + top: 0; + color: var(--color-text-translucent); +} diff --git a/tgui/packages/tgui/styles/interfaces/Fabricator.scss b/tgui/packages/tgui/styles/interfaces/Fabricator.scss new file mode 100644 index 00000000000..e464611f5fb --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Fabricator.scss @@ -0,0 +1,207 @@ +@use '~tgui-core/styles/components/Button' as button; + +.Fabricator__Recipe { + padding: var(--space-s) 0; + border-bottom: var(--border-radius-tiny) solid var(--color-black); + position: relative; + + &:last-child { + border-bottom: 0; + } +} + +.Fabricator__PrintAmount { + min-height: 100%; +} + +.Fabricator__PrintAmount { + transition: opacity var(--transition-time-slow) ease-out; +} + +.Fabricator__PrintAmount--disabled { + opacity: 0.5; + background-color: transparent; +} + +.Fabricator__PrintAmount--disabled { + text-decoration: line-through; +} + +.MaterialDock { + position: relative; + padding: var(--space-m); + border-radius: 0 0 var(--border-radius-small) var(--border-radius-small); + transition: opacity var(--transition-time-slow) ease-in-out; +} + +.MaterialDock--active { + background-color: hsl(0, 0%, 6.7%); + transition: background-color var(--transition-time-fas) ease-out; +} + +.MaterialDock__Label { + transition: opacity var(--transition-time-slow) ease-out; +} + +.MaterialDock--disabled .MaterialDock__Label { + opacity: 0.5; +} + +.MaterialDock__Dock { + position: absolute; + background-color: hsl(0, 0%, 6.7%); + bottom: 100%; + left: 0; + width: 100%; + padding: var(--space-xl); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + text-align: center; + box-shadow: 0 0 3px var(--color-black); +} + +.MaterialDock--active .MaterialDock__Dock { + animation: materialdock-open var(--transition-time-medium) ease-out; + @keyframes materialdock-open { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } + } +} + +.MaterialDock__Button { + width: 100%; + height: 0; + padding-bottom: 100%; + position: relative; + box-shadow: 0 0 3px var(--color-black); +} + +.FabricatorRecipe { + display: flex; + width: auto; + border-bottom: var(--border-thickness-tiny) solid hsla(0, 0%, 0%, 0.5); + position: relative; + + &:last-child { + border-bottom: 0; + } + + &__Progress { + position: absolute; + bottom: 0; + left: 0; + height: 4px; + background-color: hsla(0, 0%, 100%, 0.25); + border-radius: var(--border-radius-medium); + transition: width var(--transition-time-slowest) linear; + } + + &__Title, + &__Button { + position: relative; + display: flex; + align-items: center; + justify-content: flex-start; + margin: 0; + padding: var(--space-s) var(--space-m); + border-radius: 0; + + @include button.button-color(); + @include button.button-color-transparent(); + + &:first-child { + border-radius: var(--border-radius-medium) 0 0 var(--border-radius-medium); + } + + &:last-child { + border-radius: 0 var(--border-radius-medium) var(--border-radius-medium) 0; + } + + &--disabled { + opacity: 0.5; + } + } + + &__Title { + flex-grow: 1; + } + + &__Icon { + width: 32px; + height: 32px; + margin-right: var(--space-xl); + } + + &__Button { + justify-self: flex-end; + + &--icon { + padding: 0 var(--space-xl); + } + + &--disabled { + text-decoration: line-through; + } + } +} + +.FabricatorMaterialIcon { + display: inline-block; + position: relative; + width: 32px; + height: 32px; + + &__Icon { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; + transition: opacity var(--transition-time-slow) ease-out; + + &--active { + opacity: 1; + } + } +} + +.FabricatorTabs { + .FabricatorTabs { + margin-top: var(--space-m); + padding-left: var(--space-s); + } + + &__Tab { + cursor: var(--cursor-pointer); + padding: var(--space-m); + background-color: var(--tab-background); + color: var(--tab-color); + border-right: var(--tab-indicator-size) solid transparent; + border-radius: var(--tab-border-radius) 0 0 var(--tab-border-radius); + transition-property: border-color, background-color; + transition-duration: var(--transition-time-fast); + transition-timing-function: ease-out; + + &:hover, + &--active { + background-color: var(--tab-background-hover); + } + + &--active { + cursor: var(--cursor-default); + color: var(--tab-color-selected); + border-color: var(--color-primary); + } + } + + &__Label { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + } +} diff --git a/tgui/packages/tgui/styles/interfaces/HellishRunes.scss b/tgui/packages/tgui/styles/interfaces/HellishRunes.scss new file mode 100644 index 00000000000..0861cad58ff --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/HellishRunes.scss @@ -0,0 +1,20 @@ +@use '../colors.scss'; +@use '../base.scss'; + +.HellishRunes__demonrune { + font-size: 20px; + margin-top: -240px; + animation-duration: 5s; + animation-name: demonrune; + animation-timing-function: linear; + animation-iteration-count: infinite; +} + +@keyframes demonrune { + from { + transform: translate(0px, 0px); + } + to { + transform: translate(0px, 194px); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/HotKeysHelp.scss b/tgui/packages/tgui/styles/interfaces/HotKeysHelp.scss new file mode 100644 index 00000000000..0e92f8a78b4 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/HotKeysHelp.scss @@ -0,0 +1,4 @@ +.HotkeysHelp__pill { + border-radius: var(--border-radius-large); + background-color: hsla(0, 0%, 100%, 0.125); +} diff --git a/tgui/packages/tgui/styles/interfaces/Hypertorus.scss b/tgui/packages/tgui/styles/interfaces/Hypertorus.scss new file mode 100644 index 00000000000..bb0e7dbfad5 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Hypertorus.scss @@ -0,0 +1,158 @@ +@use '../colors.scss'; + +/// Index @{ + +.hypertorus-layout { + margin-right: -0.5em; +} + +.hypertorus-layout > * { + margin-bottom: 0.5em; + margin-right: 0.5em; +} + +/// @} + +/// Recipes @{ + +// Subtle horizontal stripes for the table +.hypertorus-recipes__row:nth-child(odd) { + background-color: rgba(0, 0, 0, 0.37); +} +.hypertorus-recipes__row:nth-child(even) { + background-color: rgba(14, 14, 14, 0.37); +} + +// Highlight an active row +.hypertorus-recipes__activerow:nth-child(odd) { + background-color: rgba(20, 50, 81, 0.37); +} +.hypertorus-recipes__activerow:nth-child(even) { + background-color: rgba(29, 61, 98, 0.37); +} + +// Headers shouldn't get stripes, but should take the label text color. +// Headers get left borders as a separator, except if they're furtherest left. +.hypertorus-recipes__row.Table__row--header { + color: colors.fg(var(--color-label)); + background-color: rgba(0, 0, 0, 0); +} +.hypertorus-recipes__row.Table__row--header > td { + border-left: 1px solid colors.bg(var(--color-label)); + text-align: center; +} +.hypertorus-recipes__row.Table__row--header > td:first-child { + border-left: none; +} + +// Recipe icons are red, unless they're in a header +.hypertorus-recipes__icon { + text-align: center; + position: relative; + color: colors.fg(var(--color-red)); + width: 10px; +} +.hypertorus-recipes__row.Table__row--header * .hypertorus-recipes__icon { + color: colors.fg(var(--color-label)); +} + +/// @} + +/// Temperatures @{ + +// Note: Height must be kept in sync with Hypertorus/Temperatures.js +$height: 200px; + +// Calculate the space needed for the labels to the left of the chart +$yAxisLabelWidth: 60px; +$yAxisIconPadding: 2px; +$yAxisIconWidth: 14px; +$yAxisMargin: $yAxisLabelWidth + $yAxisIconWidth + $yAxisIconPadding * 2; + +// Relative container respects the padding provided by Section +.hypertorus-temperatures__container { + position: relative; + margin-right: 10px; + overflow-y: hidden; +} + +.hypertorus-temperatures__y-axis-marks { + margin-left: 1px; + margin-right: 1px; + width: $yAxisMargin; +} + +.hypertorus-temperatures__x-axis { + background-color: colors.bg(var(--color-label)); + position: absolute; + top: $height; + height: 1px; + left: $yAxisMargin; + right: 0; +} + +.hypertorus-temperatures__y-axis { + background-color: colors.bg(var(--color-label)); + position: absolute; + width: 1px; + left: $yAxisMargin; + height: $height; +} + +// Note: top set in js +.hypertorus-temperatures__y-axis-tick-anchor { + position: absolute; + left: 0px; + right: 0; +} + +.hypertorus-temperatures__y-axis-tick { + background-color: colors.bg(var(--color-label)); + position: absolute; + left: $yAxisMargin; + right: 0; + height: 1px; +} + +.hypertorus-temperatures__y-axis-label { + text-align: right; + color: colors.fg(var(--color-label)); + position: absolute; + top: 0; + left: 0; + width: $yAxisMargin; +} + +.hypertorus-temperatures__y-axis-icon { + display: inline-block; + margin-right: $yAxisIconPadding; +} + +.hypertorus-temperatures__chart { + left: 0; + right: 0; + margin-left: $yAxisMargin; +} + +.hypertorus-temperatures__vertical-bar { + height: $height; + position: relative; + width: 17px; + bottom: 0; +} + +// Note: top set in js +.hypertorus-temperatures__vertical-bar > * { + position: absolute; + left: -0.5px; + right: -0.5px; + bottom: 0px; + border-radius: 0.16em; +} + +.hypertorus__unselectable { + user-select: none; + -ms-user-select: none; +} + +/// @} diff --git a/tgui/packages/tgui/styles/interfaces/IntegratedCircuit.scss b/tgui/packages/tgui/styles/interfaces/IntegratedCircuit.scss new file mode 100644 index 00000000000..6c344819924 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/IntegratedCircuit.scss @@ -0,0 +1,143 @@ +@use 'sass:map'; +@use '../colors.scss'; +@use '../base.scss'; + +$map-keys: colors.$color-map !default; + +.CircuitInfo__Examined { + background-color: var(--color-black); + padding: var(--space-ml); + border-radius: var(--border-radius-large); + + user-select: none; + pointer-events: none; +} + +.ObjectComponent { + pointer-events: auto; +} + +.ObjectComponent__Titlebar { + border-top-left-radius: var(--border-radius-huge); + border-top-right-radius: var(--border-radius-huge); + + white-space: nowrap; + + -ms-user-select: none; + user-select: none; +} + +.ObjectComponent__Content { + white-space: nowrap; + background-color: hsla(0, 0%, 0%, 0.5); + + -ms-user-select: none; + user-select: none; +} + +.ObjectComponent__Greyed_Content { + white-space: nowrap; + background-color: hsla(0, 0%, 7.5%, 0.5); + + -ms-user-select: none; + user-select: none; +} + +.ObjectComponent__Port { + position: relative; + width: 13px; + height: 13px; +} + +.ObjectComponent__PortPos { + position: absolute; + inset: 0; +} + +.Tooltip__Port { + backdrop-filter: var(--tooltip-blur); + background-color: var(--tooltip-background); + border-radius: var(--tooltip-border-radius); + box-shadow: 0.1em 0.1em 1.25em -0.1em hsla(0, 0%, 0%, 0.5); + color: var(--tooltip-color); + max-width: base.em(250px); + padding: var(--space-m) var(--space-l); + text-align: left; +} + +@each $color-name, $color-value in $map-keys { + .color-stroke-#{$color-name} { + stroke: hsl(from $color-value h s calc(l + var(--adjust-color))) !important; + } + + .color-fill-#{$color-name} { + fill: hsl(from $color-value h s calc(l + var(--adjust-color))) !important; + } +} + +.IntegratedCircuit__BlueBorder { + border: var(--border-thickness-tiny) solid var(--color-border-primary); + border-radius: var(--border-radius-small); +} + +$category-colors: ( + 'Utility': ( + bg: hsl(136, 77%, 23%), + contrast: white, + ), + 'Entity': ( + bg: hsl(288, 60%, 49%), + contrast: white, + ), + 'Sensor': ( + bg: hsl(337, 67%, 66%), + contrast: white, + ), + 'Math': ( + bg: hsl(113, 65%, 47%), + contrast: black, + ), + 'Unassigned': ( + bg: hsl(208, 65%, 47%), + contrast: white, + ), + 'String': ( + bg: hsl(24, 84%, 48%), + contrast: white, + ), + 'List': ( + bg: hsl(0, 0%, 67%), + contrast: black, + ), + 'Action': ( + bg: hsl(178, 59%, 45%), + contrast: black, + ), + 'ID': ( + bg: hsl(52, 75%, 48%), + contrast: black, + ), + 'NTNet': ( + bg: hsl(239, 64%, 44%), + contrast: white, + ), + 'Abstract': ( + bg: hsl(208, 65%, 47%), + contrast: white, + ), + 'Admin': ( + bg: hsl(0, 72%, 50%), + contrast: white, + ), + 'BCI': ( + bg: black, + contrast: white, + ), +); + +@each $category-name, $values in $category-colors { + .ObjectComponent__Category__#{$category-name} { + background-color: map.get($values, bg); + color: map.get($values, contrast); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/LibraryAdmin.scss b/tgui/packages/tgui/styles/interfaces/LibraryAdmin.scss new file mode 100644 index 00000000000..501b6c6e4c9 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/LibraryAdmin.scss @@ -0,0 +1,18 @@ +.LibraryAdmin_RecordCell { + text-align: center; + vertical-align: middle; + padding: var(--space-sm) 0; + white-space: nowrap; +} + +.LibraryAdmin_RecordHeader { + text-align: center; + font-size: 150%; + vertical-align: middle; + padding: var(--space-sm) 0; + white-space: nowrap; +} + +.LibraryAdmin_RecordCell:nth-child(odd) { + background: hsla(0, 0%, 0%, 0.1); +} diff --git a/tgui/packages/tgui/styles/interfaces/LibraryComputer.scss b/tgui/packages/tgui/styles/interfaces/LibraryComputer.scss new file mode 100644 index 00000000000..581932265ac --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/LibraryComputer.scss @@ -0,0 +1,11 @@ +.LibraryComputer__CultNonsense { + font-size: 28px; + width: 100%; + font-family: copperplate; + height: 100%; +} + +.LibraryComputer__CultText { + font-family: copperplate; + font-size: 20px; +} diff --git a/tgui/packages/tgui/styles/interfaces/ListInput.scss b/tgui/packages/tgui/styles/interfaces/ListInput.scss index a7c74e6252d..43fb73ea9bc 100644 --- a/tgui/packages/tgui/styles/interfaces/ListInput.scss +++ b/tgui/packages/tgui/styles/interfaces/ListInput.scss @@ -11,20 +11,20 @@ } .ListInput__Section .Section__titleText { - font-size: base.em(12px); + font-size: 1rem; } .ListInput__Loader { - width: 100%; position: relative; + width: 100%; height: 4px; } .ListInput__LoaderProgress { position: absolute; - transition: - background-color 500ms ease-out, - width 500ms ease-out; - background-color: colors.bg(colors.$primary); height: 100%; + background-color: colors.bg(var(--color-primary)); + transition-property: background-color, width; + transition-duration: var(--transition-time-slow); + transition-timing-function: ease-out; } diff --git a/tgui/packages/tgui/styles/interfaces/LoreConsole.scss b/tgui/packages/tgui/styles/interfaces/LoreConsole.scss deleted file mode 100644 index 8aa6e81c243..00000000000 --- a/tgui/packages/tgui/styles/interfaces/LoreConsole.scss +++ /dev/null @@ -1,17 +0,0 @@ -@use '../base.scss'; - -$background-color: rgba(0, 0, 0, 0.33) !default; - -.LoreConsole__titleText { - font-size: 300%; - font-weight: bold; - margin: 0; - padding: 4px; -} - -.LoreConsole__entryText { - color: chocolate; - font-size: 150%; - font-family: 'Courier New', Courier, monospace; - padding: 32px; -} diff --git a/tgui/packages/tgui/styles/interfaces/Mecha.scss b/tgui/packages/tgui/styles/interfaces/Mecha.scss new file mode 100644 index 00000000000..7697262b0d1 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Mecha.scss @@ -0,0 +1,41 @@ +.Mecha__displayBox { + background-color: hsl(150, 100%, 1%); + border: 0.167em inset hsl(50, 33%, 91%); + color: hsl(132, 100%, 45%); + font-size: 2em; + font-family: monospace; + padding: 0.25em; +} + +.Mecha__displayBoxRed { + background-color: hsl(150, 100%, 1%); + border: 0.167em inset hsl(50, 33%, 91%); + color: hsl(0, 89%, 64%); + font-size: 2em; + font-family: var(--font-family-mono); + padding: 0.25em; +} + +.Mecha__Button { + outline-width: 0.25rem !important; + border-width: 0.65rem !important; + padding-left: 0 !important; + padding-right: 0 !important; +} + +.Mecha__ButtonDanger { + background-color: var(--button-background-danger) !important; + border-color: var(--button-background-danger) !important; + outline-width: 0.25rem !important; + border-width: 0.65rem !important; + padding-left: 0 !important; + padding-right: 0 !important; + &:hover { + background-color: hsl( + from var(--button-background-danger) h s calc(l + var(--adjust-hover)) + ) !important; + border-color: hsl( + from var(--button-background-danger) h s calc(l + var(--adjust-hover)) + ) !important; + } +} diff --git a/tgui/packages/tgui/styles/interfaces/NtosMessenger.scss b/tgui/packages/tgui/styles/interfaces/NtosMessenger.scss new file mode 100644 index 00000000000..b89209d4fb9 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/NtosMessenger.scss @@ -0,0 +1,101 @@ +/* Some themes have bad contrast on primary color */ +.NtosChatMessage { + .theme-ntOS95 & { + --color-primary: var(--color-section); + border: var(--border-thickness-small) outset var(--95-outline); + } + + .theme-ntos_terminal & { + --color-primary: hsl(from var(--terminal-color) h s calc(l - 40)); + } +} + +.NtosChatMessage { + display: inline-flex; + flex-direction: column; + max-width: 25rem; + margin: 0; + padding: var(--space-sm) var(--space-ml); + border-radius: var(--border-radius-small); + background-color: hsl(from var(--color-primary) h s calc(l - 12.5)); + + &_outgoing { + @extend .NtosChatMessage; + background-color: hsl(from var(--color-primary) h s calc(l + 7.5)); + text-align: right; + float: right; + } + + &__timestamp { + height: 0.9rem; + margin-top: var(--space-sm); + margin-left: var(--space-m); + } + + &__content { + display: flex; + justify-content: space-between; + min-width: 9rem; + overflow-wrap: break-word; + text-align: left; + word-break: break-word; + } + + &__everyone { + margin-top: var(--space-m); + font-size: 0.8rem; + color: lightgrey; + } + + &__image { + image-rendering: pixelated; + align-self: flex-start; + margin-top: var(--space-m); + max-width: 25rem; + } +} + +.NtosChatLog { + padding: var(--space-l); + min-height: 99.5%; + margin: 0; +} + +.NtosChatLog__ImagePreview { + width: fit-content; + height: fit-content; + + & img { + image-rendering: pixelated; + height: auto; + width: 30rem; + justify-self: center; + align-self: center; + } +} + +.UnreadDivider { + position: relative; + display: flex; + font-size: 1rem; + text-align: center; + + & > span { + color: var(--color-red); + } + + & > div { + display: inline-flex; + flex: 1; + border-bottom: var(--border-thickness-small) solid var(--color-red); + height: 50%; + + &:last-child { + margin-left: 1%; + } + + &:first-child { + margin-right: 1%; + } + } +} diff --git a/tgui/packages/tgui/styles/interfaces/NtosNanopaint.scss b/tgui/packages/tgui/styles/interfaces/NtosNanopaint.scss new file mode 100644 index 00000000000..f3dbed400a6 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/NtosNanopaint.scss @@ -0,0 +1,34 @@ +@use '../colors.scss'; + +.NtosNanopaint__NewDialog__TemplateCell { + border-radius: 0%; + background-color: var(--color-base); + + &:nth-child(odd) { + background-color: colors.fg(var(--color-base)); + } + + &:hover { + background-color: colors.fg(var(--color-primary)); + } +} + +.NtosNanopaint__NewDialog__TemplatePreview { + border-color: black; + border-width: 1px; + background-color: white; + margin: 0.5rem; +} + +.NtosNanopaint__SelectDialog__EntryCell { + border-radius: 0%; + background-color: var(--color-base); + + &.Button--selected { + background-color: var(--color-primary); + } + + &:hover { + background-color: colors.fg(var(--color-primary)); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss b/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss new file mode 100644 index 00000000000..2d3431ef322 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/NtosNotepad.scss @@ -0,0 +1,43 @@ +.NtosNotepad__layout { + display: flex; + flex-direction: column; + height: 100%; +} + +.NtosNotepad__AboutDialog__logo { + display: inline-block; + text-align: center; + width: 100%; + font-family: var(--font-family-mono); + font-size: 2rem; +} + +.NtosNotepad__AboutDialog__text { + display: flex; + flex-direction: column; + font-size: 1rem; +} + +.NtosNotepad__textarea { + background-color: var(--color-section); + height: 100%; + resize: none; + color: inherit; + outline: none; + width: 100%; + font-family: var(--font-family-mono); +} + +.NtosNotepad__StatusBar { + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-end; +} + +.NtosNotepad__StatusBar__entry { + display: block; + border-left: var(--color-thickness-tiny) solid var(--color-border-dark); + padding-left: var(--space-xl); + padding-right: var(--space-s); +} diff --git a/tgui/packages/tgui/styles/interfaces/NuclearBomb.scss b/tgui/packages/tgui/styles/interfaces/NuclearBomb.scss new file mode 100644 index 00000000000..5aaee319114 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/NuclearBomb.scss @@ -0,0 +1,102 @@ +@use 'sass:color'; + +@use '../base.scss'; +@use '../colors.scss'; +@use '../functions.scss' as *; + +:root { + --nuclear-beige: hsl(50, 33%, 84%); +} + +.NuclearBomb__displayBox { + background-color: hsl(150, 100%, 1%); + border: var(--border-thickness-small) inset var(--nuclear-beige); + color: hsl(132, 100%, 45%); + font-size: 2em; + font-family: var(--font-family-mono); + padding: var(--space-s); +} + +.NuclearBomb__Button { + outline-width: 0.25rem !important; + border-width: 0.65rem !important; + padding-left: 0 !important; + padding-right: 0 !important; + transition-duration: 0s; + border-style: outset !important; + border-color: var(--nuclear-beige); + + i.Icon { + margin: 0; + } + + &:active { + border-style: inset !important; + + .Button__content { + opacity: 0.75; + transform: translate(0px, 2px); + } + } +} + +.NuclearBomb__Button--keypad { + background-color: var(--nuclear-beige); + border-color: ar(--nuclear-beige); + + &:hover:not(:active) { + background-color: hsl( + from var(--nuclear-beige) h s calc(l + var(--adjust-hover)) + ) !important; + border-color: hsl( + from var(--nuclear-beige) h s calc(l + var(--adjust-hover)) + ) !important; + } +} + +.NuclearBomb__Button--1, +.NuclearBomb__Button--2, +.NuclearBomb__Button--3, +.NuclearBomb__Button--4, +.NuclearBomb__Button--5, +.NuclearBomb__Button--6, +.NuclearBomb__Button--7, +.NuclearBomb__Button--8, +.NuclearBomb__Button--9, +.NuclearBomb__Button--0 { + color: rgb(56, 52, 52); + background-color: var(--nuclear-beige) !important; +} + +.NuclearBomb__Button--E { + background-color: var(--button-background-caution) !important; + border-color: var(--button-background-caution) !important; + &:hover:not(:active) { + background-color: hsl( + from var(--button-background-caution) h s calc(l + var(--adjust-hover)) + ) !important; + border-color: hsl( + from var(--button-background-caution) h s calc(l + var(--adjust-hover)) + ) !important; + } +} + +.NuclearBomb__Button--C { + background-color: var(--button-background-danger) !important; + border-color: var(--button-background-danger) !important; + &:hover:not(:active) { + background-color: hsl( + from var(--button-background-danger) h s calc(l + var(--adjust-hover)) + ) !important; + border-color: hsl( + from var(--button-background-danger) h s calc(l + var(--adjust-hover)) + ) !important; + } +} + +.NuclearBomb__NTIcon { + background-image: url('tgui-core/assets/bg-nanotrasen.svg'); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} diff --git a/tgui/packages/tgui/styles/interfaces/OperatingComputer.scss b/tgui/packages/tgui/styles/interfaces/OperatingComputer.scss new file mode 100644 index 00000000000..b7b3cf03fbf --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/OperatingComputer.scss @@ -0,0 +1,25 @@ +.theme-operating_computer { + .Layout__content { + background-image: url('../assets/bg-deforest.svg'); + background-size: 90%; + } + // Base + --color-base: hsl(150, 100%, 18%); + --color-primary: hsl(from var(--color-base) h s calc(l + 5)); + --color-border-primary: hsla(0, 0%, 100%, 0.75); + --secondary-lightness-adjustment: -10; + --base-gradient-spread: 0; + + // Components + --button-background-selected: hsl(0, 90.3%, 32.35%); + --button-background-caution: hsl(29.5, 90.95%, 39.02%); + --button-background-danger: hsl(61.15, 100%, 30.78%); + --button-border-radius: 0; + + --collapsible-background-selected: hsl(0, 90.3%, 32.35%); + --collapsible-background-caution: hsl(29.5, 90.95%, 39.02%); + --collapsible-background-danger: hsl(61.15, 100%, 30.78%); + + --progress-bar-background: hsla(0, 0%, 0%, 0.5); + --tab-background-selected: var(--color-base); +} diff --git a/tgui/packages/tgui/styles/interfaces/Orbit.scss b/tgui/packages/tgui/styles/interfaces/Orbit.scss new file mode 100644 index 00000000000..aeeab2bcca9 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Orbit.scss @@ -0,0 +1,19 @@ +.JobIcon { + background: var(--color-black); + width: 20px; + height: 20px; + padding: var(--space-xxs) var(--space-xxs) 0; + overflow: hidden; +} + +.OrbitItem__selected { + position: absolute; + top: 0; + right: 0; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid white; + transform: translateX(-50%); +} diff --git a/tgui/packages/tgui/styles/interfaces/Paper.scss b/tgui/packages/tgui/styles/interfaces/Paper.scss new file mode 100644 index 00000000000..8bbfe4601ab --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Paper.scss @@ -0,0 +1,18 @@ +/** + * @file + * @copyright 2020 + * @author ThePotato97 (https://github.com/ThePotato97) + * @license ISC + */ + +.Paper { + &__Stamp { + position: absolute; + pointer-events: none; + user-select: none; + } + &__Page { + word-break: break-word; + word-wrap: break-word; + } +} diff --git a/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss b/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss new file mode 100644 index 00000000000..cff7b09fbe8 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss @@ -0,0 +1,240 @@ +@use 'sass:color'; +@use 'sass:map'; +@use '../colors.scss'; +@use '../base.scss'; + +$department_map: ( + 'Assistant': var(--color-gray), + 'Captain': colors.fg(var(--color-blue)), + 'Cargo': var(--color-brown), + 'Command': var(--color-yellow), + 'Security': var(--color-red), + 'Engineering': hsl(from var(--color-orange) h s calc(l + 7.5)), + 'Medical': var(--color-teal), + 'Science': colors.fg(var(--color-purple)), + 'Service': var(--color-green), + 'Silicon': var(--color-pink), +); + +.ChoicedSelection { + padding: var(--space-m); + background-color: var(--color-base); + box-shadow: 0 0.5em 1em hsla(0, 0%, 0%, 0.5); +} + +.PreferencesMenu { + &__Antags { + &__antagSelection { + gap: var(--space-l); + + @mixin animate-hover { + .antagonist-icon-parent .antagonist-icon { + &:hover { + transform: scale(1.3); + transition: transform var(--transition-time-fast) ease-out; + } + } + } + + &__antagonist { + .antagonist-icon-parent { + cursor: var(--cursor-pointer); + border-style: solid; + border-radius: var(--border-radius-circular); + border-width: var(--border-thickness-large); + box-sizing: content-box; + overflow: hidden; + position: relative; + + height: 96px; + width: 96px; + + .antagonist-icon { + image-rendering: pixelated; + border-radius: var(--border-radius-circular); + overflow: hidden; + transition: transform var(--transition-time-fast) ease-in; + } + } + + &--off { + @include animate-hover; + + .antagonist-icon-parent { + border-color: var(--color-red); + + .antagonist-icon { + opacity: 0.5; + + &:hover { + opacity: 1; + } + } + } + } + + &--on { + @include animate-hover; + + .antagonist-icon-parent { + border-color: var(--color-green); + } + } + + &--banned { + .antagonist-icon-parent { + border-color: var(--color-grey); + } + + .antagonist-icon { + opacity: 0.5; + } + } + + .antagonist-banned-slash { + background: var(--color-grey); + + width: 100%; + height: 3px; + + position: absolute; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%) rotate(35deg); + + opacity: 0.8; + } + + .antagonist-days-left { + text-align: center; + text-shadow: 1px 1px 1px hsl(0, 0%, 13.3%); + + width: 100%; + + position: absolute; + top: 50%; + left: 50%; + transform: translateY(-50%) translateX(-50%); + } + } + } + } + + &__Jobs { + > * { + flex: 1; + } + + &__departments { + @each $department-name, $color-value in $department_map { + &--#{$department-name} { + &.head { + background: $color-value; + + .job-name { + font-weight: bold; + } + } + + background: colors.fg($color-value); + border: var(--border-thickness-small) outset colors.fg($color-value); + color: black; + + > * { + height: calc(100% + 0.2em); + padding-bottom: 0.2em; + } + + .options { + margin-right: var(--space-xxs); + background: hsla(0, 0%, 0%, 0.2); + height: 100%; + } + } + + &--Captain { + border: var(--border-thickness-medium) + outset + hsla(60, 100%, 39.2%, 1); + + &:first-child { + border-top: var(--border-thickness-medium) + outset + hsla(60, 100%, 39.2%, 1); + } + + .job-name { + font-size: 17px; + } + } + } + + &__priority { + border: var(--border-thickness-tiny) solid hsla(0, 0%, 0%, 0.3); + + &--off::after { + content: ''; + + background: hsla(0, 0%, 0%, 0.2); + display: block; + height: 80%; + left: 50%; + position: relative; + top: 50%; + transform: translateX(-50%) translateY(-50%) rotate(40deg); + width: 2px; + } + } + } + + &__PriorityHeader { + font-weight: bold; + transform: translateX(-4px) translateY(-8px) rotate(315deg); + white-space: nowrap; + width: 19px; + } + } + + &__Quirks { + &__QuirkList { + scrollbar-color: var(--color-grey) transparent; + background-color: var(--color-light-grey); + width: 100%; + overflow-x: hidden; + overflow-y: scroll; + + &__quirk { + cursor: var(--cursor-pointer); + background-color: var(--color-white); + border-bottom: var(--border-thickness-tiny) solid var(--color-black); + color: hsl(0, 0%, 6.7%); + transition: background-color var(--transition-time-fast) ease-in; + + $quality_map: ( + 'positive': var(--color-green), + 'neutral': var(--color-white), + 'negative': var(--color-red), + ); + + @each $quality, $color-value in $quality_map { + &--#{$quality} { + background-color: $color-value; + transition: background-color var(--transition-time-fast) ease-in; + } + } + + &:hover { + background-color: var(--color-grey); + transition: background-color var(--transition-time-fast) ease-out; + + @each $quality, $color-value in $quality_map { + .PreferencesMenu__Quirks__QuirkList__quirk--#{$quality} { + background-color: hsl(from $color-value h s calc(l - 10)); + transition: background-color var(--transition-time-fast) ease-out; + } + } + } + } + } + } +} diff --git a/tgui/packages/tgui/styles/interfaces/Radio.scss b/tgui/packages/tgui/styles/interfaces/Radio.scss deleted file mode 100644 index 8d2a1370936..00000000000 --- a/tgui/packages/tgui/styles/interfaces/Radio.scss +++ /dev/null @@ -1,53 +0,0 @@ -/* Radio Channels */ -.radio { - color: #00a700; -} -.deptradio { - color: #ff00ff; -} -.comradio { - color: #5b8deb; -} -.syndradio { - color: #ac6667; -} -.coalitionradio { - color: #0091ce; -} -.centradio { - color: #7272a7; -} -.airadio { - color: #ec00ec; -} -.entradio { - color: #cfcfcf; -} -.hailradio { - color: #8b4cd8; -} -.shipradio { - color: #738465; -} - -.secradio { - color: #e21111; -} -.engradio { - color: #cc7b01; -} -.medradio { - color: #0f7e62; -} -.sciradio { - color: #c03bc0; -} -.supradio { - color: #c09141; -} -.srvradio { - color: #7fc732; -} -.expradio { - color: #ffeeb5; -} diff --git a/tgui/packages/tgui/styles/interfaces/RequestManager.scss b/tgui/packages/tgui/styles/interfaces/RequestManager.scss index 1003440243a..3780d07b0a0 100644 --- a/tgui/packages/tgui/styles/interfaces/RequestManager.scss +++ b/tgui/packages/tgui/styles/interfaces/RequestManager.scss @@ -3,100 +3,81 @@ * SPDX-License-Identifier: MIT */ -@use '../base.scss'; -@use '../colors.scss'; -@use '../functions.scss'; - -$color-prayer: colors.bg(colors.$purple) !default; -$color-centcom: colors.bg(colors.$yellow) !default; -$color-syndicate: colors.bg(colors.$red) !default; -$color-nuke: colors.bg(colors.$yellow) !default; -$color-fax: colors.bg(colors.$green) !default; -$color-music: colors.bg(colors.$teal) !default; -$color-muted: colors.bg(colors.$label) !default; -$color-header: colors.bg(colors.$label) !default; -$background-color: base.$color-bg-section !default; -$text-color: base.$color-fg !default; - .RequestManager__request_centcom, .RequestManager__request_nuke, .RequestManager__request_prayer, .RequestManager__request_syndicate { - margin-right: 0.5rem; + margin-right: var(--space-m); } .RequestManager__request_prayer { - color: $color-prayer; + color: var(--color-purple); } .RequestManager__request_centcom { - color: $color-centcom; + color: var(--color-yellow); } .RequestManager__request_syndicate { - color: $color-syndicate; + color: var(--color-red); } .RequestManager__request_nuke { - color: $color-nuke; + color: var(--color-orange); } .RequestManager__request_fax { - color: $color-fax; + color: var(--color-green); } .RequestManager__request_internet_sound { - color: $color-music; + color: var(--color-teal); } .RequestManager__header { line-height: 1.375rem; min-height: 1.375rem; - color: $color-muted; + padding: 0; + color: var(--color-label); white-space: break-spaces; - word-wrap: pre-wrap; vertical-align: baseline; - margin-bottom: 0; - padding-bottom: 0.1rem; + margin-bottom: var(--space-xs); } .RequestManager__headerText { - margin-right: 0.5rem; + margin-right: var(--space-m); font-size: 1rem; font-weight: bold; - color: $color-header; + color: var(--color-label); } .RequestManager__timestamp { - font-size: 0.75rem; -} - -.RequestManager__row:first-of-type { - margin-top: 0rem; + font-size: var(--space-l); } .RequestManager__row { - padding-top: 0.125rem; - padding-bottom: 0.125rem; - padding-left: 0.5rem; - padding-right: 0.5rem; - margin-top: 0.75rem; + padding: var(--space-s) var(--space-m); + margin-top: var(--space-l); min-height: 2.75rem; -} -.RequestManager__row:hover { - background-color: rgba(0, 0, 0, 0.25); -} + &:first-of-type { + margin-top: 0; + } -.RequestManager__row:hover .RequestManager__controlsContainer { - opacity: 1; + &:hover { + background-color: hsl(from var(--color-hover) h s 0); + } + + &:hover .RequestManager__controlsContainer { + opacity: 1; + } } .RequestManager__controlsContainer { opacity: 0; position: absolute; - right: 3px; - top: 3px; + right: var(--space-s); + top: var(--space-s); } .RequestManager__row { @@ -104,13 +85,17 @@ $text-color: base.$color-fg !default; } .RequestManager__filterPanel { - margin: 0.5rem; - padding: 0.5rem; - background-color: functions.fake-alpha($background-color, base.$color-bg); - background-color: $background-color; - color: $text-color; -} + overflow: hidden; + margin: var(--space-m); + padding: var(--space-m); + background-color: var(--color-section); + color: var(--color-text); + border: var(--border-thickness-tiny) solid var(--color-border); + border-radius: var(--border-radius-medium); + box-shadow: var(--shadow-glow-medium) hsla(0, 0%, 0%, 0.5); + backdrop-filter: var(--blur-medium); -.RequestManager__filterPanel tr:not(:last-of-type) { - margin-bottom: 0.5rem; + tr:not(:last-of-type) { + margin-bottom: var(--space-m); + } } diff --git a/tgui/packages/tgui/styles/interfaces/Roulette.scss b/tgui/packages/tgui/styles/interfaces/Roulette.scss new file mode 100644 index 00000000000..72dfc49b5b6 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Roulette.scss @@ -0,0 +1,96 @@ +.Roulette__container { + display: flex; +} + +.Roulette__board-cell { + display: table-cell; + padding: 0; + margin: 0; + border: var(--border-thickness-tiny) solid var(--color-white); + vertical-align: bottom; +} + +.Roulette__board-cell-number { + width: 35px; +} + +.Roulette__board-cell-number--colspan-2 { + width: 71px; +} + +.Roulette__board-cell-number--colspan-4 { + width: 143px; +} + +.Roulette__board-button { + display: table-cell !important; + border: none !important; + width: inherit; + height: 40px; + padding: 0; + margin: 0; + text-align: center; + vertical-align: middle; +} + +.Roulette__board-button--rowspan-3 { + height: 122px; +} + +.Roulette__board-button-text { + text-align: center; + font-size: 16px; + font-weight: bold; +} + +.Roulette__lowertable { + margin-top: 8px; + border-collapse: collapse; + border: var(--border-thickness-tiny) solid var(--color-white); + border-spacing: 0; +} + +.Roulette__lowertable--cell { + border: var(--border-thickness-small) solid var(--color-white); + padding: 0px; + margin: 0px; +} + +.Roulette__lowertable--betscell { + vertical-align: top; +} + +.Roulette__lowertable--spinresult { + text-align: center; + font-size: 100px; + font-weight: bold; + vertical-align: middle; +} + +.Roulette__lowertable--spinresult-black { + background-color: var(--color-black); +} + +.Roulette__lowertable--spinresult-red { + background-color: var(--color-red); +} + +.Roulette__lowertable--spinresult-green { + background-color: var(--color-green); +} + +.Roulette__lowertable--spinbutton { + margin: 0 !important; + border: none !important; + font-size: 50px; + line-height: 60px !important; + text-align: center; + font-weight: bold; +} + +.Roulette__lowertable--header { + width: 1%; + text-align: center; + font-size: 16px; + font-weight: bold; +} diff --git a/tgui/packages/tgui/styles/interfaces/Safe.scss b/tgui/packages/tgui/styles/interfaces/Safe.scss new file mode 100644 index 00000000000..8e24d2c83a3 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Safe.scss @@ -0,0 +1,92 @@ +.Safe__engraving { + position: absolute; + width: 95%; + height: 96%; + left: 2.5%; + top: 2%; + border: var(--border-thickness-larger) outset hsl(217, 27%, 34%); + padding: var(--space-m); + text-align: center; +} + +.Safe__engraving-arrow { + color: var(--color-primary); +} + +.Safe__engraving-hinge { + content: ' '; + background-color: hsl(217, 27%, 15%); + width: 25px; + height: 40px; + position: absolute; + right: -15px; + margin-top: -20px; +} + +.Safe__dialer { + margin-bottom: 1.25rem; + .Button { + width: 80px; + } +} + +.Safe__dialer-right { + .Button { + i { + z-index: -100; + } + } +} + +.Safe__dialer-number { + color: hsl(0, 0%, 73.3%); + display: inline; + background-color: hsl(217, 27%, 15%); + font-size: 1.5rem; + font-weight: bold; + padding: 0 var(--space-m); +} + +.Safe__contents { + border: 10px solid hsl(217, 27%, 15%); + background-color: hsl(217, 27%, 10%); + height: calc(85% + 7.5px); + text-align: left; + padding: var(--space-m); +} + +.Safe__help { + position: absolute; + top: 73%; + left: 10px; + width: 50%; + + font-family: 'Comic Sans MS', cursive, sans-serif; + font-style: italic; + color: black; + box-shadow: 5px 5px hsl(0, 0%, 6.7%); + background-image: linear-gradient( + to bottom, + hsl(50, 20%, 58.8%) 0%, + hsl(50, 6%, 45.5%) 100% + ); + transform: rotate(-1deg); + + &:before { + content: ' '; + display: block; + width: 24px; + height: 40px; + background-image: linear-gradient( + to bottom, + transparent 0%, + hsl(0, 0%, 100%) 100% + ); + box-shadow: 1px 1px hsl(0, 0%, 6.7%); + opacity: 0.2; + position: absolute; + top: -30px; + left: calc(50% - 12px); + transform: rotate(-5deg); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/SlotMachine.scss b/tgui/packages/tgui/styles/interfaces/SlotMachine.scss new file mode 100644 index 00000000000..48583d4d982 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/SlotMachine.scss @@ -0,0 +1,186 @@ +.SlotMachine__Banner { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 60px; + font-size: 18px; + text-align: center; + text-shadow: + 2px 2px 6px #000, + 0 2px #000, + 0 -2px #000, + 2px 0 #000, + -2px 0 #000; + + background: linear-gradient(-45deg, #d16949, #ce3771, #229dca, #189175); + background-size: 400% 400%; + animation: SlotMachine__GradientMove 10s ease infinite; +} + +@keyframes SlotMachine__GradientMove { + 0% { + background-position: 0% 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0% 50%; + } +} + +.SlotMachine__Banner--winning { + animation: SlotMachine__Winning 0.4s step-end infinite !important; +} + +@keyframes SlotMachine__Winning { + 0% { + color: #ff0; + background: #f00; + } + 50% { + color: #f00; + background: #ff0; + } + 100% { + color: #f00; + background: #ff0; + } +} + +.SlotMachine__BannerTitle { + font-size: 26px; + font-weight: bold; + font-family: 'Courier New', Courier, monospace; + white-space: pre; +} + +.SlotMachine__BannerTitle span { + animation: + SlotMachine__Depth1 1.2s ease-in-out alternate infinite, + SlotMachine__Depth2 0.8s ease-in-out alternate infinite; + animation-composition: replace, add; + position: relative; + display: inline-block; + padding: 0 0.075em; + @for $i from 1 through 14 { + &:nth-child(#{$i}) { + animation-delay: $i * -0.2s; + } + } +} + +@keyframes SlotMachine__Depth1 { + 0% { + transform: translatex(-0.2em) translatey(-0.1em); + } + 100% { + transform: translatex(0.2em) translatey(0.1em); + } +} + +@keyframes SlotMachine__Depth2 { + 0% { + transform: translatex(0.1em) translatey(-0.1em); + } + 100% { + transform: translatex(-0.1em) translatey(0.1em); + } +} + +.SlotMachine__Reels { + display: flex; + margin: 0 -3px; +} + +.SlotMachine__Reel { + position: relative; + flex: 1; + margin: 0 3px; + overflow: hidden; + height: 180px; + background: linear-gradient( + to bottom, + #888 0%, + #ccc 15%, + #eee 40%, + #ddd 60%, + #aaa 85%, + #666 100% + ); +} + +.SlotMachine__Reel::after { + position: absolute; + top: 58px; + left: 0; + bottom: 58px; + right: 0; + display: block; + content: ''; + border-top: 2px solid black; + border-bottom: 2px solid black; +} + +.SlotMachine__Reel:nth-child(1) .SlotMachine__IconStrip { + animation-delay: 0s; + animation-duration: 2.8s; +} + +.SlotMachine__Reel:nth-child(2) .SlotMachine__IconStrip { + animation-delay: 0.1s; + animation-duration: 3s; +} + +.SlotMachine__Reel:nth-child(3) .SlotMachine__IconStrip { + animation-delay: 0.2s; + animation-duration: 3.2s; +} + +.SlotMachine__Reel:nth-child(4) .SlotMachine__IconStrip { + animation-delay: 0.3s; + animation-duration: 3.4s; +} + +.SlotMachine__Reel:nth-child(5) .SlotMachine__IconStrip { + animation-delay: 0.4s; + animation-duration: 3.6s; +} + +.SlotMachine__IconStrip { + transform: translateY(calc(-60px * 27)); + // animation-duration: 3.5s; + text-align: center; +} + +.SlotMachine__IconStrip--spinning { + transform: translateY(0); + animation-name: SlotMachine__Spin; + animation-iteration-count: 1; + animation-fill-mode: forwards; + animation-timing-function: cubic-bezier(1, 1.26, 0.88, 0.96); +} + +.SlotMachine__Symbol { + height: 60px; + display: flex; + align-items: center; + justify-content: center; + + .slotmachines32x32 { + width: 32px; + height: 32px; + image-rendering: pixelated; + filter: drop-shadow(1px 1px 1px black); + } +} + +@keyframes SlotMachine__Spin { + 0% { + transform: translateY(0); + } + 100% { + transform: translateY(calc(-60px * 27)); + } +} diff --git a/tgui/packages/tgui/styles/interfaces/SpriteAuditor.scss b/tgui/packages/tgui/styles/interfaces/SpriteAuditor.scss new file mode 100644 index 00000000000..fe7c2c5ae23 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/SpriteAuditor.scss @@ -0,0 +1,3 @@ +.SpriteAuditor_EntryCell:nth-child(odd) { + background: hsla(0, 0%, 0%, 0.1); +} diff --git a/tgui/packages/tgui/styles/interfaces/Techweb.scss b/tgui/packages/tgui/styles/interfaces/Techweb.scss new file mode 100644 index 00000000000..4c1b1517d24 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Techweb.scss @@ -0,0 +1,68 @@ +.Techweb__NodeProgress { + margin-bottom: var(--space-xl); +} + +.Techweb__DesignIcon { + margin: 0 var(--space-s); +} + +.Techweb__OverviewNodes { + padding-top: var(--space-m); +} + +.Techweb__HeaderContent { + padding: var(--space-m); + background-color: var(--color-black); + border: var(--border-thickness-tiny) solid var(--color-primary); +} + +.Techweb__HeaderContent > * > :not(:last-child) { + margin-bottom: var(--space-m); +} + +.Techweb__HeaderSectionTabs { + margin-top: var(--space-l); + background-color: var(--color-black); + border: var(--border-thickness-tiny) solid var(--color-primary); + padding-left: var(--space-m); + padding-right: var(--space-m); +} + +.Techweb__HeaderTabTitle { + border-right: var(--border-thickness-tiny) solid var(--color-primary); + padding-right: var(--space-m); + margin-right: var(--space-m); + font-weight: bold; +} + +.Techweb__HeaderSectionTabs input { + background-color: hsla(0, 0%, 100%, 0.05); +} + +.Techweb__PointSummary { + list-style: none; + margin: var(--space-m) 0 0 var(--space-l); + padding: 0; +} + +.Techweb__SecProtocol { + color: var(--color-bad); + margin-left: var(--space-s); +} + +.Techweb__SecProtocol.engaged { + color: var(--color-good); +} + +.Techweb__DesignModal > :not(:last-child) { + margin-bottom: var(--space-m); +} + +.Techweb__LockedModal > :not(:last-child) { + margin-bottom: var(--space-m); +} + +.Techweb__ExperimentDiscount { + color: var(--color-label); + margin: var(--space-m) 0; +} diff --git a/tgui/packages/tgui/styles/interfaces/Trophycase.scss b/tgui/packages/tgui/styles/interfaces/Trophycase.scss new file mode 100644 index 00000000000..8b2972db4e5 --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Trophycase.scss @@ -0,0 +1,5 @@ +.Trophycase-description { + word-break: break-word; + word-wrap: break-word; + font-style: italic; +} diff --git a/tgui/packages/tgui/styles/interfaces/Uplink.scss b/tgui/packages/tgui/styles/interfaces/Uplink.scss new file mode 100644 index 00000000000..17d5ea78aac --- /dev/null +++ b/tgui/packages/tgui/styles/interfaces/Uplink.scss @@ -0,0 +1,103 @@ +$badGradient: linear-gradient( + to right, + hsl(0, 67%, 37%), + hsl(0, 43%, 28%), + hsl(0, 67%, 37%) +); +$normalGradient: linear-gradient( + to right, + hsl(30, 14%, 34%), + hsl(30, 20%, 19%), + hsl(30, 14%, 34%) +); +$goodGradient: linear-gradient( + to right, + hsl(210, 11%, 37%), + hsl(210, 14%, 17%), + hsl(210, 11%, 37%) +); +$veryGoodGradient: linear-gradient( + to right, + hsl(36, 38%, 44%), + hsl(36, 33%, 19%), + hsl(36, 38%, 44%) +); +$superGoodGradient: linear-gradient( + to right, + hsl(60, 39%, 45%), + hsl(60, 35%, 34%), + hsl(60, 39%, 45%) +); +$bestGradient: linear-gradient( + to right, + hsl(330, 34%, 45%), + hsl(330, 43%, 26%), + hsl(330, 34%, 45%) +); + +$_rep_map: ( + 'bad': $badGradient, + 'normal': $normalGradient, + 'good': $goodGradient, + 'very-good': $veryGoodGradient, + 'super-good': $superGoodGradient, + 'best': $bestGradient, +); + +@each $reputation-name, $gradient-value in $_rep_map { + .reputation-#{$reputation-name} { + background-image: $gradient-value !important; + } + + .reputation-#{$reputation-name}.Button { + background-position: 0 0; + transition: background-position var(--transition-time-fast); + + &:hover { + transition: background-position 0ms; + } + + &:active { + transition: background-position var(--transition-time-medium); + } + + &:hover, + &:active { + background-position: 50em 0; + } + } +} + +.UplinkObjective__Titlebar { + padding: var(--space-ml) var(--space-l) var(--space-m); + font-weight: bold; + border: var(--border-thickness-small) solid var(--color-black); + border-bottom: none; + border-top-left-radius: var(--border-radius-huge); + border-top-right-radius: var(--border-radius-huge); +} + +.UplinkObjective__EmptyObjective { + background-color: hsla(0, 0%, 0%, 0.4); + border: var(--border-thickness-small) solid var(--color-black); + padding: 1rem; + width: 100%; + height: 100%; + text-align: center; + vertical-align: center; +} + +.UplinkObjective__Content { + background-color: hsla(0, 0%, 0%, 0.4); + border: var(--border-thickness-small) solid var(--color-black); + border-top: none; + border-bottom: none; + padding: var(--space-l); +} + +.UplinkObjective__Footer { + background-color: rgba(0, 0, 0, 0.4); + border: var(--border-thickness-small) solid var(--color-black); + border-top: none; + padding: var(--space-m) 0 var(--space-l); +} diff --git a/tgui/packages/tgui/styles/layouts/Layout.scss b/tgui/packages/tgui/styles/layouts/Layout.scss index b66b2769f5e..3c71db27576 100644 --- a/tgui/packages/tgui/styles/layouts/Layout.scss +++ b/tgui/packages/tgui/styles/layouts/Layout.scss @@ -3,68 +3,22 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use '../base.scss'; -@use '../functions.scss' as *; +@use '../base'; +$background-color: base.$color-bg !default; $scrollbar-color-multiplier: 1 !default; -$luminance: luminance(base.$color-bg); -$scrollbar-base: color.scale( - base.$color-bg, - $lightness: -25% * $scrollbar-color-multiplier -); -$scrollbar-face: color.scale( - base.$color-bg, - $lightness: if($luminance > 0.05, 30%, 10%) * $scrollbar-color-multiplier -); -// Fancy scrollbar -html, -body { - scrollbar-color: $scrollbar-face $scrollbar-base; -} - -.Layout, -.Layout * { - // Fancy scrollbar - scrollbar-base-color: color.scale( - base.$color-bg, - $lightness: -25% * $scrollbar-color-multiplier - ); - scrollbar-face-color: color.scale( - base.$color-bg, - $lightness: 10% * $scrollbar-color-multiplier - ); - scrollbar-3dlight-color: color.scale( - base.$color-bg, - $lightness: 0% * $scrollbar-color-multiplier - ); - scrollbar-highlight-color: color.scale( - base.$color-bg, - $lightness: 0% * $scrollbar-color-multiplier - ); - scrollbar-track-color: color.scale( - base.$color-bg, - $lightness: -25% * $scrollbar-color-multiplier - ); - scrollbar-arrow-color: color.scale( - base.$color-bg, - $lightness: 50% * $scrollbar-color-multiplier - ); - scrollbar-shadow-color: color.scale( - base.$color-bg, - $lightness: 10% * $scrollbar-color-multiplier - ); +.Layout { + --color-base: #{$background-color}; + --base-gradient-spread: #{base.$color-bg-grad-spread}; + --scrollbar-color-multiplier: #{$scrollbar-color-multiplier}; } .Layout__content { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; overflow-x: hidden; overflow-y: hidden; + position: absolute; + inset: 0; } .Layout__content--scrollable { diff --git a/tgui/packages/tgui/styles/layouts/NtosHeader.scss b/tgui/packages/tgui/styles/layouts/NtosHeader.scss index 2a429051f56..3c71302b37e 100644 --- a/tgui/packages/tgui/styles/layouts/NtosHeader.scss +++ b/tgui/packages/tgui/styles/layouts/NtosHeader.scss @@ -18,3 +18,31 @@ margin-bottom: -0.5em; vertical-align: middle; } + +.alertIndicator { + font-weight: bold; + right: '0px'; + text-align: 'center'; + vertical-align: 'center'; + font-family: 'Courier New'; +} + +.alertBlink { + color: #ffffff; + animation: alertBlinkAnimation 1s infinite; +} + +@keyframes alertBlinkAnimation { + 0% { + color: #dddddd; + } + 49% { + color: #dddddd; + } + 50% { + color: #333333; + } + 100% { + color: #333333; + } +} diff --git a/tgui/packages/tgui/styles/layouts/NtosWindow.scss b/tgui/packages/tgui/styles/layouts/NtosWindow.scss index bed4abab53c..00159e3a965 100644 --- a/tgui/packages/tgui/styles/layouts/NtosWindow.scss +++ b/tgui/packages/tgui/styles/layouts/NtosWindow.scss @@ -3,7 +3,7 @@ * SPDX-License-Identifier: MIT */ -@use '../base.scss'; +@use '../base'; .NtosWindow__header { position: absolute; @@ -12,8 +12,8 @@ right: 0; height: 2em; line-height: 1.928em; - background-color: rgba(0, 0, 0, 0.5); - font-family: Consolas, monospace; + background-color: hsla(0, 0%, 0%, 0.5); + font-family: var(--font-family-mono); font-size: base.em(14px); user-select: none; -ms-user-select: none; @@ -21,6 +21,6 @@ .NtosWindow__content .Layout__content { margin-top: 2em; - font-family: Consolas, monospace; + font-family: var(--font-family-mono); font-size: base.em(14px); } diff --git a/tgui/packages/tgui/styles/layouts/TitleBar.scss b/tgui/packages/tgui/styles/layouts/TitleBar.scss index 1a26dd9e29e..b81fda74e3c 100644 --- a/tgui/packages/tgui/styles/layouts/TitleBar.scss +++ b/tgui/packages/tgui/styles/layouts/TitleBar.scss @@ -4,108 +4,100 @@ */ @use 'sass:color'; -@use '../base.scss'; -@use '../colors.scss'; +@use '../base'; +@use '../colors'; +@use '../functions.scss' as *; -$text-color: rgba(255, 255, 255, 0.75) !default; -$background-color: #363636 !default; -$shadow-color-core: #161616 !default; -$shadow-color: rgba(0, 0, 0, 0.1) !default; +$background-color: var(--titlebar-background) !default; +$text-color: var(--titlebar-text) !default; +$shadow-color-core: var(--titlebar-shadow-core) !default; +$scrollbar-color-multiplier: 1 !default; .TitleBar { - background-color: $background-color; - border-bottom: 1px solid $shadow-color-core; - box-shadow: 0 2px 2px $shadow-color; - box-shadow: 0 base.rem(2px) base.rem(2px) $shadow-color; + --titlebar-background: #{$background-color}; + --titlebar-text: #{$text-color}; + --titlebar-shadow-core: #{$shadow-color-core}; + --scrollbar-color-multiplier: #{$scrollbar-color-multiplier}; + user-select: none; - -ms-user-select: none; -} + position: fixed; + display: flex; + align-items: center; + width: vp(100vw); + height: base.rem(32px); + background-color: var(--titlebar-background); + border-bottom: var(--border-thickness-tiny) solid var(--titlebar-shadow-core); + box-shadow: 0px 0px base.em(6px) base.em(-1px) var(--titlebar-shadow-color); + z-index: 101; // More than Dimmer -.TitleBar__clickable { - color: color.change($text-color, $alpha: 0.5); - background-color: $background-color; - transition: - color 250ms ease-out, - background-color 250ms ease-out; + &__dragZone { + position: absolute; + inset: 0; + } - &:hover { - color: rgba(255, 255, 255, 1); - background-color: #cc0000; - transition: - color 0ms, - background-color 0ms; + &__statusIcon { + text-align: center; + font-size: base.rem(20px); + transition: color var(--transition-time-slow); + } + + &__title { + pointer-events: none; + display: inline-block; + flex: 1; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: var(--titlebar-text); + font-size: base.rem(14px); + } + + &__buttons { + pointer-events: all; + overflow: hidden; + white-space: nowrap; + display: inline-block; + margin: 0 base.rem(9px); + z-index: 102; + } + + &__KitchenSink { + background-color: hsl( + from var(--color-green) h s calc(l - var(--adjust-hover)) + ); + color: var(--color-text-fixed-white); + text-align: center; + border-radius: 0; + + &:hover { + background-color: var(--color-green) !important; + } + } + + &__close { + cursor: var(--cursor-pointer); + opacity: 0.5; + pointer-events: all; + align-content: center; + text-align: center; + font-size: base.rem(16px); + height: 100%; + color: var(--color-text); + transition-property: background-color, opacity; + transition-duration: var(--transition-time-medium); + z-index: 102; + + &:hover { + opacity: 1; + background-color: var(--button-background-danger); + transition-duration: 0s; + } + } + + &__statusIcon, + &__close { + width: base.rem(45px); + min-width: base.rem(45px); + max-width: base.rem(45px); } } - -.TitleBar__title { - position: absolute; - display: inline-block; - top: 0; - left: 46px; - left: base.rem(46px); - color: $text-color; - font-size: 14px; - font-size: base.rem(14px); - line-height: 31px; - line-height: base.rem(31px); - white-space: nowrap; - pointer-events: none; -} - -.TitleBar__buttons { - pointer-events: initial; - display: inline-block; - width: 100%; - margin-left: 10px; -} - -.TitleBar__dragZone { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 32px; - height: base.rem(32px); -} - -.TitleBar__statusIcon { - position: absolute; - top: 0; - left: 12px; - left: base.rem(12px); - transition: color 0.5s; - font-size: 20px; - font-size: base.rem(20px); - line-height: 32px !important; - line-height: base.rem(32px) !important; -} - -.TitleBar__close { - position: absolute; - top: -1px; - right: 0; - width: 45px; - width: base.rem(45px); - height: 32px; - height: base.rem(32px); - font-size: 20px; - font-size: base.rem(20px); - line-height: 31px; - line-height: base.rem(31px); - text-align: center; -} - -.TitleBar__devBuildIndicator { - position: absolute; - top: 6px; - top: base.rem(6px); - right: 52px; - right: base.rem(52px); - min-width: 20px; - min-width: base.rem(20px); - padding: 2px 4px; - padding: base.rem(2px) base.rem(4px); - background-color: rgba(colors.$good, 0.75); - color: #fff; - text-align: center; -} diff --git a/tgui/packages/tgui/styles/layouts/Window.scss b/tgui/packages/tgui/styles/layouts/Window.scss index 232dd8396bb..6106ac87d8a 100644 --- a/tgui/packages/tgui/styles/layouts/Window.scss +++ b/tgui/packages/tgui/styles/layouts/Window.scss @@ -3,35 +3,25 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use '../base.scss'; -@use '../functions.scss' as *; +@use '../base'; + +$background-color: base.$color-bg !default; .Window { + --window-background: #{$background-color}; + --border-radius-unit: #{base.$border-radius}; + position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - color: base.$color-fg; - background-color: base.$color-bg; + inset: 0; + color: var(--color-text); + background-color: var(--color-base); background-image: linear-gradient( to bottom, - base.$color-bg-start 0%, - base.$color-bg-end 100% + var(--color-base-start) 0%, + var(--color-base-end) 100% ); } -.Window__titleBar { - position: fixed; - z-index: 1; - top: 0; - left: 0; - width: 100%; - height: 32px; - height: base.rem(32px); -} - // Everything after the title bar .Window__rest { position: fixed; @@ -44,11 +34,7 @@ .Window__contentPadding { margin: 0.5rem; - // IE8: Calc not supported - height: 100%; - // 0.01 is needed to make the scrollbar not appear - // due to rem rendering inaccuracies in IE11. - height: calc(100% - 1.01rem); + height: calc(100% - 1rem); } .Window__contentPadding:after { @@ -56,48 +42,41 @@ } .Layout__content--scrollable .Window__contentPadding:after { - display: block; content: ''; + display: block; height: 0.5rem; } .Window__dimmer { - position: fixed; - top: 0; - bottom: 0; - left: 0; - right: 0; - background-color: rgba(lighten(base.$color-bg, 30%), 0.25); pointer-events: none; + position: fixed; + inset: 0; + background-color: hsl(from var(--color-base) h s calc(l + 15) / 0.25); } .Window__resizeHandle__se { + cursor: var(--cursor-se-resize); position: fixed; bottom: 0; right: 0; - width: 20px; width: base.rem(20px); - height: 20px; height: base.rem(20px); - cursor: se-resize; } .Window__resizeHandle__s { + cursor: var(--cursor-s-resize); position: fixed; bottom: 0; left: 0; right: 0; - height: 6px; height: base.rem(6px); - cursor: s-resize; } .Window__resizeHandle__e { + cursor: var(--cursor-e-resize); position: fixed; top: 0; bottom: 0; right: 0; - width: 3px; width: base.rem(3px); - cursor: e-resize; } diff --git a/tgui/packages/tgui/styles/main.scss b/tgui/packages/tgui/styles/main.scss index 5bcee3437c1..4f01038d289 100644 --- a/tgui/packages/tgui/styles/main.scss +++ b/tgui/packages/tgui/styles/main.scss @@ -4,58 +4,53 @@ */ @use 'sass:meta'; -@use './base.scss'; +@use 'base'; +@use '~tgui-core/styles'; // Core styles @include meta.load-css('./reset.scss'); +@include meta.load-css('./css-variables.scss'); -// Atomic classes -@include meta.load-css('./atomic/candystripe.scss'); -@include meta.load-css('./atomic/centered-image.scss'); -@include meta.load-css('./atomic/color.scss'); -@include meta.load-css('./atomic/debug-layout.scss'); -@include meta.load-css('./atomic/fit-text.scss'); -@include meta.load-css('./atomic/links.scss'); -@include meta.load-css('./atomic/outline.scss'); -@include meta.load-css('./atomic/text.scss'); - -// Components -@include meta.load-css('./components/BlockQuote.scss'); -@include meta.load-css('./components/Button.scss'); -@include meta.load-css('./components/ColorBox.scss'); -@include meta.load-css('./components/Dialog.scss'); -@include meta.load-css('./components/Dimmer.scss'); -@include meta.load-css('./components/Divider.scss'); -@include meta.load-css('./components/Dropdown.scss'); -@include meta.load-css('./components/Flex.scss'); -@include meta.load-css('./components/Icon.scss'); -@include meta.load-css('./components/Input.scss'); -@include meta.load-css('./components/Knob.scss'); -@include meta.load-css('./components/LabeledList.scss'); -@include meta.load-css('./components/MenuBar.scss'); -@include meta.load-css('./components/Modal.scss'); -@include meta.load-css('./components/NoticeBox.scss'); -@include meta.load-css('./components/NumberInput.scss'); -@include meta.load-css('./components/ProgressBar.scss'); -@include meta.load-css('./components/RoundGauge.scss'); -@include meta.load-css('./components/Section.scss'); -@include meta.load-css('./components/Slider.scss'); -@include meta.load-css('./components/Stack.scss'); -@include meta.load-css('./components/Table.scss'); -@include meta.load-css('./components/Tabs.scss'); -@include meta.load-css('./components/TextArea.scss'); -@include meta.load-css('./components/Tooltip.scss'); +// Tgui core bulk imports +@include meta.load-css('~tgui-core/styles/all-atomic.scss'); +@include meta.load-css('~tgui-core/styles/all-themes.scss'); // Interfaces +@include meta.load-css('./interfaces/Accounting.scss'); @include meta.load-css('./interfaces/AlertModal.scss'); +@include meta.load-css('./interfaces/Changelog.scss'); @include meta.load-css('./interfaces/CrewManifest.scss'); -@include meta.load-css('./interfaces/FactionSelect.scss'); -@include meta.load-css('./interfaces/HealthAnalyzer.scss'); +@include meta.load-css('./interfaces/Emojipedia.scss'); +@include meta.load-css('./interfaces/ExperimentConfigure.scss'); +@include meta.load-css('./interfaces/Fabricator.scss'); +@include meta.load-css('./interfaces/HellishRunes.scss'); +@include meta.load-css('./interfaces/HotKeysHelp.scss'); +@include meta.load-css('./interfaces/Hypertorus.scss'); +@include meta.load-css('./interfaces/IntegratedCircuit.scss'); +@include meta.load-css('./interfaces/LibraryAdmin.scss'); +@include meta.load-css('./interfaces/LibraryComputer.scss'); @include meta.load-css('./interfaces/ListInput.scss'); -@include meta.load-css('./interfaces/PersonalCrafting.scss'); +@include meta.load-css('./interfaces/Mecha.scss'); +@include meta.load-css('./interfaces/NtosMessenger.scss'); +@include meta.load-css('./interfaces/NtosNanopaint.scss'); +@include meta.load-css('./interfaces/NtosNotepad.scss'); +@include meta.load-css('./interfaces/NuclearBomb.scss'); +@include meta.load-css('./interfaces/Orbit.scss'); +@include meta.load-css('./interfaces/Paper.scss'); +@include meta.load-css('./interfaces/PreferencesMenu.scss'); @include meta.load-css('./interfaces/RequestManager.scss'); -@include meta.load-css('./interfaces/Radio.scss'); -@include meta.load-css('./interfaces/LoreConsole.scss'); +@include meta.load-css('./interfaces/Roulette.scss'); +@include meta.load-css('./interfaces/Safe.scss'); +@include meta.load-css('./interfaces/SlotMachine.scss'); +@include meta.load-css('./interfaces/SpriteAuditor.scss'); +@include meta.load-css('./interfaces/Techweb.scss'); +@include meta.load-css('./interfaces/Trophycase.scss'); +@include meta.load-css('./interfaces/Uplink.scss'); +@include meta.load-css('./interfaces/DetectiveBoard.scss'); +@include meta.load-css('./interfaces/ColorPicker.scss'); +@include meta.load-css('./interfaces/AnomalyTower.scss'); +@include meta.load-css('./interfaces/CivCargoHoldTerminal.scss'); +@include meta.load-css('./interfaces/EventLogger.scss'); // Layouts @include meta.load-css('./layouts/Layout.scss'); @@ -64,12 +59,12 @@ @include meta.load-css('./layouts/TitleBar.scss'); @include meta.load-css('./layouts/Window.scss'); -@include meta.load-css('highlight.js/scss/github-dark.scss'); +@include meta.load-css('~highlight.js/scss/a11y-dark.scss'); -// SCC Theme +// NT Theme .Layout__content { - background-image: url('../assets/bg-scc.svg'); - background-size: 70%; + background-image: url('tgui-core/assets/bg-nanotrasen.svg'); + background-size: 70% 70%; background-position: center; background-repeat: no-repeat; } diff --git a/tgui/packages/tgui/styles/main_original.scss b/tgui/packages/tgui/styles/main_original.scss new file mode 100644 index 00000000000..5bcee3437c1 --- /dev/null +++ b/tgui/packages/tgui/styles/main_original.scss @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +@use 'sass:meta'; +@use './base.scss'; + +// Core styles +@include meta.load-css('./reset.scss'); + +// Atomic classes +@include meta.load-css('./atomic/candystripe.scss'); +@include meta.load-css('./atomic/centered-image.scss'); +@include meta.load-css('./atomic/color.scss'); +@include meta.load-css('./atomic/debug-layout.scss'); +@include meta.load-css('./atomic/fit-text.scss'); +@include meta.load-css('./atomic/links.scss'); +@include meta.load-css('./atomic/outline.scss'); +@include meta.load-css('./atomic/text.scss'); + +// Components +@include meta.load-css('./components/BlockQuote.scss'); +@include meta.load-css('./components/Button.scss'); +@include meta.load-css('./components/ColorBox.scss'); +@include meta.load-css('./components/Dialog.scss'); +@include meta.load-css('./components/Dimmer.scss'); +@include meta.load-css('./components/Divider.scss'); +@include meta.load-css('./components/Dropdown.scss'); +@include meta.load-css('./components/Flex.scss'); +@include meta.load-css('./components/Icon.scss'); +@include meta.load-css('./components/Input.scss'); +@include meta.load-css('./components/Knob.scss'); +@include meta.load-css('./components/LabeledList.scss'); +@include meta.load-css('./components/MenuBar.scss'); +@include meta.load-css('./components/Modal.scss'); +@include meta.load-css('./components/NoticeBox.scss'); +@include meta.load-css('./components/NumberInput.scss'); +@include meta.load-css('./components/ProgressBar.scss'); +@include meta.load-css('./components/RoundGauge.scss'); +@include meta.load-css('./components/Section.scss'); +@include meta.load-css('./components/Slider.scss'); +@include meta.load-css('./components/Stack.scss'); +@include meta.load-css('./components/Table.scss'); +@include meta.load-css('./components/Tabs.scss'); +@include meta.load-css('./components/TextArea.scss'); +@include meta.load-css('./components/Tooltip.scss'); + +// Interfaces +@include meta.load-css('./interfaces/AlertModal.scss'); +@include meta.load-css('./interfaces/CrewManifest.scss'); +@include meta.load-css('./interfaces/FactionSelect.scss'); +@include meta.load-css('./interfaces/HealthAnalyzer.scss'); +@include meta.load-css('./interfaces/ListInput.scss'); +@include meta.load-css('./interfaces/PersonalCrafting.scss'); +@include meta.load-css('./interfaces/RequestManager.scss'); +@include meta.load-css('./interfaces/Radio.scss'); +@include meta.load-css('./interfaces/LoreConsole.scss'); + +// Layouts +@include meta.load-css('./layouts/Layout.scss'); +@include meta.load-css('./layouts/NtosHeader.scss'); +@include meta.load-css('./layouts/NtosWindow.scss'); +@include meta.load-css('./layouts/TitleBar.scss'); +@include meta.load-css('./layouts/Window.scss'); + +@include meta.load-css('highlight.js/scss/github-dark.scss'); + +// SCC Theme +.Layout__content { + background-image: url('../assets/bg-scc.svg'); + background-size: 70%; + background-position: center; + background-repeat: no-repeat; +} + +// A default, in case someone uses the vp() function outside of a +:root { + --scaling-amount: 1; +} diff --git a/tgui/packages/tgui/styles/reset.scss b/tgui/packages/tgui/styles/reset.scss index e7fff7f936d..fa028f7a430 100644 --- a/tgui/packages/tgui/styles/reset.scss +++ b/tgui/packages/tgui/styles/reset.scss @@ -3,24 +3,26 @@ * SPDX-License-Identifier: MIT */ -@use './base.scss'; +@use 'base'; html, body { box-sizing: border-box; height: 100%; margin: 0; - font-size: base.$font-size; + font-size: var(--font-size, 12px); + color: var(--color-text, hsl(0, 0%, 100%)); + scrollbar-color: var(--color-scrollbar-thumb) var(--color-scrollbar-base); } html { + cursor: var(--cursor-default, default); // Reset the cursor. overflow: hidden; - cursor: default; // Reset the cursor. } body { overflow: auto; - font-family: Verdana, Geneva, sans-serif; + font-family: var(--font-family, Verdana, Geneva, sans-serif); } *, @@ -33,27 +35,23 @@ body { h1, h2, h3, h4, h5, h6 { display: block; margin: 0; - padding: 6px 0; - padding: 0.5rem 0; + padding: var(--space-m, 6px) 0; + padding: var(--space-m, 0.5rem) 0; } h1 { - font-size: 18px; font-size: 1.5rem; } h2 { - font-size: 16px; font-size: 1.333rem; } h3 { - font-size: 14px; font-size: 1.167rem; } h4 { - font-size: 12px; font-size: 1rem; } diff --git a/tgui/packages/tgui/styles/themes/abductor.scss b/tgui/packages/tgui/styles/themes/abductor.scss index 39dac5773c0..3989dcc029c 100644 --- a/tgui/packages/tgui/styles/themes/abductor.scss +++ b/tgui/packages/tgui/styles/themes/abductor.scss @@ -3,64 +3,27 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #ad2350, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #2a314a, - $color-bg-grad-spread: 6%, - $border-radius: 2px -); - .theme-abductor { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #465899, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #404b6e) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #a82d55) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #404b6e) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #a82d55) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #9e1b46) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #465899; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --input-border-color: #404b6e; + --input-border-color-focus: #404b6e; + --number-input-border-color: #404b6e; + --number-input-border-color-active: #404b6e; + --notice-box-background: #a82d55; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #a82d55; + --titlebar-background: #9e1b46; + --color-base: #2a314a; + --color-primary: #ad2350; + --base-gradient-spread: 6; + --border-radius-unit: 2px; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: none; diff --git a/tgui/packages/tgui/styles/themes/admin.scss b/tgui/packages/tgui/styles/themes/admin.scss index 75399ee04a5..43366c65b98 100644 --- a/tgui/packages/tgui/styles/themes/admin.scss +++ b/tgui/packages/tgui/styles/themes/admin.scss @@ -3,27 +3,13 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #1596b6, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #29333a, - $color-bg-grad-spread: 6%, - $border-radius: 2px -); - .theme-admin { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); + --color-base: #29333a; + --color-primary: #1596b6; + --base-gradient-spread: 6; + --border-radius-unit: 2px; - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); + .Layout__content { background-image: url('../../assets/bg-admin.svg'); diff --git a/tgui/packages/tgui/styles/themes/cardtable.scss b/tgui/packages/tgui/styles/themes/cardtable.scss index e5047e2e2f0..4f402cc17ba 100644 --- a/tgui/packages/tgui/styles/themes/cardtable.scss +++ b/tgui/packages/tgui/styles/themes/cardtable.scss @@ -3,53 +3,24 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #000000, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #117039, - $color-bg-grad-spread: 0%, - $border-radius: 0 -); - +@use '../base.scss'; //Made for the roulette table, probably requires a bunch of manual hacks to work for anything else .theme-cardtable { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #117039, - 'color-disabled': #363636, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #fff) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #381608) - ); + --button-background-default: #117039; + --button-background-disabled: #363636; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --number-input-border-color: #fff; + --number-input-border-color-active: #fff; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #117039; + --titlebar-background: #381608; + --color-base: #117039; + --color-primary: #000000; + --base-gradient-spread: 0; + --border-radius-unit: 0; + --section-background: rgba(0, 0, 0, 0.33); .Button { border: base.em(2px) solid #fff; diff --git a/tgui/packages/tgui/styles/themes/hackerman.scss b/tgui/packages/tgui/styles/themes/hackerman.scss index 51befcf1b36..3422a47b2bb 100644 --- a/tgui/packages/tgui/styles/themes/hackerman.scss +++ b/tgui/packages/tgui/styles/themes/hackerman.scss @@ -3,54 +3,20 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #00ff00, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #121b12, - $color-bg-grad-spread: 0% -); - +@use '../base.scss'; .theme-hackerman { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #4a6a4a, - 'color-selected': #00ff00 - ) - ); - @include meta.load-css( - '../components/Tabs.scss', - $with: ( - 'color-default': colors.$primary, - 'tab-color-selected': #00ff003f, - 'text-color': #e7e7e7 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': colors.$primary) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #223d22) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #4a6a4a; + --button-background-selected: #00ff00; + --tab-background-selected: #00ff003f; + --tab-color: #e7e7e7; + --input-border-color: var(--color-primary); + --input-border-color-focus: var(--color-primary); + --titlebar-background: #223d22; + --color-base: #121b12; + --color-primary: #00ff00; + --base-gradient-spread: 0; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: none; diff --git a/tgui/packages/tgui/styles/themes/hammertail.scss b/tgui/packages/tgui/styles/themes/hammertail.scss index 1f8c66ddd9a..d19a5d6d250 100644 --- a/tgui/packages/tgui/styles/themes/hammertail.scss +++ b/tgui/packages/tgui/styles/themes/hammertail.scss @@ -3,63 +3,26 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #397439, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #550202, - $color-bg-grad-spread: 6% -); - .theme-hammertail { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #87ce87) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #910101) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #87ce87) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #4a0202) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #cbd600) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --input-border-color: #87ce87; + --input-border-color-focus: #87ce87; + --number-input-border-color: #87ce87; + --number-input-border-color-active: #87ce87; + --notice-box-background: #910101; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #4a0202; + --titlebar-background: #cbd600; + --color-base: #550202; + --color-primary: #397439; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-hammertail.svg'); diff --git a/tgui/packages/tgui/styles/themes/hephaestus.scss b/tgui/packages/tgui/styles/themes/hephaestus.scss index 6e8c12e3a60..5748557cc63 100644 --- a/tgui/packages/tgui/styles/themes/hephaestus.scss +++ b/tgui/packages/tgui/styles/themes/hephaestus.scss @@ -1,61 +1,29 @@ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #db6700, - $bad: #991100, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #192616, - $color-bg-grad-spread: 6% -); - .theme-hephaestus { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); + --color-base: #192616; + --color-primary: #db6700; + --color-red: #991100; + --color-bad: #991100; + --base-gradient-spread: 6; - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #db6700, - 'color-disabled': #a54a00, - 'color-selected': #ffffff, - 'color-caution': #be6209, - 'color-danger': #991100 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #db6700) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #8c470d) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #c09524) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #c09524) - ); + --button-background-default: #db6700; + --button-background-disabled: #a54a00; + --button-background-selected: #77aa00; + --button-background-caution: #be6209; + --button-background-danger: #991100; - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #263e23) - ); + --input-border-color: #db6700; + --input-border-color-focus: #db6700; + --number-input-border-color: #c09524; + --number-input-border-color-active: #c09524; + + --notice-box-background: #8c470d; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #db6700; + --section-background: rgba(0, 0, 0, 0.33); + --section-separator-color: #db6700; + --tooltip-background: #c09524; + --titlebar-background: #263e23; .Layout__content { background-image: url('../../assets/bg-heph.svg'); diff --git a/tgui/packages/tgui/styles/themes/idris.scss b/tgui/packages/tgui/styles/themes/idris.scss index 09ed2971f69..11ec33b2f3b 100644 --- a/tgui/packages/tgui/styles/themes/idris.scss +++ b/tgui/packages/tgui/styles/themes/idris.scss @@ -1,61 +1,26 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use '../colors.scss' with ( - $primary: #ffffff, - $bad: #ad2727, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #274646, - $color-bg-grad-spread: 6% -); .theme-idris { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #297676, - 'color-disabled': #363636, - 'color-selected': #ffffff, - 'color-caution': #be6209, - 'color-danger': #ad2727 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #284d4d) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #284d4d) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #284d4d) - ); + --button-background-default: #297676; + --button-background-disabled: #363636; + --button-background-selected: #66ddff; + --button-background-caution: #be6209; + --button-background-danger: #ad2727; + --input-border-color: #ffffff; + --input-border-color-focus: #ffffff; + --number-input-border-color: #ffffff; + --number-input-border-color-active: #ffffff; + --notice-box-background: #284d4d; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #297676; + --tooltip-background: #284d4d; + --titlebar-background: #284d4d; + --color-base: #274646; + --color-primary: #ffffff; + --color-bad: #ad2727; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-idris.svg'); diff --git a/tgui/packages/tgui/styles/themes/malfunction.scss b/tgui/packages/tgui/styles/themes/malfunction.scss index d32113ba5e6..84eb16beae0 100644 --- a/tgui/packages/tgui/styles/themes/malfunction.scss +++ b/tgui/packages/tgui/styles/themes/malfunction.scss @@ -3,63 +3,26 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #910101, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #1b3443, - $color-bg-grad-spread: 6% -); - .theme-malfunction { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #1e5881, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #910101) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #1a3f57) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #910101) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #235577) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #1a3f57) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #1e5881; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --input-border-color: #910101; + --input-border-color-focus: #910101; + --number-input-border-color: #910101; + --number-input-border-color-active: #910101; + --notice-box-background: #1a3f57; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #235577; + --titlebar-background: #1a3f57; + --color-base: #1b3443; + --color-primary: #910101; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: none; diff --git a/tgui/packages/tgui/styles/themes/nanotrasen.scss b/tgui/packages/tgui/styles/themes/nanotrasen.scss index c86e90b8f01..a0243db3ef0 100644 --- a/tgui/packages/tgui/styles/themes/nanotrasen.scss +++ b/tgui/packages/tgui/styles/themes/nanotrasen.scss @@ -1,61 +1,26 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use '../colors.scss' with ( - $primary: #ffffff, - $bad: #ad2727, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #092437, - $color-bg-grad-spread: 6% -); .theme-nanotrasen { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #093452, - 'color-disabled': #363636, - 'color-selected': #ffffff, - 'color-caution': #be6209, - 'color-danger': #ad2727 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #06243a) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #182935) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #051520) - ); + --button-background-default: #295482; + --button-background-disabled: #363636; + --button-background-selected: #88ccff; + --button-background-caution: #be6209; + --button-background-danger: #ad2727; + --input-border-color: #ffffff; + --input-border-color-focus: #ffffff; + --number-input-border-color: #ffffff; + --number-input-border-color-active: #ffffff; + --notice-box-background: #06243a; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #093452; + --tooltip-background: #182935; + --titlebar-background: #051520; + --color-base: #092437; + --color-primary: #ffffff; + --color-bad: #ad2727; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-nanotrasen.svg'); diff --git a/tgui/packages/tgui/styles/themes/neutral.scss b/tgui/packages/tgui/styles/themes/neutral.scss index e8ed3ca7da9..229200161eb 100644 --- a/tgui/packages/tgui/styles/themes/neutral.scss +++ b/tgui/packages/tgui/styles/themes/neutral.scss @@ -4,45 +4,19 @@ */ @use 'sass:color'; -@use 'sass:meta'; $neutral: #ffb300; -@use '../colors.scss' with ( - $primary: $neutral, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: color.scale($neutral, $lightness: -40%), - $color-bg-grad-spread: 6% -); - .theme-neutral { - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': color.scale($neutral, $lightness: -30%), - 'color-transparent-text': color.scale($neutral, $lightness: 30%) - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': $neutral, - 'background-color': rgba(0, 0, 0, 0.5) - ) - ); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': color.scale($neutral, $lightness: -25%)) - ); + --button-background-default: #{color.scale($neutral, $lightness: -30%)}; + --button-color-transparent: #{color.scale($neutral, $lightness: 30%)}; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #{$neutral}; + --titlebar-background: #{color.scale($neutral, $lightness: -25%)}; + --color-base: #{color.scale($neutral, $lightness: -40%)}; + --color-primary: #{$neutral}; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-neutral.svg'); diff --git a/tgui/packages/tgui/styles/themes/ntOS95.scss b/tgui/packages/tgui/styles/themes/ntOS95.scss index 5d418f23d2c..851b1bb0516 100644 --- a/tgui/packages/tgui/styles/themes/ntOS95.scss +++ b/tgui/packages/tgui/styles/themes/ntOS95.scss @@ -4,60 +4,31 @@ */ @use 'sass:color'; -@use 'sass:meta'; +@use '../base.scss'; $light-gray: #c3c3c3; $dark-gray: #858585; $scrollbar-color-multiplier: 1; -@use '../colors.scss' with ( - $primary: #000000, - $good: #007c11, - $average: #f0ec11, - $bad: #db2828, - $label: #000000 -); -@use '../base.scss' with ( - $color-bg: #008081, - $color-bg-grad-spread: 0%, - $border-radius: 0 -); - .theme-ntOS95 { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #e8e4c9, - 'color-disabled': #363636, - 'color-selected': #007c11, - 'color-caution': #be6209, - 'color-danger': #9d0808 - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(0, 0, 0, 0.4)) - ); - - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #ecee9e) - ); - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #000080) - ); + --button-background-default: #e8e4c9; + --button-background-disabled: #363636; + --button-background-selected: #007c11; + --button-background-caution: #be6209; + --button-background-danger: #9d0808; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #e8e4c9; + --section-background: rgba(0, 0, 0, 0.4); + --tooltip-background: #ecee9e; + --titlebar-background: #000080; + --color-base: #008081; + --color-primary: #000000; + --color-good: #007c11; + --color-average: #f0ec11; + --color-bad: #db2828; + --color-label: #000000; + --base-gradient-spread: 0; + --border-radius-unit: 0; .Button { color: #161613; diff --git a/tgui/packages/tgui/styles/themes/ntos.scss b/tgui/packages/tgui/styles/themes/ntos.scss index 8b102b47778..f9a6b95407d 100644 --- a/tgui/packages/tgui/styles/themes/ntos.scss +++ b/tgui/packages/tgui/styles/themes/ntos.scss @@ -4,41 +4,16 @@ */ @use 'sass:color'; -@use 'sass:meta'; $nanotrasen: #384e68; -@use '../colors.scss' with ( - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: color.scale($nanotrasen, $lightness: -45%) -); - .theme-ntos { - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': $nanotrasen, - 'color-transparent-text': rgba(227, 240, 255, 0.75) - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': $nanotrasen, - 'background-color': rgba(0, 0, 0, 0.5) - ) - ); - @include meta.load-css('../components/Section.scss'); + --button-background-default: #{$nanotrasen}; + --button-color-transparent: rgba(227, 240, 255, 0.75); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #{$nanotrasen}; + --titlebar-background: #{color.scale($nanotrasen, $lightness: -25%)}; + --color-base: #{color.scale($nanotrasen, $lightness: -45%)}; + --section-background: rgba(0, 0, 0, 0.33); - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': color.scale($nanotrasen, $lightness: -25%)) - ); } diff --git a/tgui/packages/tgui/styles/themes/ntos_cat.scss b/tgui/packages/tgui/styles/themes/ntos_cat.scss index 90affabc929..577c3e0cadf 100644 --- a/tgui/packages/tgui/styles/themes/ntos_cat.scss +++ b/tgui/packages/tgui/styles/themes/ntos_cat.scss @@ -4,7 +4,7 @@ */ @use 'sass:color'; -@use 'sass:meta'; +@use '../base.scss'; //@use 'sass:map'; //palette @@ -17,56 +17,22 @@ $light-gray: #c3c3c3; $dark-gray: #858585; $scrollbar-color-multiplier: 0.5; -@use '../colors.scss' with ( - $primary: black, - $label: rgb(255, 132, 153), - $good: pink, - - $bad: red, - // $fg-map-keys: (), - // $bg-map-keys: (), -); - -@use '../base.scss' with ( - $color-bg: orange, - $color-bg-grad-spread: 12% //$border-radius: 0, -); - .theme-ntos_cat { - // Atomic classes - @include meta.load-css('../atomic/color.scss', $with: ()); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': pink, - 'color-transparent-text': rgba(227, 240, 255, 0.75), - 'color-disabled': #363636, - 'color-selected': #465899, - 'color-caution': #be6209 - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('color-default-fill': rgb(255, 132, 153, 0.75)) - ); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(124, 62, 34, 0.75)) - ); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': rgba(255, 153, 0, 0.75)) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': rgb(255, 132, 153, 0.75)) - ); + --button-background-default: pink; + --button-background-disabled: #363636; + --button-background-selected: #465899; + --button-background-caution: #be6209; + --button-color-transparent: rgba(227, 240, 255, 0.75); + --progress-bar-fill: rgb(255, 132, 153, 0.75); + --section-background: rgba(124, 62, 34, 0.75); + --tooltip-background: rgba(255, 153, 0, 0.75); + --titlebar-background: rgb(255, 132, 153, 0.75); + --color-base: orange; + --color-primary: black; + --color-good: pink; + --color-bad: red; + --color-label: rgb(255, 132, 153); + --base-gradient-spread: 12; .Section { color: black; diff --git a/tgui/packages/tgui/styles/themes/ntos_darkmode.scss b/tgui/packages/tgui/styles/themes/ntos_darkmode.scss index b22ad60fc3f..4d4f08c2df1 100644 --- a/tgui/packages/tgui/styles/themes/ntos_darkmode.scss +++ b/tgui/packages/tgui/styles/themes/ntos_darkmode.scss @@ -4,41 +4,16 @@ */ @use 'sass:color'; -@use 'sass:meta'; $nanotrasen: #2c2c2c; -@use '../colors.scss' with ( - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: color.scale($nanotrasen, $lightness: -45%) -); - .theme-ntos_darkmode { - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': $nanotrasen, - 'color-transparent-text': rgba(227, 240, 255, 0.75) - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': $nanotrasen, - 'background-color': rgba(0, 0, 0, 0.5) - ) - ); - @include meta.load-css('../components/Section.scss'); + --button-background-default: #{$nanotrasen}; + --button-color-transparent: rgba(227, 240, 255, 0.75); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #{$nanotrasen}; + --titlebar-background: #{color.scale($nanotrasen, $lightness: -25%)}; + --color-base: #{color.scale($nanotrasen, $lightness: -45%)}; + --section-background: rgba(0, 0, 0, 0.33); - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': color.scale($nanotrasen, $lightness: -25%)) - ); } diff --git a/tgui/packages/tgui/styles/themes/ntos_lightmode.scss b/tgui/packages/tgui/styles/themes/ntos_lightmode.scss index 9cf1a647b77..b485c80eebf 100644 --- a/tgui/packages/tgui/styles/themes/ntos_lightmode.scss +++ b/tgui/packages/tgui/styles/themes/ntos_lightmode.scss @@ -3,49 +3,19 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - $nanotrasen: #ffffff; -@use '../colors.scss' with ( - $primary: #000000, - $label: #000000 -); -@use '../base.scss' with ( - $color-bg: white -); - .theme-ntos_lightmode { - @include meta.load-css('../atomic/color.scss', $with: ()); - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ('color-default': $nanotrasen) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': $nanotrasen, - 'background-color': rgba(0, 0, 0, 0.5) - ) - ); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(119, 119, 119, 0.4)) - ); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': white) - ); + --button-background-default: #{$nanotrasen}; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #{$nanotrasen}; + --section-background: rgba(119, 119, 119, 0.4); + --tooltip-background: white; + --titlebar-background: gray; + --color-base: white; + --color-primary: #000000; + --color-label: #000000; - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': gray) - ); .Button { color: #161613; } diff --git a/tgui/packages/tgui/styles/themes/ntos_spooky.scss b/tgui/packages/tgui/styles/themes/ntos_spooky.scss index 14746421856..9f470f8f681 100644 --- a/tgui/packages/tgui/styles/themes/ntos_spooky.scss +++ b/tgui/packages/tgui/styles/themes/ntos_spooky.scss @@ -1,67 +1,26 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use 'sass:map'; -@use '../colors.scss' with ( - $primary: #3f021a, - $good: #e62626, - $bad: #970934 -); -@use '../base.scss' with ( - $color-bg: #240101, - $color-bg-grad-spread: 12% -); .theme-ntos_spooky { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #7e0322, - 'color-disabled': #363636, - 'color-selected': #610a0a, - 'color-caution': #1416a3, - 'color-danger': #5c1e80 - ) - ); - @include meta.load-css( - '../components/Dimmer.scss', - $with: ('background-dimness': 0.45) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #473a37) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #740707) - ); - @include meta.load-css('../components/NumberInput.scss'); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css('../components/Table.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #000000) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'color-default-fill': rgba(190, 0, 0, 0.75), - 'background-color': rgba(34, 1, 1, 0.5) - ) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #6b0808) - ); + --button-background-default: #7e0322; + --button-background-disabled: #363636; + --button-background-selected: #610a0a; + --button-background-caution: #1416a3; + --button-background-danger: #5c1e80; + --input-border-color: #473a37; + --input-border-color-focus: #473a37; + --notice-box-background: #740707; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(34, 1, 1, 0.5); + --progress-bar-fill: rgba(190, 0, 0, 0.75); + --tooltip-background: #000000; + --dimmer-background: rgba(0, 0, 0, 0.45); + --titlebar-background: #6b0808; + --color-base: #240101; + --color-primary: #3f021a; + --color-good: #e62626; + --color-bad: #970934; + --base-gradient-spread: 12; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-spookycomp-compressed.svg'); diff --git a/tgui/packages/tgui/styles/themes/ntos_synth.scss b/tgui/packages/tgui/styles/themes/ntos_synth.scss index 242d4b0d04b..6a28d4e59f8 100644 --- a/tgui/packages/tgui/styles/themes/ntos_synth.scss +++ b/tgui/packages/tgui/styles/themes/ntos_synth.scss @@ -3,9 +3,8 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; -//@use 'sass:map'; +@use '../base.scss'; + //palette $cyan: #5edba5; @@ -13,54 +12,21 @@ $pink: #ed12f5; $orange: #ff9900; $purple: #463191; -@use '../colors.scss' with ( - $primary: $pink, - $label: $orange, - $good: $cyan, - // $fg-map-keys: (), - // $bg-map-keys: (), -); - -@use '../base.scss' with ( - $color-bg: $purple, - $color-bg-grad-spread: 12% -); - .theme-ntos_synth { - // Atomic classes - @include meta.load-css('../atomic/color.scss', $with: ()); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': $cyan, - 'color-transparent-text': rgba(227, 240, 255, 0.75), - 'color-disabled': #363636, - 'color-selected': #465899, - 'color-caution': #be6209 - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('color-default-fill': rgba(237, 18, 245, 0.75)) - ); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(0, 0, 0, 0.3)) - ); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': rgba(255, 153, 0, 0.75)) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': rgba(3, 100, 117, 0.75)) - ); + --button-background-default: #{$cyan}; + --button-background-disabled: #363636; + --button-background-selected: #465899; + --button-background-caution: #be6209; + --button-color-transparent: rgba(227, 240, 255, 0.75); + --progress-bar-fill: rgba(237, 18, 245, 0.75); + --section-background: rgba(0, 0, 0, 0.3); + --tooltip-background: rgba(255, 153, 0, 0.75); + --titlebar-background: rgba(3, 100, 117, 0.75); + --color-base: #{$purple}; + --color-primary: #{$pink}; + --color-good: #{$cyan}; + --color-label: #{$orange}; + --base-gradient-spread: 12; .Section { color: $cyan; diff --git a/tgui/packages/tgui/styles/themes/ntos_terminal.scss b/tgui/packages/tgui/styles/themes/ntos_terminal.scss index b5a0ad3c82c..7afdbfea5cc 100644 --- a/tgui/packages/tgui/styles/themes/ntos_terminal.scss +++ b/tgui/packages/tgui/styles/themes/ntos_terminal.scss @@ -3,55 +3,21 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #24e87e, - $label: #24e87e, - $good: rgba(36, 232, 127, 0.5), - // $fg-map-keys: (), - // $bg-map-keys: (), -); -@use '../base.scss' with ( - $color-bg: #121b12, - $color-bg-grad-spread: 0% -); - .theme-ntos_terminal { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': rgba(0, 0, 0, 0), - 'color-disabled': #4a6a4a, - 'color-selected': rgba(36, 232, 127, 0.25) - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': colors.$primary) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ( - 'background-color': rgba(0, 0, 0, 0.5), - 'color-default-fill': rgba(36, 232, 127, 0.5) - ) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': rgba(0, 97, 0, 0.25)) - ); + --button-background-default: rgba(0, 0, 0, 0); + --button-background-disabled: #4a6a4a; + --button-background-selected: rgba(36, 232, 127, 0.25); + --input-border-color: var(--color-primary); + --input-border-color-focus: var(--color-primary); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: rgba(36, 232, 127, 0.5); + --titlebar-background: rgba(0, 97, 0, 0.25); + --color-base: #121b12; + --color-primary: #24e87e; + --color-good: rgba(36, 232, 127, 0.5); + --color-label: #24e87e; + --base-gradient-spread: 0; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { //background-image: none; diff --git a/tgui/packages/tgui/styles/themes/paper.scss b/tgui/packages/tgui/styles/themes/paper.scss index 2f9fa6e16f2..80d08c0e237 100644 --- a/tgui/packages/tgui/styles/themes/paper.scss +++ b/tgui/packages/tgui/styles/themes/paper.scss @@ -3,64 +3,27 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #ffffff, - $bg-lightness: 25%, - $fg-lightness: -10%, - // Commenting out color maps will adjust all colors based on the lightness - // settings above, but will add extra 10KB to the theme. - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-fg: #000000, - $color-bg: #dfdfdf, - $color-bg-grad-spread: 0% -); - +@use '../base.scss'; $font-size: 24px; // A fat warning to anyone who wants to use this: this only half works. // It was made almost purely for the nuke ui, and requires a good amount of manual hacks to get it working as intended. .theme-paper { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css('../components/Tabs.scss'); - @include meta.load-css( - '../components/Section.scss', - $with: ('background-color': rgba(0, 0, 0, 0.1)) - ); - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #e8e4c9, - 'color-disabled': #363636, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00, - 'color-transparent-text': rgba(0, 0, 0, 0.5) - ) - ); - - // Layouts - @include meta.load-css( - '../layouts/Layout.scss', - $with: ('scrollbar-color-multiplier': -1) - ); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ( - 'text-color': rgba(0, 0, 0, 0.75), - 'background-color': base.$color-bg, - 'shadow-color-core': rgba(0, 0, 0, 0.25) - ) - ); + --scrollbar-color-multiplier: -1; + --button-background-default: #e8e4c9; + --button-background-disabled: #363636; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --button-color-transparent: rgba(0, 0, 0, 0.5); + --section-background: rgba(0, 0, 0, 0.1); + --titlebar-background: var(--color-base); + --titlebar-text: rgba(0, 0, 0, 0.75); + --titlebar-shadow-core: rgba(0, 0, 0, 0.25); + --color-fg: #000000; + --color-base: #dfdfdf; + --color-primary: #ffffff; + --base-gradient-spread: 0; .PaperInput { position: relative; @@ -115,7 +78,7 @@ $font-size: 24px; .Window { background-image: none; - color: base.$color-fg; + color: var(--color-fg); } .paper-text { diff --git a/tgui/packages/tgui/styles/themes/retro.scss b/tgui/packages/tgui/styles/themes/retro.scss index 9e08c8b9cae..f3878fc3bbf 100644 --- a/tgui/packages/tgui/styles/themes/retro.scss +++ b/tgui/packages/tgui/styles/themes/retro.scss @@ -3,50 +3,23 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #000000, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #e8e4c9, - $color-bg-grad-spread: 0%, - $border-radius: 0 -); - +@use '../base.scss'; // A fat warning to anyone who wants to use this: this only half works. // It was made almost purely for the nuke ui, and requires a good amount of manual hacks to get it working as intended. .theme-retro { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #e8e4c9, - 'color-disabled': #505046, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #585337) - ); + --button-background-default: #c8b4a9; + --button-background-disabled: #505046; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #e8e4c9; + --titlebar-background: #585337; + --color-base: #a89469; + --color-primary: #000000; + --base-gradient-spread: 0; + --border-radius-unit: 0; + --section-background: rgba(0, 0, 0, 0.33); .Button { font-family: monospace; @@ -59,10 +32,10 @@ color: #c5c5c2; font-family: monospace; &:hover { - color: #ffffff; + color: #aaaaaa; } &:focus { - color: #ffffff; + color: #aaaaaa; } } diff --git a/tgui/packages/tgui/styles/themes/spookyconsole.scss b/tgui/packages/tgui/styles/themes/spookyconsole.scss index 07fd5b4dbe3..f0cb90a28a7 100644 --- a/tgui/packages/tgui/styles/themes/spookyconsole.scss +++ b/tgui/packages/tgui/styles/themes/spookyconsole.scss @@ -1,71 +1,23 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use 'sass:map'; - -@use '../colors.scss' with ( - $primary: #3f021a, - $good: #010005, - $bad: #970934, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #240101, - $color-bg-grad-spread: 12% -); - -$updated-bg-map: colors.$bg-map !default; - -$updated-bg-map: map.set($updated-bg-map, 'good', colors.$good); -$updated-bg-map: map.set($updated-bg-map, 'bad', colors.$bad); .theme-spookyconsole { - // Atomic classes - @include meta.load-css( - '../atomic/color.scss', - $with: ('bg-map': $updated-bg-map) - ); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #7e0322, - 'color-disabled': #363636, - 'color-selected': #610a0a, - 'color-caution': #1416a3, - 'color-danger': #5c1e80, - 'bg-map': $updated-bg-map - ) - ); - @include meta.load-css( - '../components/Dimmer.scss', - $with: ('background-dimness': 0.45) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #473a37) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #740707) - ); - @include meta.load-css('../components/NumberInput.scss'); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css('../components/Table.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #000000) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #6b0808) - ); + --button-background-default: #7e0322; + --button-background-disabled: #363636; + --button-background-selected: #610a0a; + --button-background-caution: #1416a3; + --button-background-danger: #5c1e80; + --input-border-color: #473a37; + --input-border-color-focus: #473a37; + --notice-box-background: #740707; + --notice-box-color: var(--color-text-fixed-white); + --tooltip-background: #000000; + --dimmer-background: rgba(0, 0, 0, 0.45); + --titlebar-background: #6b0808; + --color-base: #240101; + --color-primary: #3f021a; + --color-good: #010005; + --color-bad: #970934; + --base-gradient-spread: 12; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-spookycomp-compressed.svg'); diff --git a/tgui/packages/tgui/styles/themes/syndicate.scss b/tgui/packages/tgui/styles/themes/syndicate.scss index 4a547edef9b..76e6079156d 100644 --- a/tgui/packages/tgui/styles/themes/syndicate.scss +++ b/tgui/packages/tgui/styles/themes/syndicate.scss @@ -3,63 +3,26 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #397439, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #550202, - $color-bg-grad-spread: 6% -); - .theme-syndicate { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #9d0808, - 'color-caution': #be6209, - 'color-danger': #9a9d00 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #87ce87) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #910101) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #87ce87) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #4a0202) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #910101) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #9d0808; + --button-background-caution: #be6209; + --button-background-danger: #9a9d00; + --input-border-color: #87ce87; + --input-border-color-focus: #87ce87; + --number-input-border-color: #87ce87; + --number-input-border-color-active: #87ce87; + --notice-box-background: #910101; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #4a0202; + --titlebar-background: #910101; + --color-base: #550202; + --color-primary: #397439; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-syndicate.svg'); diff --git a/tgui/packages/tgui/styles/themes/vaurca.scss b/tgui/packages/tgui/styles/themes/vaurca.scss index 2647b3d5053..3b197cc520a 100644 --- a/tgui/packages/tgui/styles/themes/vaurca.scss +++ b/tgui/packages/tgui/styles/themes/vaurca.scss @@ -1,55 +1,18 @@ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #ff0000, - $fg-map-keys: (), - $bg-map-keys: () -); - -@use '../base.scss' with ( - $color-bg: #1b1212, - $color-bg-grad-spread: 0% -); +@use '../base.scss'; .theme-vaurca { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Import Crew Manifest for color values - @include meta.load-css('../interfaces/CrewManifest.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #6a4a4a, - 'color-selected': #ff0000 - ) - ); - @include meta.load-css( - '../components/Tabs.scss', - $with: ( - 'color-default': colors.$primary, - 'tab-color-selected': #ff00003f, - 'text-color': #e7e7e7 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': colors.$primary) - ); - @include meta.load-css('../components/Modal.scss'); - @include meta.load-css('../components/Section.scss'); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #3d2222) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #6a4a4a; + --button-background-selected: #ff0000; + --tab-background-selected: #ff00003f; + --tab-color: #e7e7e7; + --input-border-color: var(--color-primary); + --input-border-color-focus: var(--color-primary); + --titlebar-background: #3d2222; + --color-base: #1b1212; + --color-primary: #ff0000; + --base-gradient-spread: 0; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: none; diff --git a/tgui/packages/tgui/styles/themes/wizard.scss b/tgui/packages/tgui/styles/themes/wizard.scss index 9c4056cc128..f98ea552497 100644 --- a/tgui/packages/tgui/styles/themes/wizard.scss +++ b/tgui/packages/tgui/styles/themes/wizard.scss @@ -3,64 +3,27 @@ * SPDX-License-Identifier: MIT */ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #1596b6, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #213e4e, - $color-bg-grad-spread: 6%, - $border-radius: 2px -); - .theme-wizard { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #02426d, - 'color-selected': #465899, - 'color-caution': #be6209, - 'color-danger': #b30707 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #404b6e) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #a82d55) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #404b6e) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #2da848) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #1b9e26) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #02426d; + --button-background-selected: #465899; + --button-background-caution: #be6209; + --button-background-danger: #b30707; + --input-border-color: #404b6e; + --input-border-color-focus: #404b6e; + --number-input-border-color: #404b6e; + --number-input-border-color-active: #404b6e; + --notice-box-background: #a82d55; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #2da848; + --titlebar-background: #1b9e26; + --color-base: #213e4e; + --color-primary: #1596b6; + --base-gradient-spread: 6; + --border-radius-unit: 2px; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-wizard.svg'); diff --git a/tgui/packages/tgui/styles/themes/zavodskoi.scss b/tgui/packages/tgui/styles/themes/zavodskoi.scss index a9b8db2bda9..8d2321f077a 100644 --- a/tgui/packages/tgui/styles/themes/zavodskoi.scss +++ b/tgui/packages/tgui/styles/themes/zavodskoi.scss @@ -1,60 +1,25 @@ -@use 'sass:color'; -@use 'sass:meta'; -@use '../colors.scss' with ( - $primary: #490b0b, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #350404, - $color-bg-grad-spread: 6% -); .theme-zavodskoi { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); - - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': colors.$primary, - 'color-disabled': #363636, - 'color-selected': #1c5f24, - 'color-caution': #be6209, - 'color-danger': #be0f0f - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #080101) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #910101) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #080101) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #4a0202) - ); - - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #350303) - ); + --button-background-default: var(--color-primary); + --button-background-disabled: #363636; + --button-background-selected: #1c5f24; + --button-background-caution: #be6209; + --button-background-danger: #be0f0f; + --input-border-color: #080101; + --input-border-color-focus: #080101; + --number-input-border-color: #080101; + --number-input-border-color-active: #080101; + --notice-box-background: #910101; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: var(--color-primary); + --tooltip-background: #4a0202; + --titlebar-background: #350303; + --color-base: #350404; + --color-primary: #490b0b; + --base-gradient-spread: 6; + --section-background: rgba(0, 0, 0, 0.33); .Layout__content { background-image: url('../../assets/bg-zavod.svg'); diff --git a/tgui/packages/tgui/styles/themes/zenghu.scss b/tgui/packages/tgui/styles/themes/zenghu.scss index 4ea9be69b4d..6d3211d4041 100644 --- a/tgui/packages/tgui/styles/themes/zenghu.scss +++ b/tgui/packages/tgui/styles/themes/zenghu.scss @@ -1,61 +1,29 @@ -@use 'sass:color'; -@use 'sass:meta'; - -@use '../colors.scss' with ( - $primary: #272727, - $bad: #991100, - $fg-map-keys: (), - $bg-map-keys: () -); -@use '../base.scss' with ( - $color-bg: #1f1527, - $color-bg-grad-spread: 6% -); - .theme-zenghu { - // Atomic classes - @include meta.load-css('../atomic/color.scss'); + --color-base: #1f1527; + --color-primary: #272727; + --color-red: #991100; + --color-bad: #991100; + --base-gradient-spread: 6; - // Components - @include meta.load-css( - '../components/Button.scss', - $with: ( - 'color-default': #47354f, - 'color-disabled': #363636, - 'color-selected': #ffffff, - 'color-caution': #be6209, - 'color-danger': #ad2727 - ) - ); - @include meta.load-css( - '../components/Input.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/NoticeBox.scss', - $with: ('background-color': #a681c1) - ); - @include meta.load-css( - '../components/NumberInput.scss', - $with: ('border-color': #ffffff) - ); - @include meta.load-css( - '../components/ProgressBar.scss', - $with: ('background-color': rgba(0, 0, 0, 0.5)) - ); - @include meta.load-css('../components/Section.scss'); - @include meta.load-css( - '../components/Tooltip.scss', - $with: ('background-color': #a681c1) - ); + --button-background-default: #47354f; + --button-background-disabled: #363636; + --button-background-selected: #bb44cc; + --button-background-caution: #be6209; + --button-background-danger: #ad2727; - // Layouts - @include meta.load-css('../layouts/Layout.scss'); - @include meta.load-css('../layouts/Window.scss'); - @include meta.load-css( - '../layouts/TitleBar.scss', - $with: ('background-color': #121014) - ); + --input-border-color: #ffffff; + --input-border-color-focus: #ffffff; + --number-input-border-color: #ffffff; + --number-input-border-color-active: #ffffff; + + --notice-box-background: #a681c1; + --notice-box-color: var(--color-text-fixed-white); + --progress-bar-background: rgba(0, 0, 0, 0.5); + --progress-bar-fill: #47354f; + --section-background: rgba(0, 0, 0, 0.33); + --section-separator-color: #272727; + --tooltip-background: #a681c1; + --titlebar-background: #121014; .Layout__content { background-image: url('../../assets/bg-zenghu.svg'); diff --git a/tgui/public/bg-deforest.svg b/tgui/public/bg-deforest.svg new file mode 100644 index 00000000000..018c2e984bd --- /dev/null +++ b/tgui/public/bg-deforest.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/tgui/public/bg-nanotrasen.svg b/tgui/public/bg-nanotrasen.svg new file mode 100644 index 00000000000..d21b9f0a2a0 --- /dev/null +++ b/tgui/public/bg-nanotrasen.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/tgui/public/helpers.min.js b/tgui/public/helpers.min.js new file mode 100644 index 00000000000..6c5fc969b84 --- /dev/null +++ b/tgui/public/helpers.min.js @@ -0,0 +1 @@ +(function(){var hasOwn=Object.prototype.hasOwnProperty;var assign=function(target){for(var i=1;i0){url+="&"}var value=params[key];if(value===null||value===undefined){value=""}url+=encodeURIComponent(key)+"="+encodeURIComponent(value)}}}if(window.cef_to_byond){cef_to_byond("byond://"+url);return}if(url.length<2048){location.href="byond://"+url;return}var xhr=new XMLHttpRequest;xhr.open("GET",url);xhr.send()};Byond.callAsync=function(path,params){if(!window.Promise){throw new Error("Async calls require API level of ES2015 or later.")}var index=Byond.__callbacks__.length;var promise=new window.Promise(function(resolve){Byond.__callbacks__.push(resolve)});Byond.call(path,assign({},params,{callback:"Byond.__callbacks__["+index+"]"}));return promise};Byond.topic=function(params){return Byond.call("",params)};Byond.command=function(command){return Byond.call("winset",{command:command})};Byond.winget=function(id,propName){if(id===null){id=""}var isArray=propName instanceof Array;var isSpecific=propName&&propName!=="*"&&!isArray;var promise=Byond.callAsync("winget",{id:id,property:isArray&&propName.join(",")||propName||"*"});if(isSpecific){promise=promise.then(function(props){return props[propName]})}return promise};Byond.winset=function(id,propName,propValue){if(id===null){id=""}else if(typeof id==="object"){return Byond.call("winset",id)}var props={};if(typeof propName==="string"){props[propName]=propValue}else{assign(props,propName)}props.id=id;return Byond.call("winset",props)};Byond.parseJson=function(json){try{return JSON.parse(json,byondJsonReviver)}catch(err){throw new Error("JSON parsing error: "+(err&&err.message))}};Byond.sendMessage=function(type,payload){var message=typeof type==="string"?{type:type,payload:payload}:type;if(message.payload!==null&&message.payload!==undefined){message.payload=JSON.stringify(message.payload)}assign(message,{tgui:1,window_id:Byond.windowId});Byond.topic(message)};Byond.injectMessage=function(type,payload){window.update(JSON.stringify({type:type,payload:payload}))};Byond.subscribe=function(listener){window.update.flushQueue(listener);window.update.listeners.push(listener)};Byond.subscribeTo=function(type,listener){var _listener=function(_type,payload){if(_type===type){listener(payload)}};window.update.flushQueue(_listener);window.update.listeners.push(_listener)};var RETRY_ATTEMPTS=5;var RETRY_WAIT_INITIAL=500;var RETRY_WAIT_INCREMENT=500;var loadedAssetByUrl={};var isStyleSheetLoaded=function(node,url){var styleSheet=node.sheet;if(styleSheet){return styleSheet.rules.length>0}return false};var injectNode=function(node){if(!document.body){setTimeout(function(){injectNode(node)});return}var refs=document.body.childNodes;var ref=refs[refs.length-1];ref.parentNode.insertBefore(node,ref.nextSibling)};var loadAsset=function(options){var url=options.url;var type=options.type;var sync=options.sync;var attempt=options.attempt||0;if(loadedAssetByUrl[url]){return}loadedAssetByUrl[url]=options;var retry=function(){if(attempt>=RETRY_ATTEMPTS){var errorMessage="Error: Failed to load the asset "+"'"+url+"' after several attempts.";if(type==="css"){errorMessage+=+"\nStylesheet was either not found, "+"or you're trying to load an empty stylesheet "+"that has no CSS rules in it."}throw new Error(errorMessage)}setTimeout(function(){loadedAssetByUrl[url]=null;options.attempt+=1;loadAsset(options)},RETRY_WAIT_INITIAL+attempt*RETRY_WAIT_INCREMENT)};if(type==="js"){var node=document.createElement("script");node.type="text/javascript";node.crossOrigin="anonymous";node.src=url;if(sync){node.defer=true}else{node.async=true}node.onerror=function(){node.onerror=null;node.parentNode.removeChild(node);node=null;retry()};injectNode(node);return}if(type==="css"){var node=document.createElement("link");node.type="text/css";node.rel="stylesheet";node.crossOrigin="anonymous";node.href=url;if(!sync){node.media="only x"}var removeNodeAndRetry=function(){node.parentNode.removeChild(node);node=null;retry()};node.onerror=function(){node.onerror=null;removeNodeAndRetry()};node.onload=function(){node.onload=null;if(isStyleSheetLoaded(node,url)){node.media="all";return}removeNodeAndRetry()};injectNode(node);return}};Byond.loadJs=function(url,sync){loadAsset({url:url,sync:sync,type:"js"})};Byond.loadCss=function(url,sync){loadAsset({url:url,sync:sync,type:"css"})};Byond.saveBlob=function(blob,filename,ext){if(window.navigator.msSaveBlob){window.navigator.msSaveBlob(blob,filename)}else if(window.showSaveFilePicker){var accept={};accept[blob.type]=[ext];var opts={suggestedName:filename,types:[{description:"SS13 file",accept:accept}]};window.showSaveFilePicker(opts).then(function(file){return file.createWritable()}).then(function(file){return file.write(blob).then(function(){return file.close()})}).catch(function(){})}};Byond.iconRefMap={}})();window.onerror=function(msg,url,line,col,error){window.onerror.errorCount=(window.onerror.errorCount||0)+1;var stack=error&&error.stack;if(!stack){stack=msg+"\n at "+url+":"+line;if(col){stack+=":"+col}}stack=window.__augmentStack__(stack,error);if(Byond.strictMode){var errorRoot=document.getElementById("FatalError");var errorStack=document.getElementById("FatalError__stack");if(errorRoot){errorRoot.className="FatalError FatalError--visible";if(window.onerror.__stack__){window.onerror.__stack__+="\n\n"+stack}else{window.onerror.__stack__=stack}var textProp="textContent";errorStack[textProp]=window.onerror.__stack__}var setFatalErrorGeometry=function(){Byond.winset(Byond.windowId,{titlebar:true,"is-visible":true,"can-resize":true})};setFatalErrorGeometry();setInterval(setFatalErrorGeometry,1e3)}if(Byond.strictMode){Byond.sendMessage({type:"log",fatal:1,message:stack})}else if(window.onerror.errorCount<=1){stack+="\nWindow is in non-strict mode, future errors are suppressed.";Byond.sendMessage({type:"log",message:stack})}if(Byond.strictMode){window.update=function(){};window.update.queue=[]}return true};window.onunhandledrejection=function(e){var msg="UnhandledRejection";if(e.reason){msg+=": "+(e.reason.message||e.reason.description||e.reason);if(e.reason.stack){e.reason.stack="UnhandledRejection: "+e.reason.stack}}window.onerror(msg,null,null,null,e.reason)};window.__augmentStack__=function(stack,error){return stack+"\nUser Agent: "+navigator.userAgent};window.update=function(rawMessage){if(window.update.queueActive){window.update.queue.push(rawMessage);return}var message=Byond.parseJson(rawMessage);var listeners=window.update.listeners;for(var i=0;i + + + - - - + - + const getStore = async (mode) => { + return dbPromise.then((db) => + db + .transaction(INDEXED_DB_STORE_NAME, mode) + .objectStore(INDEXED_DB_STORE_NAME), + ); + }; + + const get = async (key) => { + const store = await getStore(READ_ONLY); + return new Promise((resolve, reject) => { + const req = store.get(key); + req.onsuccess = () => resolve(req.result); + req.onerror = () => reject(req.error); + }); + }; + + const set = async (key, value) => { + const store = await getStore(READ_WRITE); + store.put(value, key); + }; + + const remove = async (key) => { + const store = await getStore(READ_WRITE); + store.delete(key); + }; + + const clear = async () => { + const store = await getStore(READ_WRITE); + store.clear(); + }; + + window.onload = () => { + window.parent.postMessage("ready", "*"); + } + + diff --git a/tgui/public/ntos-error.min.css b/tgui/public/ntos-error.min.css new file mode 100644 index 00000000000..73259a99689 --- /dev/null +++ b/tgui/public/ntos-error.min.css @@ -0,0 +1 @@ +blink{animation:1s linear infinite condemned-blink-effect}@keyframes condemned-blink-effect{0%{visibility:hidden}50%{visibility:hidden}100%{visibility:visible}}.FatalError{display:none;position:absolute;top:0;left:0;right:0;bottom:0;padding:12px;font-size:12px;font-family:Consolas,monospace;color:#fff;background-color:#00d;z-index:1000;overflow:hidden;text-align:center}.FatalError--visible{display:block!important}.FatalError__logo{display:inline-block;text-align:left;font-size:10px;line-height:12px;position:relative;margin:16px;top:0;left:0;animation:FatalError__rainbow 2s linear infinite alternate,FatalError__shadow 4s linear infinite alternate,FatalError__tfmX 3s infinite alternate,FatalError__tfmY 4s infinite alternate;white-space:pre}.FatalError__header{margin-top:12px}.FatalError__stack{text-align:left;white-space:pre-wrap;word-break:break-all;margin-top:24px;margin-bottom:24px}.FatalError__footer{margin-bottom:24px}@keyframes FatalError__rainbow{0%{color:#ff0}50%{color:#0ff}100%{color:#f0f}}@keyframes FatalError__shadow{0%{left:-2px;text-shadow:4px 0 #f0f}50%{left:0;text-shadow:0 0 #0ff}100%{left:2px;text-shadow:-4px 0 #ff0}}@keyframes FatalError__tfmX{0%{left:15px}100%{left:-15px}}@keyframes FatalError__tfmY{100%{top:-15px}} \ No newline at end of file diff --git a/tgui/public/tgui-polyfill.min.js b/tgui/public/tgui-polyfill.min.js deleted file mode 100644 index 91be6dc8765..00000000000 --- a/tgui/public/tgui-polyfill.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(window,document){var version="3.7.3";var options=window.html5||{};var reSkip=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;var saveClones=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;var supportsHtml5Styles;var expando="_html5shiv";var expanID=0;var expandoData={};var supportsUnknownElements;(function(){try{var a=document.createElement("a");a.innerHTML="";supportsHtml5Styles="hidden"in a;supportsUnknownElements=a.childNodes.length==1||function(){document.createElement("a");var frag=document.createDocumentFragment();return typeof frag.cloneNode=="undefined"||typeof frag.createDocumentFragment=="undefined"||typeof frag.createElement=="undefined"}()}catch(e){supportsHtml5Styles=true;supportsUnknownElements=true}})();function addStyleSheet(ownerDocument,cssText){var p=ownerDocument.createElement("p"),parent=ownerDocument.getElementsByTagName("head")[0]||ownerDocument.documentElement;p.innerHTML="x";return parent.insertBefore(p.lastChild,parent.firstChild)}function getElements(){var elements=html5.elements;return typeof elements=="string"?elements.split(" "):elements}function addElements(newElements,ownerDocument){var elements=html5.elements;if(typeof elements!="string"){elements=elements.join(" ")}if(typeof newElements!="string"){newElements=newElements.join(" ")}html5.elements=elements+" "+newElements;shivDocument(ownerDocument)}function getExpandoData(ownerDocument){var data=expandoData[ownerDocument[expando]];if(!data){data={};expanID++;ownerDocument[expando]=expanID;expandoData[expanID]=data}return data}function createElement(nodeName,ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createElement(nodeName)}if(!data){data=getExpandoData(ownerDocument)}var node;if(data.cache[nodeName]){node=data.cache[nodeName].cloneNode()}else if(saveClones.test(nodeName)){node=(data.cache[nodeName]=data.createElem(nodeName)).cloneNode()}else{node=data.createElem(nodeName)}return node.canHaveChildren&&!reSkip.test(nodeName)&&!node.tagUrn?data.frag.appendChild(node):node}function createDocumentFragment(ownerDocument,data){if(!ownerDocument){ownerDocument=document}if(supportsUnknownElements){return ownerDocument.createDocumentFragment()}data=data||getExpandoData(ownerDocument);var clone=data.frag.cloneNode(),i=0,elems=getElements(),l=elems.length;for(;i3?getModifier(init):null,key=String(init.key),chr=String(init.char),location=init.location,keyCode=init.keyCode||(init.keyCode=key)&&key.charCodeAt(0)||0,charCode=init.charCode||(init.charCode=chr)&&chr.charCodeAt(0)||0,bubbles=init.bubbles,cancelable=init.cancelable,repeat=init.repeat,locale=init.locale,view=init.view||window,args;if(!init.which)init.which=init.keyCode;if("initKeyEvent"in out){out.initKeyEvent(type,bubbles,cancelable,view,ctrlKey,altKey,shiftKey,metaKey,keyCode,charCode)}else if(0>>0);var proto=Element.prototype;var querySelector=proto.querySelector;var querySelectorAll=proto.querySelectorAll;proto.querySelector=function qS(css){return find(this,querySelector,css)};proto.querySelectorAll=function qSA(css){return find(this,querySelectorAll,css)};function find(node,method,css){node.setAttribute(dataScope,null);var result=method.call(node,String(css).replace(/(^|,\s*)(:scope([ >]|$))/g,(function($0,$1,$2,$3){return $1+"["+dataScope+"]"+($3||" ")})));node.removeAttribute(dataScope);return result}})()}})(window);(function(global){"use strict";var DOMMap=global.WeakMap||function(){var counter=0,dispatched=false,drop=false,value;function dispatch(key,ce,shouldDrop){drop=shouldDrop;dispatched=false;value=undefined;key.dispatchEvent(ce)}function Handler(value){this.value=value}Handler.prototype.handleEvent=function handleEvent(e){dispatched=true;if(drop){e.currentTarget.removeEventListener(e.type,this,false)}else{value=this.value}};function DOMMap(){counter++;this.__ce__=new Event("@DOMMap:"+counter+Math.random())}DOMMap.prototype={constructor:DOMMap,"delete":function del(key){return dispatch(key,this.__ce__,true),dispatched},get:function get(key){dispatch(key,this.__ce__,false);var v=value;value=undefined;return v},has:function has(key){return dispatch(key,this.__ce__,false),dispatched},set:function set(key,value){dispatch(key,this.__ce__,true);key.addEventListener(this.__ce__.type,new Handler(value),false);return this}};return DOMMap}();function Dict(){}Dict.prototype=(Object.create||Object)(null);function createEventListener(type,callback,options){function eventListener(e){if(eventListener.once){e.currentTarget.removeEventListener(e.type,callback,eventListener);eventListener.removed=true}if(eventListener.passive){e.preventDefault=createEventListener.preventDefault}if(typeof eventListener.callback==="function"){eventListener.callback.call(this,e)}else if(eventListener.callback){eventListener.callback.handleEvent(e)}if(eventListener.passive){delete e.preventDefault}}eventListener.type=type;eventListener.callback=callback;eventListener.capture=!!options.capture;eventListener.passive=!!options.passive;eventListener.once=!!options.once;eventListener.removed=false;return eventListener}createEventListener.preventDefault=function preventDefault(){};var Event=global.CustomEvent,dE=global.dispatchEvent,aEL=global.addEventListener,rEL=global.removeEventListener,counter=0,increment=function(){counter++},indexOf=[].indexOf||function indexOf(value){var length=this.length;while(length--){if(this[length]===value){break}}return length},getListenerKey=function(options){return"".concat(options.capture?"1":"0",options.passive?"1":"0",options.once?"1":"0")},augment;try{aEL("_",increment,{once:true});dE(new Event("_"));dE(new Event("_"));rEL("_",increment,{once:true})}catch(o_O){}if(counter!==1){(function(){var dm=new DOMMap;function createAEL(aEL){return function addEventListener(type,handler,options){if(options&&typeof options!=="boolean"){var info=dm.get(this),key=getListenerKey(options),i,tmp,wrap;if(!info)dm.set(this,info=new Dict);if(!(type in info))info[type]={handler:[],wrap:[]};tmp=info[type];i=indexOf.call(tmp.handler,handler);if(i<0){i=tmp.handler.push(handler)-1;tmp.wrap[i]=wrap=new Dict}else{wrap=tmp.wrap[i]}if(!(key in wrap)){wrap[key]=createEventListener(type,handler,options);aEL.call(this,type,wrap[key],wrap[key].capture)}}else{aEL.call(this,type,handler,options)}}}function createREL(rEL){return function removeEventListener(type,handler,options){if(options&&typeof options!=="boolean"){var info=dm.get(this),key,i,tmp,wrap;if(info&&type in info){tmp=info[type];i=indexOf.call(tmp.handler,handler);if(-1>>0;if(typeof callback!=="function"){throw new TypeError(callback+" is not a function")}if(arguments.length>1){T=thisArg}k=0;while(k - + - - - - + + - - - + @@ -730,30 +27,20 @@
    - +

    A fatal exception has occurred at 002B:C562F1B7 in TGUI. The current application will be terminated. Send the copy of the following stack - trace to an authorized NanoTrasen incident handler at - https://github.com/Aurorastation/Aurora.3. Thank you for your - cooperation. -

    + trace to an authorized Nanotrasen incident handler at + https://github.com/Aurora.3/tgstation. Thank you for your cooperation. +

    +

    i^rnTagam7`EB=npeJ5l-^4B6q&=7( zX|r{9E63`DvuWG+cDgujRi41?ecm0%MW5>arfN6hmYlbB!>6>vK!#Ca$PEY0vy)y+r<^z%&b1?x|w>6A;tvx23cn{h!copK^z7_ zdof<=GVhQq#d%b9J^!#W2E=(4Iq(DeQMN{=O6{ciVw>$ys?XA7!+sNPgUaHLkw^pO((s-+z zdUfRal!CK6>Ep<{Abl75&z@3>JPjzNq?b#pY?1|mnGE~BkENjxIZPwL(S_qdyy_R7 z-x5j@1#=%u#jIcWpDhoE#UKQg77`;=SFBDga|XNVaICt#t{>Our>AY(a35kOog|Gc zy85XJGF93L;q?hH;w4XW5T8`EzQD8-dD??=zOJwB znMlVSgc#=3k)Ew&RuIYhkmn4y+pQri?cDO^Reb9)JEG+P6!=j(l5Jp336QSS#!`g> zWip+xM9&!@xKBIE0v|}@_iC++0JP-{)hXIF7T zo>%b+k?b;*=9n&@WPGDtvi1@Fn|Zr3zhTC`F$V7G=?VEfmm^d>E8+D`yD|0)Np3s` z*O!;Eapv3x(}~&u&H1_B*sN`t2Qc=vxn7qtw^THYCD-E?+X0WyT;~~$%?NB9laJ&N z7+U>}r#)b6;}K3&B}l}&L?9!x6=}*Hl-(I|qP}ojlDRvdj3VUM-DCzjn}{NX5#G!h znh~)~GjNi;;pPCaYym|xYogulYrHO&KA|ec1B9^}GbByLR25T;sIUL@DY+tfZTR59 z0pqA9_2iK(4#gSkk%{XUo+t9|sC;l4=o3$FS3zM$KGsII=3+f@X93G7VEPI(@@ZBN zsXXpFV*SO*y6=u^#)~uWc9u0^atzQwo%IpZwkhqIu;Y4cyXy<}@5en1CW@Fb`9Q^R zd3UCnIayELIe1c$Se16i2}_2tdqre>+R-x6-PqWGKNwg^V8*%_I(%T4@qT318auTC1RPkYXRC=`3>jn zb8pJ_5XNpYLp(~holUdr zxqO!83AoPC=%|fEtWo3KP2ONR04!TTz1Bp#+t;WeVd)bQ$?uU2$_ZoCf&BW5o2F8s zs+7-9!+$GH5qyiOMR-Lc9{^grAYTq6tv{Tz^#pln)*1`cJ*9)fI`E-*VrlJ+JTzP{ z)1H~S?J6jYXZctMZ)a;RCOkN^fMpaAeT5nMZdMPgJZv4Q;4hw`9b^m~dJJz=Z;H2m zcRlaXyPaiCU?1WBf%Os7w%vaD85K2yu_Sr=za`aW5y^0araJ=@>qZE#*{EW4iF#7Q$ zS1>$f!CRO4=reCubh9?+>H5So-{N&$O?q>Cf!@_^t?C|4zUQ&>V1~Sc*~_-Q)trOt z%R9HT`1_*Y@bGK~Pw1$acew=&7*MUI**i; z<00M4V*mItCJT5Ev-|=4y9L$wh-x2{GZ}PK*3t1eJH*kMc+AJ1tY@6R3vp0pGlJ$7 zkd|cb&TJH+gE+czqXRUys%p2}D%ZRG@Kru5Kln|a0CR>`PU^eXG^f z`MI7vn8hLUIwzZ>a@1|eC{Vc{I16-bbTbODXH7kq_ZV;caV=!cHFf4>O_?(aOzj=V zajOJR;lRGDP=|3HF>O98QpcnK03ZNKL_t)q`}VH@ zyUMnY>q0MllMmyqFUDtGt_8<1RzIAfX3V%1!(O|r8aj`{O>4mlUu$*e;7LVtt29=* zdH*&i!!&o?(J#!mUeaA)T;Z5ESwJfHLuY_E`55blzW(k$#H`MD_qSMe>7EViByf7) z{g_A;r<82w6=n;3{ox1mKp!PAhMC*1*QCiLqcdoCUJ*kd(N~(4L@|D?HN+IaC*E++ z#^*lwX{=aJAY$bba?ac5=kv>DUsvmPdc8)?I`19ti_qeVDF+4)Swp#Z1?@2T^_Eg< zl?mqj+YsBpI3je|&Ox>&jUY?CcC>BQ@B-JwIr4CM5(`RG@3pp@xax^Ns6m9E+de*0 zDWNxDhFkl>m@YX7&|}P0cY`BEAJRC;hKTMTAFLGJ%v@6Y* zaFm`-ffqm~k(=B#OZs}btn0e;zV7VZ=kcW}Rj`&jDlY(|LR(5pHf6=j%Zq5QQBiaJ zd>3CZjN)piBt{dO;%y^m-%Hg#nCR4Aw^e41Tv1bW;J`jqzZ0bzbW0wN?3dTAvBk30 zE{AI32z5rjT&r}Fs1*9FY-1Rg1mtB=FVSw~mThmJtv$`^XvValYG}AVcbC~lf7XeX z#%nY>iW#pw%19~g98ld9;Q@lHGaehel+yBi6W86GYp;YzV7DsX)=_DwhKns)kuq0K znOQR0OG-zd#@Hy>p{YOxm&SH+jX838wtc|jeb_f{yOAg3xkfFR7=nB%YHaGhi_Rx$ zHA1a*%qHZafzxfw{o(k0?8X#e5a74Fxw=K`tVH{c*Ne46>W{g#BU&I)rB`T7sXwR} zYW%cSYm}Dc8;0@$(3E9a_LQZ4KuOZe1w2T{D$%&`s?W21@5{?;fnyFl^`aGsaAJwM)m9(kPZtPQ33gJwVK3Y3)FXP1U)@mVuY9MN#1yn|| z1(!-I${$x7xd5AP>ZDNx4T*WvFwBWPBGJ(Wr`8%{PA?ZxRpp%bQulS0?>*MUQsTb1 z{gtVZ$1sET#BV{pB5D}gx^Jr-w6m<0X1<7qL8@`qx(;LgC-266-QhCV1ozOqiD)LV z+UFQU2>WIeU{DMoHOFXR0<2KD2R6R@?YpX{YHR0gbWQQ_<@?UZ6ilm!1{T>f+dJ3j z+sZhnH_vDEcBl9}0U5_hd^+x7^ZqMOc%qeh} zvt-<@;+~2ALC$%MaN?NGc>0qb8HpBfOvbgd?`5Q;a=9ig$!Jlf=)jRlT8w$#8^>|! zeda2S*UpqSOe67#N50W!V8xTqGGBjuKO;3+`xtWin{u~s2yd3Lz}iP;FFY`QW=5GY z$7Y1P969z5!*n5OO|-C}5sh|f3caW$hgx9!eW zb9`50fXBpkW8bCLO|Kr-$%h{M(bX`V>=_=>p1H?Y`xEV9kKgNNAeiI3$7Jh~x<);g z@H}x18hS`F4wX^W8;<+iN4g9B>mv*DN8@FnBU(|98lK%5L`uBR3 z_C(f@QQ+Hezq*_y<8G0?Q%oluU(PwideD~W`uu=00V!DQ5%jj-`hDVB3+39$_u>^9 z)yh(|sqe#{l`sDyCs z=<9EkNG_>)(mqJmVvdAQc*87H84HWwKFSgQf$`HCvpow%XN;LSR=)CtBgfuhd_1a0 zB594C)VFkbbw`?Fsd07?t(WnzNAB6rD&hY9EVE@?m(Dr4+vBQ|z$jv~b>_kyjR8D; zglyrAVcT0D7j&zBXA|c%%-Q6{$gbYIo!_YYN07G|t^SjTz-}@)L z>)Ge*v-a9+?TA=DCnE;4s0t@FFPs(=>!QPtD1J&iEb;NV#AWX-E|)Z}g*;q84?f1_ zgnzjuy~u3sf)g^Od>R7{oVQRWKlusbYqkV9hrK`g#a1$&}0g)zP@2b}^rrt!l}pKUBftZSYF{)=}ZWr^gdxLnbt5TrE1dGl?pf!1`$>AT%|n z`IAS%e<1}CAs50(pea1!5d|#fH=lP8(fb{#6t`YU=udI~iW8&8{a|eSo~m3#_4+aP zl@O@Feu6S0irw{TGiJcssZN{6leRvZ9cXu5sIEZuqO%*=XYf%jSR!H*wjHFcD7~n4 zNh`wu^JxSO!L;&iL#pbR^b#8uKDLp&{C!eZ%nla(4f?F* zAAh#wIdx{H&={()3?0(6?S?^~PLuFNAKauX=q8 z33qd!xAUg%SSzb^9Mx9qv%hYf{U>6Oc#j}hgeiwuE@78BS*?q~wYBpE5Dsm<8*2!6 z#?j82D!SnGqfsrJk3Qee?&^ihpv=Vy=myo~|0Nkjk&*3aDy=}X)^>zS*ZDK2obQS=e^XDzhY%uVQT6b&^^=U3(%%@ zfrLiN-!-h5=e5OV$oujr#`tWK&-JQG7g+gFblSBjo#6?6VQnw-#CL~2t`9SI>-m}x z8TaLAb{724o|98{v&JoOdG~ooW>5BaHnB!HGZUze-^^v(mLo>2bH}8O!rMDb9E+B_ zPQQ#6in)($JzOA-w2j*&)FMoE-bOBPY;4i!$OMw#8@P+&#IIJUe>#gZDqF4baueiu zv+0{~3K^Yyqv*D83cKh*1ld3vYfV|Ox>N|7dZ@+|?ZuZw!0yn=sK>ieI&Fz9>Xz-p zEgG3&92Qcv`(Bw+QR?g@{(91f;Ow!{UtiCY&^-vHz((Cner1KmCiDF>~8%Ei2zvSDw|QDBe*@h>uM=7!^u;nYCdqLbhE|IR925&52E9{OpTtlpPQEiJC$i}CZ^JR=`~ z3f6Hz}6TgJTD>8jtj z8H_nzZ9Zo=ug3rLG4mw3eg>VLEjN8hR_Q0cRazFefA0QmW4FMVths}I^YqZ z$>7t;IY*u;1hHLGHKy3ipq2jAYOC_nmE7p167Y2b>Q3v_XL@G%SCHdGR1o|JbgCoh z-2>+cl<)HIccys8#$fs&DpR3VamF5nG+bE{Q?(%3Wuqy@4C$~2$s1!zN4B(Sna?z8 z%;RSX8W-4g>EG?-8UzzrjD)@+{M4E?C84@_cpp1M@Slw>^G{l>&P?f$0Z%_an1wz5 zzVugEzaD{tpWyO*hMe62|BBR&B&Pi6I+eGEren-q6_)JY({YW;J#ii7!2bhdBypst zt1iR%FA(Z@J2r5WP?7-9g8-76$-xX;bqFX{ngDv zVJN#0_N;okm;Wq!?iD6CWN%;n*Q%IoP>@>vRGs4b1^KC!NM^vd@tyzTJYs6mI+xLhV0!~T(H4A-LU8OKC;>QsqMoVxY;CO zoiZTBP>XIbA@Lr^6@Ua3nbl^h_PxZLU@R0Df($}Pn_a!rvXZbf9zZ(lB!=L(ygLv* zp)}%rX@WGbkU1hPT%~maII*StI5SIdx*iW){~A{p5^O(scecrMd+H#XSmK?pOQRCq}!X?Tp%vI=ZJVCRTZskK9Ks zHmJWWtjZdmATrujIX0V_I~S*-PtFpLzjVRF8h=lUxX}|@|;98#9U_+U$pBaACn!va+><7Gtc(n zuCc4&a&2X9%*xKYUiB`dcWu$(^zp10Y33cubM$5O^Qdf4iv$=`W6>W{6cN)>3qlu6 zSEJwXDnWeR`ML!CXQL&aZ7R>A4DP8+-I>uD)M+iQyLbymmU%mX++Y>=y-iIZ#^(CG ziz7w5USr_PRon zAe9Q^n_f4D4E(7~oQP&3^~mjR(1+x{2{;G4`}Qy*yAL8kx9`G--x!#a#fHq5F4?Y{ zEZ-8ie?zT}L&-wln1E<{8B1rZJ=J`IS9$%PYB)Q0Jq{Z7jf@}-;0En?qdgBd zFvI3wYyVCaS6wtwE&^jm>G%i_noWOf0u(IvZ2oi#kZggMUc&M9Sq0~|@s;wD%je0z z7=f0iSEn+4P+eM~K_K`9P;uqI)1uiRi7)K#e*Kj4RNQODy03!|auJoge0JHlc4P1*Po_~V3GOLhF0(p|6XI2(!AI;@B@v<8&O&$^@$1jmnju!VGE45hWNVLiH}TkL^0RY0FvDFe~b&ouQbH0H=)i3>Pof z`l}=aT-Y=F=Ibju@mI|UqVChv8)o?KeY*<>u@h}}WGMQ3btvDVp%5tWRjF`G z%k(OWWlwD3ynE{)6_d2x6Pa4lDr+Fro`V@XGdfSE(=zPwq$M1wC2RProc;T^yO%d> zf>pn7dbHmtogPD~K?_&5jvk0PfBj%zo?J2Gdt=4@c6#pzNEs^W|EiuTQv5CBeXe^H_=Z zD^fe>8^TFEOkGLR0H+wVEW3;e`31Y&L7m1N@Nf&2zS(#OH<4P6{rH4F(YEHKNGU&w zX{H~~W&I3W^v|}sUViuHy{N=4^lxY)(?4uDhHjJ3&$oRnJfv+De3U$z;}Eb&>C%Nd z_}j1x1?~LUu~-{^q6%heso&v-vOd%Y_uAWba%5*X?VJ21|8w~s zAyyo&Zh|MMZ9$e0E}g|U6)ICFwM874`+<5im)ZL^;_WVo@tk}F7ANldFJJNrAKbmS z^n>JVRSrx1oS4~0t@`8MN@?jcJ6;^emx9(M6a#Eo;B{oAJ!C>5@4lBg?N6_HDQJ@f zvFdBjmq*wV)|Qt=F9yhK$4L)J)tGmk?$R}nq_e_4f$$P9aGayxswAeF;$M1bD zVQNVFj@`fgHpY{5%=jrYeerVat4t#e1 zID)^%WewY@kjP{mEM-|Zf>``S0|XosKO3x12)=~Skr}nnLp+NrD4g7spf<(_z8^KW zvz}eTELtq;AMzT%L>FE|xwcpY`i^HoW9|!6nvj9sD9n#s@bJqLV2E3kQcA~*m*W}v{P9l6Y5usBF%xCe~#gU z8}M1r0SmLBaV_~=dkMEDT#i0GPGCU+AbE`IJuh~oA!QC*l`Lu|Ad&7c;JK5KqT7M3 z=Gn1Fd}S%){_$(!;9wYZnQ%c+OH3Xt_&Hb)a+gtBM~Uh<`Hz16)y=LilO4g z$&BbeJxxP6KUcSs-dW}NDoEJ~Nuf$4$NOF09HJp}LQrP>EoBR=`*1ap@dgtk99?b2 z4p$8rY`~zdht=$Fm&@~eu^~c)MX6uhfuQllmbQR1_hgUll zV0N{&jrAX+ic+E1fu}cr9VnCki-`8`J@8R9lbBB6=Qn`5Q1zgi-aB&_(g?^y)K9HptZC$c}UkUiB z)qSNVUhDfQGJl0)lL5PgwYeWJ)`_D3*7TdnA~MV}3Qc&h06AO2V(gH&ncowqUXrs< zv*IF9W7}!(G5LS08pKm7p?8G^)g90DYQ}mBqiwb;=?E|?lN>Gxy&F#>A!qrnT}wj% zr&48*G6W>NBk>1PBe!`ISz=_ch@Qtt2(+cL{kL+raSO~j+pnK96Ss2ZiF3_4?=NAO zmp+Tae_BuAd5o0)pj+1ryMWNp(6F#kSb>tSsd{4P+O6>InRA`|mH@!wZ?5cmxbl7b z`NPe_urE~+q2pAi+w)(kGPm6c+c5s4xSOVBKR`~yDX8n?9XL4SJ|9aT?KsJfWKyxY zm;@XQJXo+h-_x@qVVM9pGm#7>Qpe;4zELz5dtUq!3LC~PK7F7vvtrDtO-!T?de`-4 zo_tEN{^VbAz^z_GTiPhuq3~fQ^ZI<9A1X82XMui1n!{ale?qHNb-Me!44C-ItS24IoxX=wX)ZYslVTm`_1?Cni1%7EjP{*caN;KikS}8b?$` z-`-5XmtpWIF~(hlH{`9~gjZ8nA+@hL0ND$Ev*Wuc`OxZ8z;^BhS;z@tYTbFDgsSly zK(KyRU1A?@9E&vnNNW?NkZLwU7tQaSPYZ}&(Q8_(O)tv_VR~KvWVVq!polywtFf@G z%Oc%%S6n`Yj&6>#UYR8XH0_FyoXnk1qmZ|$iTDQP7G3@#rOmr(=6$vwDKf%51?%#r zC*+-f7do=U`HtDMSvpN%cquP=N6L?F1wmITm`w;^N^%#2&DYR0E&m+mqk{v8@rQoB-up7!(CB?_ndL@Gxd zuKn?r~l(e{Kx=;n=-ZB3+hKe1T88e`tXXX1FA1Rg(7H7;@TDv1*74-rg1am-{289j&f{me2hTX*aG3?CXwl%`MEek-qgA|y4veQ~%H z4~&ng+oX5sx<1b+h%q=VVatT-Z-Z^+KE$mtRBM|-Kww0?Fcu1S6p8xWy?z?5IZTjgFG-8t&B8JU<- zJ@&KGdgqmStCYjIi@0oQf~WXcEm6d2Q<;5&`L_WnI`1b1#ofRn8_mWr`hrRDy4aIf zZ*kS|1}$BHW1IPgqiOo#L5&)o$0)xDfwOuHp!yelNF{3gop2yD$WvTPkP?O5)WTC? zPxSeiHQ2Ci2*bH9#y&SRablW}MjrhUHy;orvHKsIDk0J#N{u+BSrDNBb=ZpYz(Kf8 z|9_Yk*%L@SP5NtPQz%J#jrOc0a|V(MLeW+5QF=>$8$-Uo@!!jS|9kj085{8p!P5hrm~8|IQde=ijrp)B;AL@7 zs^ST{P(i59r?KDWM5z_Ni!3O@j@@r4P&eY{MeXZ2JnxaxOo~R*UR7MD>3?$F^@V<(6 z{(y@93R34d<3qFCj5yvC=ncs5A8FIu+UD=dY#S&=g8a43Y<<0SQWIGj4^Wju5C*bXPx5F{qYh;;(Q0m(tAKS6_?zpFrpTX#uEv zKZ3*a`b2?}bnWG81YQ4?YX&?|kMsQW)EEr;fx=nd3|5)H3RQz9fn2&o%BuA~0{h}A zj9x7UnLa8otccWcIhQ$>rdOZvG;6L6wIqEWc^5`-WJw-qpf~`A))ao?3Xf&d8QAJN z$sB_xY9RE?Gz>1I7KT8iIr^%#?K}$!%?fsFHXQ)xIHAAjgpVI5qR7v|%Tt-1Wmmn% zY(z4S%x58qPM-y&A-#=%AlXQte99J~svAg~0$Ji(^6ZPc*mG+w9B*}l0X9>e6tq(tsB|jI zEbY{2+ab%n#xoWcD+4i#Ar7_EF|9KNqk~2&;DGL0^o2MrmBoa0joGI&F_R_CUhm(; z?IRUEC-0V}JHdW*?l6z|Vs&tHs|mMDFt{+aj7>(<;uTjRCP!enW*5F!2c2eRKQ_== z;`@zLi;L?h?#G2}_7@jh;MEj=WtPDs5dO}AS=p&B0yuM|qN_5=Y-oF9|1M+hO}neO zHd z1lX7Q=Ujq*a7ph7G@iFM6~NJ2*A9Ug;O^v9T2Np|66i~=x4QTkH@#$HkXzhV3LHw> z!6$aUX}OS>ZW3kyno*WtnD|sxJSz+}{s6JtXO+n}{7>i~L=iP#i z&;cb@EACCl9R#AdaNJtTDFR&Tu^h8Zl3K{m3niFn{96#@Ypz z{OZWk&K&1s?b%znGZY2B;$`#fgUs4wvnqQN**2AA{Kz6pp0L$_b8~4&?5(2Gh@fkD z6`Qd?Lu9OC4qCInU;*X51aK@Ezg=d%XvsnZsg?eG`O^n1sZwXdPp?SvW28fKB$7vR znLBB$5pOE=$Uj~_Ot>-ysq{0G+8IA+ir`^{SkQIy3>ouC1&suD#ZjI|>epx0_ql8K za0b-g$p34e;70@XLAjfT%Cq)_D#Rp-wz}|)6vF?>^@3uEy}S0rFukcE%r{AKFRb86 zyq^_c%wac>V3pNqaVRK6oqcC^!eDlX*TLHgJt($sk5G%e;&61VQuV`w9{B#Oly=dL zD_HJ-P&4SiAYgW4K34PFcb1iDhBd?n7A+3MmVA3o*}~jo5hNlXnj|7%7dtkq)M0te z@w(cBxz+Aux}s}_ezG=PZQ1_mn9cB8-S~oz2NQ2y-aeg%IHWJ2t2O0v$*xHo%`yR2 zU;7Yj=&m_0m14^Q>}Fc>8P+w)y1Honb{D*Ih_3rs5~4w5W(q9OQ*CqLJAVPwUwMp} zG(G!dz9{KRFtXE;HSr`F`yuH>VA-PaT>B0WSl~5h1|m=40W}F{+V@W?->@Z!6!cY- z;l0~JTBt#JC`A~y=E?tqU~7hS=p_T&8T4RxNnLwp%o{t)*}rl?x@b;hhP48~1pJ#e z-Fpx08x_8XbNyug(qkh{r~kH%esh+*SV5w2^Y+X8a-M2w-JL)6#t+e_xdY8~A-+K< zjq|u#&-RwKWUgUF>%yOU^Ji0>0&FTQ*^>fG`gpac%0?+?nY5FR>-3K8%U9 z>myHtaBxo-Jt~XD-~WJ;#pyEmqkw)@=JOgc%5%KLE0)aEnbfR!m+p1TIS?mTJTBqM zhMW9LkGLZG!iNP=a1i>I3YA5zCn`(V+XwyA^T$~Yu>GB!0o81;w(Yr>p}bveUKYtH zh4Z2xNOhp=AR+Q)kHExs|1esbH7dcs6P45M%r{uX%nd*eQA`XIlRy#Fb2n$Q>hQX@ z$(HZcmPQ{_%KVR)%TL+;9Ev7d=NNFv&6t=m*I}XQmFg?(WJV@28ecqb50PLdR)u!d zt(p*P(+qn@CPNAQjpcIUVRl>_*KO1KMmdH>KPIl5ojWb0RwSrs*SA^W!5{5RyE%I)L&#oJ%UB+XoZaj+1hpEHay{A=#N+j_m8{F0N> z0KdI7OAv9vHtpTJTCV?3643l#jp4zsm^(BlBef-|9*mM~bSY7e(yBdQoy7Pyqo?W@ zVnC!Wqi*gMj{dIEsXK>-SRVeovJbt=@%@H0f#lKLV=9sSu)92YeJR9FZ<-Ov5yx~2 zwaZ3@jf#Vf&O3(Mg>SQow@%aw5*|>Gh!5>a-p-Bl(q&3DZr&$xeGd6bH~vAmBaC`J zn4v=yHT^|6D~WGutY3_FVPHxL#fD$uvZ&9hIizq_q*UDDYnBr!tDkws8++R4=!Yw4 zVBLe&N?$>O%qN~jvaF6kJ{;4@3*b4oGh?pwp>RzR?{ECjh1btK3&vFi58ON}V5R9A zzKLy5Vxq+~)=R8~*U7?Gsqfs~pl#}b6d@gW78A~I&y5smm-HGc)JSWVr(x+wOnj;H zoI})8`S6jsRn5i^z@_0yZx)(ya`vY7HeLdMeJJ;j5!&;$>~A)2pHCvH+jM%wf-|() zDt*=`&8MO0_779vIme{y{Mvxi@c{yTcZ_4QW{WbOI<=f3#!T09HOsuH+U) z?FqVRd~NTu-Ys^)oJK33@Hyi(jSXf1#+xq;NnOq0HAW3FV$TBAQ z)hGgC(U3l#xN&7`6Rz-01ah4Eb)k9CwHD5bs~_}?zrK7UGE|Gh7o+)0jf~t@|3*Xn z=&IUmfgI{P(JE9|N8{Pqv*6~Unf)>y*Snsdv2&j1?=?$W$oh5faknGU&qVQ^Hb-XX zRe`}!-2Bj^N*5&=a>s#_0rbtt&wpMF3l5g~_l`y5TpL|Z8Esk2xC%SJ0QTvi|b zx>=~OG|ce$`b;z(vJiyw@0N{{``LMihK9J{yy-+(kN*arjLU8=nc#K(w41oEDl86b+cvO9Ik>$+hh8sS+<9}^MxJkZ?@T9k1d-vTeRn&?KB$EBm1&-+H zr!`hR-HFK8DtM$GqK@11ypuH%h9BcGfBsUuAJQvczP4l@W@RnqxndgYFng6?UNfQ| z(a1i5{JQEeV`v6>PgfMsxZeRSozhv%+UZe)}=(8zv%JZ-}7Q5f#@Xc9bj4*1w`60r3^18Q2d9n zy`-K|BL4avFG)-j?PTEhvVdyh%CJMJ&8`OPjX1|Z+-BgIO7_R0g=qNPw$J0k@U{sn z73ZBvchawGW<}kLZ1x{EIp1ThY7E|G@h-Pf^k(gS{1l|27Iq&_iyY8|AY+0Id-+xx zsMw!&b#i@NdHSRvs&O!frd@1$13 zs^;Y$WvJL*m}kr;(8g0ow8h*4NBOHi)(R8?Ka3cAlP2A>|9u2!Zt&sx1nzmKC}??y5(vE)atEmlV-X7mH? zdQ=xyUAI=ewXK0e-VPVOdo9Dm;_*th1O_K9lRL{P5aZ*HTMo&ZYbc zp^uZyx)Ox(crKd3lMA|O46>h0Y9vk(t^~JZ4|YK^>2?G94}Eu;&YBgwPtz#BEZ76P z-xH5K*d?VYuDuEypkFqVlER$0M0u64-iiZ4mnt_@xL9B`Kl2AGv~M&u#Qsz$dmS*ENz%N0|0*$Yg&YQ(VH0&m66??|Y7QGK zFLClF>WI74P&9I_-->}N`A&e%=MM!qcbE(iBm1w`H#I4NR;I#W-X7^`ugBrUD+RSv;I~iO$Joo(+?99$3pjPSwO@{FCkOqSW!UIW zRTY{s+i+AKc3LyfC`Y1`TjGlZPAw^FH^qE?gngm-lyja^^D_xgr8x1RM0N954+A8N zQ;qmIl%V_NwRi40prS7>LOD3%pt|5l89Z>o{U=SyKOwZ1po?wwAOvL6z6<I(>eyjJ;w$|zL?$W=rn!0Gk)6+%z0I$w9MIu^5o#9;O zjjbuir{&AR_AKoDz{pc59M~OLl47HClrjpa7Wm5S-(kM*5QH(~etDfE0QvAMGjwXZ ztyX1pVv{Ebt$ls+&ZULX{ZhA*>6ZkcI{q{*W6Hkh!7Bek4Goa&`>(Dx(_@IpEH(R8 zOPDL7BmrQuI)5bBH@XA>!T;5ltHjuRvf?Jo91WZKu+tMW9D<(X;;QMNZpTx56ZV_O zK_WU1v-SN}ZeQ^2Y;~vl16Z83V>MHu zz5eGIAz%GEOd_5Y5)Mw@x#wO>tD0DtV6z1Pdye65V9uWoAGGh4>2(t%yGNaNsjqu4 zb2eAQEASPl-Uc%#ki(K(gZB~(zL#RbeYrc@HKS-XMhQd-Q29_tJpOOh-3A}SdXMVR; z#LDkicbhGK+y#NsIX8(|GU;NzfB4zhlW#W*=4VeUp&{2ypq6S^7HLh*Xl7d z22Nu;8b?*vPM6pBYDz2=FU;dlBrR;0!;M)w4U5TiVzD@uKPI}t+E*2RoR!4TQg|Be z1`;$;?*J<-;*y6!WkrfIG~3poM?v8#rmA>B?6BHaT346SV2|us`IWy(l>gf5-lGd5 zq|K?*IAZ${6mLcUh^n}GxV+TIogLlSUD1sIVYJBVZt4XGpFlRU2%u=lVnzs{T<~(oh?6~iP?i>@k%kKL!ICQsy1mEr7Lty5&5z*Czs(vm7E zg`zJwlAFd{JJ*gtfNVQ_(C5p6%)w5Ut5oECwghw!J;~$zafQX^A^f{Ni1RS|*5>$< zv)dl%;)s&@6fT^~r;i}CupK(b#vJz-9$KSdna?F0NSMk+*uCkQ+DWz@DDlC-xwu<4w<%B9YRG@ZqEVo8WWm?yUQp@1b9| z-zmxKxoK1c*4SSlkPq#@gu0}=E~#s_=X-MV{lTY3(IY}0{Qt(JtO8coYzypwXNS$q zfehEpe=;7!r~au0AkE1}R_|+^s=EsW+@cWI^TG`}+!E21{!gy&UADiMecgw1_x;x6 z=RxxMjLA74tnJ&o+nQX4acr(++>5YG;F=cz)EKN>f~FF7zYKzY1_VW~%2jEzjQo7;1$tuP9Ho_dz^rJg!E zUZ+rvbxl7#6k<3A6&3pN+HB*Y9*Slc*K^yy;JyyrX*Th}9}?Cq3Nw6uE*PN4Uk0CytjMBxQ$Ki{kADyB>U-LE8{m>O=uvf(oeg@R)%& zfavHv3kHXsxb4fpln`Icqv?nOyFdoPScS*1jb^4(Skly=53xVr4@$a-AJW~{%nXiy z^U1QQ)Zkl3=!*;HEE+rY?3w}TvOH?IV|5{;7ZOjMMC0lt<4mLdCMI4SHh1kP-|6_Z zBWo_zG{4^C{EY{tNrTtt^_pU<7U1~Fi}3fb2U|(&H!0L9M;UQD(-6$BVCikXJ-D}? zp=&Nf@}Ga^1`)52YTL8_Q**Sd+1i@mcIm&!b^|kt}1pKE^WC>mj3{gk+?79&6LQmuV%>7s1W)EX?0WkF}6c*&lB&$43!q6 zV0KOnCrvYjWFmC&qs25lEu0TB0cObSnHjIVdVZy@9qD(3OpRt2GE*_~Uej-AL74Aj zW;~qE#1%v;>zwdEZ5gLeY?1kWJ#;-a&=-qoG*Mw0qz^rnQHbpKKK~i>>qb?U>6b$TlH6U1a9e%pOI?l%DmqE> zzCZA<714%e$1w=)5WHPA?C)+Dsh@Ife6Z#hLBaY#mAFPecy&7S4G?hG=5q|N@W`0h z_FYb;_pkL@SH+@GKw3nfJ>X+Y4L$IvB4EuaQtfaFsZjNBXFK1^^eKH<*J{Y=5cxQ% zE)&LO5|KW3C)897JN{Cdy3A|1Djw_bnX)iQ{L9rp@A&tnGeu`cGr0U2-;dhLkZXsW z%SZM^N|c?PUa#q?P))1jO*%Vx>AO9e$h>JfKX}KpFjiXfVT*FRcP44ae)y*5qe49H z^6j>)DzMkI&8;~EbA9>FzQopWdww>Uv_9-%2E4E}^tL{D%W_3BFT0qIcr!)koIo;Z z*-wBH+3LMFF3y$iP1(ZzRLe%bj<4uQvNtXGd7<+bND!a0Sns5HDjT|Betp?eYc%Gd z8kx)UCgspXc^PTfq}EoahHCvLUq)>N|-YG$5IusDf)=tHJ6mKo}j}K64UrcsOgV0{$_r@##Rb-F3p`aZ_8m? zK6XZru~%NatK0$2G@XP$G5AqLJ(K}{l%P_O#>Z`JoP5)4KJ^bh$Fg6rh;EjfGRyFCa4ov6 znTVrYx{pWtbA{Cw5Du{TLi`@&y5EO*6)}=$zuEIU@2&IepqS!Q+!M{<^FC!De4$u& zZ?q#Z^@*6BR9ZxWI54MoR3BTDWmwV$IDwp&-PYfe%Fb*-1%M<-FSbqbVLux z^+0y;qN3-Ku}O^|Q#F_ieCFAs8-#9|KXu!AbN85%G@Ey1ar}i@TuXvUGDz(W{@nOe zi!g`odgHSfN7ov;a#$8$4@BZPVV;{6+b16kq{_Q)RZwayn3i4YsP)mtdoUO%#-FU| z`@5@6AcZ^o>npi0b9DaMp^GPf^+qoJ|Ni+$x%Wi*31x1TXEM5rGx^Qno!OBd?Or`` zeMoy?bHL=?kNvPk+Qeg7|1h4~glZn)8P=Zge-HPx=UdHXWq5e~^!a~4?U%H8!6(<8 zbLl_t7!N6deXl*7Mu0gkUNplqTyFwYU|{z>+YA{6ecaZUoTTy6&9&8(VI#rWq{SF3 zR&n~{lGkKsQPFHZ6xYC@=KuZw>!u=_%GG>N&_8fW-uL9c!NH?hzUcQYL{CIh0do&L zO^J1W$i(u))1*Rq#xbBwZ3M(6qB7UJ}=vntFsr^)>l8hglQbjF7KJT_nhN- ziLpg3o=*C8^1XKq3p7Yd4u9eB{f!8tMdgdFzy+4~YTB@-`{g?%uC1IAjI5%enO;UKqo)hDiU1fZ7snC7Kq545*Gsvr|`uYL}$(_8NTK75g>*TD_Ke^fWKlsaEmO&TR z^Yj$d-5Ysd_6N51*kEvcA;Y9|c}C9FqyzSv;jYk);$*8l$kKs_X< zXV>%Ft1A6BUjnif(D$PRIVkmm)`fr(PNsB z{Eq$le_DX#T3vrGVvA;h3A0y=dlFeJi*2rv6OOpta3d4DRrljDo=d11piyVj#q%nr9m{r*zgg4dRd4|vIMtgi1mEVQQpc^_UKlRW|3&F0ZZI)J`;!$9QjXB?A3J%pe>V=1G02eF%t4 za`Ou=&!HE8&@RgOm*kaKZhv1v%UttsArVeg>)ksOE}g4u<`z=*1xSPXhY#*G+rbOh zew+8(5P#H&)`yLCShUK*(r1>Tdes}VfHF$S}Y~vUV2@_?OQlibdX@l z;jD))%}OxVl9Tzj1KERS4>TJACf0Xl)1(4!_V2u0!X8q)>fxt)rGGuKxaRAnCG7A6 zYYm*XGtF(L-@E?hj)Su@x|s~ne%~LfpAU=VLXRd*Y3MO6cR^utLJq1RPdV%T|j@Rp9I zVk2tWKUd@FY6^{Kl^Sq7LXH-b{4X_sv*;-V3n=`Omg3x5q;}AWxbjLw6~9k3Ns~BJ z={btQVN(FT7iM4#!OhGvk@=vfN6u$rqgW7;9-j@38K*rn%UrfuqV}j%DJUxF-6Ne* zxglpZGg-7hwu)Sw6Nx+4`20d2!3>!n)ePEgb1!<-Cd3maU8P|`A(ChY5XUAFYhT3DDvFJSSykmnlcT*p+q0r)B>c|0`8LNbmf%I>n+MLS`=TA^-@CK&;LA5ZQvB((wW!fY z;Jo$q@KKK4EAE2}IgX)~?7k!hVxh+fJ?=So_NmPrAfJS8c^Pu^$NslcxCues^EE}# zkzE`2`eVu+;%=beWSCuOL~k{7iI<4^LcluYr;B!TW{GbugG>h{t8e@w6T9jzLlj!? z$f^;j#ZWEgEkXo@b}y0%sdLxbZ#9gX33K?v*vZNF$~3;n$)QK#`SE0_4q~4EHS3by zWMp!f`*C}Rmm(yA71AJeyHhrOazWI7CZ60m!0Wr1Y3sr^2ZKJAWOxthw-D3(5*slr zdbJFw!Z~#Ie~PtnUQKnPb6rOA0lpgVsC@tUfH9ug4@})V0k-*(e8`ZYv*7XT0lfaw zsMkr?GUn8`8X4RQOQbYV(&f8bk<6YXUB_Gb5gPouiQMK45zD1ut-j3C*RYdg#)ms> zIxa}gK$6)u!`?aFXWo6X;99VVJcO)sokI-xD!?>j1V7u_FC+sG?I2$Y=03xLv+sL_ zSg7I+1t)S*lSop3#GuK#NnyYf!LQPdQyD0=iJ!YNE4K=6DNV33jgcq^sGWZ_3)ivU zt3h*Brap4-wraIXb^h@29a-AjaK4FonZxBtpL=`gi#Sm`=d8iiY#xVxhAhxN-QHTQ zy_2Oc-=du%J>5_1>_IQ*-f=fa-98rl4TBJ@#d%uDqI1Og z%-5*La*^emCvH{hN9t7R^!)srkRpd=ARDzVv&_IGq&n(f*WD?q9=!>+Hu&-TGu9bx zH9SJj7vwr1prn^$xQg5ZyM*;Ulj(BCx5ZmkScg9Tp8xR1jH8^oM0pMi@->Jcee)N8 zsQCX!RqrHiw9(bZnMY%P-?HadS`D3O0yZ1@Myh#~^) zo-DW`UH{d_^${6-Q-l=RxGTuXo7p|DaXp_uKOT>|a>_hO66@MogDil-ULjUyTmi6h z&P0#t-87Mm;wcx9Dhedy7ov$yCkh993eLNUCa!LIdSQ`6%mknUcwZT;_ z?iJFJb5MzB3wCfo3j#eaJSbjxo}jwaUI8b=>Jr_?$>8w{|qaB z98jko9XY&_q+YP29&~6#Wd1(@13~=0@3MML&R-p0pAWMX#J{6|Ip$s5JwAHIi}9aI zOMqT;lQe7s1H9k$_{Y|pXXv@pFguQM0e79wG0g*e4M)2B1GTjKhEv+NObb#6|J^4-S~tLwk-2d~pG+!ix_=kgv^&vk8)7Q++{gEXjG z>W=(rM9qm1c%Jy#z^)P7glFlvDI8byaF68?LAeWgTOGy`M?aqb{o}( zgNVLkh#(L!#QK;WK6niD|+PPwVUi9H|3^%c3#nNoT$EFD?$w? zi7srhp9Exzu=f=H8ky`+V<<$uLC^LB&#$clDJ5SVniJJ*UD#&zi(SAYB-oD z@nnq?h$g>Qmz*z`%k6e+ns>Q1axh!K8a5VO+`G|BRoL;`@os}snav;C(*m0wg?Cp- zZmmmKIU6r$%t?@6M94b^jZ-5pt8P-3($2vU)g!l|R5>?SzKkBvtxCG@LO%Y`d&F2n zSitArFuskjmmGtvUEw9x0B?epaM%jrH12~fnQ@40<)G60oEL|m0Jvo8PX^6+?vjui zz@tWGR%j*?9q5Bv)Pwk)BN-p#!4R5!3_1B_S+-J8>49kphOTZsYn-0N85$Hjse962 z!^B6%oCCN`8*U!Q7-;$<{u&pCeo(g17m~UV!C^h>`(a~*YnyPa7%CaQ)|8S^wj*+= zw@E?0l%`Zgxil+hjwzryei`9Whu}(9KmPrZ^pDXOT7`ldjHB-NJH9QMM5%6ilF7QRqBm&gFK+iH6$JOM;OrDlp&o1i zT-W zrw1SRV)8?bqZ+Q2$cS(I9su@g+Z2JqXHih|KA$BS?HYx@mzo@78gd7n6@xr5-j@-( zdg1kr8f26UV63~&Dw@B1!$wH+Sygb!j<$3LrU4xb6&n4t}JI0aO}EwL7ArQ8C(1Wbt7gM4g^eKO|DYZI~x*o=AS$p0^a(zz?Pv(-rhQV?fcje!VtR7+984JaH?imZt9MBC%g&Z5Q zXf7vbNN8y*=0wg2;1h-wy=n27-#p$6kI(#%PqYMYT8TKASC5rEp}>(Db*Xg5(ivxQ zmj`8St9*YS;9?m&X#VaxpyPKjzjI4$Pk9J#(uJZwiCTue|HQeOdFQ)H2xbHtmCM{~ z%FmuK? z&d7xMj5}~k$U+(GnENa^cR)vm3|T0}^Ld;c^5wPG^7)zJ7Vqptjy|=_&uP~@%NQ8;LNQkb3&=I<6yc4 zju32rHd=7R8jXibjjQj)e$lEYH>&|tNBXmStGZ#X^yQHW=Jg%+r{PvjPS zg$bz@w_kpCS^P99CFV7P<<*!Z3b&>iosz3g!4^Yhjya~wDa}o2 zGp66;*KJ-6COj}c8}ki}8ieI4pqj;9TUl;E&WpRQB|ZC;cfO~LGPyu<{^&!`Dlk*y z)D&I)09!ZBKF6)VJNWTqMg9EwpFYoB{5_Hx1IUHDV;l9EMxW#E4Iat;VA>d?ExfDp zLJb}phuChR6gL|ID=pgx(zFwu2IH&aK&ykgS*C}?J&E*JmLE>v@0gWjahR2K`SQ1+ z0YH|^u;xA)Y_J)RaaRnPCTm^B-7sf{5pUo15DSisCgB&6g;G3Un=~^gw^u_#x3)5* z@}PdT-j(e zN)PuqNa(5&g0qQ?7BynE+Qg;CX}^#vXH+YO+?`c7+x4c|M_);W8jPk8mHCCEH=yQ6 zYXeNH&OEMqKlF|`Pa770=AP#@LeHAodG4R1 zM@+4Db#z9@rOZ#EH%l&*b(X0`KmB;gU z_c>||6EzOg51g-?0%`^_Hr$FDVHs4H_^X0W{E5cjC+#>@mkIIw>aINhj)bVj(!tl4w_!X!<`xTE4pq_A*r_dcw`6B%Ql9P~HPR7zEhSHWijqT$jf(+nzyx9HYg*ZG$Wnw_XrBRwajYs@QG^#YOw53|DC%xu+O)jw2G5tvWR^(%`2>Ed#`=q*%y+M^aYk z-bUXZsV3mxFKhXn)i8n@tPG~2uYXEQNa^|Vy016MI@oTX5t3U5RUBjJ>}-4I?RquQ z3Q8kX3g&y5hZ4#=Jf_fx4r%~W&b8Ef7-(knq?aCPxg~9m8~$5k)62035ldg-yyZvZ zEDtlz3Sz&w@4MvEs2vq-qfOY$tos_*IMf<>_WoB<23<#oe>52jCVpqhRas~L@MVdyqx^WW*9hu9)hLUW76aQd5PuJD^q@CIKj%^uw{c=atff@coSLRmu?NdQRASbB*61*vQRlU}_>(@ffjcswjSzrDWVq%wU-k*j9>) zCIqdbiuL%6lk!Ab(r~)pNIJpn6F-kYTvP6{#Vq-OjgXUbW3_^13&=Wk!kW9u9*-nN zFb17zF!1juI)raTSD<{;`#Bg*m-3Ydb{V;RIftQ?m`0I1dYJ}{vFuE7#MXD_!B6uO zxC+Zv;4m+Lw!dQYh2_bpO zEFunBrV$S*7z$6 z`{g=SBlB&jQ@PnNb9+u!05DIj#SS7?yLY=RKK0-SO1Lq9LSP?T|H)xpv57#_l5Byi z>mRJV@PUtKte$CS_j{GoJX|kxA~%^2t~WM*mhoq-FPNV(GJlE_B@7(4Kk{&fJ2Y7n zuB-Ze1`%lWdb_zf46alA`tN_uBm9w+26Xwwk#qakZ*EcnTG=S|h#sZB|NZsqrgN}S zS2Q*2Iu_er@Meec$R8sg^a;rKGrBi|GK4uyQ??$iD}akOj#%TU&D2DG#lukn#Oh2r zi_17m$+(-CQAnl)w$+9n|Ae4bF6O!tmRd7Yv+O%^x-JXu`oxQ)*UYtt2iRi8ycYjT zafCd=sYjwQVCfn7UAShkWRFLZA{c{SfB(0u!N7Af>^|05xps37Djh;908}lLSc2@b z^pRQ9MFC~1oI850uRPHqV6v>MI9iq`cYS9b{7PK|`3Y>CqYeT2a&!J})&%aaFgIg= zAg>15eY3Y2t41xO8bh0Jzx^s>U|AO0?=l}F&DC*pJd`#gtMA1sZ>n@9r-nYa%fBE67;=El39T>Q%X<9d1 zz_f#6!uNl|vLA&miWi_~JB3AJjv1$lfY%7+MaW^sJ zBvZn`5(gPf2wF9x_lop$)N|SL*_tUgEO_gY*(ZLlHEI14_S${6m?S^o>yujNYQUJr zVAdBQ9x$`!m@Qy>=WbGjItNVKST|RLVQQeu_nQ%p=OBL%X$jtFpJ&0icFY9Oe)hEn zGm4a&$m}JE28`)6T*Z-Ue^}pf3{Z6q?ki5lInf!qUjB4{HEA&Jvv2A38t!eRodiuxH$m(x}na{UG?_c#uR1p{#m!+=zJi{2>aUXReTMSnU7w= z4Aod_brwtek-nDk&@Sft9#ftb%sR|$)M8)0d_gbdCpb{%%az-X)}Q@?38RnH|| z!06sRdj=Q0jZ{j|4%3EgHvYlQ0evf_afha@jH|ubu*xchuHLdKNiP><-K0%IDFJko zNOGfx?%2@i>y5y4j+W~L`Qergpxd@?t-=D&dN6`!Y#3?~S>g7V_AH=Ix`-XD!Ep!H zZp5~6F5jEWjy<~>OBS3Sn0qenaRR0rcbE+fq}g|Og_DW915!yy>e zIOqm#RSgYHlDk$pKfk^mG@?)KLV@Rp&yDmEs8RG5ZBg0P@+vD}fx)P`MW#aXbWHl30(o1F*KVM$gkL&Z( zQ#+2NWC(dI#~;6qkBwdI)bFj$%8b@7{kx;5ig8`lE4b0`+a?4pW*RhS?%G4CS~kLQ z)ur|!H!@N%2ViEzODSuuiypCKXQStZ@a_v_ykNEf>WGAmKI*(q4ne(v>1E{9jRveS z;wCrR40ywT8}I*811@2bd4dCGS(eM?h?hBLZhto36d+3Zqg6M}`yZ1rOe%$|L%SVvaAdYY-@mhQ7!vqq;l#Ajh=`5O-nS*%? zvUYDDA1ym#-*=;~k@HC}7n!a5^(tx{O#Be_kqF%P?wAJ~?vZzay11Zy3)b0zol(XmqO_kF%In_yShx^aovUN^bk-f^Ib*)%ARh9*aDuy-{8t_Qk5pjqv z2*5k)`8K1xO;;~(q@=WfEUJKK8 zu(9-rmp?lnmgmFLY)<;(t_Ft97dF>e)`850zv7riAA7bs4-J6foPf)8eTWUK?J|PM zC+++0lEg^dGNPAplX!y%nKnbaqW|k)E5U;w9m*SEFnjkJRvu~K!OsEHcKzS~jlB3^ z&VX!|ADYIc8`(a_-(yw)vWXd7$rT?4oMj-c;mjX*|9HQ9y`R7QjC`KU!YaNn-~a3m zEbN1yb^DHe_V&xqK9Ns8Yk1j5J}Wo*X3EnLw66Oyqnwe6XKEbgdaej&BwS4e5S0!m zDUs~N5rxSTF8z!n7H1r`q^Ibx=Z~~8_70vW(?2k>R*gV#=EgLPKzf|@mrD7FzEeJ` zt&rnaZLTW=lF-BXTPI_)HB?dl;ijk!xT7^B+I!Kx<>%y}=`CGgPMmd^y`=D4j`4uC9ZPrR~>W z?t1wfZKTV)D{W8pbEr%u$Nk}54GfzvY_84wG_BmTYO(KiOr@D5t8)k;{`AvN-E|^5Dcb*_d$^YGDJ{+Ot$ZP#QUbT{S29)odKHE zI6wT7zt7(r;Ry&{@5?{_asB=G*kwSiS!0Z~KaG_iXYTpn`Nw4`+xC2UzJ0Fk9%rxV`&XGsf6i59;^)R_%YXujfuy{aft1YcGNh2unM)NVP~#h_trKe9N&Xyh-c!q zylF9czu7H~dJE@?EhDa!!Sl$&(TJnE&G+XYf0WT{zSlhWle)p`A=Z2xy<-%?^+s=O z#8^{W)CljRMa>klmYHj3f5$#@YVR~!aFn{&HCG9|vpcu*ffr6=iLL4O{AFEUcXw2u z?L)j-6N2C7c>aB$^(y+n`pfoLShc1B5X~=*2;Yl)1AI@=YniGlIPd!R+P)xr4CR&C zuh)!ucPy>f8=ix_X4TuA53a@1M_W)Upj%JaUbKXz>OOM!MR(_#SxM)Wy_=7J&tvYo z4xfy-{PpWsx&OC7<%+eIp0Z(X5;taXD`j}+8|Dm}5<_`rcVzTh?u6Cxvuj3c_04}V;6 z5SK@3%d((TIO>v-$8B8Ze*08f4i!O~gkK~L8}L{Dz7HmKuc3{zSwxFtV@Stz&cLjr zFxeajr-9mr&JG6MCL;(|mv!;OZa2@DoVRsDmv_Y`>W53mAXI!_G}QZXQYnRQw2DMK z`n#h;c9_;$xwT_dG%n%VzA+vVj7gt!jxjzzJx?ytgGcI$@G4TAMJp(pLvzYmeBxym z$Vk8!ru&47j&K{beRh3+pJ!aV7Ey)-fRWJUU3P2;<7vRO`RgB)xg|&C$w}9NNkMGX zb^ETd*7gw|n^BJ*SEfp!Gq>t5K{y&|+SM$LZaRk?48W7i>swQ0v@SDK zL#D0N;cjx0Lsi@@GTgQV2{)W`=;|`$xn0fM;Rg>VV4fJr&8a#iz%&;POv4!a1JE)- zj=^BJj@^|JxwY-!)3Yd8+JKaSq5RQxk)PWW*Em#JgiOk=nC9Bo@pb0N1-1 ziPbGv~Ex;0#1Fbzhu0RoWRZa35|7z!WtCrbIFQ(u}cWqa4QP9{96pSo(# zDSyTcRHH1y%2xKWt*eauF}9`VLsk`PM{$2*R!kYUqWh7R*UsM>=iCO-b&Q{^kf5S+ zhaihdWlU);#9VT}*D;Tg*}Ql0Cs|*S#|9Fe#gR2+q_WGYGrwNr_s@KwU7nKpvYYc{ zx`IbO>t2`PEM1!U#07k?dYY`o3~emLlVeWdG{b>&nJjO?Wi+YBKkwh+fUbEy z*WH}4^@>kr>>wG3_?qP*P&ypigfX%wp2V#k#;hT|f8ze@Qnn}G==#kwYL=x^uoh-5 zdEzweDsyo3GFsP=&}^=37IVN7Cdu~iiY4eDn+GDnWn+$WJ_8HYfR}6Rju)HSa$YEF;8M>hmY1%%%yvS(PG$fm$Jo{XKv!?H*Y-YWrSn00j5$Y7iVZ; z90}Nx%xPGW%9CSpYZGj}IeDYK2Wf0Gi~Tf)5M0XKxS_iW99EHVWHK_F!1QJ~;}Yr&iRwvl-dc0wDyfwBKWC%enWFL~LUcKMraqeY zPGX_so*TA_(x1RM-2e5P(Nu`m#Z87W+J*wpKSu@D6~i4rI384H5$XVc{->)%GU_jv zU+=S9Ju@)*JnhHgymDcdg3?%)>W*974;W461Gx=Dca)}#h&k~F-{aSWAHIJ7W9l7+ z+N()L(G}eNtl=8vx(sK@ zXl7*2>_Zk{^=3ZR@NkMXB%B}PFa1{OzHB3D`nd$6%=e5Ap9~?O+z3J-W@SIf}dfK*=_Ef48m_ep)xARP= zYl_SIpQxCmAJv$7fOU5J?nLL{a^z}OYQEo9AK@`)X5BqErlrJjDBtz`;K=9s3D=Y4|JqUdooYar)UVBVjY8f8|2^Zg920(-5l?g(p| z*^l8o#kzNQ_5Ul5iL03Dm;CkX*Q0gdNiK5vjW^nEH++n8SexJ04I;stkFxQB#*hp2 zcW*a5jL-4RQwp~v+*{C`hWx!uIRoNVJZ|*?af@J?V%CAjDm@>n{j@?>FX%XQIcMYD zYsmg~w&Ia&>2S^YjbFyVA+0-81Aj8HaClMmJgoXdrsn3-Vwm8G3=j7gisoH2Vrk<*}Ih!Y|_qmBI< zqp~;AGUb<-mzJ+4H*$v0eXX&-zoKp!+=z`EH>zTgnw4~m3JiMKcOhsE$t{To?W&qm z!pwA}V=B#WDJ{K3DuxVfRPRV1VLy&`m`GV6U*q%3K{l^z&>9B3y=Nv=bDcLgS?5{s@?zn2 zRd01}$*2sXoRMuGNH5T;q77ro9%;#6CVNCO0gkYt#_aZSkaI2_-ksA4RBaET!p7y$ zq4gSt4c-(c!sR1%gNhNuWUF)zXi3yLpmb;O*$r-na~4k8K4aS(GDC%EPC|| zmQvo=e#0*HuuiS(8-eJhlv+1{->g=%X%A99oPSDx^a963Z~FxjPEZGeeP@3c^;JyX zU$vTie}7+eI^=Lk2A$HjZZU+*N0#xW5C89%Rn&P=V0UXHM;(|ibuq2Ar9-z zf0})l+a@m8ZbsCgA&F}>BQLSXS-J&tJ7(!0Ecrn>VLw1~;<>SEfPZJyCY!CyrQ7rf zo~K;n35D#sK^yw^8=*yAa`!~PF{eh%*$y}Y<=?FDSbhSIJyVTo3W}Fr^8DjJ3`@#< zz8P=Lv|cs?1m>X2<(r!6GQNzX}9^}6fYi9)9J-AN{Z>GyBM6WvWFF|*jMqAaOH`QM*-^JD*d>mzFurm#9W4%-i? zb+C^UbM3C8>14i0#bAjsOas7kKBvs@9Z*hC}Y9*1cf*_?XBcmG5O zd+fOWf@97aRJVRA4FK}=$UnvQ%*=BNM{au%#&OWMhUaz(V5Dhp|N714DVgUn`@8Y7 z9jqbpg2;=*XN@bi%SyJ^IF3o&(~)CCj*~K86a6ed#1*~mF`(F1n#LY%+@|?^Jf`cd z+Y607H}u_SoG3EE$nY6IV5E@!u?MWAaa%|3bNFp*zRmT=Rb)24pE#@=&Q;E{fTyw= zCtjQE>uu)R4J|ru!Y$c#t!`q2nY_friPFU?bGn7=cFfX0_UnhA{D7Z*facV!{D)f& zl=FA3j5c;>t0910D%vu5{Th*EHIM#XH)x}^z;0K`W_U~VZQsuW_UB(x4 zU=%Nl>KD*TJ#ihvIL{mCtUf<|ejP_0C~E5O|8{c#u-(>oU#H|HW1Q7AtT2khCRq*0 z@#D-j`apMG!`bAjbn@jA*451fFx9}-gkXCzZk|=q+b=)6Ngc{>o{UMfWy9x|YJDVY zJyTd2@Ytx2<~4Ww?N`(y;)7+>UAT%SHeYVP{56&i8{G7jh`SSGi)GCfV z?|AvgKem=k9%I?}m)Dn^m-h6wK0Ph{`AI)|Nog6+N}9K3?vH^E)5B_Tpp??#*BN6B zp`F7F0*Usnetw2pW2`y#^K1_Ry}yUOq-Ckw7XI`5zHV|3E#xIZYIn~0xo=Vh;zL+v z7iI*`mWFjGxp#;v5%-@ z()51BHW|0;BmWQnVbNAHn3~#Z4y#CM&q{2nV1nZ&K6pG zuR&TBXH$g{zU@VN97iLzWM9StKA=yjl(b;4;pnRR9$tHYbMltgINIg>)y##_$f|+5 zE;xVN3*KxEFr(FVmC>GNR?0O7_+B&eIn-E4jJpKJ2_}S5Jq#v<;)TqW; zqpwT;uHK`ov0N9<%F1Vfw7;2gQvJ{=RrO1Zahf|gug9n0D)6fDwHo=;s1OcQ>VRt1 z+h*!K;>!n;YSs}s&k#nPgnELr()7-l<1ngC>){9)qwcnj*}87nJ7XQ3MtgVZRdvbz zEURhdQ&pHs>L=D}nGx7Nc8zw|weIg}Kim6mzg}?$b=_^8_XaYvw(D*51 zz%WKa-!`fk0P@n_#ESJmcO;if4S%D-L57z^G0*7y5 z(F~)%uQ!zKi@&nmGJkq~YyR;_Y=>UR5Anbx=WTy)Ye4g{M#d}07(&>$y{v2F(Gl|% zruK5VY+d-$b_E6~G=y|J{$O4^;xE?)77fGS+KS1#?>>^R`SL1^uVp2*+raUhu|1#C zw?NEKJ{fy9qd+^g8%Oqi-;+>V&F5RQjOJcAa);=!zU_N}$Gxr88tz=l5^_!+EZ(j$ z2q#@iPHA5^laP=#t2dUY)=k?!d;jmi;vdI^6;zK#>sBsSl0wktBQ0szau;npj}FEO1Jm#Qya=XjHd9JX=8ki^0;G!bWeSGINtr5M|Y$8NJa~` zXB&06{R%0Ckjf+$lI9WD@RlNCdQh(SX<43^r|ougbsb?MUq@L3%3R#ITM=$_Y)Z-G zJRF2*jI+w<_&2!D%Q$S;F2}bLmp1-^_>UpHy}j)z50!%Eym3-T&`5~ie9?-CS#@yK zu5BGKH1OP5+mGANdlAsM_PLMTw$u%oo2`{314LRoV(P`DS&|_qI;+-t>QQ0$R>w^( zo^uFclSkHF$7QZpjrqP_n07|Gch1jESrLJ`@ORlQG^+1wvHWApycv}bOntE#(ePlQ7J!MOmr;LEX`Qrph#i!x1&k^=Fw z0EwTw&sP7JkB`wOW|*!ccM@vzZb!*t)yS>aD?Y}-t#Frt9r_d8HL!CqAF1gs@F5lE zQK0|*k-dZPV)A+(D|E+MXtoVuUDrLW<>3CC4DuLC+d=Gn(k9-v9Z4xS)ce^v%EqP6 zlULy2>yBgERLZXyj}rn4j_oYbVx*_3rly$2BPdyihR5dH>NAcqslu>`9cMp0qhc0> z?P4}wKjNCUPD`YyYik?k#i^C#FsD zn&G`D&uO}s#tsUPUSa`5k6!YV-e3xbJi2_pZ~<5EXK&qm*H=6xk0bQ0^7oBBo}qtE zIA9xVoCAvRKDlP-E3C$m_&ldoz$}G`6t{I0DmvV#iPtAHKkjX~3pbh~Q9-3ED02FQ zxwnxzaUBlR9v*R#S5C|)x`mJ|$Jz3T6Zwh5dLy>c#o6C)Na8vtc;Q0LRSVh^x z7pkojy8Z4goDR@ z0q2`y+^yoN>U5%oQ&|dj%}4SL)arJ7tJX-gs*8T}LYXEtExuab9T)5qH7+Mw$4AB` zOs%1D39}|18J94J>PKAjB=v>I`pcIuJ69w;cNHD$m@vUg=ImImkZ_%lto0ncu}wrI z6S>>Fi97G!&zRR#_aZ%~{k;tN*mZ*RExsT9wiO}mu7CSP z#_8_$*X5>o%H}N{aE(laJ6~!TBXUd+Ibh0az&Q{S-q`1K&CpjExkemE;!RBhFaqzZ zNO9AXtl&u!CPE;$jjzvVe&5?pKk&zINDzjJ3MyRz9i81u&yu-M-W|1f9ad=%SQ(Uy zymx*62%X*4DkI(IFy5HuwjH^!&y&wPizefm)4qd1>aGpkTTDd_xf*Dmt zaQ*4aPa)k-+J?J-KNecd-Qq}LLW1JaQFA3{nov`a=E{0TG1e}l1A1u_wYO*PdtdNg zb<@`<<>`L=?Qfx$QSm z(gm(!^f=$dKIrlXeBKMqlb*L$tLB7*Ck>nFIuzrMtaezPaK51yPGu<&|9v;#K(1~a zQ&C}P4zy}4lxe8#98S_s?u`qcF-FMlP$?+Aw(xvh#&J@qHCSiDtcgd)1$Q^gp`uKZ z?{dxa)E6A<@ynMlI~M5aTYI>m=-7HntV~#fXe4Gjkt&V|SH}gejZfOv&9P1JSOl3r zr0*z+TZtWK!oF1k5kAUo^!y+%Qp5gBD}M>Cf>Vae8o7fpN&IB4FKLt9%E9xZo2j; zmJ}VNhzMWf%qgeLdY~Ve7hGl5hwJCn?#Ss7I;BTXP8ZGG+eqPvJEcVT{+?bXdN`zM zNu_h5Tj*2 zdcgG+-Tuf-#=kf5TEyLA%kl4|cySyBJjjk`nov_Hb;pZfwTWqNy`*cewa3j6oQ1nxTF`@#0tyaRw&A-_xo;ez4rEXZkr{ z*C7@^)Cssbqbi2h-C_Gf-de31R|$cGZ@M_*_>*MZQPmSxC)5czhP&Il`zlI%E^15M znMbVprsdEY3GBl*uY@v9XW8f~P&OfAeygM#jX`^u|eqa2T#)al;9haAv zm+yW}8tY0-^;*hOzW}t@1q11TgRdMFddC`rXC4d1JCEW%VZ?3yBHKJ?ypM7oc1pE= zsjR1e4!N?zWMt z!S)E)7fa6B5*u)jK#dkM?#P1MSXb2wdW~C+YTs?faqtYfvE8JovHk@A^-LE`-T#O$ zcexgwf(R=Hm5y!OhH1jRtoC^>jkm6+s^{0Y<@T9s29^K;uwu`{411iWPnu=Ra92i4mO zuApKEbriG;>U<`C9nT@8)oJ1r$Wy}o)ZS0|3APt+p#P-vm7PPp2+DcV+gwe*v9Zm>OEuPC@SQ{t8!x3OSn*J@Ig#C;`bS5?_m zJ5>@0y;iHzUMpIft{>9Ic>M>nBXITg>oi>ZkN8zn4GBk$(+O;U(YYUvZ-!c`*x%5b z+$B`tC~J*e*n6rzt6UnTB~znD_o7Btt&Ubp#VU5ZHQkHp_mrPHDpKG&%Hv$=9~94h zrk#tQusv)82@=q|O^Om%{9$le1Y^mpGHkva@v7N7Dx$_wpmI$yy+x`b#M_4S@1QS03=r zmlt?D=hqJ3T95(t?%>zvVC{Kp<#-*sVyA6O?g4eE?dCpwI~|u@2jogr_flGgcnt_*nzyFu?sP&*S91vBNf$A&1`HTjY;^lpaSJVvo_x4`%|p zgR6uMOnXptb&a*I@1Gq(_!+8GP^BZCs(=3tY0=Py-BGr}iG09WA=EWksc-}(=}505 z*J`AhRbL@_jBVSl*RZlJ*K6EPkpx1n@N!i`n?qWfs!B*3@6Y%D`u{8+@3>l3b_A_H z;_ubkXGTBttM>UM;ix&z82>JEKc;Cy6-TEd3YhHBn;cgeu29F>cXg@ny+PFHl2VvU zqx{!#R=D# zSD3z%AaEKp2UJFr;`>kb*-%rb5@s-eBac%!muUA<+P^USs18|tHVf-gcmCP+3F8>% zb>O|*col#B?{ZC2$|==f&bes-lqb6KfX|*g4D|rgyO+G`5B7_Fi-qHL=!(5{+&r>F z#=R*|WqfXeq_3io>sJWk3zbuQrLobyt7q(pfisp%dP~o9V;12$#Nvnk%IM%;W6X^? zvo;KZ5=I7e62vom`l21)@w#`x@7uPPqC9<7wm|3wuJQ+z=W$Be=9TmnM&1#;y^%pQ zPIn&1o-#xyZ0e10CMarFr9DWx8fJx3hESSE?B0#4iQDXEa^%A9+{c9z`T7}a5|Bc6 zi66dCLei1k+(Xyu10C;o5)1uNv2j8a3>B++WVJIAF%2T0=3}u{Sx)3Y?irBZsfC_hfw*xis@UhgveM zU5;J$9CQ30u{s=QO#4w(t63vqt8$F})bahU$_bBirGHR7x6*I8xrBXtyM^yjYA99N zR8|aC-S%4O5DJ_tR94T4TC9zASIK*|)#}ez?OsIsipm^Nx<1s^$m-Y4nO;-p&N+}U zgZHTBk~(jYDlE)CQfD(&m+&56NJS>HK3ZR;{a&_p{qEN!rJPj#r8Iv1`qiOH9F2Ivl+QO0qwbmQf9{@tsFBxoBKQF0HAZZnQzRcOfQ#ho{hz9482zi81Ft^UM-6Nvjxzi*f?Fh zub%qty>HDMcwe-DB~-U{{JDj&IYj*Tgj=cfyl zJaUbdD_xgmgzN>QX)U3`p0{8yGieXXL0g)qdjf{C{>36m&hhn}ZnQB@_?EM=u4!3J zTe833E3Ybj+q0@x|IJ&SxO1yl_TRa_ClZVm(5|J<_j>OfsM3@Xftf8hV=+(yeaB5F z*4H2WiI)@83DUf$o0)kc5!4RUPqIGQSh^a+?}LI;;x^R0%kSgVw5-eT+O_DA5G zM_(9s^$};0wlCpzX4dJ43^d-m>EDdwpXa4?<6?bi@3-U=$|9&$tK~fS@v3d!4t$Qa z0UmR=_UEVPUSm*SxAs8pQ1<&#tvu_l5NhqmACj>$XRmuCxq|J{Rfo{_;^U{^ddA4l zFP5!wKtW^jJ{HKeI_#5{aU}_;X~jceNCU8)t;K#reFJW+qOY@y(2Fbx_v7SNimMfPhGL{iv1$4 z%UC+%DI2@5uZb5?zN(G|hkFmbS`}le+}V+(bNrcLTj}1zHa|jID>7TTn@e|j!JH`{ z;uGEx8N23&?){$cI^yH!s(Esv4N&tryxR|$e0;FTnKi;n!u44Zz$$gbk?zrmpOfNB zpU~)S;c`tCNmb@By~ODd1ZDfk`=5XLD`|e5j!Wo&s3u_jyz6^SqY&08mDu3!0!E6j z8O;#IbDtz6G;M?C&h6i-dpt>Rc!T6GrR2djxEzD1&8lXq)q0W&5~`I@2Su|tR1=*f za)jv|D(^+*RGfJE+niA;C}(?Il!Ng|0*TV~sg>>Ns^~b4fTNx5VAc(Y7CPO-_Ij?=Lxz zZ*OnC*ZcCv@5oDqZr|w3K6aFF&p18_KlL=`kd=3j8g9roy(8D&=vZLlk(*RZ;r8i# zh(ll1^?Gd@1JC@GQhKje>H9lMcXssFZH%2@Taj;DLH~el-fo|FN$XXR*`shbcliv^ z{vwz&$ABW2|M9MPM`Y}5Zq!HQ^_t2zn!em4OB&7-q`FZXptw5xJ8M@$?|&FO~YgFd+Kb?g)E;NIrBQx9cd9*gLg8vW+O8l@5&-0bom;duRUhM;#oj^=qng0aOR zcTWE{yvLLDhL#kut)Y?!_pA}>n`$$$`;D0fP2D3|4Wm#i+56oOmIr&?tBK~{e+v^i z9BVH2amTeo))3}YJfU6@y!@9xe#godrl3%Da=!Rc4hEi8P7+8$U0>FjHet>KRx_&7 zxDVnw3iSinW~F*UEhtq>JTJMb65Tr~okAs;%YuOQtM+K8lTlR;6mCjqf=Mi>j>B9d zRhPD$!rT(f39+{Qh->bahLJ`H-#>l%OaAo$20{70*I%EWo+^%#r)gW3=gaeaz2O7a zV^go+V>xC8bzM1^=U@KU^`HN&Pl0PP&Tx2pmAbh=TG0Nl;B(WF(~ib%brx7V@wb-U zjda`U_Bb5RQ0gymbq0smJw zeE;R`QnvJYoKeD&rPYd%o{gGaf1c;{-pnZn$JMV&9A)fJs)Y8ew#@{%4$fp8aoIo6 z9-2kiS2#~_mSROxm6^tf=7Y5=9HYDM|M>hgbK!p0rD4Dxwo&VA-Ff}QnYmlU9?`WGa36R3qn!s}l~H@bGY|HOI!n0U zZqWHuoK^Z2XWxqP@7SN=O2n~Pb5_+%of&ApJ#xP4&j8!J;yQ9?0~lYszPfj+RQPYh z-Hq07xJTpKKdExq&*8ZDebT>&`V;5B^~r5sag3~;*0w5g_`cVirs-pz?LAb}u&>6i zU%$4`-nL;F*LmqV>22H0Gju#yD`dNk16w~nGAeHXx6M#-kdH*~;YOw&&%f)1i0R)B zlng<@2^_?Y-S53oQ|HP*US5p}BmY|B&QY_H!G5GYmNjyB+w44q`348=J@h`fwP{-4%1;vi8QfO!k;M?~*SjsDa2Gb7OI33+!%a>GOC>Gkd4LFb;WM~E4>>YY~i z??j(kjsnOz!f={DN@%0CTv{ z%BWS&JlfH#p2z4=6Ro!!Ruar(!88mcC!M$xebX%iCnc;5riQ}g6EfGQ;F_)vokC{B z)D+kg`(@}7Nb1?{5Z-QwB4q#~#a3dkda^S{1-Vcqg?bq46KhZ3|NV|Y*R(N8Ij`%+ z`ao1eb>IC^8G?EYG*;TH7XI5#YeaJu&z!kaQjrG9s(MpQr8GcqU}!_=ub;a&;{zEx z`xVGddYY!^>1ny$Ea}CPbM~K#Ksfq+uQ}IvnWKj6^TZT=$1avq8ba##gt$f4sxjq) z<5!N_XTH1<^Q8Rs6-#%*^oQQM#Ds-D%EY~e-mA`URdbvntEaqmB_EGOxX4Lx%sqMu z`#c2fw{P$RB(}LRlzzNIt`0v-F||aizlqOn{Ue;$Nt1v-1B4tWv9lpnue27#)MEQX zA8~8{Tf}NBHHceHe)fhA%A^yJDg_{G!&!tg{1NreiT8X+uM#b)W}0K=Bh`)L(Y4dI zwe3V*WA~!Qg4z?dS*d-f{of+GR3(I9+mt)?BbAxPOC_t^Rng$*Zu8tHSA@RWC+d`t zTYaQAXat=KLd^EC&ZtqKQ46&VbYG#rxMKR%jG|eG{i)i}R+-py)gGaI-<=XhuYyp` zqI3whvZ^0^>vO@is}u|AoiDg&HG8Rshy1tdE7xXtt(bB(UXN%SX#Wb=2>#m>&wH1T zA;u9|{8%d@&UhzT6Y30x>lD|~n|}xyX7z;UL(UTr_w`M@N7XBp#ewxfom;|m7i=>s z6Tbg7yPOJjRsjtFQoq1SBfCc2XQNSb2|0e{sJ#h3QZY|R;+_z?q0cli{h_xmv5cXQ zGLpV&8iu#Pd({!%g5xBXG2{+U7*lKi`tjZfUGHff-utjF%|F=tQe(dvRm{%x;2VwO z6>@cs6BSG?QSWVB-o7-?X=DV2^Ezr6Hcyj>94F4h+yDGeNYyK?1v0hN{?JF$T<*0uPXHpx^XL)You3c<%Tm2 z+nJ%S>PFI&oyuvODpjbiar%Lr!m*%!i`y*JKFc4!qiV?ht#WH7BD{@niQTCq!nLc+ z>xvqQFj+-;|0^Oq54m*pA@tQwFhg)wQ2IeQnyNRp_9SY0PvA1zX5mWARNTN1Wk1k7u2=`p4;?TJPcE7{x8`eOT0uicNyt1h2 z5K3e5-ORuJ{g04qS1A_Q5BOQz=QZS>QGbH77yF0QFKwl4YuHz)C&AZPEu{_+#tZj% zrENeiT&)qxVF*3%`~UXiSdVwIVZHI=_Ux}k?Y)9Bx?ymir!S@|eCU)yyHy;q%IGW=Wj_s&(lewOmq&EwQR z{7n?+E^-nmyP)|8gC{YKulWZr*PFH3d2)NNXz3hppEV5VF^nG1O{>b|d<8#;J1 zqw_jD%KN^;(eCFVzMq}=@jZ|=;jRPgMfr$(H+S!{471Mp<)aJry15aI9F*Oif>W|e zFlZZ$?=d&Sp>5bR(v4drTDXU^a9`W9hBFP@iK!0G#oRllE2nLAN^TC;;5zT_MYxjp z=@WgM-RgsTtkntO(LIf%#BR;#LQRz_cBg)zGIPa)s${w zf0v^vdV~DMtyj}9smzeD&N%=0ZWJ2sVr}*{7Vj(c7k8O3qPKBI4a4NZDlol4v;q55 z?YZF|p?u%bCtj@r9AC_2ARqeH4^~NzaH#g4DCdDzao7)d9XEeU3G-(-y8!wp%o$L9 zrA&Ki4^mkZt^JVgvu*A?K<%-F47EmFK9BIcx7TVMU7mnAdr)O-ZSecM%h-v|A(TO3 z>xe3z%IXQvhs`It6xu=XI=0rHevbP=`s;6T*3c-MPojF>`7B z^5qNCZ{s+=0+)#dsvVe&56j4Ff_}j0+xkS$JdCNV=bUf1+cZtaRh_nGFDwnSZ~No8hI9qvIKI5>QUu58!bnXomu;DC3YphFt0oTGG9RhNxH?Kn15l^#6av2f8I&IA zW1a>T{p(wokut#Oha9pHKle3=MA)Hn2eS^ z>1)5Cq7sI31H2SCV-J(23v*Gz8I^P1HWoji_N=bWA!pJjpmc{wWpo#5fjO4Va_koc z`0`z0a(P|nTS~6NSbuKAu)e=Hjvs1l@~jT(5OQi_cB?bJ^2hcC^OC3jG&M^mz2?Dr zS3mm|1ki1sw49t|emG7L0{4r1H;p@0&RvsMS25)6U>**^^j?jFSu~mWr3?vis2}J9 zH1^+v;PGE6#UA>>+-Q0^%nJ(UaNW--ivZ4DO-F=z6r^IZ1QGzloL<5o?rHn(Wl@~5 zaHPcG&NajQ#0Q&TkTA`#%dFSy0R4%{JUA|tq7$bm0+}X zAj@LfcVz3n(C=J%37_!X=rgKZ&l@MFXj)|8(399RVIdbNy;Q|Dkt-!$4H+`zu3~3& z{cjzI7cqbII^^V>4gv24{;qg6Nt}CbOl1y)G`8c<1pTbMz?C!o34M-z5@tjw4{4lx z&d*rq0K}fwnkB`x(^K^-b)k9f3wLT-HF3fQteQu7aeS@3_NCJ>DRy8)9ASwRDa@Qu zO+hm-q@rndDF<;JL8Z#DzvI2QJ{PX-M4En!v=CGkL$VgfNGVucu7Yr6Kk4(3`&YE9 za-(+?J67q#f}{C-Q;$Wnlv&;=L&M#*XZ^#wpqcZg^Z-#EQ0%^{MWi=V$qXtb<4ufI z$ReL4HrQ%Xdz?$95c{c84Uy6#+%Ha4NvP7n{;Bt#wO;OoT~_+HkSV9M3gq=sdk~%z zRBnLM8LDg?noDZVxA7ACG}`;ZR2JH!zj<3E+gZY#0o7)89jAvBZKgSiXF}z{e>YX; zk&K0tObm6N`4%dy{4Uuvlj5}+YjvKaHq;9IBd&R(e53b|U%!6E9}jxJb7aSfISYAi zybjU5p(pFpUw#T{+QY6UmEv>)_z*AHRq6Gdj4V7r1h!#~gzv ztwRViB5MEl9@0+d04!tq=Rd+6fI)a#67JOV@4wNi=@T|+ z)!gO96FenAMTGO(?-=oz^#^r|k%dIHB8eEPDTscKsp!rrTsepvQ5vc;T&fA)3tVUU z{Ws;>jyydPrTYr?sUwQ4ZFIO$usAJ5tx%mKyXtdl=Oc7}=thsPv64?;{<3~voz`U- zNPW@I(v9kNl%awDcJ-`(co(Qxpu1MrSLp|LGgYuRR5C+FLHd*oY}@GTQph4NsPBR{ z(_R+taZ7t9xvBjWSC-qeK0i_E5$+fGepDslY^VOI_x_iE{|{6&pcu-8sjf0Z^;v z^e~tz6XpzvjG#?j2lN%w6l>~mPDW=!)(VafrpnyQSiqeNGcnM=|D>iky-s4R z)p?R~A!-FKC4Kj6o+#hwTsOYHzV3p`$J5@%{#K$6UNRN zGvWdre+evWwe+w5X#(?P@?bZtG?(AAkC((Tb>A>4@HQUVJ^C*w&SZ$^GtdywLlN!Nrc%W?L={o{z+NTKRR-7k#}rW_#ujdeKQ>?4(lZ}S{<3u?~W zJu00fYtl@|;@1Un|HgKc3TtokJhyg|b`IJcUMKloCTuhH6`l!|Rxn&I59&-FRH^|e{xK^xTnT1di?7SwZf1R6PNa7?YuG}bgLNM4C2(SBTLtSRzi2NsXM?eEvG= zuo3mc-Tz?#ipqql7TPUCY8d*Sq3{>Xz_MQr?Ne0Gs5#I#j7En>mS#Im5?ZbFS>bB! zE6;hTUyJ6bA^~t$3`Y<@m-@<8MQ9J^74%EYcAD_Bu$_%Jh$>rn{l3j%1q){^rf}E_ zjRUhDs9GnHOeN>@S$e)Au!Zz*spWkJ9FCy+T(wTsN;#=BVejGmp_RCA%u$``_cCUA z4?z@-Z2OVR*YL1#pAN;J7 zxfh;W=$d%HCo_NF_q+MfK2)^rWFFGE_iek|9$b%u-=pccqSghrf!Y)9dg?48>w}+@ zC+(+m-Fax>RKD%Dy5i+T)MFC!R1E-6ST*t9~#F^f)%brba+_TVKgr3cfjuk2nn#qlF7U>5n zJ;OOPYXwf&GqmDDs#v8-C@%j*R}d1|YPBloa_3YnJnU&Tg-RQxyI=?Rh~CCNJaOX= z+o`k%ip7@-9PJ|C)G}JNg%v}s4xAgk8lmyok9oR>`vTpCYhmPR%{rxs1%D(>f@XNQ zQdFHGHrE=X6ckEhKz(APrZRApzq?|`A4!%t@n2WkKcxc+K1WKs)|-V{Lo^@4ya+W$bgl?9B4|fwmHYwS2#&8}?oZB;_FC}ZdDt5ozZZT_)95UK0G{kQWuM#?;zKgwqpX>7%$_RRhM zt2XeU+sAuIuH#s{c`lskiGM|^yCEyht8^pgwfAgZmSra$g^Ghn#J1vw9Ht+r^o$yg zTU&cifx|t66tAL+ox()QY4HXpbI-oJgn6QyK&9u+JS^oGv z^miY@J6vV0sALJ8U3f1_`=@ju>a*00#cNW&1hU#;|DXm8`F`ZTkN>ht=aJ8H$t^hd z#JL5t6!3mgZ#Iamp_CgRKZpbpHAa+h5@tl;{W=XE&i@B=m{{eIxyNh=t}xJ^c-N!M z1UO5Ci8pReKG1%wKd3;A^`MIY03ZNKL_t(T{vP|Ph?=0zwCW6l*;6jVtE0>)_cB&3^#IJipxA__j}gd@qeDfMh-IO?APL$?})@z4C1*T z{JEE{W9&Mw*8R|gT%gDeASdsTJjTy**A%QIdw7R_%*dr7%Zt=?N!DiKFT?qB;G14Viu7 z`gv6f9L0Ylkr`9PNJ9$Wed<-ED~R3G;eOp}9jDN_yr+bF4||&JvC;SLPy|zj1D?*Xs%6e%I4o?F&4Dzz{1> z>y|AeSa9Oz!!(J6j_W>8Cf3ENe3;I&yjM^-M!DncvCiA5#Thuu8v48As(0-81IZF6 z{_9Hn7wSO56pL-!PCU!Qs?{rkg8mVFKUJ7erSr&VDL-{}Zo#p3s~hxYP920*5$1!+ zi>Uj4KSneU!;A>LU))b0(T#A@i(u} zKEaxR?NRwi*e5c>%jLUYlXhNt%~JBe{oB9U)^);3D?Yw*U5XJWPEoP`>c1yU zc~8)WOkqeT6AMUSamYlT6JW^aVf#-g-kuXxx`@6#p&mnVtLiC%o=2?F}xYnxQdC0^EEPmIky`JO| zZQ%(cj{JH!j!Fj@sRaWTt2p=*Jx0i_s`t?Q z8yhF|362u>3}|D^{J&MX2RPO(3&NAu-|n%nj;YoD!J%LHBcA2#z7Ia)cR5bFm-?Pi zd2-?zuhbnbsUYIE9V0GQgd!>Fv%W!n4{1^5@{T>A$Z2Y`%|OMwtCe!%7LPOSEh1>8 z)3cyIU2cHl_(f_8&1#!r%#xdCB@0MWg%I;d_iDo5o+X%HnsV9OuU z-e|r*aEu+QmV;k!D4t@&y*{ImMGZJ zN1q(K$v-u8-3~o&hhexKUmTO?^HSu~EE#l9`o?@AdNT_>1~PN*el=HzuWc+UE7t21 z@HOW@*x!MfJIOt;{&9q~Z)fP>u9#ZoADqBf8~wt2ay@X?2j&l1L&{i)InK?|>h(Qk z8bjqt=ozon9fN20LvDNU&dTA6z`r|}bgv|_QINE#^00^AP~Q)FycAS`sQO0ybmO7By|T|sK|lMjn$gU>{q{GT1B3Ux5AzN7yqivA z!1sRil}g6gwiWLs97ne&Vmb=K#-PqZ{g~p>E1GkjeNm@(zb}`v*}9mzf7@&7+?;{4 z8IB{47w#aq29;tBD`$b61gF!0{dbSHILZ`OA*}rNcclZQb7?q^&Qo8XOL1qxDjJ_L z^q7YCiy0r_5-d-iZ6Xm9>09~(tF|}%cVFf$C)Wc95_X0#eh;JZ)5ad@0s#R z5VXh?Dj$7%ZH$z1-Db~JAaU&=(0j@%pXR=Am2a-&3x&rv>Mj6Pd6D>;BKxq>Cl`;vp_&)u^x+!!k zM-o)gpY!cTlykuGd(syj=&e7Wes*+k67JNEVD>D2m?NR8Vts#~8&FCPGX%_+dhv-X zME0-iDsxnX(ttRA(gXA<8A^L|?u#FA*uLi5T`$*L=tHlRA((UGR3f1BLH~aIw@$s| z`vFJfL4F!}=>E0LOToHLe&<4IpM7;2R_Tq`6z#2Eh3wOGzMZE?`s!9(bQ{=`ZI>BZ=J@Vzh9@R@aw2oXZ?t4 zvf>NoDxH(ZuV245VDb23ffuqmwV(5j^3i@HukRm*7HwNs+UB0FPM6oREcJ<%A%J+D zaU9byJY8Ow+YQ@e@86D83uiu%b4saZ0A)M99W+Rb2&j)-hhciTEVobm(97j={qxUi z!?$!+kfZ!9=HfRNNsB}`8L~kWwccxmKq=9*uP^a z%{r=-TH~=lkDe$PMcn$(h-70}b6(!xZ3x!ub%d`CD90S8=iA4J^{0*daLgQ%avuFq z#&OK!Xx|L6{rUJ#Rn~O^M$X&CxNkDnetQp&RFiXzyZb>N$2NNpRZQye#1f5W9){=F zw{@Otui5MI@>-VV_4Re0my}Xn#r-JQEX8Km-bgUSCFlD6W>^+`aAZ#>r+9=WZ!@Kohx&U7nWYfQX+I6vJyK~}OIg-6 zr?kw=vaTuT;rXTZTfLXs(0VSc?Z;mqyyDHR;<{Sti=54TE4)_aY>Zq4fj_8?m)Grf zdwYHTyng0!e13gf=Nta?VArqhfs=8YiVCpahQSUi%e>^2E|<&gb~}m1uq@96vkS!u zZYI^Gtdgiy0$&lF|s))^8bdOPurGLs_HtcqTzD03X)S= zOUe+o>d2*+%R1jKm&@(8gpl!&b6ugA%Vn8o+Ly8R=28yzCr-T5>lthwq?Fo9NvVue zUe{K~4(&vprTe$`-YmqcuTt465pI3agDBZ`$v+RnK!AuIrBx)^Bwj>sbQF`q*vv3S77U+HYnj z_}#C$KLLYpeOAZZnYNUs0g!AQlAyq5vCnA4VxD*&hZHQkn*%c!a`uie_MD|-!6U!< z6MindK5=Y-Qh25+a#BYg%Xu(+<}W0GiE_3!tG^@DhHM%3^GTcWb;#c3EQA3aCI*y?F`c}Xca#` zqk1wvBwtU+X>3oJS8%2$@%-`0UB5-ly~-p}EUaR1aa}9F{FAI0n>i|{Mdhd{kL^bk zI9R(>4glWQi8d+br^Q~w2^*0<>V)+V8F#gE>Atpz`F4!5@2gN_ptKXJ=F`3qW&)hd zy^zaSJiXGBJak498WL57-2P5yo+zu~Bpc!Fo*qV>2~Si;t+I)H3D@VM{YruMNc+_p zRp}WXsftR^bJG5{o1k(m(h>cLYo7E8Dc_m~VEK3tnJVPNkj=vP7s2uGAadt?!Wx722Q9eYs=MicMRJ)#-MM|_JN;T>fo5R+=JnSF#g(-=ya z&o~F@--h>ye4ff@K&}*hkxlCosvXeJ-X6k|dI3`okcK3>I!w$!hhXRSjjI5NPfjy1 zlDJcD1dih(QGwJr?X$cCx3zhi94#7Z18{ZYbMvi~kdG%y()x;=l|z?kNr3~4PxlhG z6UP+OFlZG#KBI{ERH+@KcYO}&Qa3*#ui!*aa*`%NOmiDq@~4k7NfZljO zf83kYjCCtFyZdU7>^xhK^}OjoU|uPW2Wlr&&Ce;}o*rfbsJT~vL=U)p!P8^Xh)N?- zXC&M=aes6xdUW&IDjT+6Wi>dS9IeWZ5x_vW$7WvH+%NTO%ly89CTk@W)_LM(#QYYG*^Z?e+ zApuNmy|r2W-7#&Ry0(5kX*05Mu@|*qG!?U}yrqd7wri?v1nNVVS8$A79;XzMXT(m`^LK>zN z(WR;L0( z=&}8P0>{-!7%9i`|w8gT^tJQrSP8 zy_6$SN<6PZePCQ+Xca?k4>JMO+{4x3_GlOjl{BK#NYuSB&y6~Ps0wY%YL#vC+KDi$ z!JWZiPsg!)r2TI0-DagSYGWtzCGfMTa)yd2RG{JdRqa=2RHbKlq$(;s&q@1n9=6>! zN}E~#{QGym=JWIO?TE#oK5@Hz{Q_V=*%Hxct0BDfP;_B!#J7_A*X~a zn(;FR|6DGYd0iV_-IJizd&cq=ux?+V_vZD89*;QlcVkUVs!X}Vlq zZ=avY2#%czM(yWiUPvQ;s3*4-z~y~jt?THu2iSi6X=m4691FxWD!8mnEl|dBdbw=N zT)TZ&BMf8NHe4NcwfaFuT`$}A{Q9=sKHIr-=w-g8k-`A12||o8fLeX;_*v+T^&39 z`Es#plQs*Yb#1n`q2k5=2G7%)4q-f>MBq})rjp< zCSTvY=hFTRjkHf#Ket0IV$UtZVamYo2gCU)QE($qCa0Cvjhs7qEe z8-?GQ6xG)mRU$7JdriupoYD~KF6u9N`(g3uF*`f%LNEU1by(K|EO^Vkvf1)9P0!QQ z_0K<1A4Q56!bNOWqhe&Aa{j(>e{`#(BIAda&z-v9H&;BMlRtf}TI|ujZKb$M#jC?B zaIEL?#|69dIh$FIh#i2Jq)O+LG+|del^OO<(ae4yIpaI$bl(#?Zj6;WayQzyz-_cjz9K}RUDOP z*S>}R!NZ_fx3|b$oBocBWB7h%YQ^6}mXSHgh&-mTX!jy~k(Jjk@t}&!#5RPU*2t)F z&H&7TP}@NFh4UmN$QA2}?SCZug09mt9K7Flos)0Tl~0&;MH{PGr&{$*%sR{vP<(kz z>k7~NN62GE&?@5Ak)}w;`g>Q7-C=(!`uRld(~>S8Tj`;zG_4?&SD;+RL;CZClx-_i z^p$k`*7W?hE{vurRYcl=N;y!yt(beID^RbM;)QwxYX!bm9{fsG68;x^m{xi?;wsTX zB{Q5Tiyql`LjV4gR1NHZ+oPq&e54Z?#);-bsCl3{5b8`+u7b*VInf(@ySM+IBzvfR z{98B=#oqd_o?G}V^nkLcrKWgK{V)Scov)N`$MNxg9)@}h(%6J)Fv`!~X>7#VQuUR} z22oi7lzehmn@VTV`o< z__^pSue@pT-&RVe_l_-sqgsCd4XIhYN94&;#JV9*HiGt`=gf?)RPQ%-Q*r9p&y%N+ zk$n%zV-t&Ei047c#UvAl%MC&Tg z`-jM5;O12dha+x*H2wI`|J||<{Jn>c-7Aiin2kt3pHPzMs{Y7I4_&2c1%-J9sIMTG z@tFP;q%5{=fK(IZEUqd)((|1PYs0luf3fS+1}H}*^!di#rrD@!$XzddylbU?iMa4X z1tC26Lsbc`6nu?6j4OQG@z&TLoNv|`({Z3^C&`J;W1}Y5$KMPmZC_MNnm!Pc_uQ?3&)_?ij;;qjf zQ5H3|7_`UhTRy_`hSIUP^9EMq20JG9)ze>o3bR4n zE-VsMc(;wTsib4Mo4MqaW~2ZU#o4`XV-JQ!XRj4N5?8XfKF5hGXxZ0PQ4d83X|vkUGkVc>?3z= zN8AEwx-Dz_!H=AwBgbylpZHlW9YRr(sD*f7r8@`ilO&KRufVNVPyNR9r^sqR@?P~7 zQrd163woaBQc9V0Rw`{EOgV5q-&nT=bKj5Jxfi}typ*o@a4&1W8bluaS*S|nszDCk zD{aCNA4Q@C&FT_*{Cj25-F-*-_p3IL>ZWPBsDf$U+OA1Dv|jTtuPauhP-oKT2J~40 zYJQU5AWXyH{WnVXKo5RW@8C6?rcv*$|I)by$DQ`CSRd%K5!zbt6)!w*;Q31FcAUR{ zNiOLn(qoK+Ynw`g3H|Kd+!JTZEc%MhNO97RNKnCSD5XusGs7d9OL#W;?$;zOma6vS zIF4Vwe6a^5_9UW~?P(mBc|pZGk!rPMZ>7mcHYiy8=pJmPJ(VcimLi{Ne4K}bMuXn` z7vGdJ>Vc|Xa$Q}-rn^HS8rcF1jvSTw&K}O|H*?M|hd*v3bPrtt5xwx~lM8tF*%`fI zbLGAIZ+I!?>aV;TGef>Xwd&s+FiplmR;F#21YBOL=d^KPChA}(a^E(z&?a)RriwgmFnYZ^vKCGEkLQp3CjwKRyUAHS z;Blpx<1*w4%r=Ymu{hqp6T`<0G}Q#o5F3TvT7KJxVO(c+Nk;+_M|tQho_zR#?%9TQqhX`H%;1X?eFAv%tld8M0^ zZ-Rz}nj%~sSm&2{Dc*pgz=yW^bBrK@)NSpjWGjV66QgkJGlzYYk1B`S1IjAFV-PA* zkTrJ-jiU{ui?GFwItif8Dt)iAF93~%YVK;W$A^R2geJ_3;O3p1Y z#_K(Dmv^x(Yn_KJm>hPK;~7PwIp%#reI|fA`m{aT=6_uwwL;ptf)aJyc>uHx^%v{? zb1}`vE7{t{y_J32@;ic^d5S-+)xKTVb$GedGu!og#Wm$pkG}Uc*L77HN381$>0ad@ zuV`R=zw%vH9?y#PBt9%;7V-Lzcq;#^*LOMr&%-GnT)WN*6B#mmXL^RnNnQCID-II> zE#Eu#KV0)JpQ_q_HonFJ`f&-_eU&3|!f3{h?|zIFy{(-15h%nq+gPh?gxt+K>W#bp z_a{8JT}QbTt2}{|9tc%Ey$AgLl#j^0SZN+kR!5k1K%=01{of+@akV-gNyAWX=t>Pj z?ZkUgvpv)~sDusWUa#~U_#Q>Rk}e`lfa&>urSwo9=a2M&;^1k9hngbiJ1#UoC%kev zGat!pQM$F0ECTynrARr^)O`!}4>}(v{9MI_%bWzNfnx6nGIspE;Abh;8UOBl%|&%m z=M#Jnj)hVp;on{2htHs}itYZc_sY1c`}c=h7p0k@%B+%M@HOtgp|(L~=E(DvZhxrx zarc5%)UWHX%}RmhG7z+`Al&KHygEr@!Ee#wnMY+ug!SP^T=PUbO8wR}0E*=z|M-vw z#`o7RdA;wl@_0^1P9(9O%f~zNjv=$?zTOSPT~FnI_4>$u5f8V{w}2JH3;|#_k%{aH z&YnnCj_l~9KKbl|_WXSqLJkr+u+6h~cKx1lJm*u94aN2o6RECGV{|g zjD)wZJYm8Hx>KWjy>wg0Hf!?L#u^FTJ~P4b+_{8Gj|45pt0}Dx_JHEx(Q}=+{I*h% zQ&*awbq#rC)cI^aYvpcc3uX)S+1|mP2=~51HVgK)b#iMI2KBYgxN$JRxQkgnPA_+yq%Q8l}K8V zlkw`cE~t@1%?va8QMJU^I7TPhhA=ZnWmcTDKh*rp|M+_w_v_XEE$KSKHY)`hzDMZ_ zP=|o)_hep$Ni3M9aQvpwoq0r##~A5af5bIOD|>QYY8n7X>w1<8y=+4o7~fAm@gb+^ z_&>pVk|%D+EILgBuw05S9Dn-hU%EcBU*sK|h9O|Zh*^)A$OLVcM6#fe*|k0LIWB^O zWN&5wOHhwt*L?ovuXp*>-t)Wn)>YRxdeSlwdUjvsNHDV~oa0eXLJVk6Z{z)vcA~(q zFXTIpzRrC%g7sT%Rn8el^AZ1hMK(KXP`DI33Kn|ugkKL;Jv1}#rhF*(V&&66;q3A% zqcH1$Mj`a|Cn`5&=!p`(n}(s>(2G!mWS{bZ_Y%%_T$SXa9VTqxxTAZ$(r>s`jAPMV z2TVcy(}5`f03ZNKL_t&otq6KJ?yPOc&e}`}JF8cWhK5ooafU-wEomRb zOr%iTfcr9L=BV?PYCmd$oaP7a1^+E&8iZ{wYf%a`YX5mI1nzXp^%l-6mrv!_BV`c; zXC9H`5!Q$Ld&>8{CTV4rrX>x-`1R{oW30E^?d|pT^ZIE_A$kD!#>__OPA`}8dA$JL zi-gnuGjJ)!OmE;5m!F==hc$G=t(0>)cJvi~2{sRV;}JuT`E^~5CH2hxn4^Dn_(KK zE05!7KJj%r^{(eVLyu?s>_aV#gCDxhXrh{9^!zyHbKi;H^0gn zr(WBCWVTR_N~lM|JrVuvjeADwARl{H@WrXtv30Ygh^=JI@z~%sJ%#9NZ2il+fXThr zp5f=Fl-6afE26Hx;Yg0d+J20G)5z66Bw;K1wXf^i>j7F2$8qJc_sFl`C!h_kRv);5rzh7xfkXwgA-Y%j=wr(p zZR|(?ZW4u>T{t>iRfJo4`(aO{Tj1ZB=|8SXvr&<_NHB*hg4&>{ZoE#I;hc zMG^2yd7_d%9$6`TFA)X){QR7KeNZ)=)|Be`uvb+A#>soa+I8Yn{w8v4!k$zsf_gjj zbfSvVF- zqo{T?UZ-As*!L~7@=>3w-N$J`;kByjCka2{+P60Uh-=cx;pCd*+uK{fSa-hup$Bv0 zFLTU?;d>MxkBl91SIFWc<&3l|F^(bkM(n1w4ISCfh~9|eMOIAlXZYXk^NOCncez;g zetb;~WyrV}@IO}W>Bu7@uYbZ9hTi<>zq_t$(=EWSO3t%6rErWCcdPi(?HF$2FNp;V zJ*3@rVE*GA&N+oFFJ)zfx{mSfi+xs@deM5al(q^w0=V~vpMU?YxjqXAZX9tp)9$#T z@7J`^e{;$IdBk3J zlJU~|7V0pzEsvA68QbsJVrUyyDyLQ0){wDA^-l5m5}{rK+ki7!dA)DqJ+zvd-@H)N zs6C4^k;3x>RgCaVa*{iN=`O7eSZzcG#gp*wzy8;MhM52=BWS&Tgu1vsamD^^I2MEQ zsuw#N&0AM>Me2)Foke}_@gr8(vdh*F|&$rZcj`3uwAVmjpD^yBm#yLvkt}zP^(W&P`S0R&PPqASj1tnIp1TeCQ5-MkFTKVi z@Q_BfPcV+oZyQ-&)W9rjsOwliugDknquF``RuHzzk*WR@U8+N*HenBV;iFH07CKwE zd2}y{Li){nYBpRo=vIzIBaRea(~Y2K<((ftx~E4ZF1asq++8W8*a<1{bzU;n2T{Z6@2cm+UX=+L;yto<37>LO!o;f* zdh%pNINm+-bY~sZ@g7$nL?VZ(lbDi0I<)p0*z`v-Ua)W7%!IuLXCTeSaKE-nMNG5X z>xFuU_sU2w!5KLI*=gYQF5W|{2~|L$q6QO7aL-cj!Sln=&D9_!M(0jo&W5{wxbEP! z^6y{PEzAT^m1OY`MMF&p<@1DNaiUR-cQowV!5f~2DLU|3`Lxgb-G}oZK%o~_b$65# zpG!)=+GaZ&e8+39rJx=I=OJBl{QC7PetRQx)^fOX*G;w9lNVU_b%Z7lxLdax`C4h+ z<#t2xps{_(Fx4&~U;jgIaD34jQ`yKFJ*0T|yC`K@*8-d+GWR{vTm5vAN3^}__3&ec zuk1VfXpCLX8QHsDZ?JFw@czJyI^xpW&ml;T?o{`!L>|C)V)A& zt_HY6dpHLf$x~C~^?+KDl}=;y6VESzYRp)JmiHWfn66GIWo?T3uIn+_qdsdTdn=!B zYWF7%Z2sAhOj6Tb4DAc)3-lHg1VvXFdAP~GnH?RUyJ5OQB>mi;L-BUjBjOWT_FB7p zIzIgh8KAMs-+V`8SPvzKCZ3yr!OQAQWRuGNS}b7YJO}fm-wlHvPi(|$-VHgt_XIcA z3)qIx{23)nE71sH2MC7Rd|+vn^V1)XBnK$9XmB^PA-!ZyZHXdzJPU|l+L z-)9Tb$HUczS#Bp{&gl``BNzYf&YHW}S*|B}&7eP0*^;$LWtAtM6FaMzaijQ03CMCT zo!!;H0#bgqu`ha#&x(_#&f$Cd!1F3EngKbTpu%wgg0(KQuwEt&G(XXmHJRpjw+o|B zEJukjB=*A5sjTG&YJ;Hq=VmE_-2O&#pZLZow<@tivTU4-Xj%U5fHhm}{w|!PZ`UMp zcnv2k@rE7B0r^GQV@&w9_W8_(G4Wqb5hP;Y*}4MukgSQfCjB1u6=bGK{y4si-RQpJ z;V>*kL=CPfnS6HyB~GlGQYJ8B3RAu@jl!`MTZ%xY0+c^;SK7hzmFTqK7HB`7P-2EV zZc)sgWC0?{FFv~{3n&n{{d+bQ%VKwn+QVEK!&Q_UCzc=hhx957o-zy=U>cWkyThjRbT{te|^xeUr(tTs|DRV3ZWoAlJ3y}-RNmD+AGDTBN z_|J7PmqFW%nV5<(L+GqwGmbzlpL7(hdi_@408T-f1Fg_P6pR^B`HGDm=Db}ZaCh-j zSMf}GlJdvD%%xVR>IIz?fx=nh`AzXNzN%unRo?II9~*xpW450atyX7LMo_yL!qsEJ8_WjzfPnq$8Q>(<3}QLoga@o$T@=$JF}v z6RL~A!%F*o1mud|3H!8%YCboD7`L0kQpUE$wY>ttN{{oHi)1AQg>9w$6293xOSC_B z!`E?$H8APfzz2I9Gr&A0WW(Qyj#3S}0zOPvKJ&=*t7;512^unjpP@U6zrz>Q^Ye*C z1cPuH$STtYPQNzKo}TCz^-FSk9QTbw2XKm9N8fcNw)O?A+X#?No3uV6V61anNqG5W zEHoL-GxyCHzrD(iv)nL#nmGH&WtBxPun2TPgJ4Wt=5>7J`X03%%#=85HE6$v56$bB z!=7_`X$&yx?;)5~A#F^Y=iFf)B#%Ect=1;lsmkjNb#C5-v2j|51u$JX;`EDt6c`Yg zzuX0WF_TVGzv?|5dW!cG^qnY-gV&VQQI$))pyX40#b>Z5aMZCP%X#;n zTbjpgU`S9S(Nt*dK~ya0&Cb{G_*?G2anK70HvG;x5{?5Wzc(&TzU6ipzxDUYspa!` z=pkQPF|3u`|CY@<$8A`lsvgNp|xR z07XCIe?o!c2KBTATIYK7QiC7xu23x~Z`}gk);v~2xWu}>6}xep-L z!aHZ`6rIA#8m;zoV|{gN87aVqjtymNC4ms8(pMSJaL-%naCUnJA44>M+*fX1aulDK zv+nq=%obT<$9BJD%lO~P&>yGiTIF?-pOqeXf&Gwfcmr4hUJnTT#C(i*k0EQi0aNt{4IIx4fcvd{dRJSZ(oiI?9nG zv3eDCpudkS{}h5}&qJV;NV)5#2tnwc(our*WjX2oevJ7=EkM)V|6coyHx@`!@ zZoEgzF7+=Yjkh*f^b^uA8Xl_fd63EaXrJ(Th?{ZIw5SqT{Wc<0M-D3-bT+++B0qHdt760{5-2_aejuyd@QBH!^V0g5zBxM z#+%0BiXjz~r~;s2mHON*0VPn{9MjbU=FigS<*A+S?2)NKvNNaA@yYBkxP+SYk$n}T z)K9*51p@j`#A+wi{X*z?e~#rQFt67%tI;H<%Kp|PN(6+)O_iN;@Oh;cy>o;#J&iaJ zK^cz>tZ+pq`zNBB?X}(%b{+s`uU4BvV5)~?irAlfHY|QPfYY6WA1Fz%*>~=9HNDnh zO5la35?B-)USu5gGT`IJr7-0C3h78ghub%X5?T3SG^y8R9K2H(|9diU)3lCL*lvBv zG--yC$+C2A{%!=n>;CrHqe;+Pe)E|H%S9@iijS@m#-E#3C5O(_;PgXV1j^hd|7Fa> zLa{ir4GqA;N$n}k;@(O-6l|?tImc-3{SnLZBrlG}VU0b`f@vhX&@uK@O{`^&M_gaW zc#ee2x!v}F568nDml!B#mKx9TXQ;M%?%kGC4~l~*aM+y+Ai*~R@Tv-$VmLA-%rV}o zV2rfn%sE?)L(n6ghhruuKY6Gh%CUZwO0Lh*^aLW8nJ_LzEb?o4uYqjQSDLep(k*?k z#{nW;1^}O$i~_XlE}AA4WTH_aB*1dk9n1&{b1&(O&fVYMs(J7nESD%Ywx4}Hk4AhN zr;L^{)|b@#^vM1!ZccBlbjtB;K9=&w^qmc_YCA=0 zha@l#_27m>6rD}Rfc*Ogc#?<0IiXfys&wQirec7ABabVIw$VJ@Idj7ZZ%}g0_U}^v z=+3{SZ>JzkSQf%ijM_Ic58beTA%%fww56?>{o=XslxWvZ69%cM#PHIhi|9{Xol>`yQ2LwUmY zR=mo|RQ5Xe{bMutd{TZ5gMkoT6&DAD0#cjidRlyKl-wXu&EKA?qFN|?t}HyCLf)xX zN59$bvi}2AE~09KoczkTU)^{#wGo3y#GCqqV(J6kXYtr0d>aZnT|vj5xK=mKME)zv zu?c}0j@8!6vpJC;GEzc~BJ4&3)B44lXVNset*-OHmBCj+ z+l5#wZYv+Zy*w{248bsZwp=!}H(PPA{CP85^N>5GacE90T@(Fm6WD7%miNFB!=S|N zLF-urW?nb=)!1xy5?n2%th;3CJfg&ad(zR;_~K}4ueAy&(79W43POec3{Fa5Ea{fU zVB0@T$*muARzXYeD1jt&k9Yn7HtovK*tIzqxg7Chq+>>vvrq;FFYl^oJNK#cI`ZTB z|61JKdx@9KJ+!p>1IRh1!4Y&v*VgtFW8M(GYPa5tqL)ZiBVHG(B5C?zbGBND0Q0O5;$A3BQW^KX;?a5c?XpNYX0A_MUyhSz98twvltYl(~D^* zvh>@9D@0ghgGK0%m3l3DX>>3`T2MsXS?(VwUF&#(Gr$R|L?mvqL1k{DlVTpOJ94`p+C!brmE zqtJFfn6BzSzVov_yn?0~K%W)gAWQo(sK>dtz@X(G(qR|>fB>4ca?|BG!U_GRk51nA zh0;Jhuk3!dHnM31FSl!m2gcTBG~a!qCfT+01KshwjChyvc4LbGq&%tMyC6# zny)-jZ7>^)8Ce#IsCS5ki{WhAO$I# z#dEe4sJ(nLJ$fAZ-+C1`J(^UrgS+x*`v z`*>1XTkRlf^PY?8=_#J;=PTJIDQh~#QwzY;+MyyD`P|`v?@9*W_uIy}e@EyE{xVmE z*2G;5%v>`!>$f~t;l)7Shq-A{7Xe8gVG@a6CDOLEVIk_%MbsUd0Xe#5(K z&+U$6ZnU8mWtc&{Q>%5c_3J**jMWmy{a0%N*6R_HufSKCswX$osPiW5v)rNjDyH@n z@?a2mPfP7QsBxk{=X+}6JIw9Nk8d;Q$UK!w0+_6G-#v2_b&T zV%sslbB&qjO#ItSx_{oKi;kQdJzKr5JRWmI$1hjk2e|Uab)+cBI>)KAhPGb7zuw1A zUy$Uj*_SgRYDCuUW(bCU_&EOZ{Ca7v@I^H8mm<=pp}N`=HXTR;w5P1Xah*z`)Y~g@ zxIkJ>-Z?Z*zj+w9P7|(ifH|F|6pB-lxIBO{NX-(tJ3@ZULws-I)-u`FnbG(A4`s~A zfSz*rSODPj(#t5x zl$a8=`W0PbQ=t%PYk9Tj=!djO&+Pcj1LpvWqtd%MB~Ta5>+zGf>6(l_5e@h?KrymA zfh82^!_Ai;E@IljAirJT1$XDk+0p#tFHpGd zUEcnkqb=*e{X*y(BIj+CV+?R%yn}6~JVeL3Um)f@x}l@879AUo7giufdU=M_!+E2` zKS!zKzWZ6scWSG9sqL~c1DA8khkxmJxmm*Te|Wd)kilOO02YjlSZ+dwKJt+LUF>U< z2^3xHg0!3ZB`9@#TN{ffHGP|Wum+-ZJCvnL8vfV_s8~HcIIzgET1*di9B|J`4l!@U z5bzs6u(rZfF`{|t2_R9mYK0|19CV=`zwOq+rmHSmK&wmRzbcI=LZJ+`QDQ=-WQf^W zXS%*;_sDzoN~*e{;A94}_VcrVhsRGe)*$E}vYUX?1k=-T592RUWZ~ za-DW^NxQWi4{TXy>;~HyS$Ut?ZbJu%1jV*T5D04vpEF6TmG(FljbFFkYO#}6Egl_F zerD9${*|X(tYtoTIQoN8sl%Ywr&(U6(xUbrPrd?E`1|%b`bM^kxu*OF)qINT@%GRN zPtAcwBB2Zqipg@Vt{;$vWrmBNV;L%|$ftbnp<>^PRRTBV%??|wTJ4sI`-TkN`@46Ycle}QGQe&+k`Qx8hm%xXA(&9q_9VEim;(?XW+(NsX(A8?O+0#O1p zpC9q%C!(f%r2G*#Bdxi|)tsPePj)6zZiwmQPLbt&uYo9(-lCKp`hs;J%HVJ`+Wk4_ zpT?m2BaTLFf7UzyYENa~9>L1r9^V%J%3ebDUmn`U5MY}Lu$xXX91l92Ku~zjW%(!b z&Q;~=IYOM4xNP{aZ?1QJTZTT91!Aned5+;C7duY#t#`{iYeErgTj8vQc`oTg)dhhj zOcY7-!h*MX$9|-OsZM>P#8>sUIOnq1`)>*5=%kZ38U5{Ydv2ZWI}8gn+W_ql*0E;o(>;=_>q*h5t2>jO76p#UAwH<&L zv}8Bi=KHt@VMnAtf<=}FdUJ@n0`|^@${V97ig7UK#wN zmeN?LwM2R%*4xZ(V?6H8MQ4E{qu7w1mg;1%?yqk&fvAtdP)q;9zW?t9VE$pQPke2( zy?Jvb<+=yTRzg_rE>WhB3$gc4Gr7EJOc0awoK&4*x0<*6@k$a;&#yh&DN{=-d0y_4 ziCLEVMRb{?VMNx`L=)WpaZmBaOA#t7MIN@#4f)D#mU!B)8`VUQQ!nDN@l~iW>*p^; zhVZCQe3dSmjEtXrWmNOm?-FPGZP11o<`G&UdsT&upJv*ZKS+1f+~ME=quQ0&5%4A> z7kX`2K6S7SDcNAE@JQXUFDmsegYFW}oQq1nRHx3SHH-8uDRGZmW28=p5jMeGGZ-(IYx}l+!_ld>Hg^g5 zy8JUM>k(xM)WbZ^jpnhK(b0C+A_)u@%SvF*2cpRJU%UGlI`Yj4aIb&XNrrLY$54qh z*DpC>j=cB#90g$T4?~4p@UNl2H2lun@q&lB4oW`9>iR*ibiqJE*)bU1ac*XFUb|OO zk1h>{3AEuq#H)WOjOYJc^+fLYuT11?&<)@{Ec3xhD(0O>ejQh@*ZofAmK*6hz2l8& zddgob(#Xh&xC8UO^W}(%9z$3`!5HlI69_z14D`p_1UPuN@vAj{q7Gx?6N}r+4<1iW z6Q{ppNAm;1;jMmL3VE;xZrQ;Vd70C>;b^@7>>aE$lus5+o&O&bu)0&kfM{4A8CNBG zEGfq`07h}OQEnIKMT@6mMm}D(j1O=a#M?rs`SVdaD*G=OS^z{eev|3;w5|dHG)D|U zO^zwwtC9FMe2S@3;6+MZ4AW#P7mH7&9fsfpU@@U&x-{=#qm$||zvz?=cyGcHrtIgw zL@K(_30Q6*Hl=ojx!E$qH_#YcHZxYK1Y@EYZM@+zY(WLX3ROMGeiNm_OO8U_>u-kE zPrTkItH*~rA|BD6WMCzYiHRpV>lj#J`e32q)0Df*h$Q(6!%5lf$R(f5^LCo-Z6_ZY zLU&R;l8K^T>rhocQNG~!BlJ|B_iq)K#{KNe6~lp*m0`F)F+wA4y5u6wpRkxe@dEuw zBh*>NG1po!_#fM%!bizq(~RjluT;&>!ng3F)UjjZ+NJIvONM4JilE=;I4B_B743=u zqC1ATnq{H>Ip8&91L{p;gQFp*F~Ab8YY>N#B{CeZzMkWq=SdH(!o2U3CH;lxJkQzu z7$*E@$yMhRkxHO!%QKjqq5*qEFs@U`*eZ@n-aLSjlJu&t9XwoO@S*wbo$Of4>9nsr_Zo$7?(g1 zUAf2wk1Zj4xHz?5R;w4&(N#jb);(bCor*2JwBH;L)E$088hHt|+OAot`sf6gn2M>h zmwc2()dr8w=r)$1RF|&7pig(-6|QNlpgG)CffAgmb;;+_vqM(u?&6(|+x2@*(iF7w z05&=VW#(jDP*^E@=oH)jZp`4qFX+hyxw$LliEvk)T4f|0KXKRg2}qvNOwc<&%I%UV zr`@X1ZM%}aH&(i6>N2_zb(EbuyJQ`XcYD}>#pb}c(XZhDIAoI4D?TQeikJ4pN+JdA9zn?p8 zx^ZI)<04*9W6DALltNT1%x%IzkE$nvJr z@1#Zk_7mTLzp2V+1JOR`N4}vpA|96>ut&pPk#1~3pQASQ2?S=Q8wFtOTk=p+YU}sx z>&>oe2X*C^_%cxhxF_v)cN5l)eD$;cUE zGw#0MeBR$Xi&z)|=0up9-zH>BeBd_U$l8SS;WXJ^wi77OR#gaoPWrKe2ONIw?mb=k zXR5w}`0JmV5ojuxkaQQ3pfYVLM}rpw=z}0De1`mu#PxdMkZ70}nO5x-pUhb>_fzeO z&oIA!-Z;r|P?#i=Np`T`I;3QSC zcW4N{2bmum#1)27{TitIevS2sv&OedxD2V+ZWqO40l{E15``w{B`0U#Ohc-!+wqxr z8i=QbjLVYj$ERf?&!$?=K+(04H518;Z%bd!aoyOZOlKX_pvPw9f?cCN{B7@;jVVqJ zCZC)ma>J4%UR8an@X3~akqTEZ8V9ZLG_!59b{Vs;1uA1GJb1~9s_7}o>_GX1@KS|9 z)}v}k;fqk5gA#-K3pJY?bYQwtbpM=#OPoPpB{QEf=E<*iL{N;*B$KaL;8On)B^~|@{Cc~iajVI6F61vb41$`r_N2_ zHjz!g?GtlEj3QLjlS$bzleLDJlfPGb-c#Z0b+JpD0Wr4wQl97S zI6LYQ{L2AjdZVJg;2RYWTFA>(;#UUK3-JS)Fq`11Nhk)=C>|JaF+$wnLSn=!r>5t3 zy)RxtJTH)^FDz)3xf}6`;nF1`_d-kLdt!r8ErNSPTmGC%1*5r8z&QO#n^)?p?A&nh zm%xyCJH@p+37%X=Mw6HG$ty)k%YingDN;XM$bmcCW=fBRymwTW@3np-3lF7cU&kkn zFZ1|dy$qZKmNYRzMpkR7Rk@$(0pOCuGFc)P!4Et(bto}jZ0uOc%74^WA^g#L7LZ;l zdi!tq`qs$ioc|(zkN+}`(#XvM*Xi~TUB*S1tdK`{WXLzRpG1K6H>EmY++JE_EZK)~ zzmsO$xVy02u0@E~_lr8#Q=V|m4z(kSaQ5Di!W^h9qLP>uV6V-&5)RrT>aShHKwmrD zcJ_GNKEcz_o*Ce7S!AN8W}AZWlW?NbNmKz0?pj1zYHn)TRQ5Y1A)GjmleXT6}q*F+sM? zh!9~@{aCy`wBHeJ=42eVTOy{K+4?>M#S|SS>(h~+(QC_fd`^|^)<*p#j{NwL-Z%R7 zDTXC?j%9xV+_DCJGlKnue6jl5SkJ8E8@-#AeB!1851X*ONDaOZT$&;Mdndf0paM6QHmrO*PJrx8F{T!AX6(RIIJd)b+U5~E_b+vgf9kIHNNxu=O2dApY)V^`1>tEfTCZ*#PX z@H7oKmLuEpD=I7C7!jpuyr*-b_q?@b!vik4KL{qmat$c~`xV8TiW#@)>E0Utk$xIy zFqq&JSB+D^2I^b&Z0_&RTCmPzI-%M%hQLR=Ik;q?^3jw3wQ^LR^c&O$-j(3x$Ik}o zO}h>wN!stKbv6?m3n)RdK^C(VzeOANtBG9`9>{>e0A8&LC{6eT4X4k3n_aD+XQP!> ziwAmJ)9+5&y5K2EqOR*f9weupkk^%cX$J??t;Rkc(zdt&P|F)e`UZSfF=gFNMi*;w zH2|uHrQoWS5`!D`y zDOx`@K2tRN7Yuv_jTpX?b=`eSgq8Phe`IX&_P;oub?MZ1U@z>QyIx8tK_{K#Q-pF|ga@$nteNZ;C$1O{p*m4DbhE}KUz_2k#F zJ-uLu>^+nWz*>=#e)~W5OCj!W81^B|n`-9faxbl|9=d7l`V(&lEBha8h{!+_ZzIKK zR6te!WJ6E;%myc85Rr*5YJo@IHNCz{dZ9YnyaUkk`<&b#vGR+LAHYtUPe`ZV<#MsK z;8K3=P8pWLHkSp-sbk5Acgj6l_lH%5xB_6&6k3(_AKbd>i-&eP9-1z$G&jq zJ1MKy{!+qUv^f0~{9u+d$E`TtK!(}LNU!A~*YASZVJXj`JO^L~rXD@|HrlQBm%PUu zE|6$pu(N8~B5-3^)V>txoeA3kjl>(=cD1_Muwo_y%VrcaVh1_{huhpoQAG7`iyy}a*wW6oM zG!<|1(vl+8_gT&A1c1Ky2k67PO<^q(v*ZIa8DteN>k+L4E||pcpj=qhR(~P+cimm5 z?E{c1R2I3ieBk)SZM*Yv_N`0=1mZU2%OPdwkW*lsnEzlFWrE9PCSMF}|#y zu=1W5Gty0hYWOUK2f?fbcUfra$1R0J-J;Xdic!;So65YqnZll{Z_3$`r-40nDAu*e zRiK9(Qfk13=a7$`w3#08FAYw+ z#oMiwu+OYJ**dqJ-v-?fK@?L!6OuD+-1^)Kkwh(nu0v^UZDf5E%3$}pEmd(XC*KoYGH|XFega7&=^xULOpS_~P<0`*o zY+vU~`=Is(oa7*eQzLg6Uu zsIW5Sp&AR4Yyy+i;$N`7{^{vL;NnCX|1O<4)Zqk;<3!+S8Dhke*>H*Z!artKjG^KC z#gLKfXR;PIeASXk-vPgF zHoi$8Ebiwm6xT&Im_^Pwzl%&U-zgW0a-$-vLw?p`a%HMC1mp-e+sNhroV*aZ;_z+l zrC2+7&uaqi%co+xwN(xMr`cqpL!*CPtG@-`@8(70ipSYM)Gdl1caehP@#k6Oq)bWi zlIUa?5yiYm(Y_sB-{`>s+8ToXWPCXN+o3GXsy~`^7a3OJbFnv0f6nL6!(p@_&(kZp zsJm1{{7ItUTw}fR3o*;8^hqU}m^22}vypnivAyMe!k=)r7>eHk#QVw%AoDtzlnH{9 zBhosL8PI|QZZ5((xxWLA?$nIjJ;$IgylW4KOgSla=fllw+ud&U2W%}_WDe86e>n*X z*-2LBwPtGyEL9S(`=Cv&bJIueAfeUf>jHkN`-8jzwbIePlNLCxXd$o%C z#5Kl`wBc`2kg-4^&Vn@uhy^11O>&!g8_tonw8Nh{oHLc|n`W?PeE!0iEEwts?C3s^ zaq$ue>~F}e%G9YP*hA6ep6DPwTdw=e&1jQQKSXFr0*)*h6cMY``E_K~OnO_Q0}H|F&%)oO55Zz{(skV_W`P3&dp3i_20s7UP$pa{c5I(B zk+eUBob5!RC0W#pwAc&h2zuIK06})ccZ9y6IWuOfw-t`&OAZWJDbUbR_-FJ5SK*?6 zM|c4@HxCj9v+0iSd=!TcFN5Cts|9-f{rOA;)BOZHhGX5@hiaFq|L??sPP?EElYzc$^*S4?%qD3z94d*w*|f zssR$R*i*FHTqRBDz2r=eWED*Q&tUDAmik&11e0J*?YU+wG4G`Q1G038Khzv-VHMLc zev`Q*$}yDWflJ=2!161RMx!~&t3_}O3_hIt(j4cMDYn>d^mE*F4^3JTRVZjGTEAZE zapkOnxh62=gcW`sk(0-#`;Egg7U~sWu9y07;-iujoIZKKR(d2(8k&Ln^gsIbRE#ww zq#!~8e?`)sL4!jS()C43OzFF=?pZgj* zogFTb^a_5^af5q_foymvi`|TRe*LnM>-~HVioW53if{p)4ndW|X`@F&%GyKi8NLJq zEJnPVu1Y5yM6p$?2rfuo*#IjmyU&S5$W1PW&PZ0Uue474(BY|WHlwxefGf&RgNOYy ze2S*p%B_Dw9JBvK&UL!P=Ty3}dwFVwB0%3;Rl1at4S(fTNgU^g50@#lAosdoHgt1&RYUEcGygBq)w)*NAprXV?UcbIv>;QiyD| zL?n(ej$!=v#~)je_h5&i@t%Fem1z|Gve;xz){|Qg)8l`~cUX$QLghNlR+ws?oWc;9 zDFz5zE}7PIpuA$M8E%gcU-h)_Lm0RB^~*pE$-jfyMsWw*)C&hU`E#8LXw>? z^Ox)^y}^f$^%9^5PhHkjEA{eTjY?ACu1-P*ny3f`ZRvz&b?rRt3pQCU z*|sWql}7Jbb*HYc-5JjG0Hl>c@0~+nAL{}6{UJX08x&Nuj=+79pkSy2)30Dak(yJ)x9>&7C-Xd>Hsp83>;PhGtdRS z`u1oɛ+Ugv6GDIma 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%0DM-d>MF6L1;ni0d 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