diff --git a/code/ZAS/Airflow.dm b/code/ZAS/Airflow.dm
index e5d2b7eb11..394fe72478 100644
--- a/code/ZAS/Airflow.dm
+++ b/code/ZAS/Airflow.dm
@@ -22,9 +22,6 @@ mob/proc/airflow_stun()
mob/living/silicon/airflow_stun()
return
-mob/living/simple_animal/slime/airflow_stun()
- return
-
mob/living/carbon/human/airflow_stun()
if(shoes && (shoes.item_flags & NOSLIP))
to_chat(src, "Air suddenly rushes past you!")
diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm
index 4d258cd91f..e37bef86d4 100644
--- a/code/__defines/_planes+layers.dm
+++ b/code/__defines/_planes+layers.dm
@@ -58,7 +58,10 @@ What is the naming convention for planes or layers?
#define ATMOS_LAYER 2.4 // Pipe-like atmos machinery that goes on the floor, like filters.
#define ABOVE_UTILITY 2.5 // Above stuff like pipes and wires
#define TURF_PLANE -45 // Turfs themselves, most flooring
- #define ABOVE_TURF_LAYER 2.1 // Snow and wallmounted/floormounted equipment
+ #define WATER_FLOOR_LAYER 2.0 // The 'bottom' of water tiles.
+ #define UNDERWATER_LAYER 2.5 // Anything on this layer will render under the water layer.
+ #define WATER_LAYER 3.0 // Layer for water overlays.
+ #define ABOVE_TURF_LAYER 3.1 // Snow and wallmounted/floormounted equipment
#define DECAL_PLANE -44 // Permanent decals
#define DIRTY_PLANE -43 // Nonpermanent decals
#define BLOOD_PLANE -42 // Blood is really dirty, but we can do special stuff if we separate it
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index aa334224ad..527bf55d93 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -302,4 +302,4 @@ var/global/list/##LIST_NAME = list();\
#define RCD_SHEETS_PER_MATTER_UNIT 4 // Each physical material sheet is worth four matter units.
-#define RCD_MAX_CAPACITY 30 * RCD_SHEETS_PER_MATTER_UNIT
\ No newline at end of file
+#define RCD_MAX_CAPACITY 30 * RCD_SHEETS_PER_MATTER_UNIT
diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm
index 679962b210..3221a595e4 100644
--- a/code/__defines/mobs.dm
+++ b/code/__defines/mobs.dm
@@ -27,6 +27,9 @@
#define BORGXRAY 0x4
#define BORGMATERIAL 8
+#define STANCE_ATTACK 11 // Backwards compatability
+#define STANCE_ATTACKING 12 // Ditto
+/*
#define STANCE_IDLE 1 // Looking for targets if hostile. Does idle wandering.
#define STANCE_ALERT 2 // Bears
#define STANCE_ATTACK 3 // Attempting to get into attack position
@@ -34,6 +37,20 @@
#define STANCE_TIRED 5 // Bears
#define STANCE_FOLLOW 6 // Following somone
#define STANCE_BUSY 7 // Do nothing on life ticks (Other code is running)
+*/
+#define STANCE_SLEEP 0 // Doing (almost) nothing, to save on CPU because nobody is around to notice or the mob died.
+#define STANCE_IDLE 1 // The more or less default state. Wanders around, looks for baddies, and spouts one-liners.
+#define STANCE_ALERT 2 // A baddie is visible but not too close, and essentially we tell them to go away or die.
+#define STANCE_APPROACH 3 // Attempting to get into range to attack them.
+#define STANCE_FIGHT 4 // Actually fighting, with melee or ranged.
+#define STANCE_BLINDFIGHT 5 // Fighting something that cannot be seen by the mob, from invisibility or out of sight.
+#define STANCE_REPOSITION 6 // Relocating to a better position while in combat. Also used when moving away from a danger like grenades.
+#define STANCE_MOVE 7 // Similar to above but for out of combat. If a baddie is seen, they'll cancel and fight them.
+#define STANCE_FOLLOW 8 // Following somone, without trying to murder them.
+#define STANCE_FLEE 9 // Run away from the target because they're too spooky/we're dying/some other reason.
+#define STANCE_DISABLED 10 // Used when the holder is afflicted with certain status effects, such as stuns or confusion.
+
+#define STANCES_COMBAT list(STANCE_ALERT, STANCE_APPROACH, STANCE_FIGHT, STANCE_BLINDFIGHT, STANCE_REPOSITION)
#define LEFT 0x1
#define RIGHT 0x2
@@ -279,11 +296,34 @@
#define SA_ROBOTIC 3
#define SA_HUMANOID 4
+// More refined version of SA_* ""intelligence"" seperators.
+// Now includes bitflags, so to target two classes you just do 'MOB_CLASS_ANIMAL|MOB_CLASS_HUMANOID'
+#define MOB_CLASS_NONE 0 // Default value, and used to invert for _ALL.
+
+#define MOB_CLASS_PLANT 1 // Unused at the moment.
+#define MOB_CLASS_ANIMAL 2 // Animals and beasts like spiders, saviks, and bears.
+#define MOB_CLASS_HUMANOID 4 // Non-robotic humanoids, including /simple_mob and /carbon/humans and their alien variants.
+#define MOB_CLASS_SYNTHETIC 8 // Silicons, mechanical simple mobs, FBPs, and anything else that would pass is_synthetic()
+#define MOB_CLASS_SLIME 16 // Everyone's favorite xenobiology specimen (and maybe prometheans?).
+#define MOB_CLASS_ABERRATION 32 // Weird shit.
+#define MOB_CLASS_DEMONIC 64 // Cult stuff.
+#define MOB_CLASS_BOSS 128 // Future megafauna hopefully someday.
+#define MOB_CLASS_ILLUSION 256 // Fake mobs, e.g. Technomancer illusions.
+#define MOB_CLASS_PHOTONIC 512 // Holographic mobs like holocarp, similar to _ILLUSION, but that make no attempt to hide their true nature.
+
+#define MOB_CLASS_ALL (~MOB_CLASS_NONE)
+
// For slime commanding. Higher numbers allow for more actions.
#define SLIME_COMMAND_OBEY 1 // When disciplined.
#define SLIME_COMMAND_FACTION 2 // When in the same 'faction'.
#define SLIME_COMMAND_FRIEND 3 // When befriended with a slime friendship agent.
+// Threshold for mobs being able to damage things like airlocks or reinforced glass windows.
+// If the damage is below this, nothing will happen besides a message saying that the attack was ineffective.
+// Generally, this was not a define but was commonly set to 10, however 10 may be too low now since simple_mobs now attack twice as fast,
+// at half damage compared to the old mob system, meaning mobs who could hurt structures may not be able to now, so now it is 5.
+#define STRUCTURE_MIN_DAMAGE_THRESHOLD 5
+
//Vision flags, for dealing with plane visibility
#define VIS_FULLBRIGHT 1
#define VIS_LIGHTING 2
diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm
index 5c2d9a8ca3..391aa3a117 100644
--- a/code/__defines/subsystems.dm
+++ b/code/__defines/subsystems.dm
@@ -60,6 +60,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
#define INIT_ORDER_OVERLAY -6
#define INIT_ORDER_XENOARCH -20
#define INIT_ORDER_CIRCUIT -21
+#define INIT_ORDER_AI -22
// Subsystem fire priority, from lowest to highest priority
@@ -67,6 +68,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
#define FIRE_PRIORITY_SHUTTLES 5
#define FIRE_PRIORITY_ORBIT 8
#define FIRE_PRIORITY_VOTE 9
+#define FIRE_PRIORITY_AI 10
#define FIRE_PRIORITY_GARBAGE 15
#define FIRE_PRIORITY_AIRFLOW 30
#define FIRE_PRIORITY_AIR 35
diff --git a/code/_global_vars/misc.dm b/code/_global_vars/misc.dm
index 5e7737f163..504246e304 100644
--- a/code/_global_vars/misc.dm
+++ b/code/_global_vars/misc.dm
@@ -2,4 +2,4 @@ GLOBAL_LIST_EMPTY(all_observable_events)
GLOBAL_VAR_INIT(timezoneOffset, 0) // The difference betwen midnight (of the host computer) and 0 world.ticks.
-GLOBAL_VAR_INIT(TAB, " ")
\ No newline at end of file
+GLOBAL_VAR_INIT(TAB, " ")
diff --git a/code/_global_vars/mobs.dm b/code/_global_vars/mobs.dm
index fac5a14036..a5099a68d2 100644
--- a/code/_global_vars/mobs.dm
+++ b/code/_global_vars/mobs.dm
@@ -2,4 +2,4 @@ GLOBAL_LIST_EMPTY(admins) //all clients whom are admins
GLOBAL_PROTECT(admins)
GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb.
GLOBAL_LIST_EMPTY(stealthminID)
-GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client
\ No newline at end of file
+GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client
diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm
index ce640731a6..8348796665 100644
--- a/code/_helpers/time.dm
+++ b/code/_helpers/time.dm
@@ -239,4 +239,4 @@ var/round_start_time = 0
else
day = "[truncate ? "day" : "1 day"]"
- return "[day][hour][minute][second]"
\ No newline at end of file
+ return "[day][hour][minute][second]"
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 7f1ff432e8..1836fbf30f 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -501,7 +501,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
moblist.Add(M)
for(var/mob/new_player/M in sortmob)
moblist.Add(M)
- for(var/mob/living/simple_animal/M in sortmob)
+ for(var/mob/living/simple_mob/M in sortmob)
moblist.Add(M)
// for(var/mob/living/silicon/hivebot/M in sortmob)
// mob_list.Add(M)
diff --git a/code/_macros.dm b/code/_macros.dm
index 9cd11a6c15..c977617d4a 100644
--- a/code/_macros.dm
+++ b/code/_macros.dm
@@ -10,7 +10,7 @@
#define isalien(A) istype(A, /mob/living/carbon/alien)
-#define isanimal(A) istype(A, /mob/living/simple_animal)
+#define isanimal(A) istype(A, /mob/living/simple_mob)
#define isairlock(A) istype(A, /obj/machinery/door/airlock)
@@ -18,7 +18,7 @@
#define iscarbon(A) istype(A, /mob/living/carbon)
-#define iscorgi(A) istype(A, /mob/living/simple_animal/corgi)
+#define iscorgi(A) istype(A, /mob/living/simple_mob/animal/passive/dog/corgi)
#define isEye(A) istype(A, /mob/observer/eye)
@@ -26,7 +26,7 @@
#define isliving(A) istype(A, /mob/living)
-#define ismouse(A) istype(A, /mob/living/simple_animal/mouse)
+#define ismouse(A) istype(A, /mob/living/simple_mob/animal/passive/mouse)
#define isnewplayer(A) istype(A, /mob/new_player)
@@ -42,11 +42,11 @@
#define isvoice(A) istype(A, /mob/living/voice)
-#define isslime(A) istype(A, /mob/living/simple_animal/slime)
+#define isslime(A) istype(A, /mob/living/simple_mob/slime)
#define isbot(A) istype(A, /mob/living/bot)
-#define isxeno(A) istype(A, /mob/living/simple_animal/xeno)
+#define isxeno(A) istype(A, /mob/living/simple_mob/animal/space/alien)
#define isopenspace(A) istype(A, /turf/simulated/open)
diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm
index 94a067200a..2a92ba20bc 100644
--- a/code/_onclick/hud/fullscreen.dm
+++ b/code/_onclick/hud/fullscreen.dm
@@ -98,7 +98,7 @@
/obj/screen/fullscreen/flash
icon = 'icons/mob/screen1.dmi'
screen_loc = "WEST,SOUTH to EAST,NORTH"
- icon_state = "flash"
+ icon_state = "flash_static"
/obj/screen/fullscreen/flash/noise
icon_state = "noise"
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 8b32d1447e..fef0301c81 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -316,8 +316,6 @@ datum/hud/New(mob/owner)
mymob.instantiate_hud(src)
else if(isalien(mymob))
larva_hud()
- else if(isslime(mymob))
- slime_hud()
else if(isAI(mymob))
ai_hud()
else if(isobserver(mymob))
diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm
index f1b9165a26..b0f55f5503 100644
--- a/code/_onclick/hud/other_mobs.dm
+++ b/code/_onclick/hud/other_mobs.dm
@@ -23,7 +23,7 @@
mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay)
mymob.client.screen += mymob.client.void
-
+/*
/datum/hud/proc/slime_hud(ui_style = 'icons/mob/screen1_Midnight.dmi')
src.adding = list()
@@ -92,10 +92,7 @@
mymob.client.screen += mymob.client.void
return
-
-
-/mob/living/simple_animal/construct/instantiate_hud(var/datum/hud/HUD)
- ..(HUD)
+*/
// HUD.construct_hud() //Archaic.
/*
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index d1a61ec8f4..a1f2335a9d 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -60,7 +60,7 @@ avoid code duplication. This includes items that may sometimes act as a standard
// Same as above but actually does useful things.
// W is the item being used in the attack, if any. modifier is if the attack should be longer or shorter than usual, for whatever reason.
/mob/living/get_attack_speed(var/obj/item/W)
- var/speed = DEFAULT_ATTACK_COOLDOWN
+ var/speed = base_attack_cooldown
if(W && istype(W))
speed = W.attackspeed
for(var/datum/modifier/M in modifiers)
diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 729330ddaa..e367769b07 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -68,58 +68,3 @@
*/
/mob/new_player/ClickOn()
return
-
-/*
- Animals
-*/
-/mob/living/simple_animal/UnarmedAttack(var/atom/A, var/proximity)
- if(!(. = ..()))
- return
-
- setClickCooldown(get_attack_speed())
-
- if(has_hands && istype(A,/obj) && a_intent != I_HURT)
- var/obj/O = A
- return O.attack_hand(src)
-
- switch(a_intent)
- if(I_HELP)
- if(isliving(A))
- custom_emote(1,"[pick(friendly)] [A]!")
-
- if(I_HURT)
- if(prob(spattack_prob))
- if(spattack_min_range <= 1)
- SpecialAtkTarget()
-
-
- else if(melee_damage_upper == 0 && istype(A,/mob/living))
- custom_emote(1,"[pick(friendly)] [A]!")
-
-
- else
- DoPunch(A)
-
- if(I_GRAB)
- if(has_hands)
- A.attack_hand(src)
-
- if(I_DISARM)
- if(has_hands)
- A.attack_hand(src)
-
-/mob/living/simple_animal/RangedAttack(var/atom/A)
- setClickCooldown(get_attack_speed())
- var/distance = get_dist(src, A)
-
- if(prob(spattack_prob) && (distance >= spattack_min_range) && (distance <= spattack_max_range))
- target_mob = A
- SpecialAtkTarget()
- target_mob = null
- return
-
- if(ranged && distance <= shoot_range)
- target_mob = A
- ShootTarget(A)
- target_mob = null
-
diff --git a/code/controllers/subsystems/ai.dm b/code/controllers/subsystems/ai.dm
new file mode 100644
index 0000000000..8977818755
--- /dev/null
+++ b/code/controllers/subsystems/ai.dm
@@ -0,0 +1,36 @@
+SUBSYSTEM_DEF(ai)
+ name = "AI"
+ init_order = INIT_ORDER_AI
+ priority = FIRE_PRIORITY_AI
+ wait = 5 // This gets run twice a second, however this is technically two loops in one, with the second loop being run every four iterations.
+ flags = SS_NO_INIT|SS_TICKER
+ runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
+
+ var/list/processing = list()
+ var/list/currentrun = list()
+
+/datum/controller/subsystem/ai/stat_entry(msg_prefix)
+ var/list/msg = list(msg_prefix)
+ msg += "P:[processing.len]"
+ ..(msg.Join())
+
+/datum/controller/subsystem/ai/fire(resumed = 0)
+ if (!resumed)
+ src.currentrun = processing.Copy()
+
+ //cache for sanic speed (lists are references anyways)
+ var/list/currentrun = src.currentrun
+
+ while(currentrun.len)
+ // var/mob/living/L = currentrun[currentrun.len]
+ var/datum/ai_holder/A = currentrun[currentrun.len]
+ --currentrun.len
+ if(!A || QDELETED(A)) // Doesn't exist or won't exist soon.
+ continue
+ if(times_fired % 4 == 0 && A.holder.stat != DEAD)
+ A.handle_strategicals()
+ if(A.holder.stat != DEAD) // The /TG/ version checks stat twice, presumably in-case processing somehow got the mob killed in that instant.
+ A.handle_tactics()
+
+ if(MC_TICK_CHECK)
+ return
diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm
index d42cbe7f63..480e0da813 100644
--- a/code/controllers/subsystems/vote.dm
+++ b/code/controllers/subsystems/vote.dm
@@ -1,373 +1,373 @@
-SUBSYSTEM_DEF(vote)
- name = "Vote"
- wait = 10
- priority = FIRE_PRIORITY_VOTE
- runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
- flags = SS_KEEP_TIMING | SS_NO_INIT
- var/list/round_voters = list()
-
- //Current vote
- var/initiator
- var/started_time
- var/time_remaining
- var/duration
- var/mode
- var/question
- var/list/choices = list()
- var/list/gamemode_names = list()
- var/list/voted = list()
- var/list/current_votes = list()
- var/list/additional_text = list()
-
-/datum/controller/subsystem/vote/fire(resumed)
- if(mode)
- time_remaining = round((started_time + duration - world.time)/10)
- if(mode == VOTE_GAMEMODE && ticker.current_state >= GAME_STATE_SETTING_UP)
- to_chat(world, "Gamemode vote aborted: Game has already started.")
- reset()
- return
- if(time_remaining <= 0)
- result()
- reset()
-
-/datum/controller/subsystem/vote/proc/autotransfer()
- initiate_vote(VOTE_CREW_TRANSFER, "the server", 1)
- log_debug("The server has called a crew transfer vote.")
-
-/datum/controller/subsystem/vote/proc/autogamemode()
- initiate_vote(VOTE_GAMEMODE, "the server", 1)
- log_debug("The server has called a gamemode vote.")
-
-/datum/controller/subsystem/vote/proc/reset()
- initiator = null
- started_time = null
- duration = null
- time_remaining = null
- mode = null
- question = null
- choices.Cut()
- voted.Cut()
- current_votes.Cut()
- additional_text.Cut()
-
-/datum/controller/subsystem/vote/proc/get_result() // Get the highest number of votes
- var/greatest_votes = 0
- var/total_votes = 0
-
- for(var/option in choices)
- var/votes = choices[option]
- total_votes += votes
- if(votes > greatest_votes)
- greatest_votes = votes
-
- if(!config.vote_no_default && choices.len) // Default-vote for everyone who didn't vote
- var/non_voters = (clients.len - total_votes)
- if(non_voters > 0)
- if(mode == VOTE_RESTART)
- choices["Continue Playing"] += non_voters
- if(choices["Continue Playing"] >= greatest_votes)
- greatest_votes = choices["Continue Playing"]
- else if(mode == VOTE_GAMEMODE)
- if(master_mode in choices)
- choices[master_mode] += non_voters
- if(choices[master_mode] >= greatest_votes)
- greatest_votes = choices[master_mode]
- else if(mode == VOTE_CREW_TRANSFER)
- var/factor = 0.5
- switch(world.time / (10 * 60)) // minutes
- if(0 to 60)
- factor = 0.5
- if(61 to 120)
- factor = 0.8
- if(121 to 240)
- factor = 1
- if(241 to 300)
- factor = 1.2
- else
- factor = 1.4
- choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor)
- world << "Crew Transfer Factor: [factor]"
- greatest_votes = max(choices["Initiate Crew Transfer"], choices["Continue The Round"])
-
- . = list() // Get all options with that many votes and return them in a list
- if(greatest_votes)
- for(var/option in choices)
- if(choices[option] == greatest_votes)
- . += option
-
-/datum/controller/subsystem/vote/proc/announce_result()
- var/list/winners = get_result()
- var/text
- if(winners.len > 0)
- if(winners.len > 1)
- if(mode != VOTE_GAMEMODE || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
- text = "Vote Tied Between:\n"
- for(var/option in winners)
- text += "\t[option]\n"
- . = pick(winners)
-
- for(var/key in current_votes)
- if(choices[current_votes[key]] == .)
- round_voters += key // Keep track of who voted for the winning round.
- if(mode != VOTE_GAMEMODE || . == "Extended" || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes
- text += "Vote Result: [mode == VOTE_GAMEMODE ? gamemode_names[.] : .]"
- else
- text += "The vote has ended."
-
- else
- text += "Vote Result: Inconclusive - No Votes!"
- if(mode == VOTE_ADD_ANTAGONIST)
- antag_add_failed = 1
- log_vote(text)
- to_chat(world, "[text]")
-
-/datum/controller/subsystem/vote/proc/result()
- . = announce_result()
- var/restart = 0
- if(.)
- switch(mode)
- if(VOTE_RESTART)
- if(. == "Restart Round")
- restart = 1
- if(VOTE_GAMEMODE)
- if(master_mode != .)
- world.save_mode(.)
- if(ticker && ticker.mode)
- restart = 1
- else
- master_mode = .
- if(VOTE_CREW_TRANSFER)
- if(. == "Initiate Crew Transfer")
- init_shift_change(null, 1)
- if(VOTE_ADD_ANTAGONIST)
- if(isnull(.) || . == "None")
- antag_add_failed = 1
- else
- additional_antag_types |= antag_names_to_ids[.]
-
- if(mode == VOTE_GAMEMODE) //fire this even if the vote fails.
- if(!round_progressing)
- round_progressing = 1
- world << "The round will start soon."
-
- if(restart)
- world << "World restarting due to vote..."
- feedback_set_details("end_error", "restart vote")
- if(blackbox)
- blackbox.save_all_data_to_sql()
- sleep(50)
- log_game("Rebooting due to restart vote")
- world.Reboot()
-
-/datum/controller/subsystem/vote/proc/submit_vote(ckey, newVote)
- if(mode)
- if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder)
- return
- if(current_votes[ckey])
- choices[choices[current_votes[ckey]]]--
- if(newVote && newVote >= 1 && newVote <= choices.len)
- choices[choices[newVote]]++
- current_votes[ckey] = newVote
- else
- current_votes[ckey] = null
-
-/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key, automatic = FALSE, time = config.vote_period)
- if(!mode)
- if(started_time != null && !(check_rights(R_ADMIN) || automatic))
- var/next_allowed_time = (started_time + config.vote_delay)
- if(next_allowed_time > world.time)
- return 0
-
- reset()
-
- switch(vote_type)
- if(VOTE_RESTART)
- choices.Add("Restart Round", "Continue Playing")
- if(VOTE_GAMEMODE)
- if(ticker.current_state >= GAME_STATE_SETTING_UP)
- return 0
- choices.Add(config.votable_modes)
- for(var/F in choices)
- var/datum/game_mode/M = gamemode_cache[F]
- if(!M)
- continue
- gamemode_names[M.config_tag] = capitalize(M.name) //It's ugly to put this here but it works
- additional_text.Add("
[M.required_players] | ")
- gamemode_names["secret"] = "Secret"
- if(VOTE_CREW_TRANSFER)
- if(!check_rights(R_ADMIN|R_MOD, 0)) // The gods care not for the affairs of the mortals
- if(get_security_level() == "red" || get_security_level() == "delta")
- initiator_key << "The current alert status is too high to call for a crew transfer!"
- return 0
- if(ticker.current_state <= GAME_STATE_SETTING_UP)
- initiator_key << "The crew transfer button has been disabled!"
- return 0
- question = "End the shift?"
- choices.Add("Initiate Crew Transfer", "Continue The Round")
- if(VOTE_ADD_ANTAGONIST)
- if(!config.allow_extra_antags || ticker.current_state >= GAME_STATE_SETTING_UP)
- return 0
- for(var/antag_type in all_antag_types)
- var/datum/antagonist/antag = all_antag_types[antag_type]
- if(!(antag.id in additional_antag_types) && antag.is_votable())
- choices.Add(antag.role_text)
- choices.Add("None")
- if(VOTE_CUSTOM)
- question = sanitizeSafe(input(usr, "What is the vote for?") as text|null)
- if(!question)
- return 0
- for(var/i = 1 to 10)
- var/option = capitalize(sanitize(input(usr, "Please enter an option or hit cancel to finish") as text|null))
- if(!option || mode || !usr.client)
- break
- choices.Add(option)
- else
- return 0
-
- mode = vote_type
- initiator = initiator_key
- started_time = world.time
- duration = time
- var/text = "[capitalize(mode)] vote started by [initiator]."
- if(mode == VOTE_CUSTOM)
- text += "\n[question]"
-
- log_vote(text)
-
- world << "[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote."
- if(vote_type == VOTE_CREW_TRANSFER || vote_type == VOTE_GAMEMODE || vote_type == VOTE_CUSTOM)
- world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3)
-
- if(mode == VOTE_GAMEMODE && round_progressing)
- round_progressing = 0
- world << "Round start has been delayed."
-
- time_remaining = round(config.vote_period / 10)
- return 1
- return 0
-
-/datum/controller/subsystem/vote/proc/interface(var/client/C)
- if(!istype(C))
- return
- var/admin = FALSE
- if(C.holder)
- if(C.holder.rights & R_ADMIN)
- admin = TRUE
-
- . = "Voting Panel"
- if(mode)
- if(question)
- . += "Vote: '[question]'
"
- else
- . += "Vote: [capitalize(mode)]
"
- . += "Time Left: [time_remaining] s
"
- . += "| Choices | Votes | "
- if(mode == VOTE_GAMEMODE)
- .+= "Minimum Players |
"
-
- for(var/i = 1 to choices.len)
- var/votes = choices[choices[i]]
- if(!votes)
- votes = 0
- . += ""
- var/thisVote = (current_votes[C.ckey] == i)
- if(mode == VOTE_GAMEMODE)
- . += "| [thisVote ? "" : ""][gamemode_names[choices[i]]][thisVote ? "" : ""] | [votes] | "
- else
- . += "[thisVote ? "" : ""][choices[i]][thisVote ? "" : ""] | [votes] | "
- if (additional_text.len >= i)
- . += additional_text[i]
- . += "
"
-
- . += "| Unvote |
"
-
- . += "
"
- if(admin)
- . += "(Cancel Vote) "
- else
- . += "Start a vote:
"
-
- . += "Close"
-
-/datum/controller/subsystem/vote/Topic(href, href_list[])
- if(!usr || !usr.client)
- return
- switch(href_list["vote"])
- if("close")
- usr << browse(null, "window=vote")
- return
-
- if("cancel")
- if(usr.client.holder)
- reset()
- if("toggle_restart")
- if(usr.client.holder)
- config.allow_vote_restart = !config.allow_vote_restart
- if("toggle_gamemode")
- if(usr.client.holder)
- config.allow_vote_mode = !config.allow_vote_mode
-
- if(VOTE_RESTART)
- if(config.allow_vote_restart || usr.client.holder)
- initiate_vote(VOTE_RESTART, usr.key)
- if(VOTE_GAMEMODE)
- if(config.allow_vote_mode || usr.client.holder)
- initiate_vote(VOTE_GAMEMODE, usr.key)
- if(VOTE_CREW_TRANSFER)
- if(config.allow_vote_restart || usr.client.holder)
- initiate_vote(VOTE_CREW_TRANSFER, usr.key)
- if(VOTE_ADD_ANTAGONIST)
- if(config.allow_extra_antags || usr.client.holder)
- initiate_vote(VOTE_ADD_ANTAGONIST, usr.key)
- if(VOTE_CUSTOM)
- if(usr.client.holder)
- initiate_vote(VOTE_CUSTOM, usr.key)
-
- if("unvote")
- submit_vote(usr.ckey, null)
-
- else
- var/t = round(text2num(href_list["vote"]))
- if(t) // It starts from 1, so there's no problem
- submit_vote(usr.ckey, t)
- usr.client.vote()
-
-/client/verb/vote()
- set category = "OOC"
- set name = "Vote"
-
- if(SSvote)
- src << browse(SSvote.interface(src), "window=vote;size=500x[300 + SSvote.choices.len * 25]")
+SUBSYSTEM_DEF(vote)
+ name = "Vote"
+ wait = 10
+ priority = FIRE_PRIORITY_VOTE
+ runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
+ flags = SS_KEEP_TIMING | SS_NO_INIT
+ var/list/round_voters = list()
+
+ //Current vote
+ var/initiator
+ var/started_time
+ var/time_remaining
+ var/duration
+ var/mode
+ var/question
+ var/list/choices = list()
+ var/list/gamemode_names = list()
+ var/list/voted = list()
+ var/list/current_votes = list()
+ var/list/additional_text = list()
+
+/datum/controller/subsystem/vote/fire(resumed)
+ if(mode)
+ time_remaining = round((started_time + duration - world.time)/10)
+ if(mode == VOTE_GAMEMODE && ticker.current_state >= GAME_STATE_SETTING_UP)
+ to_chat(world, "Gamemode vote aborted: Game has already started.")
+ reset()
+ return
+ if(time_remaining <= 0)
+ result()
+ reset()
+
+/datum/controller/subsystem/vote/proc/autotransfer()
+ initiate_vote(VOTE_CREW_TRANSFER, "the server", 1)
+ log_debug("The server has called a crew transfer vote.")
+
+/datum/controller/subsystem/vote/proc/autogamemode()
+ initiate_vote(VOTE_GAMEMODE, "the server", 1)
+ log_debug("The server has called a gamemode vote.")
+
+/datum/controller/subsystem/vote/proc/reset()
+ initiator = null
+ started_time = null
+ duration = null
+ time_remaining = null
+ mode = null
+ question = null
+ choices.Cut()
+ voted.Cut()
+ current_votes.Cut()
+ additional_text.Cut()
+
+/datum/controller/subsystem/vote/proc/get_result() // Get the highest number of votes
+ var/greatest_votes = 0
+ var/total_votes = 0
+
+ for(var/option in choices)
+ var/votes = choices[option]
+ total_votes += votes
+ if(votes > greatest_votes)
+ greatest_votes = votes
+
+ if(!config.vote_no_default && choices.len) // Default-vote for everyone who didn't vote
+ var/non_voters = (clients.len - total_votes)
+ if(non_voters > 0)
+ if(mode == VOTE_RESTART)
+ choices["Continue Playing"] += non_voters
+ if(choices["Continue Playing"] >= greatest_votes)
+ greatest_votes = choices["Continue Playing"]
+ else if(mode == VOTE_GAMEMODE)
+ if(master_mode in choices)
+ choices[master_mode] += non_voters
+ if(choices[master_mode] >= greatest_votes)
+ greatest_votes = choices[master_mode]
+ else if(mode == VOTE_CREW_TRANSFER)
+ var/factor = 0.5
+ switch(world.time / (10 * 60)) // minutes
+ if(0 to 60)
+ factor = 0.5
+ if(61 to 120)
+ factor = 0.8
+ if(121 to 240)
+ factor = 1
+ if(241 to 300)
+ factor = 1.2
+ else
+ factor = 1.4
+ choices["Initiate Crew Transfer"] = round(choices["Initiate Crew Transfer"] * factor)
+ world << "Crew Transfer Factor: [factor]"
+ greatest_votes = max(choices["Initiate Crew Transfer"], choices["Continue The Round"])
+
+ . = list() // Get all options with that many votes and return them in a list
+ if(greatest_votes)
+ for(var/option in choices)
+ if(choices[option] == greatest_votes)
+ . += option
+
+/datum/controller/subsystem/vote/proc/announce_result()
+ var/list/winners = get_result()
+ var/text
+ if(winners.len > 0)
+ if(winners.len > 1)
+ if(mode != VOTE_GAMEMODE || ticker.hide_mode == 0) // Here we are making sure we don't announce potential game modes
+ text = "Vote Tied Between:\n"
+ for(var/option in winners)
+ text += "\t[option]\n"
+ . = pick(winners)
+
+ for(var/key in current_votes)
+ if(choices[current_votes[key]] == .)
+ round_voters += key // Keep track of who voted for the winning round.
+ if(mode != VOTE_GAMEMODE || . == "Extended" || ticker.hide_mode == 0) // Announce Extended gamemode, but not other gamemodes
+ text += "Vote Result: [mode == VOTE_GAMEMODE ? gamemode_names[.] : .]"
+ else
+ text += "The vote has ended."
+
+ else
+ text += "Vote Result: Inconclusive - No Votes!"
+ if(mode == VOTE_ADD_ANTAGONIST)
+ antag_add_failed = 1
+ log_vote(text)
+ to_chat(world, "[text]")
+
+/datum/controller/subsystem/vote/proc/result()
+ . = announce_result()
+ var/restart = 0
+ if(.)
+ switch(mode)
+ if(VOTE_RESTART)
+ if(. == "Restart Round")
+ restart = 1
+ if(VOTE_GAMEMODE)
+ if(master_mode != .)
+ world.save_mode(.)
+ if(ticker && ticker.mode)
+ restart = 1
+ else
+ master_mode = .
+ if(VOTE_CREW_TRANSFER)
+ if(. == "Initiate Crew Transfer")
+ init_shift_change(null, 1)
+ if(VOTE_ADD_ANTAGONIST)
+ if(isnull(.) || . == "None")
+ antag_add_failed = 1
+ else
+ additional_antag_types |= antag_names_to_ids[.]
+
+ if(mode == VOTE_GAMEMODE) //fire this even if the vote fails.
+ if(!round_progressing)
+ round_progressing = 1
+ world << "The round will start soon."
+
+ if(restart)
+ world << "World restarting due to vote..."
+ feedback_set_details("end_error", "restart vote")
+ if(blackbox)
+ blackbox.save_all_data_to_sql()
+ sleep(50)
+ log_game("Rebooting due to restart vote")
+ world.Reboot()
+
+/datum/controller/subsystem/vote/proc/submit_vote(ckey, newVote)
+ if(mode)
+ if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder)
+ return
+ if(current_votes[ckey])
+ choices[choices[current_votes[ckey]]]--
+ if(newVote && newVote >= 1 && newVote <= choices.len)
+ choices[choices[newVote]]++
+ current_votes[ckey] = newVote
+ else
+ current_votes[ckey] = null
+
+/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key, automatic = FALSE, time = config.vote_period)
+ if(!mode)
+ if(started_time != null && !(check_rights(R_ADMIN) || automatic))
+ var/next_allowed_time = (started_time + config.vote_delay)
+ if(next_allowed_time > world.time)
+ return 0
+
+ reset()
+
+ switch(vote_type)
+ if(VOTE_RESTART)
+ choices.Add("Restart Round", "Continue Playing")
+ if(VOTE_GAMEMODE)
+ if(ticker.current_state >= GAME_STATE_SETTING_UP)
+ return 0
+ choices.Add(config.votable_modes)
+ for(var/F in choices)
+ var/datum/game_mode/M = gamemode_cache[F]
+ if(!M)
+ continue
+ gamemode_names[M.config_tag] = capitalize(M.name) //It's ugly to put this here but it works
+ additional_text.Add("[M.required_players] | ")
+ gamemode_names["secret"] = "Secret"
+ if(VOTE_CREW_TRANSFER)
+ if(!check_rights(R_ADMIN|R_MOD, 0)) // The gods care not for the affairs of the mortals
+ if(get_security_level() == "red" || get_security_level() == "delta")
+ initiator_key << "The current alert status is too high to call for a crew transfer!"
+ return 0
+ if(ticker.current_state <= GAME_STATE_SETTING_UP)
+ initiator_key << "The crew transfer button has been disabled!"
+ return 0
+ question = "End the shift?"
+ choices.Add("Initiate Crew Transfer", "Continue The Round")
+ if(VOTE_ADD_ANTAGONIST)
+ if(!config.allow_extra_antags || ticker.current_state >= GAME_STATE_SETTING_UP)
+ return 0
+ for(var/antag_type in all_antag_types)
+ var/datum/antagonist/antag = all_antag_types[antag_type]
+ if(!(antag.id in additional_antag_types) && antag.is_votable())
+ choices.Add(antag.role_text)
+ choices.Add("None")
+ if(VOTE_CUSTOM)
+ question = sanitizeSafe(input(usr, "What is the vote for?") as text|null)
+ if(!question)
+ return 0
+ for(var/i = 1 to 10)
+ var/option = capitalize(sanitize(input(usr, "Please enter an option or hit cancel to finish") as text|null))
+ if(!option || mode || !usr.client)
+ break
+ choices.Add(option)
+ else
+ return 0
+
+ mode = vote_type
+ initiator = initiator_key
+ started_time = world.time
+ duration = time
+ var/text = "[capitalize(mode)] vote started by [initiator]."
+ if(mode == VOTE_CUSTOM)
+ text += "\n[question]"
+
+ log_vote(text)
+
+ world << "[text]\nType vote or click here to place your votes.\nYou have [config.vote_period / 10] seconds to vote."
+ if(vote_type == VOTE_CREW_TRANSFER || vote_type == VOTE_GAMEMODE || vote_type == VOTE_CUSTOM)
+ world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3)
+
+ if(mode == VOTE_GAMEMODE && round_progressing)
+ round_progressing = 0
+ world << "Round start has been delayed."
+
+ time_remaining = round(config.vote_period / 10)
+ return 1
+ return 0
+
+/datum/controller/subsystem/vote/proc/interface(var/client/C)
+ if(!istype(C))
+ return
+ var/admin = FALSE
+ if(C.holder)
+ if(C.holder.rights & R_ADMIN)
+ admin = TRUE
+
+ . = "Voting Panel"
+ if(mode)
+ if(question)
+ . += "Vote: '[question]'
"
+ else
+ . += "Vote: [capitalize(mode)]
"
+ . += "Time Left: [time_remaining] s
"
+ . += "| Choices | Votes | "
+ if(mode == VOTE_GAMEMODE)
+ .+= "Minimum Players |
"
+
+ for(var/i = 1 to choices.len)
+ var/votes = choices[choices[i]]
+ if(!votes)
+ votes = 0
+ . += ""
+ var/thisVote = (current_votes[C.ckey] == i)
+ if(mode == VOTE_GAMEMODE)
+ . += "| [thisVote ? "" : ""][gamemode_names[choices[i]]][thisVote ? "" : ""] | [votes] | "
+ else
+ . += "[thisVote ? "" : ""][choices[i]][thisVote ? "" : ""] | [votes] | "
+ if (additional_text.len >= i)
+ . += additional_text[i]
+ . += "
"
+
+ . += "| Unvote |
"
+
+ . += "
"
+ if(admin)
+ . += "(Cancel Vote) "
+ else
+ . += "Start a vote:
"
+
+ . += "Close"
+
+/datum/controller/subsystem/vote/Topic(href, href_list[])
+ if(!usr || !usr.client)
+ return
+ switch(href_list["vote"])
+ if("close")
+ usr << browse(null, "window=vote")
+ return
+
+ if("cancel")
+ if(usr.client.holder)
+ reset()
+ if("toggle_restart")
+ if(usr.client.holder)
+ config.allow_vote_restart = !config.allow_vote_restart
+ if("toggle_gamemode")
+ if(usr.client.holder)
+ config.allow_vote_mode = !config.allow_vote_mode
+
+ if(VOTE_RESTART)
+ if(config.allow_vote_restart || usr.client.holder)
+ initiate_vote(VOTE_RESTART, usr.key)
+ if(VOTE_GAMEMODE)
+ if(config.allow_vote_mode || usr.client.holder)
+ initiate_vote(VOTE_GAMEMODE, usr.key)
+ if(VOTE_CREW_TRANSFER)
+ if(config.allow_vote_restart || usr.client.holder)
+ initiate_vote(VOTE_CREW_TRANSFER, usr.key)
+ if(VOTE_ADD_ANTAGONIST)
+ if(config.allow_extra_antags || usr.client.holder)
+ initiate_vote(VOTE_ADD_ANTAGONIST, usr.key)
+ if(VOTE_CUSTOM)
+ if(usr.client.holder)
+ initiate_vote(VOTE_CUSTOM, usr.key)
+
+ if("unvote")
+ submit_vote(usr.ckey, null)
+
+ else
+ var/t = round(text2num(href_list["vote"]))
+ if(t) // It starts from 1, so there's no problem
+ submit_vote(usr.ckey, t)
+ usr.client.vote()
+
+/client/verb/vote()
+ set category = "OOC"
+ set name = "Vote"
+
+ if(SSvote)
+ src << browse(SSvote.interface(src), "window=vote;size=500x[300 + SSvote.choices.len * 25]")
diff --git a/code/datums/ghost_query.dm b/code/datums/ghost_query.dm
index d041558a0c..2f7942a9b2 100644
--- a/code/datums/ghost_query.dm
+++ b/code/datums/ghost_query.dm
@@ -106,6 +106,13 @@
check_bans = list("AI", "Cyborg", "Syndicate")
cutoff_number = 1
+/datum/ghost_query/borer
+ role_name = "Cortical Borer"
+ question = "A cortical borer has just been created on the facility. Would you like to play as them?"
+ be_special_flag = BE_ALIEN
+ check_bans = list("Syndicate", "Borer")
+ cutoff_number = 1
+
// Surface stuff.
/datum/ghost_query/lost_drone
role_name = "Lost Drone"
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 5204964bda..fdca613460 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -502,7 +502,7 @@
if(!mind.assigned_role) mind.assigned_role = USELESS_JOB //defualt //VOREStation Edit - Visitor not Assistant
//slime
-/mob/living/simple_animal/slime/mind_initialize()
+/mob/living/simple_mob/slime/mind_initialize()
. = ..()
mind.assigned_role = "slime"
@@ -527,29 +527,30 @@
mind.special_role = ""
//Animals
-/mob/living/simple_animal/mind_initialize()
+/mob/living/simple_mob/mind_initialize()
. = ..()
- mind.assigned_role = "Animal"
+ mind.assigned_role = "Simple Mob"
-/mob/living/simple_animal/corgi/mind_initialize()
+/mob/living/simple_mob/animal/passive/dog/corgi/mind_initialize()
. = ..()
mind.assigned_role = "Corgi"
-/mob/living/simple_animal/shade/mind_initialize()
+/mob/living/simple_mob/construct/shade/mind_initialize()
. = ..()
mind.assigned_role = "Shade"
+ mind.special_role = "Cultist"
-/mob/living/simple_animal/construct/builder/mind_initialize()
+/mob/living/simple_mob/construct/artificer/mind_initialize()
. = ..()
mind.assigned_role = "Artificer"
mind.special_role = "Cultist"
-/mob/living/simple_animal/construct/wraith/mind_initialize()
+/mob/living/simple_mob/construct/wraith/mind_initialize()
. = ..()
mind.assigned_role = "Wraith"
mind.special_role = "Cultist"
-/mob/living/simple_animal/construct/armoured/mind_initialize()
+/mob/living/simple_mob/construct/juggernaut/mind_initialize()
. = ..()
mind.assigned_role = "Juggernaut"
mind.special_role = "Cultist"
diff --git a/code/game/antagonist/alien/borer.dm b/code/game/antagonist/alien/borer.dm
index e852bc8418..34b79271f7 100644
--- a/code/game/antagonist/alien/borer.dm
+++ b/code/game/antagonist/alien/borer.dm
@@ -5,7 +5,7 @@ var/datum/antagonist/borer/borers
role_type = BE_ALIEN
role_text = "Cortical Borer"
role_text_plural = "Cortical Borers"
- mob_path = /mob/living/simple_animal/borer
+ mob_path = /mob/living/simple_mob/animal/borer
bantype = "Borer"
welcome_text = "Use your Infest power to crawl into the ear of a host and fuse with their brain. You can only take control temporarily, and at risk of hurting your host, so be clever and careful; your host is encouraged to help you however they can. Talk to your fellow borers with :x."
antag_indicator = "brainworm"
@@ -40,7 +40,7 @@ var/datum/antagonist/borer/borers
player.objectives += new /datum/objective/escape()
/datum/antagonist/borer/place_mob(var/mob/living/mob)
- var/mob/living/simple_animal/borer/borer = mob
+ var/mob/living/simple_mob/animal/borer/borer = mob
if(istype(borer))
var/mob/living/carbon/human/host
for(var/mob/living/carbon/human/H in mob_list)
diff --git a/code/game/antagonist/station/cultist.dm b/code/game/antagonist/station/cultist.dm
index e40085f90a..e5c7d8f652 100644
--- a/code/game/antagonist/station/cultist.dm
+++ b/code/game/antagonist/station/cultist.dm
@@ -111,12 +111,12 @@ var/datum/antagonist/cultist/cult
. = ..()
if(.)
player << "You catch a glimpse of the Realm of Nar-Sie, the Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of That Which Waits. Assist your new compatriots in their dark dealings. Their goals are yours, and yours are theirs. You serve the Dark One above all else. Bring It back."
- if(player.current && !istype(player.current, /mob/living/simple_animal/construct))
+ if(player.current && !istype(player.current, /mob/living/simple_mob/construct))
player.current.add_language(LANGUAGE_CULT)
/datum/antagonist/cultist/remove_antagonist(var/datum/mind/player, var/show_message, var/implanted)
. = ..()
- if(. && player.current && !istype(player.current, /mob/living/simple_animal/construct))
+ if(. && player.current && !istype(player.current, /mob/living/simple_mob/construct))
player.current.remove_language(LANGUAGE_CULT)
/datum/antagonist/cultist/can_become_antag(var/datum/mind/player)
diff --git a/code/game/gamemodes/cult/construct_spells.dm b/code/game/gamemodes/cult/construct_spells.dm
index f8ff57fc35..60a05e2e27 100644
--- a/code/game/gamemodes/cult/construct_spells.dm
+++ b/code/game/gamemodes/cult/construct_spells.dm
@@ -476,14 +476,14 @@ proc/findNullRod(var/atom/target)
/obj/item/weapon/spell/construct/run_checks()
if(owner)
- if((iscultist(owner) || istype(owner, /mob/living/simple_animal/construct)) && (world.time >= (last_castcheck + cooldown))) //Are they a cultist or a construct, and has the cooldown time passed?
+ if((iscultist(owner) || istype(owner, /mob/living/simple_mob/construct)) && (world.time >= (last_castcheck + cooldown))) //Are they a cultist or a construct, and has the cooldown time passed?
last_castcheck = world.time
return 1
return 0
/obj/item/weapon/spell/construct/pay_energy(var/amount)
if(owner)
- if(istype(owner, /mob/living/simple_animal/construct))
+ if(istype(owner, /mob/living/simple_mob/construct))
return 1
if(iscultist(owner) && pay_blood(amount))
return 1
@@ -607,7 +607,7 @@ proc/findNullRod(var/atom/target)
name = "sphere of agony"
desc = "Call forth a portal to a dimension of naught but pain at your target."
- spawner_type = /obj/effect/temporary_effect/pulsar/agonizing_sphere
+ spawner_type = /obj/effect/temporary_effect/pulse/agonizing_sphere
/obj/item/weapon/spell/construct/spawner/agonizing_sphere/on_ranged_cast(atom/hit_atom, mob/user)
if(within_range(hit_atom) && pay_energy(10))
@@ -619,7 +619,7 @@ proc/findNullRod(var/atom/target)
var/mob/living/L = hit_atom
L.add_modifier(/datum/modifier/agonize, 10 SECONDS)
-/obj/effect/temporary_effect/pulsar/agonizing_sphere
+/obj/effect/temporary_effect/pulse/agonizing_sphere
name = "agonizing sphere"
desc = "A portal to some hellish place. Its screams wrack your body with pain.."
icon_state = "red_static_sphere"
@@ -628,19 +628,15 @@ proc/findNullRod(var/atom/target)
light_power = 5
light_color = "#FF0000"
pulses_remaining = 10
+ pulse_delay = 1 SECOND
-/obj/effect/temporary_effect/pulsar/agonizing_sphere/pulse_loop()
- while(pulses_remaining)
- sleep(1 SECONDS)
- spawn()
- for(var/mob/living/L in view(4,src))
- if(!iscultist(L) && !istype(L, /mob/living/simple_animal/construct))
- L.add_modifier(/datum/modifier/agonize, 2 SECONDS)
- if(L.isSynthetic())
- to_chat(L, "Your chassis warps as the [src] pulses!")
- L.adjustFireLoss(4)
- pulses_remaining--
- qdel(src)
+/obj/effect/temporary_effect/pulse/agonizing_sphere/on_pulse()
+ for(var/mob/living/L in view(4,src))
+ if(!iscultist(L) && !istype(L, /mob/living/simple_mob/construct))
+ L.add_modifier(/datum/modifier/agonize, 2 SECONDS)
+ if(L.isSynthetic())
+ to_chat(L, "Your chassis warps as the [src] pulses!")
+ L.adjustFireLoss(4)
//Artificer Heal
@@ -659,7 +655,7 @@ proc/findNullRod(var/atom/target)
L.add_modifier(/datum/modifier/mend_occult, 150)
qdel(src)
-//Juggernaut + Behemoth Slam
+//Juggernaut Slam
/obj/item/weapon/spell/construct/slam
name = "slam"
desc = "Empower your FIST, to send an opponent flying."
@@ -672,8 +668,8 @@ proc/findNullRod(var/atom/target)
/obj/item/weapon/spell/construct/slam/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
var/attack_message = "slams"
- if(istype(user, /mob/living/simple_animal))
- var/mob/living/simple_animal/S = user
+ if(istype(user, /mob/living/simple_mob))
+ var/mob/living/simple_mob/S = user
attack_message = pick(S.attacktext)
if(isliving(hit_atom))
var/mob/living/L = hit_atom
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 082404b271..7118aafe80 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -14,7 +14,7 @@
return
/obj/item/weapon/melee/cultblade/attack(mob/living/M, mob/living/user, var/target_zone)
- if(iscultist(user) && !istype(user, /mob/living/simple_animal/construct))
+ if(iscultist(user) && !istype(user, /mob/living/simple_mob/construct))
return ..()
var/zone = (user.hand ? "l_arm":"r_arm")
@@ -25,7 +25,7 @@
//random amount of damage between half of the blade's force and the full force of the blade.
user.apply_damage(rand(force/2, force), BRUTE, zone, 0, sharp=1, edge=1)
user.Weaken(5)
- else if(!istype(user, /mob/living/simple_animal/construct))
+ else if(!istype(user, /mob/living/simple_mob/construct))
to_chat(user, "An inexplicable force rips through you, tearing the sword from your grasp!")
else
to_chat(user, "The blade hisses, forcing itself from your manipulators. \The [src] will only allow mortals to wield it against foes, not kin.")
@@ -39,10 +39,10 @@
return 1
/obj/item/weapon/melee/cultblade/pickup(mob/living/user as mob)
- if(!iscultist(user) && !istype(user, /mob/living/simple_animal/construct))
+ if(!iscultist(user) && !istype(user, /mob/living/simple_mob/construct))
to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the cultist's sword. It would be wise to be rid of this blade quickly.")
user.make_dizzy(120)
- if(istype(user, /mob/living/simple_animal/construct))
+ if(istype(user, /mob/living/simple_mob/construct))
to_chat(user, "\The [src] hisses, as it is discontent with your acquisition of it. It would be wise to return it to a worthy mortal quickly.")
/obj/item/clothing/head/culthood
diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm
index d588299cc5..e337ca8c60 100644
--- a/code/game/gamemodes/cult/cult_structures.dm
+++ b/code/game/gamemodes/cult/cult_structures.dm
@@ -108,18 +108,25 @@
light_range=5
light_color="#ff0000"
spawnable=list(
+<<<<<<< HEAD
/mob/living/simple_animal/hostile/scarybat,
/mob/living/simple_animal/hostile/creature/vore,
/mob/living/simple_animal/hostile/faithless
) // Vorestation Edit
+=======
+ /mob/living/simple_mob/animal/space/bats,
+ /mob/living/simple_mob/creature,
+ /mob/living/simple_mob/faithless
+ )
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
/obj/effect/gateway/active/cult
light_range=5
light_color="#ff0000"
spawnable=list(
- /mob/living/simple_animal/hostile/scarybat/cult,
- /mob/living/simple_animal/hostile/creature/cult,
- /mob/living/simple_animal/hostile/faithless/cult
+ /mob/living/simple_mob/animal/space/bats/cult,
+ /mob/living/simple_mob/creature/cult,
+ /mob/living/simple_mob/faithless/cult
)
/obj/effect/gateway/active/cult/cultify()
diff --git a/code/game/gamemodes/cult/cultify/mob.dm b/code/game/gamemodes/cult/cultify/mob.dm
index 14bb380a19..d78956c40a 100644
--- a/code/game/gamemodes/cult/cultify/mob.dm
+++ b/code/game/gamemodes/cult/cultify/mob.dm
@@ -16,7 +16,7 @@
/mob/living/cultify()
if(iscultist(src) && client)
- var/mob/living/simple_animal/construct/harvester/C = new(get_turf(src))
+ var/mob/living/simple_mob/construct/harvester/C = new(get_turf(src))
mind.transfer_to(C)
C << "The Geometer of Blood is overjoyed to be reunited with its followers, and accepts your body in sacrifice. As reward, you have been gifted with the shell of an Harvester.
Your tendrils can use and draw runes without need for a tome, your eyes can see beings through walls, and your mind can open any door. Use these assets to serve Nar-Sie and bring him any remaining living human in the world.
You can teleport yourself back to Nar-Sie along with any being under yourself at any time using your \"Harvest\" spell."
dust()
diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/game/gamemodes/cult/soulstone.dm
similarity index 88%
rename from code/modules/mob/living/simple_animal/constructs/soulstone.dm
rename to code/game/gamemodes/cult/soulstone.dm
index 6f13789dfc..61db88917a 100644
--- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm
+++ b/code/game/gamemodes/cult/soulstone.dm
@@ -1,242 +1,246 @@
-/obj/item/device/soulstone/cultify()
- return
-
-/obj/item/device/soulstone
- name = "Soul Stone Shard"
- icon = 'icons/obj/wizard.dmi'
- icon_state = "soulstone"
- item_state = "electronic"
- desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power."
- w_class = ITEMSIZE_SMALL
- slot_flags = SLOT_BELT
- origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4)
- var/imprinted = "empty"
- var/possible_constructs = list("Juggernaut","Wraith","Artificer","Harvester")
-
-//////////////////////////////Capturing////////////////////////////////////////////////////////
-
-/obj/item/device/soulstone/attack(mob/living/carbon/human/M as mob, mob/user as mob)
- if(!istype(M, /mob/living/carbon/human))//If target is not a human.
- return ..()
- if(istype(M, /mob/living/carbon/human/dummy))
- return..()
- if(jobban_isbanned(M, "cultist"))
- user << "This person's soul is too corrupt and cannot be captured!"
- return..()
-
- if(M.has_brain_worms()) //Borer stuff - RR
- user << "This being is corrupted by an alien intelligence and cannot be soul trapped."
- return..()
-
- add_attack_logs(user,M,"Soulstone'd with [src.name]")
- transfer_soul("VICTIM", M, user)
- return
-
-
-///////////////////Options for using captured souls///////////////////////////////////////
-
-/obj/item/device/soulstone/attack_self(mob/user)
- if (!in_range(src, user))
- return
- user.set_machine(src)
- var/dat = "Soul Stone
"
- for(var/mob/living/simple_animal/shade/A in src)
- dat += "Captured Soul: [A.name]
"
- dat += {"Summon Shade"}
- dat += "
"
- dat += {" Close"}
- user << browse(dat, "window=aicard")
- onclose(user, "aicard")
- return
-
-
-
-
-/obj/item/device/soulstone/Topic(href, href_list)
- var/mob/U = usr
- if (!in_range(src, U)||U.machine!=src)
- U << browse(null, "window=aicard")
- U.unset_machine()
- return
-
- add_fingerprint(U)
- U.set_machine(src)
-
- switch(href_list["choice"])//Now we switch based on choice.
- if ("Close")
- U << browse(null, "window=aicard")
- U.unset_machine()
- return
-
- if ("Summon")
- for(var/mob/living/simple_animal/shade/A in src)
- A.status_flags &= ~GODMODE
- A.canmove = 1
- A << "You have been released from your prison, but you are still bound to [U.name]'s will. Help them suceed in their goals at all costs."
- A.forceMove(U.loc)
- A.cancel_camera()
- src.icon_state = "soulstone"
- attack_self(U)
-
-///////////////////////////Transferring to constructs/////////////////////////////////////////////////////
-/obj/structure/constructshell
- name = "empty shell"
- icon = 'icons/obj/wizard.dmi'
- icon_state = "construct"
- desc = "A wicked machine used by those skilled in magical arts. It is inactive."
-
-/obj/structure/constructshell/cultify()
- return
-
-/obj/structure/constructshell/cult
- icon_state = "construct-cult"
- desc = "This eerie contraption looks like it would come alive if supplied with a missing ingredient."
-
-/obj/structure/constructshell/attackby(obj/item/O as obj, mob/user as mob)
- if(istype(O, /obj/item/device/soulstone))
- var/obj/item/device/soulstone/S = O;
- S.transfer_soul("CONSTRUCT",src,user)
-
-
-////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
-/obj/item/device/soulstone/proc/transfer_human(var/mob/living/carbon/human/T,var/mob/U)
- if(!istype(T))
- return;
- if(src.imprinted != "empty")
- U << "Capture failed!: The soul stone has already been imprinted with [src.imprinted]'s mind!"
- return
- if ((T.health + T.halloss) > config.health_threshold_crit && T.stat != DEAD)
- U << "Capture failed!: Kill or maim the victim first!"
- return
- if(T.client == null)
- U << "Capture failed!: The soul has already fled it's mortal frame."
- return
- if(src.contents.len)
- U << "Capture failed!: The soul stone is full! Use or free an existing soul to make room."
- return
-
- for(var/obj/item/W in T)
- T.drop_from_inventory(W)
-
- new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
- T.invisibility = 101
-
- var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
- animation.icon_state = "blank"
- animation.icon = 'icons/mob/mob.dmi'
- animation.master = T
- flick("dust-h", animation)
- qdel(animation)
-
- var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade( T.loc )
- S.forceMove(src) //put shade in stone
- S.status_flags |= GODMODE //So they won't die inside the stone somehow
- S.canmove = 0//Can't move out of the soul stone
- S.name = "Shade of [T.real_name]"
- S.real_name = "Shade of [T.real_name]"
- S.icon = T.icon
- S.icon_state = T.icon_state
- S.overlays = T.overlays
- S.color = rgb(254,0,0)
- S.alpha = 127
- if (T.client)
- T.client.mob = S
- S.cancel_camera()
-
-
- src.icon_state = "soulstone2"
- src.name = "Soul Stone: [S.real_name]"
- to_chat(S, "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs.")
- to_chat(U, "Capture successful! : [T.real_name]'s soul has been ripped from their body and stored within the soul stone.")
- to_chat(U, "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls.")
- src.imprinted = "[S.name]"
- qdel(T)
-
-/obj/item/device/soulstone/proc/transfer_shade(var/mob/living/simple_animal/shade/T,var/mob/U)
- if(!istype(T))
- return;
- if (T.stat == DEAD)
- to_chat(U, "Capture failed!: The shade has already been banished!")
- return
- if(src.contents.len)
- to_chat(U, "Capture failed!: The soul stone is full! Use or free an existing soul to make room.")
- return
- if(T.name != src.imprinted)
- to_chat(U, "Capture failed!: The soul stone has already been imprinted with [src.imprinted]'s mind!")
- return
-
- T.forceMove(src) //put shade in stone
- T.status_flags |= GODMODE
- T.canmove = 0
- T.health = T.getMaxHealth()
- src.icon_state = "soulstone2"
-
- to_chat(T, "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form")
- to_chat(U, "Capture successful! : [T.name]'s has been recaptured and stored within the soul stone.")
-
-/obj/item/device/soulstone/proc/transfer_construct(var/obj/structure/constructshell/T,var/mob/U)
- var/mob/living/simple_animal/shade/A = locate() in src
- if(!A)
- to_chat(U,"Capture failed!: The soul stone is empty! Go kill someone!")
- return;
- var/construct_class = input(U, "Please choose which type of construct you wish to create.") as null|anything in possible_constructs
- switch(construct_class)
- if("Juggernaut")
- var/mob/living/simple_animal/construct/armoured/Z = new /mob/living/simple_animal/construct/armoured (get_turf(T.loc))
- Z.key = A.key
- if(iscultist(U))
- cult.add_antagonist(Z.mind)
- qdel(T)
- to_chat(Z,"You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.")
- to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
- Z.cancel_camera()
- qdel(src)
- if("Wraith")
- var/mob/living/simple_animal/construct/wraith/Z = new /mob/living/simple_animal/construct/wraith (get_turf(T.loc))
- Z.key = A.key
- if(iscultist(U))
- cult.add_antagonist(Z.mind)
- qdel(T)
- to_chat(Z,"You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.")
- to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
- Z.cancel_camera()
- qdel(src)
- if("Artificer")
- var/mob/living/simple_animal/construct/builder/Z = new /mob/living/simple_animal/construct/builder (get_turf(T.loc))
- Z.key = A.key
- if(iscultist(U))
- cult.add_antagonist(Z.mind)
- qdel(T)
- to_chat(Z,"You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs")
- to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
- Z.cancel_camera()
- qdel(src)
- if("Harvester")
- var/mob/living/simple_animal/construct/harvester/Z = new /mob/living/simple_animal/construct/harvester (get_turf(T.loc))
- Z.key = A.key
- if(iscultist(U))
- cult.add_antagonist(Z.mind)
- qdel(T)
- to_chat(Z,"You are playing a Harvester. You are relatively weak, but your physical frailty is made up for by your ranged abilities.")
- to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
- Z.cancel_camera()
- qdel(src)
- if("Behemoth")
- var/mob/living/simple_animal/construct/behemoth/Z = new /mob/living/simple_animal/construct/behemoth (get_turf(T.loc))
- Z.key = A.key
- if(iscultist(U))
- cult.add_antagonist(Z.mind)
- qdel(T)
- to_chat(Z,"You are playing a Behemoth. You are incredibly slow, though your slowness is made up for by the fact your shell is far larger than any of your bretheren. You are the Unstoppable Force, and Immovable Object.")
- to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
- Z.cancel_camera()
- qdel(src)
-
-/obj/item/device/soulstone/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob)
- switch(choice)
- if("VICTIM")
- transfer_human(target,U)
- if("SHADE")
- transfer_shade(target,U)
- if("CONSTRUCT")
- transfer_construct(target,U)
+/////////////////////////
+// Soulstone
+/////////////////////////
+
+/obj/item/device/soulstone
+ name = "Soul Stone Shard"
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "soulstone"
+ item_state = "electronic"
+ desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power."
+ w_class = ITEMSIZE_SMALL
+ slot_flags = SLOT_BELT
+ origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4)
+ var/imprinted = "empty"
+ var/possible_constructs = list("Juggernaut","Wraith","Artificer","Harvester")
+
+/obj/item/device/soulstone/cultify()
+ return
+
+//////////////////////////////Capturing////////////////////////////////////////////////////////
+
+/obj/item/device/soulstone/attack(mob/living/carbon/human/M as mob, mob/user as mob)
+ if(!istype(M, /mob/living/carbon/human))//If target is not a human.
+ return ..()
+ if(istype(M, /mob/living/carbon/human/dummy))
+ return..()
+ if(jobban_isbanned(M, "cultist"))
+ user << "This person's soul is too corrupt and cannot be captured!"
+ return..()
+
+ if(M.has_brain_worms()) //Borer stuff - RR
+ user << "This being is corrupted by an alien intelligence and cannot be soul trapped."
+ return..()
+
+ add_attack_logs(user,M,"Soulstone'd with [src.name]")
+ transfer_soul("VICTIM", M, user)
+ return
+
+
+///////////////////Options for using captured souls///////////////////////////////////////
+
+/obj/item/device/soulstone/attack_self(mob/user)
+ if (!in_range(src, user))
+ return
+ user.set_machine(src)
+ var/dat = "Soul Stone
"
+ for(var/mob/living/simple_mob/construct/shade/A in src)
+ dat += "Captured Soul: [A.name]
"
+ dat += {"Summon Shade"}
+ dat += "
"
+ dat += {" Close"}
+ user << browse(dat, "window=aicard")
+ onclose(user, "aicard")
+ return
+
+
+
+
+/obj/item/device/soulstone/Topic(href, href_list)
+ var/mob/U = usr
+ if (!in_range(src, U)||U.machine!=src)
+ U << browse(null, "window=aicard")
+ U.unset_machine()
+ return
+
+ add_fingerprint(U)
+ U.set_machine(src)
+
+ switch(href_list["choice"])//Now we switch based on choice.
+ if ("Close")
+ U << browse(null, "window=aicard")
+ U.unset_machine()
+ return
+
+ if ("Summon")
+ for(var/mob/living/simple_mob/construct/shade/A in src)
+ A.status_flags &= ~GODMODE
+ A.canmove = 1
+ A << "You have been released from your prison, but you are still bound to [U.name]'s will. Help them suceed in their goals at all costs."
+ A.forceMove(U.loc)
+ A.cancel_camera()
+ src.icon_state = "soulstone"
+ attack_self(U)
+
+///////////////////////////Transferring to constructs/////////////////////////////////////////////////////
+/obj/structure/constructshell
+ name = "empty shell"
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "construct"
+ desc = "A wicked machine used by those skilled in magical arts. It is inactive."
+
+/obj/structure/constructshell/cultify()
+ return
+
+/obj/structure/constructshell/cult
+ icon_state = "construct-cult"
+ desc = "This eerie contraption looks like it would come alive if supplied with a missing ingredient."
+
+/obj/structure/constructshell/attackby(obj/item/O as obj, mob/user as mob)
+ if(istype(O, /obj/item/device/soulstone))
+ var/obj/item/device/soulstone/S = O;
+ S.transfer_soul("CONSTRUCT",src,user)
+
+
+////////////////////////////Proc for moving soul in and out off stone//////////////////////////////////////
+/obj/item/device/soulstone/proc/transfer_human(var/mob/living/carbon/human/T,var/mob/U)
+ if(!istype(T))
+ return;
+ if(src.imprinted != "empty")
+ U << "Capture failed!: The soul stone has already been imprinted with [src.imprinted]'s mind!"
+ return
+ if ((T.health + T.halloss) > config.health_threshold_crit && T.stat != DEAD)
+ U << "Capture failed!: Kill or maim the victim first!"
+ return
+ if(T.client == null)
+ U << "Capture failed!: The soul has already fled it's mortal frame."
+ return
+ if(src.contents.len)
+ U << "Capture failed!: The soul stone is full! Use or free an existing soul to make room."
+ return
+
+ for(var/obj/item/W in T)
+ T.drop_from_inventory(W)
+
+ new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton
+ T.invisibility = 101
+
+ var/atom/movable/overlay/animation = new /atom/movable/overlay( T.loc )
+ animation.icon_state = "blank"
+ animation.icon = 'icons/mob/mob.dmi'
+ animation.master = T
+ flick("dust-h", animation)
+ qdel(animation)
+
+ var/mob/living/simple_mob/construct/shade/S = new /mob/living/simple_mob/construct/shade( T.loc )
+ S.forceMove(src) //put shade in stone
+ S.status_flags |= GODMODE //So they won't die inside the stone somehow
+ S.canmove = 0//Can't move out of the soul stone
+ S.name = "Shade of [T.real_name]"
+ S.real_name = "Shade of [T.real_name]"
+ S.icon = T.icon
+ S.icon_state = T.icon_state
+ S.overlays = T.overlays
+ S.color = rgb(254,0,0)
+ S.alpha = 127
+ if (T.client)
+ T.client.mob = S
+ S.cancel_camera()
+
+
+ src.icon_state = "soulstone2"
+ src.name = "Soul Stone: [S.real_name]"
+ to_chat(S, "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs.")
+ to_chat(U, "Capture successful! : [T.real_name]'s soul has been ripped from their body and stored within the soul stone.")
+ to_chat(U, "The soulstone has been imprinted with [S.real_name]'s mind, it will no longer react to other souls.")
+ src.imprinted = "[S.name]"
+ qdel(T)
+
+/obj/item/device/soulstone/proc/transfer_shade(var/mob/living/simple_mob/construct/shade/T,var/mob/U)
+ if(!istype(T))
+ return;
+ if (T.stat == DEAD)
+ to_chat(U, "Capture failed!: The shade has already been banished!")
+ return
+ if(src.contents.len)
+ to_chat(U, "Capture failed!: The soul stone is full! Use or free an existing soul to make room.")
+ return
+ if(T.name != src.imprinted)
+ to_chat(U, "Capture failed!: The soul stone has already been imprinted with [src.imprinted]'s mind!")
+ return
+
+ T.forceMove(src) //put shade in stone
+ T.status_flags |= GODMODE
+ T.canmove = 0
+ T.health = T.getMaxHealth()
+ src.icon_state = "soulstone2"
+
+ to_chat(T, "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form")
+ to_chat(U, "Capture successful! : [T.name]'s has been recaptured and stored within the soul stone.")
+
+/obj/item/device/soulstone/proc/transfer_construct(var/obj/structure/constructshell/T,var/mob/U)
+ var/mob/living/simple_mob/construct/shade/A = locate() in src
+ if(!A)
+ to_chat(U,"Capture failed!: The soul stone is empty! Go kill someone!")
+ return;
+ var/construct_class = input(U, "Please choose which type of construct you wish to create.") as null|anything in possible_constructs
+ switch(construct_class)
+ if("Juggernaut")
+ var/mob/living/simple_mob/construct/juggernaut/Z = new /mob/living/simple_mob/construct/juggernaut (get_turf(T.loc))
+ Z.key = A.key
+ if(iscultist(U))
+ cult.add_antagonist(Z.mind)
+ qdel(T)
+ to_chat(Z,"You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.")
+ to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
+ Z.cancel_camera()
+ qdel(src)
+ if("Wraith")
+ var/mob/living/simple_mob/construct/wraith/Z = new /mob/living/simple_mob/construct/wraith (get_turf(T.loc))
+ Z.key = A.key
+ if(iscultist(U))
+ cult.add_antagonist(Z.mind)
+ qdel(T)
+ to_chat(Z,"You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.")
+ to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
+ Z.cancel_camera()
+ qdel(src)
+ if("Artificer")
+ var/mob/living/simple_mob/construct/artificer/Z = new /mob/living/simple_mob/construct/artificer (get_turf(T.loc))
+ Z.key = A.key
+ if(iscultist(U))
+ cult.add_antagonist(Z.mind)
+ qdel(T)
+ to_chat(Z,"You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs")
+ to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
+ Z.cancel_camera()
+ qdel(src)
+ if("Harvester")
+ var/mob/living/simple_mob/construct/harvester/Z = new /mob/living/simple_mob/construct/harvester (get_turf(T.loc))
+ Z.key = A.key
+ if(iscultist(U))
+ cult.add_antagonist(Z.mind)
+ qdel(T)
+ to_chat(Z,"You are playing a Harvester. You are relatively weak, but your physical frailty is made up for by your ranged abilities.")
+ to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
+ Z.cancel_camera()
+ qdel(src)
+ if("Behemoth")
+ var/mob/living/simple_mob/construct/juggernaut/behemoth/Z = new /mob/living/simple_mob/construct/juggernaut/behemoth (get_turf(T.loc))
+ Z.key = A.key
+ if(iscultist(U))
+ cult.add_antagonist(Z.mind)
+ qdel(T)
+ to_chat(Z,"You are playing a Behemoth. You are incredibly slow, though your slowness is made up for by the fact your shell is far larger than any of your bretheren. You are the Unstoppable Force, and Immovable Object.")
+ to_chat(Z,"You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.")
+ Z.cancel_camera()
+ qdel(src)
+
+/obj/item/device/soulstone/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob)
+ switch(choice)
+ if("VICTIM")
+ transfer_human(target,U)
+ if("SHADE")
+ transfer_shade(target,U)
+ if("CONSTRUCT")
+ transfer_construct(target,U)
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index 4b2ab0cd7d..573f10a9b4 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -206,7 +206,7 @@ var/hadevent = 0
/proc/carp_migration() // -- Darem
for(var/obj/effect/landmark/C in landmarks_list)
if(C.name == "carpspawn")
- new /mob/living/simple_animal/hostile/carp(C.loc)
+ new /mob/living/simple_mob/animal/space/carp(C.loc)
//sleep(100)
spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes.
command_announcement.Announce("Unknown biological entities have been detected near \the [station_name()], please stand-by.", "Lifesign Alert", new_sound = 'sound/AI/commandreport.ogg')
diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm
index b2c4b68a5a..66e329ac1a 100644
--- a/code/game/gamemodes/events/holidays/Christmas.dm
+++ b/code/game/gamemodes/events/holidays/Christmas.dm
@@ -9,7 +9,7 @@
/proc/ChristmasEvent()
for(var/obj/structure/flora/tree/pine/xmas in world)
- var/mob/living/simple_animal/hostile/tree/evil_tree = new /mob/living/simple_animal/hostile/tree(xmas.loc)
+ var/mob/living/simple_mob/animal/space/tree/evil_tree = new /mob/living/simple_mob/animal/space/tree(xmas.loc)
evil_tree.icon_state = xmas.icon_state
evil_tree.icon_living = evil_tree.icon_state
evil_tree.icon_dead = evil_tree.icon_state
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index ac9a16e8b6..a410ebfe24 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -808,7 +808,7 @@ datum/objective/heist/salvage
/datum/objective/borer_survive/check_completion()
if(owner)
- var/mob/living/simple_animal/borer/B = owner
+ var/mob/living/simple_mob/animal/borer/B = owner
if(istype(B) && B.stat < 2 && B.host && B.host.stat < 2) return 1
return 0
@@ -817,7 +817,7 @@ datum/objective/heist/salvage
/datum/objective/borer_reproduce/check_completion()
if(owner && owner.current)
- var/mob/living/simple_animal/borer/B = owner.current
+ var/mob/living/simple_mob/animal/borer/B = owner.current
if(istype(B) && B.has_reproduced) return 1
return 0
diff --git a/code/game/gamemodes/technomancer/assistance/golem.dm b/code/game/gamemodes/technomancer/assistance/golem.dm
deleted file mode 100644
index 6b8654e719..0000000000
--- a/code/game/gamemodes/technomancer/assistance/golem.dm
+++ /dev/null
@@ -1,258 +0,0 @@
-//An AI-controlled 'companion' for the Technomancer. It's tough, strong, and can also use spells.
-/mob/living/simple_animal/technomancer_golem
- name = "G.O.L.E.M."
- desc = "A rather unusual looking synthetic."
- icon = 'icons/mob/mob.dmi'
- icon_state = "technomancer_golem"
- health = 250
- maxHealth = 250
- stop_automated_movement = 1
- wander = 0
- response_help = "pets"
- response_disarm = "pushes away"
- response_harm = "punches"
- harm_intent_damage = 3
-
- heat_damage_per_tick = 0
- cold_damage_per_tick = 0
-
- min_oxy = 0
- max_oxy = 0
- min_tox = 0
- max_tox = 0
- min_co2 = 0
- max_co2 = 0
- min_n2 = 0
- max_n2 = 0
- unsuitable_atoms_damage = 0
- speed = 0
-
- melee_damage_lower = 30 // It has a built in esword.
- melee_damage_upper = 30
- attack_sound = 'sound/weapons/blade1.ogg'
- attacktext = list("slashed")
- friendly = "hugs"
- resistance = 0
- melee_miss_chance = 0
-
- var/obj/item/weapon/technomancer_core/golem/core = null
- var/obj/item/weapon/spell/active_spell = null // Shield and ranged spells
- var/mob/living/master = null
-
- var/list/known_spells = list(
- "beam" = /obj/item/weapon/spell/projectile/beam,
- "chain lightning" = /obj/item/weapon/spell/projectile/chain_lightning,
- "force missile" = /obj/item/weapon/spell/projectile/force_missile,
- "ionic bolt" = /obj/item/weapon/spell/projectile/ionic_bolt,
- "lightning" = /obj/item/weapon/spell/projectile/lightning,
- "blink" = /obj/item/weapon/spell/blink,
- "dispel" = /obj/item/weapon/spell/dispel,
- "oxygenate" = /obj/item/weapon/spell/oxygenate,
- "mend life" = /obj/item/weapon/spell/modifier/mend_life,
- "mend synthetic" = /obj/item/weapon/spell/modifier/mend_synthetic,
- "mend organs" = /obj/item/weapon/spell/mend_organs,
- "purify" = /obj/item/weapon/spell/modifier/purify,
- "resurrect" = /obj/item/weapon/spell/resurrect,
- "passwall" = /obj/item/weapon/spell/passwall,
- "repel missiles" = /obj/item/weapon/spell/modifier/repel_missiles,
- "corona" = /obj/item/weapon/spell/modifier/corona,
- "haste" = /obj/item/weapon/spell/modifier/haste
- )
-
- // Holds the overlays, when idle or attacking.
- var/image/sword_image = null
- var/image/spell_image = null
- // These contain icon_states for each frame of an attack animation, which is swapped in and out manually, because BYOND.
- // They are assoc lists, to hold the frame duration and the frame icon_state in one list.
- var/list/spell_pre_attack_states = list(
- "golem_spell_attack_1" = 1,
- "golem_spell_attack_2" = 2,
- "golem_spell_attack_3" = 2
- )
- var/list/spell_post_attack_states = list(
- "golem_spell_attack_4" = 2,
- "golem_spell_attack_5" = 3,
- "golem_spell_attack_6" = 3
- )
- var/list/sword_pre_attack_states = list(
- "golem_sword_attack_1" = 1,
- "golem_sword_attack_2" = 5
- )
- var/list/sword_post_attack_states = list(
- "golem_sword_attack_3" = 1,
- "golem_sword_attack_4" = 3
- )
-
-/mob/living/simple_animal/technomancer_golem/New()
- ..()
- core = new(src)
- sword_image = image(icon, src, "golem_sword")
- spell_image = image(icon, src, "golem_spell")
- update_icon()
-
-/mob/living/simple_animal/technomancer_golem/Destroy()
- qdel(core)
- qdel(sword_image)
- qdel(spell_image)
- return ..()
-
-/mob/living/simple_animal/technomancer_golem/unref_spell()
- active_spell = null
- return ..()
-
-/mob/living/simple_animal/hostile/hivebot/death()
- ..()
- visible_message("\The [src] disintegrates!")
- new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- qdel(src)
-
-/mob/living/simple_animal/technomancer_golem/update_icon()
- overlays.Cut()
- overlays += sword_image
- overlays += spell_image
- update_modifier_visuals()
-
-// Unfortunately, BYOND does not let you flick() images or other overlays, so we need to do this in a terrible way.
-/atom/proc/manual_flick(var/list/frames, var/image/I, var/reset_to = null)
- // Swap in and out each frame manually.
- for(var/frame in frames)
- overlays -= I
- I.icon_state = frame
- overlays += I
- sleep(frames[frame])
- if(reset_to)
- // One more time to reset it to what it was before.
- overlays -= I
- I.icon_state = reset_to
- overlays += I
-
-/mob/living/simple_animal/technomancer_golem/proc/spellcast_pre_animation()
- setClickCooldown(5)
- manual_flick(spell_pre_attack_states, spell_image, reset_to = "golem_spell_attack_3")
-
-/mob/living/simple_animal/technomancer_golem/proc/spellcast_post_animation()
- setClickCooldown(8)
- manual_flick(spell_post_attack_states, spell_image, reset_to = "golem_spell")
-
-/mob/living/simple_animal/technomancer_golem/proc/sword_pre_animation()
- setClickCooldown(6)
- manual_flick(sword_pre_attack_states, sword_image)
-
-/mob/living/simple_animal/technomancer_golem/proc/sword_post_animation()
- setClickCooldown(3)
- manual_flick(sword_post_attack_states, sword_image, reset_to = "golem_sword")
-
-/mob/living/simple_animal/technomancer_golem/DoPunch(var/atom/A)
- sword_pre_animation()
- . = ..() // This does the actual attack and will check adjacency again.
- sword_post_animation()
-
-/mob/living/simple_animal/technomancer_golem/isSynthetic()
- return TRUE // So Mend Synthetic will work on them.
-
-/mob/living/simple_animal/technomancer_golem/speech_bubble_appearance()
- return "synthetic_evil"
-
-/mob/living/simple_animal/technomancer_golem/place_spell_in_hand(var/path)
- if(!path || !ispath(path))
- return 0
-
- if(active_spell)
- qdel(active_spell) // Get rid of our old spell.
-
- var/obj/item/weapon/spell/S = new path(src)
- active_spell = S
-
-/mob/living/simple_animal/technomancer_golem/verb/test_giving_spells()
- var/choice = input(usr, "What spell?", "Give spell") as null|anything in known_spells
- if(choice)
- place_spell_in_hand(known_spells[choice])
- else
- qdel(active_spell)
-
-// Used to cast spells.
-/mob/living/simple_animal/technomancer_golem/RangedAttack(var/atom/A, var/params)
- if(active_spell)
- spellcast_pre_animation()
- if(active_spell.cast_methods & CAST_RANGED)
- active_spell.on_ranged_cast(A, src)
- spellcast_post_animation()
-
-/mob/living/simple_animal/technomancer_golem/UnarmedAttack(var/atom/A, var/proximity)
- if(proximity)
- if(active_spell)
- spellcast_pre_animation()
- if(!Adjacent(A)) // Need to check again since they might've moved while 'warming up'.
- spellcast_post_animation()
- return
- var/effective_cooldown = round(active_spell.cooldown * core.cooldown_modifier, 5)
- if(active_spell.cast_methods & CAST_MELEE)
- active_spell.on_melee_cast(A, src)
- else if(active_spell.cast_methods & CAST_RANGED)
- active_spell.on_ranged_cast(A, src)
- spellcast_post_animation()
- src.setClickCooldown(effective_cooldown)
- else
- ..()
-
-/mob/living/simple_animal/technomancer_golem/get_technomancer_core()
- return core
-
-/mob/living/simple_animal/technomancer_golem/proc/bind_to_mob(mob/user)
- if(!user || master)
- return
- master = user
- name = "[master]'s [initial(name)]"
-
-/mob/living/simple_animal/technomancer_golem/examine(mob/user)
- ..()
- if(user.mind && technomancers.is_antagonist(user.mind))
- user << "Your pride and joy. It's a very special synthetic robot, capable of using functions similar to you, and you built it \
- yourself! It'll always stand by your side, ready to help you out. You have no idea what GOLEM stands for, however..."
-
-/mob/living/simple_animal/technomancer_golem/Life()
- ..()
- handle_ai()
-
-// This is where the real spaghetti begins.
-/mob/living/simple_animal/technomancer_golem/proc/handle_ai()
- if(!master)
- return
- if(get_dist(src, master) > 6 || src.z != master.z)
- targeted_blink(master)
-
- // Give our allies buffs and heals.
- for(var/mob/living/L in view(src))
- if(L in friends)
- support_friend(L)
- return
-
-/mob/living/simple_animal/technomancer_golem/proc/support_friend(var/mob/living/L)
- if(L.getBruteLoss() >= 10 || L.getFireLoss() >= 10)
- if(L.isSynthetic() && !L.has_modifier_of_type(/datum/modifier/technomancer/mend_synthetic))
- place_spell_in_hand(known_spells["mend synthetic"])
- targeted_blink(L)
- UnarmedAttack(L, 1)
- else if(!L.has_modifier_of_type(/datum/modifier/technomancer/mend_life))
- place_spell_in_hand(known_spells["mend life"])
- targeted_blink(L)
- UnarmedAttack(L, 1)
- return
-
-
- // Give them repel missiles if they lack it.
- if(!L.has_modifier_of_type(/datum/modifier/technomancer/repel_missiles))
- place_spell_in_hand(known_spells["repel missiles"])
- RangedAttack(L)
- return
-
-/mob/living/simple_animal/technomancer_golem/proc/targeted_blink(var/atom/target)
- var/datum/effect/effect/system/spark_spread/spark_system = new()
- spark_system.set_up(5, 0, get_turf(src))
- spark_system.start()
- src.visible_message("\The [src] vanishes!")
- src.forceMove(get_turf(target))
- return
\ No newline at end of file
diff --git a/code/game/gamemodes/technomancer/core_obj.dm b/code/game/gamemodes/technomancer/core_obj.dm
index 1e7488258b..830de5a5f1 100644
--- a/code/game/gamemodes/technomancer/core_obj.dm
+++ b/code/game/gamemodes/technomancer/core_obj.dm
@@ -130,7 +130,7 @@
for(var/mob/living/L in summoned_mobs)
summoned_mobs -= L
qdel(L)
- for(var/mob/living/simple_animal/ward/ward in wards_in_use)
+ for(var/mob/living/ward in wards_in_use)
wards_in_use -= ward
qdel(ward)
diff --git a/code/game/gamemodes/technomancer/spell_objs_helpers.dm b/code/game/gamemodes/technomancer/spell_objs_helpers.dm
index 105b3b3e9c..cf83640775 100644
--- a/code/game/gamemodes/technomancer/spell_objs_helpers.dm
+++ b/code/game/gamemodes/technomancer/spell_objs_helpers.dm
@@ -1,12 +1,17 @@
-//Returns 1 if the turf is dense, or if there's dense objects on it, unless told to ignore them.
-/turf/proc/check_density(var/ignore_objs = 0)
+//Returns 1 if the turf is dense, or if there's dense objects/mobs on it, unless told to ignore them.
+/turf/proc/check_density(var/ignore_objs = FALSE, var/ignore_mobs = FALSE)
if(density)
- return 1
- if(!ignore_objs)
+ return TRUE
+ if(!ignore_objs || !ignore_mobs)
for(var/atom/movable/stuff in contents)
if(stuff.density)
- return 1
- return 0
+ if(ignore_objs && isobj(stuff))
+ continue
+ else if(ignore_mobs && isliving(stuff)) // Ghosts aren't dense but keeping this limited to living type will probably save headaches in the future.
+ continue
+ else
+ return TRUE
+ return FALSE
// Used to distinguish friend from foe.
/obj/item/weapon/spell/proc/is_ally(var/mob/living/L)
@@ -14,9 +19,9 @@
return 1
if(L.mind && technomancers.is_antagonist(L.mind)) // This should be done better since we might want opposing technomancers later.
return 1
- if(istype(L, /mob/living/simple_animal/hostile)) // Mind controlled simple mobs count as allies too.
- var/mob/living/simple_animal/SA = L
- if(owner in SA.friends)
+ if(istype(L, /mob/living/simple_mob)) // Mind controlled simple mobs count as allies too.
+ var/mob/living/simple_mob/SM = L
+ if(owner in SM.friends)
return 1
return 0
diff --git a/code/game/gamemodes/technomancer/spells/abjuration.dm b/code/game/gamemodes/technomancer/spells/abjuration.dm
index 146c90a987..0eb566a637 100644
--- a/code/game/gamemodes/technomancer/spells/abjuration.dm
+++ b/code/game/gamemodes/technomancer/spells/abjuration.dm
@@ -16,12 +16,12 @@
/obj/item/weapon/spell/abjuration/on_ranged_cast(atom/hit_atom, mob/user)
if(istype(hit_atom, /mob/living) && pay_energy(500) && within_range(hit_atom))
var/mob/living/L = hit_atom
- var/mob/living/simple_animal/SA = null
+ var/mob/living/simple_mob/SM = null
//Bit of a roundabout typecheck, in order to test for two variables from two different mob types in one line.
- if(istype(L, /mob/living/simple_animal))
- SA = L
- if(L.summoned || (SA && SA.supernatural) )
+ if(istype(L, /mob/living/simple_mob))
+ SM = L
+ if(L.summoned || (SM && SM.supernatural) )
if(L.client) // Player-controlled mobs are immune to being killed by this.
user << "\The [L] resists your attempt to banish it!"
L << "\The [user] tried to teleport you far away, but failed."
@@ -29,8 +29,8 @@
else
visible_message("\The [L] vanishes!")
qdel(L)
- else if(istype(L, /mob/living/simple_animal/construct))
- var/mob/living/simple_animal/construct/evil = L
+ else if(istype(L, /mob/living/simple_mob/construct))
+ var/mob/living/simple_mob/construct/evil = L
evil << "\The [user]'s abjuration purges your form!"
evil.purge = 3
adjust_instability(5)
diff --git a/code/game/gamemodes/technomancer/spells/control.dm b/code/game/gamemodes/technomancer/spells/control.dm
index e76e63490c..f86fd79bf5 100644
--- a/code/game/gamemodes/technomancer/spells/control.dm
+++ b/code/game/gamemodes/technomancer/spells/control.dm
@@ -21,6 +21,7 @@
aspect = ASPECT_BIOMED //Not sure if this should be something else.
var/image/control_overlay = null
var/list/controlled_mobs = list()
+<<<<<<< HEAD
var/list/allowed_mobs = list(
/mob/living/bot,
/mob/living/simple_animal/cat,
@@ -45,67 +46,70 @@
/mob/living/simple_animal/hostile/savik,
/mob/living/simple_animal/hostile/shantak
)
+=======
+ var/allowed_mob_classes = MOB_CLASS_ANIMAL|MOB_CLASS_SYNTHETIC
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
//This unfortunately is gonna be rather messy due to the various mobtypes involved.
/obj/item/weapon/spell/control/proc/select(var/mob/living/L)
- if(!(is_type_in_list(L, allowed_mobs)))
- return 0
+ if(!(L.mob_class & allowed_mob_classes))
+ return FALSE
- if(istype(L, /mob/living/simple_animal))
- var/mob/living/simple_animal/SA = L
- SA.ai_inactive = 1
- SA.friends |= src.owner
- SA.stance = STANCE_IDLE
+ if(!L.has_AI())
+ return FALSE
- L.overlays |= control_overlay
+ var/datum/ai_holder/AI = L.ai_holder
+ AI.hostile = FALSE // The Technomancer chooses the target, not the AI.
+ AI.retaliate = TRUE
+ AI.wander = FALSE
+ AI.forget_everything()
+
+ if(istype(L, /mob/living/simple_mob))
+ var/mob/living/simple_mob/SM = L
+ SM.friends |= src.owner
+
+ L.add_overlay(control_overlay, TRUE)
controlled_mobs |= L
/obj/item/weapon/spell/control/proc/deselect(var/mob/living/L)
if(!(L in controlled_mobs))
- return 0
+ return FALSE
- if(istype(L, /mob/living/simple_animal))
- var/mob/living/simple_animal/SA = L
- SA.ai_inactive = 1
- if(istype(SA, /mob/living/simple_animal/hostile))
- var/mob/living/simple_animal/hostile/SAH = SA
- SAH.friends.Remove(owner)
+ if(L.has_AI())
+ var/datum/ai_holder/AI = L.ai_holder
+ AI.hostile = initial(AI.hostile)
+ AI.retaliate = initial(AI.retaliate)
+ AI.wander = initial(AI.wander)
+ AI.forget_everything()
- L.overlays.Remove(control_overlay)
+ if(istype(L, /mob/living/simple_mob))
+ var/mob/living/simple_mob/SM = L
+ SM.friends -= owner
+
+ L.cut_overlay(control_overlay, TRUE)
controlled_mobs.Remove(L)
/obj/item/weapon/spell/control/proc/move_all(turf/T)
- for(var/mob/living/living in controlled_mobs)
- if(living.stat)
- deselect(living)
+ for(var/mob/living/L in controlled_mobs)
+ if(!L.has_AI() || L.stat)
+ deselect(L)
continue
- if(istype(living, /mob/living/simple_animal))
- var/mob/living/simple_animal/SA = living
- SA.target_mob = null
- SA.stance = STANCE_IDLE
- walk_towards(SA,T,SA.speed)
- else
- walk_towards(living,T,5)
+ L.ai_holder.give_destination(T, 0, TRUE)
/obj/item/weapon/spell/control/proc/attack_all(mob/target)
for(var/mob/living/L in controlled_mobs)
- if(L.stat)
+ if(!L.has_AI() || L.stat)
deselect(L)
continue
- if(istype(L, /mob/living/simple_animal/hostile))
- var/mob/living/simple_animal/hostile/SAH
- SAH.target_mob = target
- else if(istype(L, /mob/living/bot))
- var/mob/living/bot/B = L
- B.UnarmedAttack(L)
+ L.ai_holder.give_target(target)
-/obj/item/weapon/spell/control/New()
+/obj/item/weapon/spell/control/initialize()
control_overlay = image('icons/obj/spells.dmi',"controlled")
- ..()
+ return ..()
/obj/item/weapon/spell/control/Destroy()
- for(var/mob/living/simple_animal/hostile/SM in controlled_mobs)
- deselect(SM)
+ for(var/mob/living/L in controlled_mobs)
+ deselect(L)
controlled_mobs = list()
return ..()
@@ -127,11 +131,14 @@
trying to use it on yourself, perhaps you're an exception? Regardless, nothing happens."
return 0
- if(is_type_in_list(L, allowed_mobs))
+ if(L.mob_class & allowed_mob_classes)
if(!(L in controlled_mobs)) //Selecting
if(L.client)
user << "\The [L] seems to resist you!"
return 0
+ if(!L.has_AI())
+ to_chat(user, span("warning", "\The [L] seems too dim for this to work on them."))
+ return FALSE
if(pay_energy(500))
select(L)
user << "\The [L] is now under your (limited) control."
diff --git a/code/game/gamemodes/technomancer/spells/gambit.dm b/code/game/gamemodes/technomancer/spells/gambit.dm
index e0116073dc..5e03a8ca19 100644
--- a/code/game/gamemodes/technomancer/spells/gambit.dm
+++ b/code/game/gamemodes/technomancer/spells/gambit.dm
@@ -75,9 +75,9 @@
for(var/mob/living/L in view(owner))
// Spiders, carp... bears.
- if(istype(L, /mob/living/simple_animal))
- var/mob/living/simple_animal/SM = L
- if(!is_ally(SM) && SM.hostile)
+ if(istype(L, /mob/living/simple_mob))
+ var/mob/living/simple_mob/SM = L
+ if(!is_ally(SM) && SM.has_AI() && SM.ai_holder.hostile)
hostile_mobs++
if(SM.summoned || SM.supernatural) // Our creations might be trying to kill us.
potential_spells |= /obj/item/weapon/spell/abjuration
diff --git a/code/game/gamemodes/technomancer/spells/illusion.dm b/code/game/gamemodes/technomancer/spells/illusion.dm
index 418df75539..8dccc2b9ec 100644
--- a/code/game/gamemodes/technomancer/spells/illusion.dm
+++ b/code/game/gamemodes/technomancer/spells/illusion.dm
@@ -14,7 +14,7 @@
aspect = ASPECT_LIGHT
cast_methods = CAST_RANGED | CAST_USE
var/atom/movable/copied = null
- var/mob/living/simple_animal/illusion/illusion = null
+ var/mob/living/simple_mob/illusion/illusion = null
/obj/item/weapon/spell/illusion/on_ranged_cast(atom/hit_atom, mob/user)
if(istype(hit_atom, /atom/movable))
@@ -33,17 +33,13 @@
if(pay_energy(500))
illusion = new(T)
illusion.copy_appearance(copied)
- if(ishuman(copied))
- var/mob/living/carbon/human/H = copied
- // This is to try to have the illusion move at the same rate the real mob world.
- illusion.step_delay = max(H.movement_delay() + 4, 3)
user << "An illusion of \the [copied] is made on \the [T]."
user << 'sound/effects/pop.ogg'
return 1
else
if(pay_energy(100))
- spawn(1)
- illusion.walk_loop(T)
+ var/datum/ai_holder/AI = illusion.ai_holder
+ AI.give_destination(T)
/obj/item/weapon/spell/illusion/on_use_cast(mob/user)
if(illusion)
@@ -76,116 +72,3 @@
temp_image.transform = M
// temp_image.pixel_y = 8
src.overlays.Add(temp_image)
-
-
-/mob/living/simple_animal/illusion
- name = "illusion" // gets overwritten
- desc = "If you can read me, the game broke. Please report this to a coder."
- resistance = 1000 // holograms are tough
- wander = 0
- response_help = "pushes a hand through"
- response_disarm = "tried to disarm"
- response_harm = "tried to punch"
- var/atom/movable/copying = null
- universal_speak = 1
- var/realistic = 0
- var/list/path = list() //Used for AStar pathfinding.
- var/walking = 0
- var/step_delay = 10
-
-/mob/living/simple_animal/illusion/update_icon() // We don't want the appearance changing AT ALL unless by copy_appearance().
- return
-
-/mob/living/simple_animal/illusion/proc/copy_appearance(var/atom/movable/thing_to_copy)
- if(!thing_to_copy)
- return 0
- name = thing_to_copy.name
- desc = thing_to_copy.desc
- gender = thing_to_copy.gender
- appearance = thing_to_copy.appearance
- copying = thing_to_copy
- return 1
-
-// We use special movement code for illusions, because BYOND's default pathfinding will use diagonal movement if it results
-// in the shortest path. As players are incapable of moving in diagonals, we must do this or else illusions will not be convincing.
-/mob/living/simple_animal/illusion/proc/calculate_path(var/turf/targeted_loc)
- if(!path.len || !path)
- spawn(0)
- path = AStar(loc, targeted_loc, /turf/proc/CardinalTurfs, /turf/proc/Distance, 0, 10, id = null)
- if(!path)
- path = list()
- return
-
-/mob/living/simple_animal/illusion/proc/walk_path(var/turf/targeted_loc)
- if(path && path.len)
- step_to(src, path[1])
- path -= path[1]
- return
- else
- if(targeted_loc)
- calculate_path(targeted_loc)
-
-/mob/living/simple_animal/illusion/proc/walk_loop(var/turf/targeted_loc)
- if(walking) //Already busy moving somewhere else.
- return 0
- walking = 1
- calculate_path(targeted_loc)
- if(!targeted_loc)
- walking = 0
- return 0
- if(path.len == 0)
- calculate_path(targeted_loc)
- while(loc != targeted_loc)
- walk_path(targeted_loc)
- sleep(step_delay)
- walking = 0
- return 1
-
-// Because we can't perfectly duplicate some examine() output, we directly examine the AM it is copying. It's messy but
-// this is to prevent easy checks from the opposing force.
-/mob/living/simple_animal/illusion/examine(mob/user)
- if(copying)
- copying.examine(user)
- return
- ..()
-
-/mob/living/simple_animal/illusion/bullet_act(var/obj/item/projectile/P)
- if(!P)
- return
-
- if(realistic)
- return ..()
-
- return PROJECTILE_FORCE_MISS
-
-/mob/living/simple_animal/illusion/attack_hand(mob/living/carbon/human/M)
- if(!realistic)
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- visible_message("[M]'s hand goes through \the [src]!")
- return
- else
- switch(M.a_intent)
-
- if(I_HELP)
- var/datum/gender/T = gender_datums[src.get_visible_gender()]
- M.visible_message("[M] hugs [src] to make [T.him] feel better!", \
- "You hug [src] to make [T.him] feel better!") // slightly redundant as at the moment most mobs still use the normal gender var, but it works and future-proofs it
- playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
-
- if(I_DISARM)
- playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
- visible_message("[M] attempted to disarm [src]!")
- M.do_attack_animation(src)
-
- if(I_GRAB)
- ..()
-
- if(I_HURT)
- adjustBruteLoss(harm_intent_damage)
- M.visible_message("[M] [response_harm] \the [src]")
- M.do_attack_animation(src)
-
- return
-
-/mob/living/simple_animal/illusion/ex_act()
- return
diff --git a/code/game/gamemodes/technomancer/spells/modifier/modifier.dm b/code/game/gamemodes/technomancer/spells/modifier/modifier.dm
index a8b9306945..3ea278286e 100644
--- a/code/game/gamemodes/technomancer/spells/modifier/modifier.dm
+++ b/code/game/gamemodes/technomancer/spells/modifier/modifier.dm
@@ -15,11 +15,13 @@
/obj/item/weapon/spell/modifier/on_melee_cast(atom/hit_atom, mob/user)
if(istype(hit_atom, /mob/living))
- on_add_modifier(hit_atom)
+ return on_add_modifier(hit_atom)
+ return FALSE
/obj/item/weapon/spell/modifier/on_ranged_cast(atom/hit_atom, mob/user)
if(istype(hit_atom, /mob/living))
- on_add_modifier(hit_atom)
+ return on_add_modifier(hit_atom)
+ return FALSE
/obj/item/weapon/spell/modifier/proc/on_add_modifier(var/mob/living/L)
@@ -32,6 +34,7 @@
MT.spell_power = calculate_spell_power(1)
log_and_message_admins("has casted [src] on [L].")
qdel(src)
+ return TRUE
// Technomancer specific subtype which keeps track of spell power and gets targeted specificially by Dispel.
/datum/modifier/technomancer
diff --git a/code/game/gamemodes/technomancer/spells/resurrect.dm b/code/game/gamemodes/technomancer/spells/resurrect.dm
index 90a352c95f..2663a132a9 100644
--- a/code/game/gamemodes/technomancer/spells/resurrect.dm
+++ b/code/game/gamemodes/technomancer/spells/resurrect.dm
@@ -30,13 +30,13 @@
this point."
return 0
user << "You stab \the [L] with a hidden integrated hypo, attempting to bring them back..."
- if(istype(L, /mob/living/simple_animal))
- var/mob/living/simple_animal/SM = L
+ if(istype(L, /mob/living/simple_mob))
+ var/mob/living/simple_mob/SM = L
SM.health = SM.getMaxHealth() / 3
SM.stat = CONSCIOUS
dead_mob_list -= SM
living_mob_list += SM
- SM.icon_state = SM.icon_living
+ SM.update_icon()
adjust_instability(15)
else if(ishuman(L))
var/mob/living/carbon/human/H = L
diff --git a/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm b/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
index 5641df2f87..18e5785a05 100644
--- a/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
+++ b/code/game/gamemodes/technomancer/spells/spawner/pulsar.dm
@@ -11,7 +11,7 @@
icon_state = "radiance"
cast_methods = CAST_RANGED | CAST_THROW
aspect = ASPECT_EMP
- spawner_type = /obj/effect/temporary_effect/pulsar
+ spawner_type = /obj/effect/temporary_effect/pulse/pulsar
/obj/item/weapon/spell/spawner/pulsar/New()
..()
@@ -25,7 +25,29 @@
/obj/item/weapon/spell/spawner/pulsar/on_throw_cast(atom/hit_atom, mob/user)
empulse(hit_atom, 1, 1, 1, 1, log=1)
-/obj/effect/temporary_effect/pulsar
+// Does something every so often. Deletes itself when pulses_remaining hits zero.
+/obj/effect/temporary_effect/pulse
+ var/pulses_remaining = 3
+ var/pulse_delay = 2 SECONDS
+
+/obj/effect/temporary_effect/pulse/initialize()
+ spawn(0)
+ pulse_loop()
+ return ..()
+
+/obj/effect/temporary_effect/pulse/proc/pulse_loop()
+ while(pulses_remaining)
+ sleep(pulse_delay)
+ on_pulse()
+ pulses_remaining--
+ qdel(src)
+
+// Override for specific effects.
+/obj/effect/temporary_effect/pulse/proc/on_pulse()
+
+
+
+/obj/effect/temporary_effect/pulse/pulsar
name = "pulsar"
desc = "Not a real pulsar, but still emits loads of EMP."
icon_state = "shield2"
@@ -33,17 +55,14 @@
light_range = 4
light_power = 5
light_color = "#2ECCFA"
- var/pulses_remaining = 3
+ pulses_remaining = 3
+
+/obj/effect/temporary_effect/pulse/pulsar/on_pulse()
+ empulse(src, 1, 1, 2, 2, log = 1)
+
+
+
+
-/obj/effect/temporary_effect/pulsar/New()
- ..()
- spawn(0)
- pulse_loop()
-/obj/effect/temporary_effect/pulsar/proc/pulse_loop()
- while(pulses_remaining)
- sleep(2 SECONDS)
- empulse(src, 1, 1, 2, 2, log = 1)
- pulses_remaining--
- qdel(src)
diff --git a/code/game/gamemodes/technomancer/spells/summon/summon_creature.dm b/code/game/gamemodes/technomancer/spells/summon/summon_creature.dm
index 9a004d3ea3..7ac370433d 100644
--- a/code/game/gamemodes/technomancer/spells/summon/summon_creature.dm
+++ b/code/game/gamemodes/technomancer/spells/summon/summon_creature.dm
@@ -16,6 +16,7 @@
desc = "Chitter chitter."
summoned_mob_type = null
summon_options = list(
+<<<<<<< HEAD
"Mouse" = /mob/living/simple_animal/mouse,
"Lizard" = /mob/living/simple_animal/lizard,
"Chicken" = /mob/living/simple_animal/chicken,
@@ -34,16 +35,34 @@
"CARP" = /mob/living/simple_animal/hostile/carp,
"BEAR" = /mob/living/simple_animal/hostile/bear
) // Vorestation edits to add vore versions.
+=======
+ "Mouse" = /mob/living/simple_mob/animal/passive/mouse,
+ "Lizard" = /mob/living/simple_mob/animal/passive/lizard,
+ "Chicken" = /mob/living/simple_mob/animal/passive/chicken,
+ "Chick" = /mob/living/simple_mob/animal/passive/chick,
+ "Crab" = /mob/living/simple_mob/animal/passive/crab,
+ "Parrot" = /mob/living/simple_mob/animal/passive/bird/parrot,
+ "Goat" = /mob/living/simple_mob/animal/goat,
+ "Cat" = /mob/living/simple_mob/animal/passive/cat,
+ "Kitten" = /mob/living/simple_mob/animal/passive/cat/kitten,
+ "Corgi" = /mob/living/simple_mob/animal/passive/dog/corgi,
+ "Corgi Pup" = /mob/living/simple_mob/animal/passive/dog/corgi/puppy,
+ "BAT" = /mob/living/simple_mob/animal/space/bats,
+ "SPIDER" = /mob/living/simple_mob/animal/giant_spider,
+ "SPIDER HUNTER" = /mob/living/simple_mob/animal/giant_spider/hunter,
+ "SPIDER NURSE" = /mob/living/simple_mob/animal/giant_spider/nurse,
+ "CARP" = /mob/living/simple_mob/animal/space/carp,
+ "BEAR" = /mob/living/simple_mob/animal/space/bear
+ )
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
cooldown = 30
instability_cost = 10
energy_cost = 1000
-/obj/item/weapon/spell/summon/summon_creature/on_summon(var/mob/living/simple_animal/summoned)
+/obj/item/weapon/spell/summon/summon_creature/on_summon(var/mob/living/simple_mob/summoned)
if(check_for_scepter())
// summoned.faction = "technomancer"
- if(istype(summoned, /mob/living/simple_animal/hostile))
- var/mob/living/simple_animal/SA = summoned
- SA.friends.Add(owner)
+ summoned.friends += owner
// Makes their new pal big and strong, if they have spell power.
summoned.maxHealth = calculate_spell_power(summoned.maxHealth)
@@ -51,15 +70,12 @@
summoned.melee_damage_lower = calculate_spell_power(summoned.melee_damage_lower)
summoned.melee_damage_upper = calculate_spell_power(summoned.melee_damage_upper)
// This makes the summon slower, so the crew has a chance to flee from massive monsters.
- summoned.move_to_delay = calculate_spell_power(round(summoned.move_to_delay))
+ summoned.movement_cooldown = calculate_spell_power(round(summoned.movement_cooldown))
var/new_size = calculate_spell_power(1)
if(new_size != 1)
- var/matrix/M = matrix()
- M.Scale(new_size)
- M.Translate(0, 16*(new_size-1))
- summoned.transform = M
+ adjust_scale(new_size)
// Now we hurt their new pal, because being forcefully abducted by teleportation can't be healthy.
- summoned.health = round(summoned.getMaxHealth() * 0.7)
\ No newline at end of file
+ summoned.adjustBruteLoss(summoned.getMaxHealth() * 0.3) // Lose 30% of max health on arrival (but could be healed back up).
\ No newline at end of file
diff --git a/code/game/gamemodes/technomancer/spells/summon/summon_ward.dm b/code/game/gamemodes/technomancer/spells/summon/summon_ward.dm
index c6e5a2804d..9500044581 100644
--- a/code/game/gamemodes/technomancer/spells/summon/summon_ward.dm
+++ b/code/game/gamemodes/technomancer/spells/summon/summon_ward.dm
@@ -1,9 +1,8 @@
/datum/technomancer/spell/summon_ward
- name = "Summon Ward"
- desc = "Teleports a prefabricated 'ward' drone to the target location, which will alert you and your allies when it sees entities \
- moving around it, or when it is attacked. They can see for up to five meters."
- enhancement_desc = "Wards can detect invisibile entities, and are more specific in relaying information about what it sees. \
- Invisible entities that are spotted by it will be decloaked."
+ name = "Summon Monitor Ward"
+ desc = "Teleports a prefabricated 'ward' drone to the target location, which will alert you when it sees entities \
+ moving around it, or when it is attacked. They can see for up to five meters. It can also see invisible entities, and \
+ forcefully decloak them if close enough."
cost = 25
obj_path = /obj/item/weapon/spell/summon/summon_ward
category = UTILITY_SPELLS
@@ -12,116 +11,10 @@
name = "summon ward"
desc = "Finally, someone you can depend on to watch your back."
cast_methods = CAST_RANGED
- summoned_mob_type = /mob/living/simple_animal/ward
+ summoned_mob_type = /mob/living/simple_mob/mechanical/ward/monitor
cooldown = 10
instability_cost = 5
energy_cost = 500
-/obj/item/weapon/spell/summon/summon_ward/on_summon(var/mob/living/simple_animal/ward/ward)
- ward.creator = owner
- if(check_for_scepter())
- ward.true_sight = 1
- ward.see_invisible = SEE_INVISIBLE_LEVEL_TWO
-
-/mob/living/simple_animal/ward
- name = "ward"
- desc = "It's a little flying drone that seems to be watching you..."
- icon = 'icons/mob/critter.dmi'
- icon_state = "ward"
- resistance = 5
- wander = 0
- response_help = "pets the"
- response_disarm = "swats away"
- response_harm = "punches"
- min_oxy = 0
- max_oxy = 0
- min_tox = 0
- max_tox = 0
- min_co2 = 0
- max_co2 = 0
- min_n2 = 0
- max_n2 = 0
- minbodytemp = 0
- maxbodytemp = 0
- unsuitable_atoms_damage = 0
- heat_damage_per_tick = 0
- cold_damage_per_tick = 0
-
- var/true_sight = 0 // If true, detects more than what the Technomancer normally can't.
- var/mob/living/carbon/human/creator = null
- var/list/seen_mobs = list()
-
-/mob/living/simple_animal/ward/death()
- if(creator)
- creator << "Your ward inside [get_area(src)] was killed!"
- ..()
- qdel(src)
-
-/mob/living/simple_animal/ward/proc/expire()
- if(creator && src)
- creator << "Your ward inside [get_area(src)] expired."
- qdel(src)
-
-/mob/living/simple_animal/ward/Life()
- ..()
- detect_mobs()
- update_icon()
-
-/mob/living/simple_animal/ward/proc/detect_mobs()
- var/list/things_in_sight = view(5,src)
- var/list/newly_seen_mobs = list()
- for(var/mob/living/L in things_in_sight)
- if(L == creator) // I really wish is_ally() was usable here.
- continue
-
- if(istype(L, /mob/living/simple_animal/ward))
- continue
-
- if(istype(L, /mob/living/simple_animal))
- var/mob/living/simple_animal/SA = L
- if(creator in SA.friends)
- continue
-
- if(!true_sight)
- var/turf/T = get_turf(L)
- var/light_amount = T.get_lumcount()
- if(light_amount <= 0.5)
- continue // Too dark to see.
-
- if(L.alpha <= 127)
- continue // Too transparent, as a mercy to camo lings.
-
- else
- L.break_cloak()
-
- // Warn the Technomancer when it sees a new mob.
- if(!(L in seen_mobs))
- seen_mobs.Add(L)
- newly_seen_mobs.Add(L)
- if(creator)
- if(true_sight)
- creator << "Your ward at [get_area(src)] detected [english_list(newly_seen_mobs)]."
- else
- creator << "Your ward at [get_area(src)] detected something."
-
- // Now get rid of old mobs that left vision.
- for(var/mob/living/L in seen_mobs)
- if(!(L in things_in_sight))
- seen_mobs.Remove(L)
-
-
-/mob/living/simple_animal/ward/update_icon()
- if(seen_mobs.len)
- icon_state = "ward_spotted"
- set_light(3, 3, l_color = "FF0000")
- else
- icon_state = "ward"
- set_light(3, 3, l_color = "00FF00")
- if(true_sight)
- overlays.Cut()
- var/image/I = image('icons/mob/critter.dmi',"ward_truesight")
- overlays.Add(I)
-
-/mob/living/simple_animal/ward/invisible_detect
- true_sight = 1
- see_invisible = SEE_INVISIBLE_LEVEL_TWO
+/obj/item/weapon/spell/summon/summon_ward/on_summon(var/mob/living/simple_mob/mechanical/ward/monitor/my_ward)
+ my_ward.owner = owner
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index 2fb2d48a82..2062f92db4 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -49,10 +49,9 @@
if(occupant)
to_chat(user, "\The [src] is already occupied!")
return
- for(var/mob/living/simple_animal/slime/M in range(1, H.affecting))
- if(M.victim == H.affecting)
- to_chat(user, "[H.affecting.name] has a slime attached to them, deal with that first.")
- return
+ if(H.affecting.has_buckled_mobs())
+ to_chat(user, span("warning", "\The [H.affecting] has other entities attached to it. Remove them first."))
+ return
var/mob/M = H.affecting
if(M.abiotic())
to_chat(user, "Subject cannot have abiotic items on.")
@@ -86,10 +85,9 @@
if(O.abiotic())
to_chat(user, "Subject cannot have abiotic items on.")
return 0
- for(var/mob/living/simple_animal/slime/M in range(1, O))
- if(M.victim == O)
- to_chat(user, "[O] has a slime attached to them, deal with that first.")
- return 0
+ if(O.has_buckled_mobs())
+ to_chat(user, span("warning", "\The [O] has other entities attached to it. Remove them first."))
+ return
if(O == user)
visible_message("[user] climbs into \the [src].")
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 20f5a617cf..20304fa2ba 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -143,7 +143,7 @@
/obj/machinery/camera/attack_generic(mob/user as mob)
if(isanimal(user))
- var/mob/living/simple_animal/S = user
+ var/mob/living/simple_mob/S = user
set_status(0)
S.do_attack_animation(src)
S.setClickCooldown(user.get_attack_speed())
diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm
index 8c435f5845..8fe6ffef8a 100644
--- a/code/game/machinery/computer/prisonshuttle.dm
+++ b/code/game/machinery/computer/prisonshuttle.dm
@@ -201,7 +201,7 @@ var/prison_shuttle_timeleft = 0
for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area...
bug.gib()
- for(var/mob/living/simple_animal/pest in end_location) // And for the other kind of bug...
+ for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug...
pest.gib()
start_location.move_contents_to(end_location)
diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm
index 1f7c959db5..431d6278d6 100644
--- a/code/game/machinery/computer/specops_shuttle.dm
+++ b/code/game/machinery/computer/specops_shuttle.dm
@@ -81,7 +81,7 @@ var/specops_shuttle_timeleft = 0
for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area...
bug.gib()
- for(var/mob/living/simple_animal/pest in end_location) // And for the other kind of bug...
+ for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug...
pest.gib()
start_location.move_contents_to(end_location)
diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm
index ba7193b69b..e02ab68474 100644
--- a/code/game/machinery/computer/syndicate_specops_shuttle.dm
+++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm
@@ -166,7 +166,7 @@ var/syndicate_elite_shuttle_timeleft = 0
for(var/mob/living/carbon/bug in end_location) // If someone somehow is still in the shuttle's docking area...
bug.gib()
- for(var/mob/living/simple_animal/pest in end_location) // And for the other kind of bug...
+ for(var/mob/living/simple_mob/pest in end_location) // And for the other kind of bug...
pest.gib()
start_location.move_contents_to(end_location)
diff --git a/code/game/machinery/computer3/computers/HolodeckControl.dm b/code/game/machinery/computer3/computers/HolodeckControl.dm
index fcff13c968..da3c2416fd 100644
--- a/code/game/machinery/computer3/computers/HolodeckControl.dm
+++ b/code/game/machinery/computer3/computers/HolodeckControl.dm
@@ -207,7 +207,7 @@
for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
qdel(B)
- for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck)
+ for(var/mob/living/simple_mob/animal/space/carp/C in linkedholodeck)
qdel(C)
holographic_items = A.copy_contents_to(linkedholodeck , 1)
@@ -228,7 +228,7 @@
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
if(L.name=="Holocarp Spawn")
- new /mob/living/simple_animal/hostile/carp(L.loc)
+ new /mob/living/simple_mob/animal/space/carp(L.loc)
/datum/file/program/holodeck/proc/emergencyShutdown()
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 20a54046a6..6993d988dd 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -199,14 +199,13 @@
return
if(occupant)
to_chat(user,"\The [src] is already occupied by [occupant].")
- for(var/mob/living/simple_animal/slime/M in range(1,grab.affecting))
- if(M.victim == grab.affecting)
- to_chat(usr, "[grab.affecting.name] will not fit into the cryo because they have a slime latched onto their head.")
- return
+ if(grab.affecting.has_buckled_mobs())
+ to_chat(user, span("warning", "\The [grab.affecting] has other entities attached to it. Remove them first."))
+ return
var/mob/M = grab.affecting
qdel(grab)
put_mob(M)
-
+
return
/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to put people into cryo without external assistance
@@ -349,14 +348,14 @@
set name = "Move Inside"
set category = "Object"
set src in oview(1)
- for(var/mob/living/simple_animal/slime/M in range(1,usr))
- if(M.victim == usr)
- to_chat(usr, "You're too busy getting your life sucked out of you.")
+ if(isliving(usr))
+ var/mob/living/L = usr
+ if(L.has_buckled_mobs())
+ to_chat(L, span("warning", "You have other entities attached to yourself. Remove them first."))
return
- if(usr.stat != 0)
- return
- put_mob(usr)
- return
+ if(L.stat != CONSCIOUS)
+ return
+ put_mob(L)
/atom/proc/return_air_for_internal_lifeform(var/mob/living/lifeform)
return return_air()
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index ffda46f7cf..fd1dbf529d 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -567,9 +567,10 @@
to_chat(usr, "\The [src] is in use.")
return
- for(var/mob/living/simple_animal/slime/M in range(1,usr))
- if(M.victim == usr)
- to_chat(usr, "You're too busy getting your life sucked out of you.")
+ if(isliving(usr))
+ var/mob/living/L = usr
+ if(L.has_buckled_mobs())
+ to_chat(L, span("warning", "You have other entities attached to yourself. Remove them first."))
return
visible_message("[usr] [on_enter_visible_message] [src].", 3)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 541e461f27..fe82ca78a7 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -46,11 +46,12 @@
var/bolt_up_sound = 'sound/machines/boltsup.ogg'
var/bolt_down_sound = 'sound/machines/boltsdown.ogg'
-/obj/machinery/door/airlock/attack_generic(var/mob/user, var/damage)
+/obj/machinery/door/airlock/attack_generic(var/mob/living/user, var/damage)
if(stat & (BROKEN|NOPOWER))
- if(damage >= 10)
+ if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
if(src.locked || src.welded)
visible_message("\The [user] begins breaking into \the [src] internals!")
+ user.set_AI_busy(TRUE) // If the mob doesn't have an AI attached, this won't do anything.
if(do_after(user,10 SECONDS,src))
src.locked = 0
src.welded = 0
@@ -58,6 +59,7 @@
open(1)
if(prob(25))
src.shock(user, 100)
+ user.set_AI_busy(FALSE)
else if(src.density)
visible_message("\The [user] forces \the [src] open!")
open(1)
@@ -508,9 +510,6 @@ About the new airlock wires panel:
return
..(user)
-/obj/machinery/door/airlock/bumpopen(mob/living/simple_animal/user as mob)
- ..(user)
-
/obj/machinery/door/airlock/proc/isElectrified()
if(src.electrified_until != 0)
return 1
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index ddb2001639..01af732f06 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -39,8 +39,8 @@
/obj/machinery/door/attack_generic(var/mob/user, var/damage)
if(isanimal(user))
- var/mob/living/simple_animal/S = user
- if(damage >= 10)
+ var/mob/living/simple_mob/S = user
+ if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
visible_message("\The [user] smashes into the [src]!")
playsound(src, S.attack_sound, 75, 1)
take_damage(damage)
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index fb7609ee05..ac5246d2da 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -216,22 +216,26 @@
return
..()
-/obj/machinery/door/firedoor/attack_generic(var/mob/user, var/damage)
+/obj/machinery/door/firedoor/attack_generic(var/mob/living/user, var/damage)
if(stat & (BROKEN|NOPOWER))
- if(damage >= 10)
+ if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
var/time_to_force = (2 + (2 * blocked)) * 5
if(src.density)
visible_message("\The [user] starts forcing \the [src] open!")
+ user.set_AI_busy(TRUE) // If the mob doesn't have an AI attached, this won't do anything.
if(do_after(user, time_to_force, src))
visible_message("\The [user] forces \the [src] open!")
src.blocked = 0
open(1)
+ user.set_AI_busy(FALSE)
else
time_to_force = (time_to_force / 2)
visible_message("\The [user] starts forcing \the [src] closed!")
+ user.set_AI_busy(TRUE) // If the mob doesn't have an AI attached, this won't do anything.
if(do_after(user, time_to_force, src))
visible_message("\The [user] forces \the [src] closed!")
close(1)
+ user.set_AI_busy(FALSE)
else
visible_message("\The [user] strains fruitlessly to force \the [src] [density ? "open" : "closed"].")
return
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 07357ceb7b..4953236007 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -406,16 +406,16 @@ var/list/turret_icons
attacked = 0
..()
-/obj/machinery/porta_turret/attack_generic(mob/user as mob, var/damage)
- if(isanimal(user))
- var/mob/living/simple_animal/S = user
- if(damage >= 10)
+/obj/machinery/porta_turret/attack_generic(mob/living/L, damage)
+ if(isanimal(L))
+ var/mob/living/simple_mob/S = L
+ if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
var/incoming_damage = round(damage - (damage / 5)) //Turrets are slightly armored, assumedly.
visible_message("\The [S] [pick(S.attacktext)] \the [src]!")
take_damage(incoming_damage)
S.do_attack_animation(src)
return 1
- visible_message("\The [user] bonks \the [src]'s casing!")
+ visible_message("\The [L] bonks \the [src]'s casing!")
return ..()
/obj/machinery/porta_turret/emag_act(var/remaining_charges, var/mob/user)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index be31a5aa56..139fd8ecb9 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -69,7 +69,7 @@
for(var/obj/machinery/teleport/hub/H in range(1))
var/amount = rand(2,5)
for(var/i=0;iKinda hard to climb in while handcuffed don't you think?"
return
- for(var/mob/living/simple_animal/slime/M in range(1,usr))
- if(M.victim == usr)
- usr << "You're too busy getting your life sucked out of you."
+ if(isliving(usr))
+ var/mob/living/L = usr
+ if(L.has_buckled_mobs())
+ to_chat(L, span("warning", "You have other entities attached to yourself. Remove them first."))
return
//search for a valid passenger compartment
@@ -1329,4 +1330,4 @@
/obj/item/mecha_parts/mecha_equipment/tool/jetpack/do_after_cooldown()
sleep(equip_cooldown)
wait = 0
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index d3bdbb4158..edb275a2fa 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -1142,10 +1142,12 @@
to_chat(usr,"Access denied")
src.log_append_to_last("Permission denied.")
return
- for(var/mob/living/simple_animal/slime/M in range(1,usr))
- if(M.victim == usr)
- to_chat(usr,"You're too busy getting your life sucked out of you.")
+ if(isliving(usr))
+ var/mob/living/L = usr
+ if(L.has_buckled_mobs())
+ to_chat(L, span("warning", "You have other entities attached to yourself. Remove them first."))
return
+
// usr << "You start climbing into [src.name]"
visible_message("\The [usr] starts to climb into [src.name]")
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index 73cee1223b..bc20f25b2e 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -99,6 +99,14 @@
name = "Dark Gygax wreckage"
icon_state = "darkgygax-broken"
+/obj/effect/decal/mecha_wreckage/gygax/adv
+ name = "Advanced Dark Gygax wreckage"
+ icon_state = "darkgygax_adv-broken"
+
+/obj/effect/decal/mecha_wreckage/gygax/medgax
+ name = "Medgax wreckage"
+ icon_state = "medgax-broken"
+
/obj/effect/decal/mecha_wreckage/marauder
name = "Marauder wreckage"
icon_state = "marauder-broken"
@@ -198,6 +206,9 @@
parts -= part
return
+/obj/effect/decal/mecha_wreckage/odysseus/murdysseus
+ icon_state = "murdysseus-broken"
+
/obj/effect/decal/mecha_wreckage/hoverpod
name = "Hover pod wreckage"
icon_state = "engineering_pod-broken"
diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm
index 8a1242d1a2..f7e886dd62 100644
--- a/code/game/mecha/medical/odysseus.dm
+++ b/code/game/mecha/medical/odysseus.dm
@@ -109,7 +109,7 @@
else if(foundVirus)
holder.icon_state = "hudill"
else if(patient.has_brain_worms())
- var/mob/living/simple_animal/borer/B = patient.has_brain_worms()
+ var/mob/living/simple_mob/animal/borer/B = patient.has_brain_worms()
if(B.controlling)
holder.icon_state = "hudbrainworm"
else
diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm
index 7504b6e65f..056d9f7295 100644
--- a/code/game/objects/effects/overlays.dm
+++ b/code/game/objects/effects/overlays.dm
@@ -99,3 +99,13 @@
mouse_opacity = FALSE
anchored = TRUE
plane = ABOVE_PLANE
+
+// Similar to the tesla ball but doesn't actually do anything and is purely visual.
+/obj/effect/overlay/energy_ball
+ name = "energy ball"
+ desc = "An energy ball."
+ icon = 'icons/obj/tesla_engine/energy_ball.dmi'
+ icon_state = "energy_ball"
+ plane = PLANE_LIGHTING_ABOVE
+ pixel_x = -32
+ pixel_y = -32
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 8e482cc1cb..f82bcefaa3 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -56,13 +56,15 @@
/obj/effect/spider/stickyweb
icon_state = "stickyweb1"
- New()
- if(prob(50))
- icon_state = "stickyweb2"
+
+/obj/effect/spider/stickyweb/initialize()
+ if(prob(50))
+ icon_state = "stickyweb2"
+ return ..()
/obj/effect/spider/stickyweb/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
- if(istype(mover, /mob/living/simple_animal/hostile/giant_spider))
+ if(istype(mover, /mob/living/simple_mob/animal/giant_spider))
return 1
else if(istype(mover, /mob/living))
if(prob(50))
@@ -80,10 +82,12 @@
var/spiders_min = 6
var/spiders_max = 24
var/spider_type = /obj/effect/spider/spiderling
- New()
- pixel_x = rand(3,-3)
- pixel_y = rand(3,-3)
- processing_objects |= src
+
+/obj/effect/spider/eggcluster/initialize()
+ pixel_x = rand(3,-3)
+ pixel_y = rand(3,-3)
+ processing_objects |= src
+ return ..()
/obj/effect/spider/eggcluster/New(var/location, var/atom/parent)
get_light_and_color(parent)
@@ -129,10 +133,10 @@
var/amount_grown = -1
var/obj/machinery/atmospherics/unary/vent_pump/entry_vent
var/travelling_in_vent = 0
- var/list/grow_as = list(/mob/living/simple_animal/hostile/giant_spider, /mob/living/simple_animal/hostile/giant_spider/nurse, /mob/living/simple_animal/hostile/giant_spider/hunter)
+ var/list/grow_as = list(/mob/living/simple_mob/animal/giant_spider, /mob/living/simple_mob/animal/giant_spider/nurse, /mob/living/simple_mob/animal/giant_spider/hunter)
/obj/effect/spider/spiderling/frost
- grow_as = list(/mob/living/simple_animal/hostile/giant_spider/frost)
+ grow_as = list(/mob/living/simple_mob/animal/giant_spider/frost)
/obj/effect/spider/spiderling/New(var/location, var/atom/parent)
pixel_x = rand(6,-6)
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index c2af338521..d700008220 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -107,7 +107,7 @@
return 0
if(!user.IsAdvancedToolUser() && isanimal(user))
- var/mob/living/simple_animal/S = user
+ var/mob/living/simple_mob/S = user
if(!S.IsHumanoidToolUser(src))
return 0
diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm
index 343a58ce1a..c35ec18e59 100644
--- a/code/game/objects/items/devices/laserpointer.dm
+++ b/code/game/objects/items/devices/laserpointer.dm
@@ -166,7 +166,7 @@
outmsg = "You missed the lens of [C] with [src]."
//cats!
- for(var/mob/living/simple_animal/cat/C in viewers(1,targloc))
+ for(var/mob/living/simple_mob/animal/passive/cat/C in viewers(1,targloc))
if (!(C.stat || C.buckled))
if(prob(50) && !(C.client))
C.visible_message("[C] pounces on the light!", "You pounce on the light!")
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index feed24510b..97d352c3d7 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -451,15 +451,15 @@ HALOGEN COUNTER - Radcount on mobs
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
/obj/item/device/slime_scanner/attack(mob/living/M as mob, mob/living/user as mob)
- if(!isslime(M))
- to_chat(user, "This device can only scan slimes!")
+ if(!istype(M, /mob/living/simple_mob/slime/xenobio))
+ to_chat(user, "This device can only scan lab-grown slimes!")
return
- var/mob/living/simple_animal/slime/S = M
+ var/mob/living/simple_mob/slime/xenobio/S = M
user.show_message("Slime scan results:
[S.slime_color] [S.is_adult ? "adult" : "baby"] slime
Health: [S.health]
Mutation Probability: [S.mutation_chance]")
var/list/mutations = list()
for(var/potential_color in S.slime_mutation)
- var/mob/living/simple_animal/slime/slime = potential_color
+ var/mob/living/simple_mob/slime/xenobio/slime = potential_color
mutations.Add(initial(slime.slime_color))
user.show_message("Potental to mutate into [english_list(mutations)] colors.
Extract potential: [S.cores]
Nutrition: [S.nutrition]/[S.get_max_nutrition()]")
@@ -469,12 +469,14 @@ HALOGEN COUNTER - Radcount on mobs
user.show_message("Warning: Subject is hungry.")
user.show_message("Electric change strength: [S.power_charge]")
- if(S.resentment)
- user.show_message("Warning: Subject is harboring resentment.")
- if(S.docile)
+ if(S.has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = S.ai_holder
+ if(AI.resentment)
+ user.show_message("Warning: Subject is harboring resentment.")
+ if(AI.rabid)
+ user.show_message("Subject is enraged and extremely dangerous!")
+ if(S.harmless)
user.show_message("Subject has been pacified.")
- if(S.rabid)
- user.show_message("Subject is enraged and extremely dangerous!")
if(S.unity)
user.show_message("Subject is friendly to other slime colors.")
diff --git a/code/game/objects/items/glassjar.dm b/code/game/objects/items/glassjar.dm
index c04b9b17dd..5de7ae3730 100644
--- a/code/game/objects/items/glassjar.dm
+++ b/code/game/objects/items/glassjar.dm
@@ -6,7 +6,7 @@
w_class = ITEMSIZE_SMALL
matter = list("glass" = 200)
flags = NOBLUDGEON
- var/list/accept_mobs = list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse)
+ var/list/accept_mobs = list(/mob/living/simple_mob/animal/passive/lizard, /mob/living/simple_mob/animal/passive/mouse)
var/contains = 0 // 0 = nothing, 1 = money, 2 = animal, 3 = spiderling
/obj/item/glass_jar/New()
diff --git a/code/game/objects/items/poi_items.dm b/code/game/objects/items/poi_items.dm
index af1b6c9c7a..30b6e12763 100644
--- a/code/game/objects/items/poi_items.dm
+++ b/code/game/objects/items/poi_items.dm
@@ -47,14 +47,3 @@
processing_objects -= src
return ..()
-
-//Crashed Cargo Shuttle PoI
-
-/obj/structure/largecrate/animal/crashedshuttle
- name = "SCP"
-
-/obj/structure/largecrate/animal/crashedshuttle/initialize()
- starts_with = list(pick(/mob/living/simple_animal/hostile/statue, /obj/item/cursed_marble, /obj/item/weapon/deadringer)) // Starts_with has to be a list
- name = pick("Spicy Crust Pizzeria", "Soap and Care Products", "Sally's Computer Parts", "Steve's Chocolate Pastries", "Smith & Christian's Plastics","Standard Containers & Packaging Co.", "Sanitary Chemical Purgation (LTD)")
- name += " delivery crate"
- return ..()
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 2fa9ea63c7..180e261fc2 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -275,13 +275,6 @@
add_flashes(W,user)
else
add_flashes(W,user)
- else if(istype(W, /obj/item/weapon/stock_parts/manipulator))
- to_chat(user, "You install some manipulators and modify the head, creating a functional spider-bot!")
- new /mob/living/simple_animal/spiderbot(get_turf(loc))
- user.drop_item()
- qdel(W)
- qdel(src)
- return
return
/obj/item/robot_parts/head/proc/add_flashes(obj/item/W as obj, mob/user as mob) //Made into a seperate proc to avoid copypasta
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
old mode 100755
new mode 100644
index c5b637d9e5..13c4b29d45
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -23,7 +23,7 @@ AI MODULES
/obj/item/weapon/aiModule/proc/install(var/atom/movable/AM, var/mob/living/user)
if(!user.IsAdvancedToolUser() && isanimal(user))
- var/mob/living/simple_animal/S = user
+ var/mob/living/simple_mob/S = user
if(!S.IsHumanoidToolUser(src))
return 0
diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
index 5a20c49ccd..a6ad6f4592 100644
--- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
@@ -31,19 +31,25 @@
/obj/item/weapon/grenade/spawnergrenade/manhacks
name = "manhack delivery grenade"
- spawner_type = /mob/living/simple_animal/hostile/viscerator
+ spawner_type = /mob/living/simple_mob/mechanical/viscerator
deliveryamt = 5
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
+/obj/item/weapon/grenade/spawnergrenade/manhacks/mercenary
+ spawner_type = /mob/living/simple_mob/mechanical/viscerator/mercenary
+
+/obj/item/weapon/grenade/spawnergrenade/manhacks/raider
+ spawner_type = /mob/living/simple_mob/mechanical/viscerator/raider
+
/obj/item/weapon/grenade/spawnergrenade/spesscarp
name = "carp delivery grenade"
- spawner_type = /mob/living/simple_animal/hostile/carp
+ spawner_type = /mob/living/simple_mob/animal/space/carp
deliveryamt = 5
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
/obj/item/weapon/grenade/spawnergrenade/spider
name = "spider delivery grenade"
- spawner_type = /mob/living/simple_animal/hostile/giant_spider/hunter
+ spawner_type = /mob/living/simple_mob/animal/giant_spider/hunter
deliveryamt = 3
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 4, TECH_ILLEGAL = 4)
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 40c074c939..f3e5d05fdf 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -336,4 +336,4 @@ var/last_chew = 0
target.m_intent = "walk"
if(target.hud_used && user.hud_used.move_intent)
target.hud_used.move_intent.icon_state = "walking"
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/objects/items/weapons/implants/implantchair.dm b/code/game/objects/items/weapons/implants/implantchair.dm
index c05d52442c..5b1ba3f6c5 100644
--- a/code/game/objects/items/weapons/implants/implantchair.dm
+++ b/code/game/objects/items/weapons/implants/implantchair.dm
@@ -79,10 +79,9 @@
var/obj/item/weapon/grab/grab = G
if(!ismob(grab.affecting))
return
- for(var/mob/living/simple_animal/slime/M in range(1,grab.affecting))
- if(M.victim == grab.affecting)
- usr << "[grab.affecting.name] will not fit into the [src.name] because they have a slime latched onto their head."
- return
+ if(grab.affecting.has_buckled_mobs())
+ to_chat(user, span("warning", "\The [grab.affecting] has other entities attached to them. Remove them first."))
+ return
var/mob/M = grab.affecting
if(put_mob(M))
qdel(G)
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index ad30eb0a57..d70de28a7e 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -233,11 +233,10 @@
playsound(get_turf(target), 'sound/weapons/blade1.ogg', 100, 1)
// Make lesser robots really mad at us.
- if(istype(target, /mob/living/simple_animal))
- var/mob/living/simple_animal/SA = target
- if(SA.intelligence_level == SA_ROBOTIC)
- SA.taunt(user)
- SA.adjustFireLoss(force * 6) // 30 Burn, for 50 total.
+ if(target.mob_class & MOB_CLASS_SYNTHETIC)
+ if(target.has_AI())
+ target.taunt(user)
+ target.adjustFireLoss(force * 6) // 30 Burn, for 50 total.
/*
*Energy Blade
diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm
index aec6a790b2..d9a886029d 100644
--- a/code/game/objects/items/weapons/policetape.dm
+++ b/code/game/objects/items/weapons/policetape.dm
@@ -292,7 +292,7 @@ var/list/tape_roll_applications = list()
add_fingerprint(M)
if (!allowed(M)) //only select few learn art of not crumpling the tape
M << "You are not supposed to go past [src]..."
- if(M.a_intent == I_HELP && !(istype(M, /mob/living/simple_animal)))
+ if(M.a_intent == I_HELP && !(istype(M, /mob/living/simple_mob)))
return 0
crumple()
return ..(mover)
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index e37b2f9977..53c092d923 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -269,9 +269,8 @@
/obj/item/weapon/melee/baton/shocker/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
..(target, user, hit_zone)
- if(istype(target, /mob/living/simple_animal) && status)
- var/mob/living/simple_animal/SA = target
- SA.taunt(user)
+ if(status && target.has_AI())
+ target.taunt(user)
// Borg version, for the lost module.
/obj/item/weapon/melee/baton/shocker/robot
diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm
index 86ac8f1267..249f49f529 100644
--- a/code/game/objects/items/weapons/tools/screwdriver.dm
+++ b/code/game/objects/items/weapons/tools/screwdriver.dm
@@ -122,4 +122,4 @@
counterpart.forceMove(get_turf(src))
src.forceMove(counterpart)
user.put_in_active_hand(counterpart)
- to_chat(user, "You attach the bolt driver bit to [src].")
\ No newline at end of file
+ to_chat(user, "You attach the bolt driver bit to [src].")
diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm
index 7c2f2ea26f..9cc09b4770 100644
--- a/code/game/objects/items/weapons/tools/weldingtool.dm
+++ b/code/game/objects/items/weapons/tools/weldingtool.dm
@@ -1,3 +1,7 @@
+<<<<<<< HEAD
+=======
+
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
#define WELDER_FUEL_BURN_INTERVAL 13
/*
* Welding Tool
@@ -317,7 +321,10 @@
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if(!E)
return
+<<<<<<< HEAD
if(H.nif && H.nif.flag_check(NIF_V_UVFILTER,NIF_FLAGS_VISION)) return //VOREStation Add - NIF
+=======
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
switch(safety)
if(1)
to_chat(usr, "Your eyes sting a little.")
diff --git a/code/game/objects/items/weapons/tools/wrench.dm b/code/game/objects/items/weapons/tools/wrench.dm
index e0a6957c3c..13cf3e51cf 100644
--- a/code/game/objects/items/weapons/tools/wrench.dm
+++ b/code/game/objects/items/weapons/tools/wrench.dm
@@ -68,4 +68,4 @@
counterpart.forceMove(get_turf(src))
src.forceMove(counterpart)
user.put_in_active_hand(counterpart)
- to_chat(user, "You attach the screw driver bit to [src].")
\ No newline at end of file
+ to_chat(user, "You attach the screw driver bit to [src].")
diff --git a/code/game/objects/random/mob.dm b/code/game/objects/random/mob.dm
index 6daa10c0f9..966498a2bd 100644
--- a/code/game/objects/random/mob.dm
+++ b/code/game/objects/random/mob.dm
@@ -18,44 +18,47 @@
var/mob_retaliate = 0
/obj/random/mob/item_to_spawn()
- return pick(prob(10);/mob/living/simple_animal/lizard,
- prob(6);/mob/living/simple_animal/retaliate/diyaab,
- prob(10);/mob/living/simple_animal/cat/fluff,
- prob(6);/mob/living/simple_animal/cat/kitten,
- prob(10);/mob/living/simple_animal/corgi,
- prob(6);/mob/living/simple_animal/corgi/puppy,
- prob(10);/mob/living/simple_animal/crab,
- prob(10);/mob/living/simple_animal/chicken,
- prob(6);/mob/living/simple_animal/chick,
- prob(10);/mob/living/simple_animal/cow,
- prob(6);/mob/living/simple_animal/retaliate/goat,
- prob(10);/mob/living/simple_animal/penguin,
- prob(10);/mob/living/simple_animal/mouse,
- prob(10);/mob/living/simple_animal/yithian,
- prob(10);/mob/living/simple_animal/tindalos,
- prob(10);/mob/living/simple_animal/corgi/tamaskan,
- prob(3);/mob/living/simple_animal/parrot,
- prob(1);/mob/living/simple_animal/giant_crab)
+ return pick(prob(10);/mob/living/simple_mob/animal/passive/lizard,
+ prob(6);/mob/living/simple_mob/animal/sif/diyaab,
+ prob(10);/mob/living/simple_mob/animal/passive/cat,
+ prob(6);/mob/living/simple_mob/animal/passive/cat,
+ prob(10);/mob/living/simple_mob/animal/passive/dog/corgi,
+ prob(6);/mob/living/simple_mob/animal/passive/dog/corgi/puppy,
+ prob(10);/mob/living/simple_mob/animal/passive/crab,
+ prob(10);/mob/living/simple_mob/animal/passive/chicken,
+ prob(6);/mob/living/simple_mob/animal/passive/chick,
+ prob(10);/mob/living/simple_mob/animal/passive/cow,
+ prob(6);/mob/living/simple_mob/animal/goat,
+ prob(10);/mob/living/simple_mob/animal/passive/penguin,
+ prob(10);/mob/living/simple_mob/animal/passive/mouse,
+ prob(10);/mob/living/simple_mob/animal/passive/yithian,
+ prob(10);/mob/living/simple_mob/animal/passive/tindalos,
+ prob(10);/mob/living/simple_mob/animal/passive/dog/tamaskan,
+ prob(3);/mob/living/simple_mob/animal/passive/bird/parrot,
+ prob(1);/mob/living/simple_mob/animal/passive/crab)
/obj/random/mob/spawn_item() //These should only ever have simple mobs.
var/build_path = item_to_spawn()
- var/mob/living/simple_animal/M = new build_path(src.loc)
- M.ai_inactive = 1 //Don't fight eachother while we're still setting up!
- if(mob_faction)
- M.faction = mob_faction
- M.returns_home = mob_returns_home
- M.wander = mob_wander
- M.wander_distance = mob_wander_distance
- if(overwrite_hostility)
- M.hostile = mob_hostile
- M.retaliate = mob_retaliate
- M.ai_inactive = 0 //Now you can kill eachother if your faction didn't override.
+ var/mob/living/simple_mob/M = new build_path(src.loc)
+ if(!istype(M))
+ return
+ if(M.has_AI())
+ var/datum/ai_holder/AI = M.ai_holder
+ AI.go_sleep() //Don't fight eachother while we're still setting up!
+ AI.returns_home = mob_returns_home
+ AI.wander = mob_wander
+ AI.max_home_distance = mob_wander_distance
+ if(overwrite_hostility)
+ AI.hostile = mob_hostile
+ AI.retaliate = mob_retaliate
+ AI.go_wake() //Now you can kill eachother if your faction didn't override.
if(pixel_x || pixel_y)
M.pixel_x = pixel_x
M.pixel_y = pixel_y
+
/obj/random/mob/sif
name = "Random Sif Animal"
desc = "This is a random cold weather animal."
@@ -65,14 +68,14 @@
mob_wander_distance = 10
/obj/random/mob/sif/item_to_spawn()
- return pick(prob(30);/mob/living/simple_animal/retaliate/diyaab,
- prob(15);/mob/living/simple_animal/crab,
- prob(15);/mob/living/simple_animal/penguin,
- prob(15);/mob/living/simple_animal/mouse,
- prob(15);/mob/living/simple_animal/corgi/tamaskan,
- prob(2);/mob/living/simple_animal/hostile/giant_spider/frost,
- prob(1);/mob/living/simple_animal/hostile/goose,
- prob(20);/mob/living/simple_animal/giant_crab)
+ return pick(prob(30);/mob/living/simple_mob/animal/sif/diyaab,
+ prob(15);/mob/living/simple_mob/animal/passive/crab,
+ prob(15);/mob/living/simple_mob/animal/passive/penguin,
+ prob(15);/mob/living/simple_mob/animal/passive/mouse,
+ prob(15);/mob/living/simple_mob/animal/passive/dog/tamaskan,
+ prob(2);/mob/living/simple_mob/animal/giant_spider/frost,
+ prob(1);/mob/living/simple_mob/animal/space/goose,
+ prob(20);/mob/living/simple_mob/animal/passive/crab)
/obj/random/mob/sif/peaceful
@@ -84,12 +87,12 @@
mob_wander_distance = 12
/obj/random/mob/sif/peaceful/item_to_spawn()
- return pick(prob(30);/mob/living/simple_animal/retaliate/diyaab,
- prob(15);/mob/living/simple_animal/crab,
- prob(15);/mob/living/simple_animal/penguin,
- prob(15);/mob/living/simple_animal/mouse,
- prob(15);/mob/living/simple_animal/corgi/tamaskan,
- prob(20);/mob/living/simple_animal/giant_crab)
+ return pick(prob(30);/mob/living/simple_mob/animal/sif/diyaab,
+ prob(15);/mob/living/simple_mob/animal/passive/crab,
+ prob(15);/mob/living/simple_mob/animal/passive/penguin,
+ prob(15);/mob/living/simple_mob/animal/passive/mouse,
+ prob(15);/mob/living/simple_mob/animal/passive/dog/tamaskan,
+ prob(20);/mob/living/simple_mob/animal/sif/hooligan_crab)
/obj/random/mob/sif/hostile
name = "Random Hostile Sif Animal"
@@ -97,9 +100,9 @@
icon_state = "frost"
/obj/random/mob/sif/hostile/item_to_spawn()
- return pick(prob(22);/mob/living/simple_animal/hostile/savik,
- prob(33);/mob/living/simple_animal/hostile/giant_spider/frost,
- prob(45);/mob/living/simple_animal/hostile/shantak)
+ return pick(prob(22);/mob/living/simple_mob/animal/sif/savik,
+ prob(33);/mob/living/simple_mob/animal/giant_spider/frost,
+ prob(45);/mob/living/simple_mob/animal/sif/shantak)
/obj/random/mob/spider
name = "Random Spider" //Spiders should patrol where they spawn.
@@ -110,9 +113,9 @@
mob_wander_distance = 4
/obj/random/mob/spider/item_to_spawn()
- return pick(prob(22);/mob/living/simple_animal/hostile/giant_spider/nurse,
- prob(33);/mob/living/simple_animal/hostile/giant_spider/hunter,
- prob(45);/mob/living/simple_animal/hostile/giant_spider)
+ return pick(prob(22);/mob/living/simple_mob/animal/giant_spider/nurse,
+ prob(33);/mob/living/simple_mob/animal/giant_spider/hunter,
+ prob(45);/mob/living/simple_mob/animal/giant_spider)
/obj/random/mob/spider/nurse
name = "Random Nurse Spider"
@@ -123,8 +126,8 @@
mob_wander_distance = 4
/obj/random/mob/spider/nurse/item_to_spawn()
- return pick(prob(22);/mob/living/simple_animal/hostile/giant_spider/nurse/hat,
- prob(45);/mob/living/simple_animal/hostile/giant_spider/nurse)
+ return pick(prob(22);/mob/living/simple_mob/animal/giant_spider/nurse/hat,
+ prob(45);/mob/living/simple_mob/animal/giant_spider/nurse)
/obj/random/mob/spider/mutant
name = "Random Mutant Spider"
@@ -133,15 +136,15 @@
/obj/random/mob/spider/mutant/item_to_spawn()
return pick(prob(5);/obj/random/mob/spider,
- prob(10);/mob/living/simple_animal/hostile/giant_spider/webslinger,
- prob(10);/mob/living/simple_animal/hostile/giant_spider/carrier,
- prob(33);/mob/living/simple_animal/hostile/giant_spider/lurker,
- prob(33);/mob/living/simple_animal/hostile/giant_spider/tunneler,
- prob(40);/mob/living/simple_animal/hostile/giant_spider/pepper,
- prob(20);/mob/living/simple_animal/hostile/giant_spider/thermic,
- prob(40);/mob/living/simple_animal/hostile/giant_spider/electric,
- prob(1);/mob/living/simple_animal/hostile/giant_spider/phorogenic,
- prob(40);/mob/living/simple_animal/hostile/giant_spider/frost)
+ prob(10);/mob/living/simple_mob/animal/giant_spider/webslinger,
+ prob(10);/mob/living/simple_mob/animal/giant_spider/carrier,
+ prob(33);/mob/living/simple_mob/animal/giant_spider/lurker,
+ prob(33);/mob/living/simple_mob/animal/giant_spider/tunneler,
+ prob(40);/mob/living/simple_mob/animal/giant_spider/pepper,
+ prob(20);/mob/living/simple_mob/animal/giant_spider/thermic,
+ prob(40);/mob/living/simple_mob/animal/giant_spider/electric,
+ prob(1);/mob/living/simple_mob/animal/giant_spider/phorogenic,
+ prob(40);/mob/living/simple_mob/animal/giant_spider/frost)
/obj/random/mob/robotic
name = "Random Robot Mob"
@@ -158,17 +161,18 @@
mob_retaliate = 1
/obj/random/mob/robotic/item_to_spawn() //Hivebots have a total number of 'lots' equal to the lesser drone, at 60.
- return pick(prob(60);/mob/living/simple_animal/hostile/malf_drone/lesser,
- prob(50);/mob/living/simple_animal/hostile/malf_drone,
- prob(15);/mob/living/simple_animal/hostile/mecha/malf_drone,
- prob(10);/mob/living/simple_animal/hostile/hivebot,
- prob(15);/mob/living/simple_animal/hostile/hivebot/swarm,
- prob(10);/mob/living/simple_animal/hostile/hivebot/range,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/rapid,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/ion,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/laser,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/strong,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/guard)
+ return pick(prob(60);/mob/living/simple_mob/mechanical/combat_drone/lesser,
+ prob(50);/mob/living/simple_mob/mechanical/combat_drone,
+ prob(15);/mob/living/simple_mob/mechanical/mecha/ripley,
+ prob(15);/mob/living/simple_mob/mechanical/mecha/odysseus,
+ prob(10);/mob/living/simple_mob/mechanical/hivebot,
+ prob(15);/mob/living/simple_mob/mechanical/hivebot/swarm,
+ prob(10);/mob/living/simple_mob/mechanical/hivebot/ranged_damage,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard)
/obj/random/mob/robotic/hivebot
name = "Random Hivebot"
@@ -178,14 +182,14 @@
mob_faction = "hivebot"
/obj/random/mob/robotic/hivebot/item_to_spawn()
- return pick(prob(10);/mob/living/simple_animal/hostile/hivebot,
- prob(15);/mob/living/simple_animal/hostile/hivebot/swarm,
- prob(10);/mob/living/simple_animal/hostile/hivebot/range,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/rapid,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/ion,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/laser,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/strong,
- prob(5);/mob/living/simple_animal/hostile/hivebot/range/guard)
+ return pick(prob(10);/mob/living/simple_mob/mechanical/hivebot,
+ prob(15);/mob/living/simple_mob/mechanical/hivebot/swarm,
+ prob(10);/mob/living/simple_mob/mechanical/hivebot/ranged_damage,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong,
+ prob(5);/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard)
//Mice
@@ -195,7 +199,7 @@
icon_state = "mouse_gray"
/obj/random/mob/mouse/item_to_spawn()
- return pick(prob(15);/mob/living/simple_animal/mouse/white,
- prob(30);/mob/living/simple_animal/mouse/brown,
- prob(30);/mob/living/simple_animal/mouse/gray,
+ return pick(prob(15);/mob/living/simple_mob/animal/passive/mouse/white,
+ prob(30);/mob/living/simple_mob/animal/passive/mouse/brown,
+ prob(30);/mob/living/simple_mob/animal/passive/mouse/gray,
prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability.
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index faa9f024f0..370b9b866e 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -176,8 +176,8 @@
return 0
return 1
-/obj/structure/attack_generic(var/mob/user, var/damage, var/attack_verb, var/wallbreaker)
- if(!breakable || damage < 10 || !wallbreaker)
+/obj/structure/attack_generic(var/mob/user, var/damage, var/attack_verb)
+ if(!breakable || damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
return 0
visible_message("[user] [attack_verb] the [src] apart!")
user.do_attack_animation(src)
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 4a392c0bfe..1f6ca8395f 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -381,8 +381,8 @@
else
icon_state = icon_opened
-/obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "destroys", var/wallbreaker)
- if(damage < 10 || !wallbreaker)
+/obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "destroys")
+ if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
return
user.do_attack_animation(src)
visible_message("[user] [attack_message] the [src]!")
@@ -459,4 +459,4 @@
if(src.loc)
if(istype(src.loc, /obj/structure/closet))
return (loc.return_air_for_internal_lifeform(L))
- return return_air()
\ No newline at end of file
+ return return_air()
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index 2c739985b2..91642e434e 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -90,23 +90,23 @@
/obj/structure/largecrate/animal/corgi
name = "corgi carrier"
- starts_with = list(/mob/living/simple_animal/corgi)
+ starts_with = list(/mob/living/simple_mob/animal/passive/dog/corgi)
/obj/structure/largecrate/animal/cow
name = "cow crate"
- starts_with = list(/mob/living/simple_animal/cow)
+ starts_with = list(/mob/living/simple_mob/animal/passive/cow)
/obj/structure/largecrate/animal/goat
name = "goat crate"
- starts_with = list(/mob/living/simple_animal/retaliate/goat)
+ starts_with = list(/mob/living/simple_mob/animal/goat)
/obj/structure/largecrate/animal/cat
name = "cat carrier"
- starts_with = list(/mob/living/simple_animal/cat)
+ starts_with = list(/mob/living/simple_mob/animal/passive/cat)
/obj/structure/largecrate/animal/cat/bones
- starts_with = list(/mob/living/simple_animal/cat/fluff/bones)
+ starts_with = list(/mob/living/simple_mob/animal/passive/cat/bones)
/obj/structure/largecrate/animal/chick
name = "chicken crate"
- starts_with = list(/mob/living/simple_animal/chick = 5)
+ starts_with = list(/mob/living/simple_mob/animal/passive/chick = 5)
diff --git a/code/game/objects/structures/ghost_pods/mysterious.dm b/code/game/objects/structures/ghost_pods/mysterious.dm
index 2e6a11a8bb..cd34d91e6f 100644
--- a/code/game/objects/structures/ghost_pods/mysterious.dm
+++ b/code/game/objects/structures/ghost_pods/mysterious.dm
@@ -15,7 +15,7 @@
/obj/structure/ghost_pod/manual/corgi/create_occupant(var/mob/M)
lightning_strike(get_turf(src), cosmetic = TRUE)
density = FALSE
- var/mob/living/simple_animal/corgi/R = new(get_turf(src))
+ var/mob/living/simple_mob/animal/passive/dog/corgi/R = new(get_turf(src))
if(M.mind)
M.mind.transfer_to(R)
to_chat(M, "You are a Corgi! Woof!")
@@ -47,4 +47,4 @@
R.ghost_inhabit(M)
visible_message("The blade shines brightly for a brief moment as [usr] pulls it out of the stone!")
log_and_message_admins("successfully acquired a cursed sword.")
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 058398d850..4a858d5cce 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -83,8 +83,8 @@
health = (displaced_health - round(current_damage / 4))
cover = 25
-/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart", var/wallbreaker)
- if(!damage || !wallbreaker)
+/obj/structure/girder/attack_generic(var/mob/user, var/damage, var/attack_message = "smashes apart")
+ if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
return 0
user.do_attack_animation(src)
visible_message("[user] [attack_message] the [src]!")
diff --git a/code/game/objects/structures/gravemarker.dm b/code/game/objects/structures/gravemarker.dm
index 7ef0d49a51..5b39639a9e 100644
--- a/code/game/objects/structures/gravemarker.dm
+++ b/code/game/objects/structures/gravemarker.dm
@@ -126,7 +126,7 @@
src.set_dir(turn(src.dir, 90))
return
else
- if(istype(usr,/mob/living/simple_animal/mouse))
+ if(ismouse(usr))
return
if(!usr || !isturf(usr.loc))
return
diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm
index f8d9977823..44f11b73fe 100644
--- a/code/game/objects/structures/loot_piles.dm
+++ b/code/game/objects/structures/loot_piles.dm
@@ -574,6 +574,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
icon = 'icons/mecha/mecha.dmi'
icon_state = "engineering_pod-broken"
density = TRUE
+ anchored = FALSE // In case a dead mecha-mob dies in a bad spot.
chance_uncommon = 20
chance_rare = 10
@@ -615,7 +616,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/structure/loot_pile/mecha/ripley
name = "ripley wreckage"
desc = "The ruins of some unfortunate ripley. Perhaps something is salvageable."
- icon_states_to_use = list("ripley-broken", "firefighter-broken", "ripley-broken-old")
+ icon_state = "ripley-broken"
common_loot = list(
/obj/random/tool,
@@ -649,6 +650,12 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/mecha_parts/mecha_equipment/weapon/energy/flamer/rigged
)
+/obj/structure/loot_pile/mecha/ripley/firefighter
+ icon_state = "firefighter-broken"
+
+/obj/structure/loot_pile/mecha/ripley/random_sprite
+ icon_states_to_use = list("ripley-broken", "firefighter-broken", "ripley-broken-old")
+
//Death-Ripley, same common, but more combat-exosuit-based
/obj/structure/loot_pile/mecha/deathripley
name = "strange ripley wreckage"
@@ -719,6 +726,14 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/mecha_parts/mecha_equipment/shocker
)
+/obj/structure/loot_pile/mecha/odysseus/murdysseus
+ icon_state = "murdysseus-broken"
+
+/obj/structure/loot_pile/mecha/hoverpod
+ name = "hoverpod wreckage"
+ desc = "The ruins of some unfortunate hoverpod. Perhaps something is salvageable."
+ icon_state = "engineering_pod"
+
/obj/structure/loot_pile/mecha/gygax
name = "gygax wreckage"
desc = "The ruins of some unfortunate gygax. Perhaps something is salvageable."
@@ -759,6 +774,18 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
)
+/obj/structure/loot_pile/mecha/gygax/dark
+ icon_state = "darkgygax-broken"
+
+// Todo: Better loot.
+/obj/structure/loot_pile/mecha/gygax/dark/adv
+ icon_state = "darkgygax_adv-broken"
+ icon_scale = 1.5
+ pixel_y = 8
+
+/obj/structure/loot_pile/mecha/gygax/medgax
+ icon_state = "medgax-broken"
+
/obj/structure/loot_pile/mecha/durand
name = "durand wreckage"
desc = "The ruins of some unfortunate durand. Perhaps something is salvageable."
@@ -799,6 +826,22 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
)
+/obj/structure/loot_pile/mecha/marauder
+ name = "marauder wreckage"
+ desc = "The ruins of some unfortunate marauder. Perhaps something is salvagable."
+ icon_state = "marauder-broken"
+ // Todo: Better loot.
+
+/obj/structure/loot_pile/mecha/marauder/seraph
+ name = "seraph wreckage"
+ desc = "The ruins of some unfortunate seraph. Perhaps something is salvagable."
+ icon_state = "seraph-broken"
+
+/obj/structure/loot_pile/mecha/marauder/mauler
+ name = "mauler wreckage"
+ desc = "The ruins of some unfortunate mauler. Perhaps something is salvagable."
+ icon_state = "mauler-broken"
+
/obj/structure/loot_pile/mecha/phazon
name = "phazon wreckage"
desc = "The ruins of some unfortunate phazon. Perhaps something is salvageable."
diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm
index 95d2656ed5..26889106ac 100644
--- a/code/game/objects/structures/musician.dm
+++ b/code/game/objects/structures/musician.dm
@@ -321,7 +321,7 @@
set category = "Object"
set src in oview(1)
- if(istype(usr,/mob/living/simple_animal/mouse))
+ if(istype(usr,/mob/living/simple_mob/animal/passive/mouse))
return
else if(!usr || !isturf(usr.loc))
return
diff --git a/code/game/objects/structures/plasticflaps.dm b/code/game/objects/structures/plasticflaps.dm
index 0340356e37..f328eb54fa 100644
--- a/code/game/objects/structures/plasticflaps.dm
+++ b/code/game/objects/structures/plasticflaps.dm
@@ -10,8 +10,8 @@
explosion_resistance = 5
var/list/mobs_can_pass = list(
/mob/living/bot,
- /mob/living/simple_animal/slime,
- /mob/living/simple_animal/mouse,
+ /mob/living/simple_mob/slime/xenobio,
+ /mob/living/simple_mob/animal/passive/mouse,
/mob/living/silicon/robot/drone
)
diff --git a/code/game/objects/structures/props/nest.dm b/code/game/objects/structures/props/nest.dm
index b6a4677f12..4b54d010cf 100644
--- a/code/game/objects/structures/props/nest.dm
+++ b/code/game/objects/structures/props/nest.dm
@@ -11,7 +11,7 @@
var/last_spawn
var/spawn_delay = 150
var/randomize_spawning = FALSE
- var/creature_types = list(/mob/living/simple_animal/retaliate/diyaab)
+ var/creature_types = list(/mob/living/simple_mob/animal/sif/diyaab)
var/list/den_mobs
var/den_faction //The faction of any spawned creatures.
var/max_creatures = 3 //Maximum number of living creatures this nest can have at one time.
diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm
index 4f430d3ec6..23e2ac1f76 100644
--- a/code/game/objects/structures/simple_doors.dm
+++ b/code/game/objects/structures/simple_doors.dm
@@ -206,6 +206,6 @@
/obj/structure/simple_door/cult/TryToSwitchState(atom/user)
if(isliving(user))
var/mob/living/L = user
- if(!iscultist(L) && !istype(L, /mob/living/simple_animal/construct))
+ if(!iscultist(L) && !istype(L, /mob/living/simple_mob/construct))
return
..()
diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
index 3e76682b19..f1c8217210 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm
@@ -77,7 +77,7 @@
src.set_dir(turn(src.dir, 90))
return
else
- if(istype(usr,/mob/living/simple_animal/mouse))
+ if(istype(usr,/mob/living/simple_mob/animal/passive/mouse))
return
if(!usr || !isturf(usr.loc))
return
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 5c7adf8f0e..251e168293 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -206,7 +206,7 @@
user.setClickCooldown(user.get_attack_speed())
if(!damage)
return
- if(damage >= 10)
+ if(damage >= STRUCTURE_MIN_DAMAGE_THRESHOLD)
visible_message("[user] smashes into [src]!")
if(reinf)
damage = damage / 2
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index 6cb93ab530..19fe4eb03c 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -27,16 +27,16 @@
cleaving = TRUE
var/hit_mobs = 0
- for(var/mob/living/simple_animal/SA in range(get_turf(target), 1))
- if(SA.stat == DEAD) // Don't beat a dead horse.
+ for(var/mob/living/simple_mob/SM in range(get_turf(target), 1))
+ if(SM.stat == DEAD) // Don't beat a dead horse.
continue
- if(SA == user) // Don't hit ourselves. Simple mobs shouldn't be able to do this but that might change later to be able to hit all mob/living-s.
+ if(SM == user) // Don't hit ourselves. Simple mobs shouldn't be able to do this but that might change later to be able to hit all mob/living-s.
continue
- if(SA == target) // We (presumably) already hit the target before cleave() was called. orange() should prevent this but just to be safe...
+ if(SM == target) // We (presumably) already hit the target before cleave() was called. orange() should prevent this but just to be safe...
continue
- if(!SA.Adjacent(user) || !SA.Adjacent(target)) // Cleaving only hits mobs near the target mob and user.
+ if(!SM.Adjacent(user) || !SM.Adjacent(target)) // Cleaving only hits mobs near the target mob and user.
continue
- if(resolve_attackby(SA, user, attack_modifier = 0.5)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true.
+ if(resolve_attackby(SM, user, attack_modifier = 0.5)) // Hit them with the weapon. This won't cause recursive cleaving due to the cleaving variable being set to true.
hit_mobs++
cleave_visual(user, target)
@@ -55,4 +55,4 @@
// This is purely the visual effect of cleaving.
/obj/item/weapon/proc/cleave_visual(var/mob/living/user, var/mob/living/target)
var/obj/effect/temporary_effect/cleave_attack/E = new(get_turf(src))
- E.dir = get_dir(user, target)
\ No newline at end of file
+ E.dir = get_dir(user, target)
diff --git a/code/game/turfs/simulated/outdoors/outdoors.dm b/code/game/turfs/simulated/outdoors/outdoors.dm
index 968816dc6a..6843a78264 100644
--- a/code/game/turfs/simulated/outdoors/outdoors.dm
+++ b/code/game/turfs/simulated/outdoors/outdoors.dm
@@ -132,4 +132,4 @@ var/list/turf_edge_cache = list()
if(3)
if(prob(66))
return
- demote()
\ No newline at end of file
+ demote()
diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm
index 5fed8af66b..0f9be4ddbf 100644
--- a/code/game/turfs/simulated/outdoors/snow.dm
+++ b/code/game/turfs/simulated/outdoors/snow.dm
@@ -13,6 +13,9 @@
/turf/simulated/floor/outdoors/snow/Entered(atom/A)
if(isliving(A))
+ var/mob/living/L = A
+ if(L.hovering) // Flying things shouldn't make footprints.
+ return ..()
var/mdir = "[A.dir]"
crossed_dirs[mdir] = 1
update_icon()
diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm
index 02c6d0d8dc..bd6adfe32f 100644
--- a/code/game/turfs/simulated/wall_attacks.dm
+++ b/code/game/turfs/simulated/wall_attacks.dm
@@ -60,9 +60,9 @@
var/damage_lower = 25
var/damage_upper = 75
if(isanimal(user))
- var/mob/living/simple_animal/S = user
+ var/mob/living/simple_mob/S = user
playsound(src, S.attack_sound, 75, 1)
- if(!(S.melee_damage_upper >= 10))
+ if(!(S.melee_damage_upper >= STRUCTURE_MIN_DAMAGE_THRESHOLD * 2))
to_chat(user, "You bounce against the wall.")
return FALSE
damage_lower = S.melee_damage_lower
@@ -75,7 +75,7 @@
to_chat(user, "You smash through the wall!")
user.do_attack_animation(src)
if(isanimal(user))
- var/mob/living/simple_animal/S = user
+ var/mob/living/simple_mob/S = user
playsound(src, S.attack_sound, 75, 1)
spawn(1)
dismantle_wall(1)
@@ -115,12 +115,12 @@
try_touch(user, rotting)
-/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message, var/wallbreaker)
+/turf/simulated/wall/attack_generic(var/mob/user, var/damage, var/attack_message)
radiate()
user.setClickCooldown(user.get_attack_speed())
var/rotting = (locate(/obj/effect/overlay/wallrot) in src)
- if(!damage || !wallbreaker)
+ if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD * 2)
try_touch(user, rotting)
return
@@ -128,7 +128,7 @@
return success_smash(user)
if(reinf_material)
- if((wallbreaker == 2) || (damage >= max(material.hardness,reinf_material.hardness)))
+ if(damage >= max(material.hardness, reinf_material.hardness) )
return success_smash(user)
else if(damage >= material.hardness)
return success_smash(user)
diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm
index 6539348e5d..7ed1ad2965 100644
--- a/code/game/turfs/simulated/water.dm
+++ b/code/game/turfs/simulated/water.dm
@@ -9,6 +9,9 @@
edge_blending_priority = -1
movement_cost = 4
outdoors = TRUE
+
+ layer = WATER_FLOOR_LAYER
+
can_dirty = FALSE // It's water
var/depth = 1 // Higher numbers indicates deeper water.
@@ -19,10 +22,11 @@
/turf/simulated/floor/water/update_icon()
..() // To get the edges.
- icon_state = water_state
- var/image/floorbed_sprite = image(icon = 'icons/turf/outdoors.dmi', icon_state = under_state)
- underlays.Cut() // To clear the old underlay, so the list doesn't expand infinitely
- underlays.Add(floorbed_sprite)
+
+ icon_state = under_state // This isn't set at compile time in order for it to show as water in the map editor.
+ var/image/water_sprite = image(icon = 'icons/turf/outdoors.dmi', icon_state = water_state, layer = WATER_LAYER)
+ add_overlay(water_sprite)
+
update_icon_edge()
/turf/simulated/floor/water/get_edge_icon_state()
@@ -102,6 +106,8 @@
/mob/living/proc/check_submerged()
if(buckled)
return 0
+ if(hovering)
+ return 0
var/turf/simulated/floor/water/T = loc
if(istype(T))
return T.depth
@@ -115,6 +121,8 @@
adjust_fire_stacks(-amount * 5)
for(var/atom/movable/AM in contents)
AM.water_act(amount)
+ remove_modifiers_of_type(/datum/modifier/fire)
+ inflict_water_damage(20 * amount) // Only things vulnerable to water will actually be harmed (slimes/prommies).
var/list/shoreline_icon_cache = list()
@@ -140,7 +148,13 @@ var/list/shoreline_icon_cache = list()
var/icon/shoreline_water = icon(src.icon, "shoreline_water", src.dir)
var/icon/shoreline_subtract = icon(src.icon, "[initial(icon_state)]_subtract", src.dir)
shoreline_water.Blend(shoreline_subtract,ICON_SUBTRACT)
+ var/image/final = image(shoreline_water)
+ final.layer = WATER_LAYER
- shoreline_icon_cache[cache_string] = shoreline_water
+ shoreline_icon_cache[cache_string] = final
add_overlay(shoreline_icon_cache[cache_string])
+/turf/simulated/floor/water/is_safe_to_enter(mob/living/L)
+ if(L.get_water_protection() < 1)
+ return FALSE
+ return ..()
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 0c18524346..005c8ac727 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -323,6 +323,10 @@ var/const/enterloopsanity = 100
/turf/AllowDrop()
return TRUE
+// Returns false if stepping into a tile would cause harm (e.g. open space while unable to fly, water tile while a slime, lava, etc).
+/turf/proc/is_safe_to_enter(mob/living/L)
+ return TRUE
+
// This is all the way up here since its the common ancestor for things that need to get replaced with a floor when an RCD is used on them.
// More specialized turfs like walls should instead override this.
// The code for applying lattices/floor tiles onto lattices could also utilize something similar in the future.
diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm
index decd0f2eb3..5e5d3d9baf 100644
--- a/code/game/turfs/turf_changing.dm
+++ b/code/game/turfs/turf_changing.dm
@@ -28,7 +28,7 @@
if(N == /turf/space)
var/turf/below = GetBelow(src)
- if(istype(below) && (air_master.has_valid_zone(below) || air_master.has_valid_zone(src)))
+ if(istype(below) && !istype(below,/turf/space))
N = /turf/simulated/open
var/obj/fire/old_fire = fire
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 4b0a1122e9..6fcb620163 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -280,21 +280,21 @@
if("larva") M.change_mob_type( /mob/living/carbon/alien/larva , null, null, delmob )
if("nymph") M.change_mob_type( /mob/living/carbon/alien/diona , null, null, delmob )
if("human") M.change_mob_type( /mob/living/carbon/human , null, null, delmob, href_list["species"])
- if("slime") M.change_mob_type( /mob/living/simple_animal/slime , null, null, delmob )
+ if("slime") M.change_mob_type( /mob/living/simple_mob/slime/xenobio , null, null, delmob )
if("monkey") M.change_mob_type( /mob/living/carbon/human/monkey , null, null, delmob )
if("robot") M.change_mob_type( /mob/living/silicon/robot , null, null, delmob )
- if("cat") M.change_mob_type( /mob/living/simple_animal/cat , null, null, delmob )
- if("runtime") M.change_mob_type( /mob/living/simple_animal/cat/fluff/Runtime , null, null, delmob )
- if("corgi") M.change_mob_type( /mob/living/simple_animal/corgi , null, null, delmob )
- if("ian") M.change_mob_type( /mob/living/simple_animal/corgi/Ian , null, null, delmob )
- if("crab") M.change_mob_type( /mob/living/simple_animal/crab , null, null, delmob )
- if("coffee") M.change_mob_type( /mob/living/simple_animal/crab/Coffee , null, null, delmob )
- if("parrot") M.change_mob_type( /mob/living/simple_animal/parrot , null, null, delmob )
- if("polyparrot") M.change_mob_type( /mob/living/simple_animal/parrot/Poly , null, null, delmob )
- if("constructarmoured") M.change_mob_type( /mob/living/simple_animal/construct/armoured , null, null, delmob )
- if("constructbuilder") M.change_mob_type( /mob/living/simple_animal/construct/builder , null, null, delmob )
- if("constructwraith") M.change_mob_type( /mob/living/simple_animal/construct/wraith , null, null, delmob )
- if("shade") M.change_mob_type( /mob/living/simple_animal/shade , null, null, delmob )
+ if("cat") M.change_mob_type( /mob/living/simple_mob/animal/passive/cat , null, null, delmob )
+ if("runtime") M.change_mob_type( /mob/living/simple_mob/animal/passive/cat/runtime , null, null, delmob )
+ if("corgi") M.change_mob_type( /mob/living/simple_mob/animal/passive/dog/corgi , null, null, delmob )
+ if("ian") M.change_mob_type( /mob/living/simple_mob/animal/passive/dog/corgi/Ian , null, null, delmob )
+ if("crab") M.change_mob_type( /mob/living/simple_mob/animal/passive/crab , null, null, delmob )
+ if("coffee") M.change_mob_type( /mob/living/simple_mob/animal/passive/crab/Coffee , null, null, delmob )
+ if("parrot") M.change_mob_type( /mob/living/simple_mob/animal/passive/bird/parrot , null, null, delmob )
+ if("polyparrot") M.change_mob_type( /mob/living/simple_mob/animal/passive/bird/parrot/poly , null, null, delmob )
+ if("constructarmoured") M.change_mob_type( /mob/living/simple_mob/construct/juggernaut , null, null, delmob )
+ if("constructbuilder") M.change_mob_type( /mob/living/simple_mob/construct/artificer , null, null, delmob )
+ if("constructwraith") M.change_mob_type( /mob/living/simple_mob/construct/wraith , null, null, delmob )
+ if("shade") M.change_mob_type( /mob/living/simple_mob/construct/shade , null, null, delmob )
/////////////////////////////////////new ban stuff
diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm
index a57b17d15f..4cfa952b67 100644
--- a/code/modules/admin/verbs/buildmode.dm
+++ b/code/modules/admin/verbs/buildmode.dm
@@ -127,6 +127,18 @@
usr << "Right Mouse Button on turf/obj/mob = Reset glowing"
usr << "Right Mouse Button on buildmode button = Change glow properties"
usr << "***********************************************************"
+ if(9) // Control mobs with ai_holders.
+ usr << "***********************************************************"
+ usr << "Left Mouse Button on AI mob = Select/Deselect mob"
+ usr << "Left Mouse Button + alt on AI mob = Toggle hostility on mob"
+ usr << "Left Mouse Button + ctrl on AI mob = Reset target/following/movement"
+ usr << "Right Mouse Button on enemy mob = Command selected mobs to attack mob"
+ usr << "Right Mouse Button on allied mob = Command selected mobs to follow mob"
+ usr << "Right Mouse Button + shift on any mob = Command selected mobs to follow mob regardless of faction"
+ usr << "Right Mouse Button on tile = Command selected mobs to move to tile (will cancel if enemies are seen)"
+ usr << "Right Mouse Button + shift on tile = Command selected mobs to reposition to tile (will not be inturrupted by enemies)"
+ usr << "Right Mouse Button + alt on obj/turfs = Command selected mobs to attack obj/turf"
+ usr << "***********************************************************"
return 1
/obj/effect/bmode/buildquit
@@ -146,6 +158,7 @@
var/obj/effect/bmode/buildmode/buildmode = null
var/obj/effect/bmode/buildquit/buildquit = null
var/atom/movable/throw_atom = null
+ var/list/selected_mobs = list()
/obj/effect/bmode/buildholder/Destroy()
qdel(builddir)
@@ -157,9 +170,21 @@
qdel(buildquit)
buildquit = null
throw_atom = null
+ for(var/mob/living/unit in selected_mobs)
+ deselect_AI_mob(cl, unit)
+ selected_mobs.Cut()
cl = null
return ..()
+/obj/effect/bmode/buildholder/proc/select_AI_mob(client/C, mob/living/unit)
+ selected_mobs += unit
+ C.images += unit.selected_image
+
+/obj/effect/bmode/buildholder/proc/deselect_AI_mob(client/C, mob/living/unit)
+ selected_mobs -= unit
+ C.images -= unit.selected_image
+
+
/obj/effect/bmode/buildmode
icon_state = "buildmode1"
screen_loc = "NORTH,WEST+2"
@@ -210,6 +235,9 @@
master.cl.buildmode = 8
src.icon_state = "buildmode8"
if(8)
+ master.cl.buildmode = 9
+ src.icon_state = "buildmode9"
+ if(9)
master.cl.buildmode = 1
src.icon_state = "buildmode1"
@@ -416,6 +444,86 @@
if(pa.Find("right"))
if(object)
object.set_light(0, 0, "#FFFFFF")
+ if(9) // AI control
+ if(pa.Find("left"))
+ if(isliving(object))
+ var/mob/living/L = object
+ // Reset processes.
+ if(pa.Find("ctrl"))
+ if(!isnull(L.get_AI_stance())) // Null means there's no AI datum or it has one but is player controlled w/o autopilot on.
+ var/datum/ai_holder/AI = L.ai_holder
+ AI.forget_everything()
+ to_chat(user, span("notice", "\The [L]'s AI has forgotten its target/movement destination/leader."))
+ else
+ to_chat(user, span("warning", "\The [L] is not AI controlled."))
+ return
+
+ // Toggle hostility
+ if(pa.Find("alt"))
+ if(!isnull(L.get_AI_stance()))
+ var/datum/ai_holder/AI = L.ai_holder
+ AI.hostile = !AI.hostile
+ to_chat(user, span("notice", "\The [L] is now [AI.hostile ? "hostile" : "passive"]."))
+ else
+ to_chat(user, span("warning", "\The [L] is not AI controlled."))
+ return
+
+ // Select/Deselect
+ if(!isnull(L.get_AI_stance()))
+ if(L in holder.selected_mobs)
+ holder.deselect_AI_mob(user.client, L)
+ to_chat(user, span("notice", "Deselected \the [L]."))
+ else
+ holder.select_AI_mob(user.client, L)
+ to_chat(user, span("notice", "Selected \the [L]."))
+ else
+ to_chat(user, span("warning", "\The [L] is not AI controlled."))
+
+ if(pa.Find("right"))
+ if(istype(object, /atom)) // Force attack.
+ var/atom/A = object
+
+ if(pa.Find("alt"))
+ var/i = 0
+ for(var/mob/living/unit in holder.selected_mobs)
+ var/datum/ai_holder/AI = unit.ai_holder
+ AI.give_target(A)
+ i++
+ to_chat(user, span("notice", "Commanded [i] mob\s to attack \the [A]."))
+ return
+
+ if(isliving(object)) // Follow or attack.
+ var/mob/living/L = object
+ var/i = 0 // Attacking mobs.
+ var/j = 0 // Following mobs.
+ for(var/mob/living/unit in holder.selected_mobs)
+ var/datum/ai_holder/AI = unit.ai_holder
+ if(L.IIsAlly(unit) || !AI.hostile || pa.Find("shift"))
+ AI.set_follow(L)
+ j++
+ else
+ AI.give_target(L)
+ i++
+ var/message = "Commanded "
+ if(i)
+ message += "[i] mob\s to attack \the [L]"
+ if(j)
+ message += ", and "
+ else
+ message += "."
+ if(j)
+ message += "[j] mob\s to follow \the [L]."
+ to_chat(user, span("notice", message))
+
+ if(isturf(object)) // Move or reposition.
+ var/turf/T = object
+ var/i = 0
+ for(var/mob/living/unit in holder.selected_mobs)
+ var/datum/ai_holder/AI = unit.ai_holder
+ AI.give_destination(T, 1, pa.Find("shift")) // If shift is held, the mobs will not stop moving to attack a visible enemy.
+ i++
+ to_chat(user, span("notice", "Commanded [i] mob\s to move to \the [T]."))
+
/obj/effect/bmode/buildmode/proc/get_path_from_partial_text(default_path)
var/desired_path = input("Enter full or partial typepath.","Typepath","[default_path]")
diff --git a/code/modules/admin/verbs/lightning_strike.dm b/code/modules/admin/verbs/lightning_strike.dm
index 16cb6b06dd..6adb122d4a 100644
--- a/code/modules/admin/verbs/lightning_strike.dm
+++ b/code/modules/admin/verbs/lightning_strike.dm
@@ -1,115 +1,99 @@
-/client/proc/admin_lightning_strike()
- set name = "Lightning Strike"
- set desc = "Causes lightning to strike on your tile. This will hurt things on or nearby it severely."
- set category = "Fun"
-
- if(!check_rights(R_FUN))
- return
-
- var/result = alert(src, "Really strike your tile with lightning?", "Confirm Badmin" , "No", "Yes (Cosmetic)", "Yes (Real)")
-
- if(result == "No")
- return
- var/fake_lightning = result == "Yes (Cosmetic)"
-
- lightning_strike(get_turf(usr), fake_lightning)
- log_and_message_admins("[key_name(src)] has caused [fake_lightning ? "cosmetic":"harmful"] lightning to strike at their position ([src.mob.x], [src.mob.y], [src.mob.z]). \
- (JMP)")
-
-#define LIGHTNING_REDIRECT_RANGE 28 // How far in tiles certain things draw lightning from.
-#define LIGHTNING_ZAP_RANGE 3 // How far the tesla effect zaps, as well as the bad effects from a direct strike.
-#define LIGHTNING_POWER 20000 // How much 'zap' is in a strike, used for tesla_zap().
-
-// The real lightning proc.
-// This is global until I can figure out a better place for it.
-// T is the turf that is being struck. If cosmetic is true, the lightning won't actually hurt anything.
-/proc/lightning_strike(turf/T, cosmetic = FALSE)
- // First, visuals.
-
- // Do a lightning flash for the whole planet, if the turf belongs to a planet.
- var/datum/planet/P = null
- P = SSplanets.z_to_planet[T.z]
- if(P)
- var/datum/weather_holder/holder = P.weather_holder
- flick("lightning_flash", holder.special_visuals)
-
- // Before we do the other visuals, we need to see if something is going to hijack our intended target.
- var/obj/machinery/power/grounding_rod/ground = null // Most of the bad effects of lightning will get negated if a grounding rod is nearby.
- var/obj/machinery/power/tesla_coil/coil = null // However a tesla coil has higher priority and the strike will bounce.
-
- for(var/obj/machinery/power/thing in range(LIGHTNING_REDIRECT_RANGE, T))
- if(istype(thing, /obj/machinery/power/tesla_coil))
- var/turf/simulated/coil_turf = get_turf(thing)
- if(istype(coil_turf) && thing.anchored && coil_turf.outdoors)
- coil = thing
- break
-
- if(istype(thing, /obj/machinery/power/grounding_rod))
- var/turf/simulated/rod_turf = get_turf(thing)
- if(istype(rod_turf) && thing.anchored && rod_turf.outdoors)
- ground = thing
-
- if(coil) // Coil gets highest priority.
- T = coil.loc
- else if(ground)
- T = ground.loc
-
- // Now make the lightning strike sprite. It will fade and delete itself in a second.
- new /obj/effect/temporary_effect/lightning_strike(T)
-
- // For those close up.
- playsound(T, 'sound/effects/lightningbolt.ogg', 100, 1)
-
- // And for those far away. If the strike happens on a planet, everyone on the planet will hear it.
- // Otherwise only those on the current z-level will hear it.
- var/sound = get_sfx("thunder")
- for(var/mob/M in player_list)
- if((P && M.z in P.expected_z_levels) || M.z == T.z)
- M.playsound_local(get_turf(M), soundin = sound, vol = 70, vary = FALSE, is_global = TRUE)
-
- if(cosmetic) // Everything beyond here involves potentially damaging things. If we don't want to do that, stop now.
- return
-
- if(ground) // All is well.
- ground.tesla_act(LIGHTNING_POWER, FALSE)
- return
-
- else if(coil) // Otherwise lets bounce off the tesla coil.
- coil.tesla_act(LIGHTNING_POWER, TRUE)
-
- else // Striking the turf directly.
- tesla_zap(T, zap_range = LIGHTNING_ZAP_RANGE, power = LIGHTNING_POWER, explosive = FALSE, stun_mobs = TRUE)
-
- // Some extra effects.
- // Some apply to those within zap range, others if they were a bit farther away.
- for(var/mob/living/L in view(5, T))
- if(get_dist(L, T) <= LIGHTNING_ZAP_RANGE) // They probably got zapped.
- // The actual damage/electrocution is handled by tesla_zap().
- L.Paralyse(5)
- L.stuttering += 20
- L.make_jittery(20)
- L.emp_act(1)
- to_chat(L, span("critical", "You've been struck by lightning!"))
-
- // If a non-player simplemob was struck, inflict huge damage.
- // If the damage is fatal, the SA is turned to ash.
- if(istype(L, /mob/living/simple_animal) && !L.key)
- var/mob/living/simple_animal/SA = L
- SA.adjustFireLoss(200)
- SA.updatehealth()
- if(SA.health <= 0) // Might be best to check/give simple_mobs siemens when this gets ported to new mobs.
- SA.visible_message(span("critical", "\The [SA] disintegrates into ash!"))
- SA.ash()
- continue // No point deafening something that wont exist.
-
- // Deafen them.
- if(L.get_ear_protection() < 2)
- L.AdjustSleeping(-100)
- if(iscarbon(L))
- var/mob/living/carbon/C = L
- C.ear_deaf += 10
- to_chat(L, span("danger", "Lightning struck nearby, and the thunderclap is deafening!"))
-
-#undef GROUNDING_ROD_RANGE
-#undef LIGHTNING_ZAP_RANGE
-#undef LIGHTNING_POWER
\ No newline at end of file
+/client/proc/admin_lightning_strike()
+ set name = "Lightning Strike"
+ set desc = "Causes lightning to strike on your tile. This will hurt things on or nearby it severely."
+ set category = "Fun"
+
+ if(!check_rights(R_FUN))
+ return
+
+ var/result = alert(src, "Really strike your tile with lightning?", "Confirm Badmin" , "No", "Yes (Cosmetic)", "Yes (Real)")
+
+ if(result == "No")
+ return
+ var/fake_lightning = result == "Yes (Cosmetic)"
+
+ lightning_strike(get_turf(usr), fake_lightning)
+ log_and_message_admins("[key_name(src)] has caused [fake_lightning ? "cosmetic":"harmful"] lightning to strike at their position ([src.mob.x], [src.mob.y], [src.mob.z]). \
+ (JMP)")
+
+#define LIGHTNING_REDIRECT_RANGE 28 // How far in tiles certain things draw lightning from.
+#define LIGHTNING_ZAP_RANGE 3 // How far the tesla effect zaps, as well as the bad effects from a direct strike.
+#define LIGHTNING_POWER 20000 // How much 'zap' is in a strike, used for tesla_zap().
+
+// The real lightning proc.
+// This is global until I can figure out a better place for it.
+// T is the turf that is being struck. If cosmetic is true, the lightning won't actually hurt anything.
+/proc/lightning_strike(turf/T, cosmetic = FALSE)
+ // First, visuals.
+
+ // Do a lightning flash for the whole planet, if the turf belongs to a planet.
+ var/datum/planet/P = null
+ P = SSplanets.z_to_planet[T.z]
+ if(P)
+ var/datum/weather_holder/holder = P.weather_holder
+ flick("lightning_flash", holder.special_visuals)
+
+ // Before we do the other visuals, we need to see if something is going to hijack our intended target.
+ var/obj/machinery/power/grounding_rod/ground = null // Most of the bad effects of lightning will get negated if a grounding rod is nearby.
+ var/obj/machinery/power/tesla_coil/coil = null // However a tesla coil has higher priority and the strike will bounce.
+
+ for(var/obj/machinery/power/thing in range(LIGHTNING_REDIRECT_RANGE, T))
+ if(istype(thing, /obj/machinery/power/tesla_coil))
+ var/turf/simulated/coil_turf = get_turf(thing)
+ if(istype(coil_turf) && thing.anchored && coil_turf.outdoors)
+ coil = thing
+ break
+
+ if(istype(thing, /obj/machinery/power/grounding_rod))
+ var/turf/simulated/rod_turf = get_turf(thing)
+ if(istype(rod_turf) && thing.anchored && rod_turf.outdoors)
+ ground = thing
+
+ if(coil) // Coil gets highest priority.
+ T = coil.loc
+ else if(ground)
+ T = ground.loc
+
+ // Now make the lightning strike sprite. It will fade and delete itself in a second.
+ new /obj/effect/temporary_effect/lightning_strike(T)
+
+ // For those close up.
+ playsound(T, 'sound/effects/lightningbolt.ogg', 100, 1)
+
+ // And for those far away. If the strike happens on a planet, everyone on the planet will hear it.
+ // Otherwise only those on the current z-level will hear it.
+ var/sound = get_sfx("thunder")
+ for(var/mob/M in player_list)
+ if((P && M.z in P.expected_z_levels) || M.z == T.z)
+ M.playsound_local(get_turf(M), soundin = sound, vol = 70, vary = FALSE, is_global = TRUE)
+
+ if(cosmetic) // Everything beyond here involves potentially damaging things. If we don't want to do that, stop now.
+ return
+
+ if(ground) // All is well.
+ ground.tesla_act(LIGHTNING_POWER, FALSE)
+ return
+
+ else if(coil) // Otherwise lets bounce off the tesla coil.
+ coil.tesla_act(LIGHTNING_POWER, TRUE)
+
+ else // Striking the turf directly.
+ tesla_zap(T, zap_range = LIGHTNING_ZAP_RANGE, power = LIGHTNING_POWER, explosive = FALSE, stun_mobs = TRUE)
+
+ // Some extra effects.
+ // Some apply to those within zap range, others if they were a bit farther away.
+ for(var/mob/living/L in view(5, T))
+ if(get_dist(L, T) <= LIGHTNING_ZAP_RANGE) // They probably got zapped.
+ L.lightning_act()
+
+ // Deafen them.
+ if(L.get_ear_protection() < 2)
+ L.AdjustSleeping(-100)
+ if(iscarbon(L))
+ var/mob/living/carbon/C = L
+ C.ear_deaf += 10
+ to_chat(L, span("danger", "Lightning struck nearby, and the thunderclap is deafening!"))
+
+#undef GROUNDING_ROD_RANGE
+#undef LIGHTNING_ZAP_RANGE
+#undef LIGHTNING_POWER
diff --git a/code/modules/ai/__readme.dm b/code/modules/ai/__readme.dm
new file mode 100644
index 0000000000..85b49ec6cb
--- /dev/null
+++ b/code/modules/ai/__readme.dm
@@ -0,0 +1,201 @@
+/*
+[Summary]
+
+This module contains an AI implementation designed to be (at the base level) mobtype-agnostic,
+by being held inside a datum instead of being written into the mob directly. More specialized
+subtypes of the base AI may be designed with a specific mob type in mind, but the base system
+should be compatible with most types of mobs which have the needed Interfaces in place to
+support them.
+
+When designing a new mob, all that is needed to give a mob an AI is to set
+its 'ai_holder_type' variable to the path of the AI that is desired.
+
+
+[Seperation]
+
+In previous iterations of AI systems, the AI is generally written into the mob's code directly,
+which has some advantages, but often makes the code rigid, and also tied the speed of the AI
+to the mob's own ticker, meaning it could only decide every two seconds.
+
+Instead, this version has the code for the AI held inside an /datum/ai_holder object,
+which is carried by the mob it controls. This gives some advantages;
+ All /mob/living mobs can potentially have an AI applied to them, and utilize the
+ same base code while adding specialized code on top.
+
+ Interfaces allow the base AI code to not need to know what particular mode it's controlling.
+
+ The processing of the AI is independant of the mob's Life() cycle, which allows for a
+ different clock rate.
+
+ Seperating the AI from the mob simplies the mob's code greatly.
+
+ It is more logical to think that a mob is the 'body', where as its ai_holder is
+ the 'mind'.
+
+ AIs can be applied or disabled on the fly by instantiating or deleting the
+ ai_holder, if needed.
+
+
+The current implementation also has some disadvantages, but they can perhaps be resolved
+in the future.
+ AI-driven mob movement and attack speed is tied to half-second delays due to the
+ AI subsystem ticking at that rate. Porting the timer subsystem and integrating
+ callbacks into basic AI actions (moving, attacking) can potentially resolve that.
+
+ It can be difficult to modify AI variables at mob instantiation without an ugly
+ delay, as the ai_holder might not exist yet.
+
+
+[Flow of Processing]
+
+Terrible visual representation here;
+AI Subsystem -> Every 0.5s -> /datum/ai_holder/handle_tactics() -> switch(stance)...
+ -> Every 2.0s -> /datum/ai_holder/handle_strategicals() -> switch(stance)...
+
+The AI datum is not processed by the mob itself, but instead it is directly processed
+by a new AI subsystem. The AI subsystem contains a list of all active ai_holder
+objects, which is iterated every tick to process each individual ai_holder
+object attached to a mob.
+
+Each ai_holder actually has two 'tracks' for processing, a 'fast' track
+and a 'slow' track.
+
+The fast track is named handle_tactics(), and is called every 0.5 seconds.
+
+The slow track is named handle_strategicals(), and is called every 2 seconds.
+
+When an ai_holder is iterated on inside the AI subsystem's list, it first
+calls that ai_holder's handle_tactics(). It will then call that ai_holder's
+handle_strategicals() every fourth tick, effectively doing so every two seconds.
+
+Both functions do different things depending on which 'stance' the
+ai_holder is in. See the Stances section for more information.
+
+The fast track is for 'cheap' processing that needs to happen fast, such as
+walking along a path, initiating an attack, or firing a gun. The rate that
+it is called allows for the ai_holder to interact with the world through
+its mob very often, giving a more convincing appearance of intelligence,
+allowing for faster reaction times to certain events, and allowing for
+variable attack speeds that would not be possible when bound to a
+two second Life() cycle.
+
+The slow track, on the other hand, is for 'expensive' processing that might
+be too demanding on the CPU to do every half a second, such as
+re/calculating an A* path (if the mob uses A*), or running a complicated
+tension assessment to determine how brave the mob is feeling. This is the
+same delay used for certain tasks in the old implementation, but it is less
+noticable due to the mob appearing to do things inbetween those two seconds.
+
+The purpose of having two tracks is to allow for 'fast' and 'slow' actions
+to be more easily encapsulated, and ensures that all ai_holders are syncronized
+with each other, as opposed to having individual tick counters inside all of
+the ai_holder instances. It should be noted that handle_tactics() is always
+called first, before handle_strategicals() every two seconds.
+
+[Process Skipping]
+
+An ai_holder object can choose to enter a 'busy' state, or a 'sleep' state,
+in order to avoid processing.
+
+When busy, the AI subsystem will skip over the ai_holder until it is no
+longer busy. The busy state is intended to be short-term, and is usually
+toggled by the mob when doing something with a delay, so that the ai_holder
+does not accidentally do something to inturrupt something important, like
+a special attack.
+
+The longer term alternative to the busy state is the sleep state. Unlike
+being busy, an ai_holder set to sleep will remove itself from the
+AI subsystem's list, meaning it will no longer process until something
+else 'wakes' it. This is usually done when the mob dies or a client
+logs into an AI-controlled mob (and the AI is not set to ignore that,
+with the autopilot variable). If the mob is revived, the AI will be
+awakened automatically.
+
+The ai_holder functions, and mob functions that are called by the
+ai_holder, should not be sleep()ed, as it will block the AI Subsystem
+from processing the other ai_holders until the sleep() finishes.
+Delays on the mob typically have set waitfor = FALSE, or spawn() is used.
+
+
+[Stances]
+
+The AI has a large number of states that it can be in, called stances.
+The AI will act in a specific way depending on which stance it is in,
+and only one stance can be active at a time. This effectively creates
+a state pattern.
+
+To change the stance, set_stance() is used, with the new stance as
+the first argument. It should be noted that the change is not immediate,
+and it will react to the change next tick instead of immediately switching
+to the new stance and acting on that in the same tick. This is done to help
+avoid infinite loops (I.E. Stance A switches to Stance B, which then
+switches to Stance A, and so on...), and the delay is very short so
+it should not be an issue.
+
+See code/__defines/mob.dm for a list of stance defines, and descriptions
+about their purpose. Generally, each stance has its own file in the AI
+module folder and are mostly self contained, however some files instead
+deal with general things that other stances may require, such as targeting
+or movement.
+
+[Interfaces]
+
+Interfaces are a concept that is used to help bridge the gap between
+the ai_holder, and its mob. Because the (base) ai_holder is explicitly
+designed to not be specific to any type of mob, all that it knows is
+that it is controlling a /mob/living mob. Some mobs work very differently,
+between mob types such as /mob/living/simple_mob, /mob/living/silicon/robot,
+/mob/living/carbon/human, and more.
+
+The solution to the vast differences between mob types is to have the
+mob itself deal with how to handle a specific task, such as attacking
+something, talking, moving, etc. Interfaces exist to do this.
+
+Interfaces are applied on the mob-side, and are generally specific to
+that mob type. This lets the ai_holder not have to worry about specific
+implementations and instead just tell the Interface that it wants to attack
+something, or move into a tile. The AI does not need to know if the mob its
+controlling has hands, instead that is the mob's responsibility.
+
+Interface functions have an uppercase I at the start of the function name,
+and then the function they are bridging between the AI and the mob
+(if it exists), e.g. IMove(), IAttack(), ISay().
+
+Interfaces are also used for the AI to ask its mob if it can do certain
+things, without having to actually know what type of mob it is attached to.
+For example, ICheckRangedAttack() tells the AI if it is possible to do a
+ranged attack. For simple_mobs, they can if a ranged projectile type was set,
+where as for a human mob, it could check if a gun is in a hand. For a borg,
+it could check if a gun is inside their current module.
+
+[Say List]
+
+A /datum/say_list is a very light datum that holds a list of strings for the
+AI to have their mob say based on certain conditions, such as when threatening
+to kill another mob. Despite the name, a say_list also can contain emotes
+and some sounds.
+
+The reason that it is in a seperate datum is to allow for multiple mob types
+to have the same text, even when inheritence cannot do that, such as
+mercenaries and fake piloted mecha mobs.
+
+The say_list datum is applied to the mob itself and not held inside the AI datum.
+
+[Subtypes]
+
+Some subtypes of ai_holder are more specialized, but remain compatible with
+most mob types. There are many different subtypes that make the AI act different
+by overriding a function, such as kiting their target, moving up close while
+using ranged attacks, or running away if not cloaked.
+
+Other subtypes are very specific about what kind of mob it controls, and trying
+to apply them to a different type of mob will likely result in a lot of bugs
+or ASSERT() failures. The xenobio slime AI is an example of the latter.
+
+To use a specific subtype on a mob, all that is needed is setting the mob's
+ai_holder_type to the subtype desired, and it will create that subtype when
+the mob is initialize()d. Switching to a subtype 'live' will require additional
+effort on the coder.
+
+
+*/
\ No newline at end of file
diff --git a/code/modules/ai/_defines.dm b/code/modules/ai/_defines.dm
new file mode 100644
index 0000000000..e94d26b3c3
--- /dev/null
+++ b/code/modules/ai/_defines.dm
@@ -0,0 +1,29 @@
+// Defines for the ai_intelligence var.
+// Controls if the mob will do 'advanced tactics' like running from grenades.
+#define AI_DUMB 1 // Be dumber than usual.
+#define AI_NORMAL 2 // Default level.
+#define AI_SMART 3 // Will do more processing to be a little smarter, like not walking while confused if it could risk stepping randomly onto a bad tile.
+
+#define ai_log(M,V) if(debug_ai) ai_log_output(M,V)
+
+// Logging level defines.
+#define AI_LOG_OFF 0 // Don't show anything.
+#define AI_LOG_ERROR 1 // Show logs of things likely causing the mob to not be functioning correctly.
+#define AI_LOG_WARNING 2 // Show less serious but still helpful to know issues that might be causing things to work incorrectly.
+#define AI_LOG_INFO 3 // Important regular events, like selecting a target or switching stances.
+#define AI_LOG_DEBUG 4 // More detailed information about the flow of execution.
+#define AI_LOG_TRACE 5 // Even more detailed than the last. Will absolutely flood your chatlog.
+
+// Results of pre-movement checks.
+// Todo: Move outside AI code?
+#define MOVEMENT_ON_COOLDOWN -1 // Recently moved and needs to try again soon.
+#define MOVEMENT_FAILED 0 // Move() returned false for whatever reason and the mob didn't move.
+#define MOVEMENT_SUCCESSFUL 1 // Move() returned true and the mob hopefully moved.
+
+// Reasons for targets to not be valid. Based on why, the AI responds differently.
+#define AI_TARGET_VALID 0 // We can fight them.
+#define AI_TARGET_INVIS 1 // They were in field of view but became invisible. Switch to STANCE_BLINDFIGHT if no other viable targets exist.
+#define AI_TARGET_NOSIGHT 2 // No longer in field of view. Go STANCE_REPOSITION to their last known location if no other targets are seen.
+#define AI_TARGET_ALLY 3 // They are an ally. Find a new target.
+#define AI_TARGET_DEAD 4 // They're dead. Find a new target.
+#define AI_TARGET_INVINCIBLE 5 // Target is currently unable to receive damage for whatever reason. Find a new target or wait.
diff --git a/code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm b/code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm
new file mode 100644
index 0000000000..f2d1f05e13
--- /dev/null
+++ b/code/modules/ai/aI_holder_subtypes/simple_mob_ai.dm
@@ -0,0 +1,136 @@
+// Base AIs for simple mobs.
+// Mob-specific AIs are in their mob's file.
+
+/datum/ai_holder/simple_mob
+ hostile = TRUE // The majority of simplemobs are hostile.
+ cooperative = TRUE
+ returns_home = FALSE
+ can_flee = FALSE
+ speak_chance = 1 // If the mob's saylist is empty, nothing will happen.
+ wander = TRUE
+ base_wander_delay = 4
+
+// For non-hostile animals, and pets like Ian and Runtime.
+/datum/ai_holder/simple_mob/passive
+ hostile = FALSE
+ can_flee = TRUE
+ violent_breakthrough = FALSE
+
+// Won't wander away, ideal for event-spawned mobs like carp or drones.
+/datum/ai_holder/simple_mob/event
+ wander = FALSE
+
+// Doesn't really act until told to by something on the outside.
+/datum/ai_holder/simple_mob/inert
+ hostile = FALSE
+ retaliate = FALSE
+ can_flee = FALSE
+ wander = FALSE
+ speak_chance = 0
+ cooperative = FALSE
+ violent_breakthrough = FALSE // So it can open doors but not attack windows and shatter the literal illusion.
+
+// Used for technomancer illusions, to resemble player movement better.
+/datum/ai_holder/simple_mob/inert/astar
+ use_astar = TRUE
+
+// Ranged mobs.
+
+/datum/ai_holder/simple_mob/ranged
+// ranged = TRUE
+
+// Tries to not waste ammo.
+/datum/ai_holder/simple_mob/ranged/careful
+ conserve_ammo = TRUE
+
+/datum/ai_holder/simple_mob/ranged/pointblank
+ pointblank = TRUE
+
+// Runs away from its target if within a certain distance.
+/datum/ai_holder/simple_mob/ranged/kiting
+ pointblank = TRUE // So we don't need to copypaste post_melee_attack().
+ var/run_if_this_close = 4 // If anything gets within this range, it'll try to move away.
+ var/moonwalk = TRUE // If true, mob turns to face the target while kiting, otherwise they turn in the direction they moved towards.
+
+/datum/ai_holder/simple_mob/ranged/kiting/threatening
+ threaten = TRUE
+ threaten_delay = 1 SECOND // Less of a threat and more of pre-attack notice.
+ threaten_timeout = 30 SECONDS
+ conserve_ammo = TRUE
+
+// For event-spawned malf drones.
+/datum/ai_holder/simple_mob/ranged/kiting/threatening/event
+ wander = FALSE
+
+/datum/ai_holder/simple_mob/ranged/kiting/no_moonwalk
+ moonwalk = FALSE
+
+/datum/ai_holder/simple_mob/ranged/kiting/on_engagement(atom/A)
+ if(get_dist(holder, A) < run_if_this_close)
+ holder.IMove(get_step_away(holder, A, run_if_this_close))
+ if(moonwalk)
+ holder.face_atom(A)
+
+// Closes distance from the target even while in range.
+/datum/ai_holder/simple_mob/ranged/aggressive
+ pointblank = TRUE
+ var/closest_distance = 1 // How close to get to the target. By default they will get into melee range (and then pointblank them).
+
+/datum/ai_holder/simple_mob/ranged/aggressive/on_engagement(atom/A)
+ if(get_dist(holder, A) > closest_distance)
+ holder.IMove(get_step_towards(holder, A))
+ holder.face_atom(A)
+
+// Yakkity saxes while firing at you.
+/datum/ai_holder/hostile/ranged/robust/on_engagement(atom/movable/AM)
+ step_rand(holder)
+ holder.face_atom(AM)
+
+// Switches intents based on specific criteria.
+// Used for special mobs who do different things based on intents (and aren't slimes).
+// Intent switching is generally done in pre_[ranged/special]_attack(), so that the mob can use the right attack for the right time.
+/datum/ai_holder/simple_mob/intentional
+
+
+// These try to avoid collateral damage.
+/datum/ai_holder/simple_mob/restrained
+ violent_breakthrough = FALSE
+ conserve_ammo = TRUE
+
+// Melee mobs.
+
+/datum/ai_holder/simple_mob/melee
+
+// Dances around the enemy its fighting, making it harder to fight back.
+/datum/ai_holder/simple_mob/melee/evasive
+
+/datum/ai_holder/simple_mob/melee/evasive/post_melee_attack(atom/A)
+ if(holder.Adjacent(A))
+ holder.IMove(get_step(holder, pick(alldirs)))
+ holder.face_atom(A)
+
+
+
+// This AI hits something, then runs away for awhile.
+// It will (almost) always flee if they are uncloaked, AND their target is not stunned.
+/datum/ai_holder/simple_mob/melee/hit_and_run
+ can_flee = TRUE
+
+// Used for the 'running' part of hit and run.
+/datum/ai_holder/simple_mob/melee/hit_and_run/special_flee_check()
+ if(!holder.is_cloaked())
+ if(isliving(target))
+ var/mob/living/L = target
+ return !L.incapacitated(INCAPACITATION_DISABLED) // Don't flee if our target is stunned in some form, even if uncloaked. This is so the mob keeps attacking a stunned opponent.
+ return TRUE // We're out in the open, uncloaked, and our target isn't stunned, so lets flee.
+ return FALSE
+
+
+// Simple mobs that aren't hostile, but will fight back.
+/datum/ai_holder/simple_mob/retaliate
+ hostile = FALSE
+ retaliate = TRUE
+
+// Simple mobs that retaliate and support others in their faction who get attacked.
+/datum/ai_holder/simple_mob/retaliate/cooperative
+ cooperative = TRUE
\ No newline at end of file
diff --git a/code/modules/ai/aI_holder_subtypes/slime_xenobio_ai.dm b/code/modules/ai/aI_holder_subtypes/slime_xenobio_ai.dm
new file mode 100644
index 0000000000..c859a523cc
--- /dev/null
+++ b/code/modules/ai/aI_holder_subtypes/slime_xenobio_ai.dm
@@ -0,0 +1,262 @@
+// Specialized AI for slime simplemobs.
+// Unlike the parent AI code, this will probably break a lot of things if you put it on something that isn't /mob/living/simple_mob/slime/xenobio
+
+/datum/ai_holder/simple_mob/xenobio_slime
+ hostile = TRUE
+ cooperative = TRUE
+ firing_lanes = TRUE
+ var/rabid = FALSE // Will attack regardless of discipline.
+ var/discipline = 0 // Beating slimes makes them less likely to lash out. In theory.
+ var/resentment = 0 // 'Unjustified' beatings make this go up, and makes it more likely for abused slimes to go rabid.
+ var/obedience = 0 // Conversely, 'justified' beatings make this go up, and makes discipline decay slower, potentially making it not decay at all.
+
+ var/always_stun = FALSE // If true, the slime will elect to attempt to permastun the target.
+
+/datum/ai_holder/simple_mob/xenobio_slime/sapphire
+ always_stun = TRUE // They know that stuns are godly.
+ intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death.
+
+/datum/ai_holder/simple_mob/xenobio_slime/light_pink
+ discipline = 5
+ obedience = 5
+
+/datum/ai_holder/simple_mob/xenobio_slime/passive/New() // For Kendrick.
+ ..()
+ pacify()
+
+/datum/ai_holder/simple_mob/xenobio_slime/New()
+ ..()
+ ASSERT(istype(holder, /mob/living/simple_mob/slime/xenobio))
+
+// Checks if disciplining the slime would be 'justified' right now.
+/datum/ai_holder/simple_mob/xenobio_slime/proc/is_justified_to_discipline()
+ if(rabid)
+ return TRUE
+ if(target)
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(istype(H.species, /datum/species/monkey))
+ return FALSE // Attacking monkeys is okay.
+ return TRUE // Otherwise attacking other things is bad.
+ return FALSE // Not attacking anything.
+
+/datum/ai_holder/simple_mob/xenobio_slime/proc/can_command(mob/living/commander)
+ if(rabid)
+ return FALSE
+ if(!hostile)
+ return SLIME_COMMAND_OBEY
+// if(commander in friends)
+// return SLIME_COMMAND_FRIEND
+ if(holder.IIsAlly(commander))
+ return SLIME_COMMAND_FACTION
+ if(discipline > resentment && obedience >= 5)
+ return SLIME_COMMAND_OBEY
+ return FALSE
+
+/datum/ai_holder/simple_mob/xenobio_slime/proc/adjust_discipline(amount, silent)
+ var/mob/living/simple_mob/slime/xenobio/my_slime = holder
+ if(amount > 0)
+ if(rabid)
+ return
+ var/justified = is_justified_to_discipline()
+ lost_target() // Stop attacking.
+
+ if(justified)
+ obedience++
+ if(!silent)
+ holder.say(pick("Fine...", "Okay...", "Sorry...", "I yield...", "Mercy..."))
+ else
+ if(prob(resentment * 20))
+ enrage()
+ holder.say(pick("Evil...", "Kill...", "Tyrant..."))
+ else
+ if(!silent)
+ holder.say(pick("Why...?", "I don't understand...?", "Cruel...", "Stop...", "Nooo..."))
+ resentment++ // Done after check so first time will never enrage.
+
+ discipline = between(0, discipline + amount, 10)
+ my_slime.update_mood()
+
+// This slime always enrages if disciplined.
+/datum/ai_holder/simple_mob/xenobio_slime/red/adjust_discipline(amount, silent)
+ if(amount > 0 && !rabid)
+ holder.say("Grrr...")
+ holder.add_modifier(/datum/modifier/berserk, 30 SECONDS)
+ enrage()
+
+/datum/ai_holder/simple_mob/xenobio_slime/handle_special_strategical()
+ discipline_decay()
+
+// Handles decay of discipline.
+/datum/ai_holder/simple_mob/xenobio_slime/proc/discipline_decay()
+ if(discipline > 0)
+ if(!prob(75 + (obedience * 5)))
+ adjust_discipline(-1)
+
+/datum/ai_holder/simple_mob/xenobio_slime/handle_special_tactic()
+ evolve_and_reproduce()
+
+// Hit the correct verbs to keep the slime species going.
+/datum/ai_holder/simple_mob/xenobio_slime/proc/evolve_and_reproduce()
+ var/mob/living/simple_mob/slime/xenobio/my_slime = holder
+ if(my_slime.amount_grown >= 10)
+ // Press the correct verb when we can.
+ if(my_slime.is_adult)
+ my_slime.reproduce() // Splits into four new baby slimes.
+ else
+ my_slime.evolve() // Turns our holder into an adult slime.
+
+
+// Called when pushed too far (or a red slime core was used).
+/datum/ai_holder/simple_mob/xenobio_slime/proc/enrage()
+ var/mob/living/simple_mob/slime/xenobio/my_slime = holder
+ if(my_slime.harmless)
+ return
+ rabid = TRUE
+ my_slime.update_mood()
+ my_slime.visible_message(span("danger", "\The [src] enrages!"))
+
+// Called when using a pacification agent (or it's Kendrick being initalized).
+/datum/ai_holder/simple_mob/xenobio_slime/proc/pacify()
+ lost_target() // So it stops trying to kill them.
+ rabid = FALSE
+ hostile = FALSE
+ retaliate = FALSE
+ cooperative = FALSE
+
+// The holder's attack changes based on intent. This lets the AI choose what effect is desired.
+/datum/ai_holder/simple_mob/xenobio_slime/pre_melee_attack(atom/A)
+ if(istype(A, /mob/living))
+ var/mob/living/L = A
+ var/mob/living/simple_mob/slime/xenobio/my_slime = holder
+
+ if( (!L.lying && prob(30 + (my_slime.power_charge * 7) ) || (!L.lying && always_stun) ))
+ my_slime.a_intent = I_DISARM // Stun them first.
+ else if(my_slime.can_consume(L) && L.lying)
+ my_slime.a_intent = I_GRAB // Then eat them.
+ else
+ my_slime.a_intent = I_HURT // Otherwise robust them.
+
+/datum/ai_holder/simple_mob/xenobio_slime/closest_distance(atom/movable/AM)
+ if(istype(AM, /mob/living))
+ var/mob/living/L = AM
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(istype(H.species, /datum/species/monkey))
+ return 1 // Otherwise ranged slimes will eat a lot less often.
+ if(L.stat >= UNCONSCIOUS)
+ return 1 // Melee (eat) the target if dead/dying, don't shoot it.
+ return ..()
+
+/datum/ai_holder/simple_mob/xenobio_slime/can_attack(atom/movable/AM)
+ . = ..()
+ if(.) // Do some additional checks because we have Special Code(tm).
+ if(ishuman(AM))
+ var/mob/living/carbon/human/H = AM
+ if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too.
+ return TRUE // Monkeys are always food (sorry Pun Pun).
+ else if(H.species && H.species.name == SPECIES_PROMETHEAN)
+ return FALSE // Prometheans are always our friends.
+ if(discipline && !rabid)
+ return FALSE // We're a good slime.
+
+// Commands, reactions, etc
+/datum/ai_holder/simple_mob/xenobio_slime/on_hear_say(mob/living/speaker, message)
+ ai_log("xenobio_slime/on_hear_say([speaker], [message]) : Entered.", AI_LOG_DEBUG)
+ var/mob/living/simple_mob/slime/xenobio/my_slime = holder
+
+ if((findtext(message, num2text(my_slime.number)) || findtext(message, my_slime.name) || findtext(message, "slimes"))) // Talking to us.
+
+ // First, make sure it's actually a player saying something and not an AI, or else we risk infinite loops.
+ if(!speaker.client)
+ return
+
+ // Are all slimes being referred to?
+ // var/mass_order = FALSE
+ // if(findtext(message, "slimes"))
+ // mass_order = TRUE
+
+ // Say hello back.
+ if(findtext(message, "hello") || findtext(message, "hi") || findtext(message, "greetings"))
+ delayed_say(pick("Hello...", "Hi..."), speaker)
+
+ // Follow request.
+ if(findtext(message, "follow") || findtext(message, "come with me"))
+ if(!can_command(speaker))
+ delayed_say(pick("No...", "I won't follow..."), speaker)
+ return
+
+ delayed_say("Yes... I follow \the [speaker]...", speaker)
+ set_follow(speaker)
+
+ // Squish request.
+ if(findtext(message , "squish"))
+ if(!can_command(speaker))
+ delayed_say("No...", speaker)
+ return
+
+ spawn(rand(1 SECOND, 2 SECONDS))
+ if(!src || !holder || !can_act()) // We might've died/got deleted/etc in the meantime.
+ return
+ my_slime.squish()
+
+
+ // Stop request.
+ if(findtext(message, "stop") || findtext(message, "halt") || findtext(message, "cease"))
+ if(my_slime.victim) // We're being asked to stop eatting someone.
+ if(!can_command(speaker) || !is_justified_to_discipline())
+ delayed_say("No...", speaker)
+ return
+ else
+ delayed_say("Fine...", speaker)
+ adjust_discipline(1, TRUE)
+ my_slime.stop_consumption()
+
+ if(target) // We're being asked to stop chasing someone.
+ if(!can_command(speaker) || !is_justified_to_discipline())
+ delayed_say("No...", speaker)
+ return
+ else
+ delayed_say("Fine...", speaker)
+ adjust_discipline(1, TRUE) // This must come before losing the target or it will be unjustified.
+ lost_target()
+
+
+ if(leader) // We're being asked to stop following someone.
+ if(can_command(speaker) == SLIME_COMMAND_FRIEND || leader == speaker)
+ delayed_say("Yes... I'll stop...", speaker)
+ lose_follow()
+ else
+ delayed_say("No... I'll keep following \the [leader]...", speaker)
+
+ /* // Commented out since its mostly useless now due to slimes refusing to attack if it would make them naughty.
+ // Murder request
+ if(findtext(message, "harm") || findtext(message, "attack") || findtext(message, "kill") || findtext(message, "murder") || findtext(message, "eat") || findtext(message, "consume") || findtext(message, "absorb"))
+ if(can_command(speaker) < SLIME_COMMAND_FACTION)
+ delayed_say("No...", speaker)
+ return
+
+ for(var/mob/living/L in view(7, my_slime) - list(my_slime, speaker))
+ if(L == src)
+ continue // Don't target ourselves.
+ var/list/valid_names = splittext(L.name, " ") // Should output list("John", "Doe") as an example.
+ for(var/line in valid_names) // Check each part of someone's name.
+ if(findtext(message, lowertext(line))) // If part of someone's name is in the command, the slime targets them if allowed to.
+ if(!(mass_order && line == "slime")) //don't think random other slimes are target
+ if(can_attack(L))
+ delayed_say("Okay... I attack \the [L]...", speaker)
+ give_target(L)
+ return
+ else
+ delayed_say("No... I won't attack \the [L].", speaker)
+ return
+
+ // If we're here, it couldn't find anyone with that name.
+ delayed_say("No... I don't know who to attack...", speaker)
+ */
+ ai_log("xenobio_slime/on_hear_say() : Exited.", AI_LOG_DEBUG)
+
+/datum/ai_holder/simple_mob/xenobio_slime/can_violently_breakthrough()
+ if(discipline && !rabid) // Good slimes don't shatter the windows because their buddy in an adjacent cell decided to piss off Slimesky.
+ return FALSE
+ return ..()
\ No newline at end of file
diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm
new file mode 100644
index 0000000000..2c7e02ecef
--- /dev/null
+++ b/code/modules/ai/ai_holder.dm
@@ -0,0 +1,290 @@
+// This is a datum-based artificial intelligence for simple mobs (and possibly others) to use.
+// The neat thing with having this here instead of on the mob is that it is independant of Life(), and that different mobs
+// can use a more or less complex AI by giving it a different datum.
+
+/mob/living
+ var/datum/ai_holder/ai_holder = null
+ var/ai_holder_type = null // Which ai_holder datum to give to the mob when initialized. If null, nothing happens.
+
+/mob/living/initialize()
+ if(ai_holder_type)
+ ai_holder = new ai_holder_type(src)
+ return ..()
+
+/mob/living/Destroy()
+ QDEL_NULL(ai_holder)
+ return ..()
+
+/datum/ai_holder
+ var/mob/living/holder = null // The mob this datum is going to control.
+ var/stance = STANCE_IDLE // Determines if the mob should be doing a specific thing, e.g. attacking, following, standing around, etc.
+ var/intelligence_level = AI_NORMAL // Adjust to make the AI be intentionally dumber, or make it more robust (e.g. dodging grenades).
+ var/autopilot = FALSE // If true, the AI won't be deactivated if a client gets attached to the AI's mob.
+ var/busy = FALSE // If true, the ticker will skip processing this mob until this is false. Good for if you need the
+ // mob to stay still (e.g. delayed attacking). If you need the mob to be inactive for an extended period of time,
+ // consider sleeping the AI instead.
+
+
+
+/datum/ai_holder/hostile
+ hostile = TRUE
+
+/datum/ai_holder/retaliate
+ hostile = TRUE
+ retaliate = TRUE
+
+/datum/ai_holder/New(var/new_holder)
+ ASSERT(new_holder)
+ holder = new_holder
+ SSai.processing += src
+ home_turf = get_turf(holder)
+ ..()
+
+/datum/ai_holder/Destroy()
+ holder = null
+ SSai.processing -= src // We might've already been asleep and removed, but byond won't care if we do this again and it saves a conditional.
+ home_turf = null
+ return ..()
+
+
+// Now for the actual AI stuff.
+
+// Makes this ai holder not get processed.
+// Called automatically when the host mob is killed.
+// Potential future optimization would be to sleep AIs which mobs that are far away from in-round players.
+/datum/ai_holder/proc/go_sleep()
+ if(stance == STANCE_SLEEP)
+ return
+ forget_everything() // If we ever wake up, its really unlikely that our current memory will be of use.
+ set_stance(STANCE_SLEEP)
+ SSai.processing -= src
+
+// Reverses the above proc.
+// Revived mobs will wake their AI if they have one.
+/datum/ai_holder/proc/go_wake()
+ if(stance != STANCE_SLEEP)
+ return
+ if(!should_wake())
+ return
+ set_stance(STANCE_IDLE)
+ SSai.processing += src
+
+/datum/ai_holder/proc/should_wake()
+ if(holder.client && !autopilot)
+ return FALSE
+ if(holder.stat >= DEAD)
+ return FALSE
+ return TRUE
+
+// Resets a lot of 'memory' vars.
+/datum/ai_holder/proc/forget_everything()
+ // Some of these might be redundant, but hopefully this prevents future bugs if that changes.
+ lose_follow()
+ lose_target()
+ lose_target_position()
+ give_up_movement()
+
+// 'Tactical' processes such as moving a step, meleeing an enemy, firing a projectile, and other fairly cheap actions that need to happen quickly.
+/datum/ai_holder/proc/handle_tactics()
+ if(busy)
+ return
+ handle_special_tactic()
+ handle_stance_tactical()
+
+// 'Strategical' processes that are more expensive on the CPU and so don't get run as often as the above proc, such as A* pathfinding or robust targeting.
+/datum/ai_holder/proc/handle_strategicals()
+ if(busy)
+ return
+ handle_special_strategical()
+ handle_stance_strategical()
+
+// Override these for special things without polluting the main loop.
+/datum/ai_holder/proc/handle_special_tactic()
+
+/datum/ai_holder/proc/handle_special_strategical()
+
+/*
+ //AI Actions
+ if(!ai_inactive)
+ //Stanceyness
+ handle_stance()
+
+ //Movement
+ if(!stop_automated_movement && wander && !anchored) //Allowed to move?
+ handle_wander_movement()
+
+ //Speaking
+ if(speak_chance && stance == STANCE_IDLE) // Allowed to chatter?
+ handle_idle_speaking()
+
+ //Resisting out buckles
+ if(stance != STANCE_IDLE && incapacitated(INCAPACITATION_BUCKLED_PARTIALLY))
+ handle_resist()
+
+ //Resisting out of closets
+ if(istype(loc,/obj/structure/closet))
+ var/obj/structure/closet/C = loc
+ if(C.welded)
+ resist()
+ else
+ C.open()
+*/
+
+// For setting the stance WITHOUT processing it
+/datum/ai_holder/proc/set_stance(var/new_stance)
+ ai_log("set_stance() : Setting stance from [stance] to [new_stance].", AI_LOG_INFO)
+ stance = new_stance
+ if(stance_coloring) // For debugging or really weird mobs.
+ stance_color()
+
+// This is called every half a second.
+/datum/ai_holder/proc/handle_stance_tactical()
+ ai_log("========= Fast Process Beginning ==========", AI_LOG_TRACE) // This is to make it easier visually to disinguish between 'blocks' of what a tick did.
+ ai_log("handle_stance_tactical() : Called.", AI_LOG_TRACE)
+
+ if(stance == STANCE_SLEEP)
+ ai_log("handle_stance_tactical() : Going to sleep.", AI_LOG_TRACE)
+ go_sleep()
+ return
+
+ if(target && can_see_target(target))
+ track_target_position()
+
+ if(stance != STANCE_DISABLED && is_disabled()) // Stunned/confused/etc
+ ai_log("handle_stance_tactical() : Disabled.", AI_LOG_TRACE)
+ set_stance(STANCE_DISABLED)
+ return
+
+ if(stance in STANCES_COMBAT)
+ // Should resist? We check this before fleeing so that we can actually flee and not be trapped in a chair.
+ if(holder.incapacitated(INCAPACITATION_BUCKLED_PARTIALLY))
+ ai_log("handle_stance_tactical() : Going to handle_resist().", AI_LOG_TRACE)
+ handle_resist()
+
+ else if(istype(holder.loc, /obj/structure/closet))
+ var/obj/structure/closet/C = holder.loc
+ ai_log("handle_stance_tactical() : Inside a closet. Going to attempt escape.", AI_LOG_TRACE)
+ if(C.sealed)
+ holder.resist()
+ else
+ C.open()
+
+ // Should we flee?
+ if(should_flee())
+ ai_log("handle_stance_tactical() : Going to flee.", AI_LOG_TRACE)
+ set_stance(STANCE_FLEE)
+ return
+
+ switch(stance)
+ if(STANCE_IDLE)
+ if(should_go_home())
+ ai_log("handle_stance_tactical() : STANCE_IDLE, going to go home.", AI_LOG_TRACE)
+ go_home()
+
+ else if(should_follow_leader())
+ ai_log("handle_stance_tactical() : STANCE_IDLE, going to follow leader.", AI_LOG_TRACE)
+ set_stance(STANCE_FOLLOW)
+
+ else if(should_wander())
+ ai_log("handle_stance_tactical() : STANCE_IDLE, going to wander randomly.", AI_LOG_TRACE)
+ handle_wander_movement()
+
+ if(STANCE_ALERT)
+ ai_log("handle_stance_tactical() : STANCE_ALERT, going to threaten_target().", AI_LOG_TRACE)
+ threaten_target()
+
+ if(STANCE_APPROACH)
+ ai_log("handle_stance_tactical() : STANCE_APPROACH, going to walk_to_target().", AI_LOG_TRACE)
+ walk_to_target()
+
+ if(STANCE_FIGHT)
+ ai_log("handle_stance_tactical() : STANCE_FIGHT, going to engage_target().", AI_LOG_TRACE)
+ engage_target()
+
+ if(STANCE_MOVE)
+ ai_log("handle_stance_tactical() : STANCE_MOVE, going to walk_to_destination().", AI_LOG_TRACE)
+ walk_to_destination()
+
+ if(STANCE_REPOSITION) // This is the same as above but doesn't stop if an enemy is visible since its an 'in-combat' move order.
+ ai_log("handle_stance_tactical() : STANCE_REPOSITION, going to walk_to_destination().", AI_LOG_TRACE)
+ walk_to_destination()
+
+ if(STANCE_FOLLOW)
+ ai_log("handle_stance_tactical() : STANCE_FOLLOW, going to walk_to_leader().", AI_LOG_TRACE)
+ walk_to_leader()
+
+ if(STANCE_FLEE)
+ ai_log("handle_stance_tactical() : STANCE_FLEE, going to flee_from_target().", AI_LOG_TRACE)
+ flee_from_target()
+
+ if(STANCE_DISABLED)
+ ai_log("handle_stance_tactical() : STANCE_DISABLED.", AI_LOG_TRACE)
+ if(!is_disabled())
+ ai_log("handle_stance_tactical() : No longer disabled.", AI_LOG_TRACE)
+ set_stance(STANCE_IDLE)
+ else
+ handle_disabled()
+
+ ai_log("handle_stance_tactical() : Exiting.", AI_LOG_TRACE)
+ ai_log("========= Fast Process Ending ==========", AI_LOG_TRACE)
+
+// This is called every two seconds.
+/datum/ai_holder/proc/handle_stance_strategical()
+ ai_log("++++++++++ Slow Process Beginning ++++++++++", AI_LOG_TRACE)
+ ai_log("handle_stance_strategical() : Called.", AI_LOG_TRACE)
+
+ switch(stance)
+ if(STANCE_IDLE)
+
+ if(speak_chance) // In the long loop since otherwise it wont shut up.
+ handle_idle_speaking()
+
+ if(hostile)
+ ai_log("handle_stance_strategical() : STANCE_IDLE, going to find_target().", AI_LOG_TRACE)
+ find_target()
+ if(STANCE_APPROACH)
+ if(target)
+ ai_log("handle_stance_strategical() : STANCE_APPROACH, going to calculate_path([target]).", AI_LOG_TRACE)
+ calculate_path(target)
+ if(STANCE_MOVE)
+ if(hostile && find_target()) // This will switch its stance.
+ ai_log("handle_stance_strategical() : STANCE_MOVE, found target and was inturrupted.", AI_LOG_TRACE)
+ if(STANCE_FOLLOW)
+ if(hostile && find_target()) // This will switch its stance.
+ ai_log("handle_stance_strategical() : STANCE_FOLLOW, found target and was inturrupted.", AI_LOG_TRACE)
+ else if(leader)
+ ai_log("handle_stance_strategical() : STANCE_FOLLOW, going to calculate_path([leader]).", AI_LOG_TRACE)
+ calculate_path(leader)
+
+ ai_log("handle_stance_strategical() : Exiting.", AI_LOG_TRACE)
+ ai_log("++++++++++ Slow Process Ending ++++++++++", AI_LOG_TRACE)
+
+
+// Helper proc to turn AI 'busy' mode on or off without having to check if there is an AI, to simplify writing code.
+/mob/living/proc/set_AI_busy(value)
+ if(ai_holder)
+ ai_holder.busy = value
+
+/mob/living/proc/is_AI_busy()
+ if(!ai_holder)
+ return FALSE
+ return ai_holder.busy
+
+// Helper proc to check for the AI's stance.
+// Returns null if there's no AI holder, or the mob has a player and autopilot is not on.
+// Otherwise returns the stance.
+/mob/living/proc/get_AI_stance()
+ if(!ai_holder)
+ return null
+ if(client && !ai_holder.autopilot)
+ return null
+ return ai_holder.stance
+
+// Similar to above but only returns 1 or 0.
+/mob/living/proc/has_AI()
+ return get_AI_stance() ? TRUE : FALSE
+
+// 'Taunts' the AI into attacking the taunter.
+/mob/living/proc/taunt(atom/movable/taunter, force_target_switch = FALSE)
+ if(ai_holder)
+ ai_holder.receive_taunt(taunter, force_target_switch)
\ No newline at end of file
diff --git a/code/modules/ai/ai_holder_combat.dm b/code/modules/ai/ai_holder_combat.dm
new file mode 100644
index 0000000000..4a8fbdff69
--- /dev/null
+++ b/code/modules/ai/ai_holder_combat.dm
@@ -0,0 +1,308 @@
+// This file is for actual fighting. Targeting is in a seperate file.
+
+/datum/ai_holder
+ var/firing_lanes = FALSE // If ture, tries to refrain from shooting allies or the wall.
+ var/conserve_ammo = FALSE // If true, the mob will avoid shooting anything that does not have a chance to hit a mob. Requires firing_lanes to be true.
+ var/pointblank = FALSE // If ranged is true, and this is true, people adjacent to the mob will suffer the ranged instead of using a melee attack.
+
+ var/can_breakthrough = TRUE // If false, the AI will not try to open a path to its goal, like opening doors.
+ var/violent_breakthrough = TRUE // If false, the AI is not allowed to destroy things like windows or other structures in the way. Requires above var to be true.
+
+ var/stand_ground = FALSE // If true, the AI won't try to get closer to an enemy if out of range.
+
+
+// This does the actual attacking.
+/datum/ai_holder/proc/engage_target()
+ ai_log("engage_target() : Entering.", AI_LOG_DEBUG)
+
+ // Can we still see them?
+// if(!target || !can_attack(target) || (!(target in list_targets())) )
+ if(!target || !can_attack(target))
+ ai_log("engage_target() : Lost sight of target.", AI_LOG_TRACE)
+ lose_target() // We lost them.
+
+ if(!find_target()) // If we can't get a new one, then wait for a bit and then time out.
+ set_stance(STANCE_IDLE)
+ lost_target()
+ ai_log("engage_target() : No more targets. Exiting.", AI_LOG_DEBUG)
+ return
+ // if(lose_target_time + lose_target_timeout < world.time)
+ // ai_log("engage_target() : Unseen enemy timed out.", AI_LOG_TRACE)
+ // set_stance(STANCE_IDLE) // It must've been the wind.
+ // lost_target()
+ // ai_log("engage_target() : Exiting.", AI_LOG_DEBUG)
+ // return
+
+ // // But maybe we do one last ditch effort.
+ // if(!target_last_seen_turf || intelligence_level < AI_SMART)
+ // ai_log("engage_target() : No last known position or is too dumb to fight unseen enemies.", AI_LOG_TRACE)
+ // set_stance(STANCE_IDLE)
+ // else
+ // ai_log("engage_target() : Fighting unseen enemy.", AI_LOG_TRACE)
+ // engage_unseen_enemy()
+ else
+ ai_log("engage_target() : Got new target ([target]).", AI_LOG_TRACE)
+
+ var/distance = get_dist(holder, target)
+ ai_log("engage_target() : Distance to target ([target]) is [distance].", AI_LOG_TRACE)
+ holder.face_atom(target)
+ last_conflict_time = world.time
+
+ request_help() // Call our allies.
+
+ // Do a 'special' attack, if one is allowed.
+// if(prob(special_attack_prob) && (distance >= special_attack_min_range) && (distance <= special_attack_max_range))
+ if(holder.ICheckSpecialAttack(target))
+ ai_log("engage_target() : Attempting a special attack.", AI_LOG_TRACE)
+ on_engagement(target)
+ if(special_attack(target)) // If this fails, then we try a regular melee/ranged attack.
+ ai_log("engage_target() : Successful special attack. Exiting.", AI_LOG_DEBUG)
+ return
+
+ // Stab them.
+ else if(distance <= 1 && !pointblank)
+ ai_log("engage_target() : Attempting a melee attack.", AI_LOG_TRACE)
+ on_engagement(target)
+ melee_attack(target)
+
+ // Shoot them.
+ else if(holder.ICheckRangedAttack(target) && (distance <= max_range(target)) )
+ on_engagement(target)
+ if(firing_lanes && !test_projectile_safety(target))
+ // Nudge them a bit, maybe they can shoot next time.
+ step_rand(holder)
+ holder.face_atom(target)
+ ai_log("engage_target() : Could not safely fire at target. Exiting.", AI_LOG_DEBUG)
+ return
+
+ ai_log("engage_target() : Attempting a ranged attack.", AI_LOG_TRACE)
+ ranged_attack(target)
+
+ // Run after them.
+ else if(!stand_ground)
+ ai_log("engage_target() : Target ([target]) too far away. Exiting.", AI_LOG_DEBUG)
+ set_stance(STANCE_APPROACH)
+
+// We're not entirely sure how holder will do melee attacks since any /mob/living could be holder, but we don't have to care because Interfaces.
+/datum/ai_holder/proc/melee_attack(atom/A)
+ pre_melee_attack(A)
+ . = holder.IAttack(A)
+ if(.)
+ post_melee_attack(A)
+
+// Ditto.
+/datum/ai_holder/proc/ranged_attack(atom/A)
+ pre_ranged_attack(A)
+ . = holder.IRangedAttack(A)
+ if(.)
+ post_ranged_attack(A)
+
+// Most mobs probably won't have this defined but we don't care.
+/datum/ai_holder/proc/special_attack(atom/movable/AM)
+ pre_special_attack(AM)
+ . = holder.ISpecialAttack(AM)
+ if(.)
+ post_special_attack(AM)
+
+// Called when within striking/shooting distance, however cooldown is not considered.
+// Override to do things like move in a random step for evasiveness.
+// Note that this is called BEFORE the attack.
+/datum/ai_holder/proc/on_engagement(atom/A)
+
+// Called before a ranged attack is attempted.
+/datum/ai_holder/proc/pre_ranged_attack(atom/A)
+
+// Called before a melee attack is attempted.
+/datum/ai_holder/proc/pre_melee_attack(atom/A)
+
+// Called before a 'special' attack is attempted.
+/datum/ai_holder/proc/pre_special_attack(atom/A)
+
+// Called after a successful (IE not on cooldown) ranged attack.
+// Note that this is not whether the projectile actually hit, just that one was launched.
+/datum/ai_holder/proc/post_ranged_attack(atom/A)
+
+// Ditto but for melee.
+/datum/ai_holder/proc/post_melee_attack(atom/A)
+
+// And one more for special snowflake attacks.
+/datum/ai_holder/proc/post_special_attack(atom/A)
+
+// Used to make sure projectiles will probably hit the target and not the wall or a friend.
+/datum/ai_holder/proc/test_projectile_safety(atom/movable/AM)
+ var/mob/living/L = check_trajectory(AM, holder) // This isn't always reliable but its better than the previous method.
+// world << "Checked trajectory, would hit [L]."
+
+ if(istype(L)) // Did we hit a mob?
+// world << "Hit [L]."
+ if(holder.IIsAlly(L))
+// world << "Would hit ally, canceling."
+ return FALSE // We would hit a friend!
+// world << "Won't threaten ally, firing."
+ return TRUE // Otherwise we don't care, even if its not the intended target.
+ else
+ if(!isliving(AM)) // If the original target was an object, then let it happen if it doesn't threaten an ally.
+// world << "Targeting object, ignoring and firing."
+ return TRUE
+// world << "Not sure."
+
+ return !conserve_ammo // If we have infinite ammo than shooting the wall isn't so bad, but otherwise lets not.
+
+// Test if we are within range to attempt an attack, melee or ranged.
+/datum/ai_holder/proc/within_range(atom/movable/AM)
+ var/distance = get_dist(holder, AM)
+ if(distance <= 1)
+ return TRUE // Can melee.
+ else if(holder.ICheckRangedAttack(AM) && distance <= max_range(AM))
+ return TRUE // Can shoot.
+ return FALSE
+
+// Determines how close the AI will move to its target.
+/datum/ai_holder/proc/closest_distance(atom/movable/AM)
+ return max(max_range(AM) - 1, 1) // Max range -1 just because we don't want to constantly get kited
+
+// Can be used to conditionally do a ranged or melee attack.
+/datum/ai_holder/proc/max_range(atom/movable/AM)
+ return holder.ICheckRangedAttack(AM) ? 7 : 1
+
+// Goes to the target, to attack them.
+// Called when in STANCE_APPROACH.
+/datum/ai_holder/proc/walk_to_target()
+ ai_log("walk_to_target() : Entering.", AI_LOG_DEBUG)
+ // Make sure we can still chase/attack them.
+ if(!target || !can_attack(target))
+ ai_log("walk_to_target() : Lost target.", AI_LOG_INFO)
+ if(!find_target())
+ lost_target()
+ ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG)
+ return
+ else
+ ai_log("walk_to_target() : Found new target ([target]).", AI_LOG_INFO)
+
+ // Find out where we're going.
+ var/get_to = closest_distance(target)
+ var/distance = get_dist(holder, target)
+ ai_log("walk_to_target() : get_to is [get_to].", AI_LOG_TRACE)
+
+ // We're here!
+ // Special case: Our holder has a special attack that is ranged, but normally the holder uses melee.
+ // If that happens, we'll switch to STANCE_FIGHT so they can use it. If the special attack is limited, they'll likely switch back next tick.
+ if(distance <= get_to || holder.ICheckSpecialAttack(target))
+ ai_log("walk_to_target() : Within range.", AI_LOG_INFO)
+ forget_path()
+ set_stance(STANCE_FIGHT)
+ ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG)
+ return
+
+
+ // Otherwise keep walking.
+ if(!stand_ground)
+ walk_path(target, get_to)
+
+ ai_log("walk_to_target() : Exiting.", AI_LOG_DEBUG)
+
+// Resists out of things.
+// Sometimes there are times you want your mob to be buckled to something, so override this for when that is needed.
+/datum/ai_holder/proc/handle_resist()
+ holder.resist()
+
+// Used to break through windows and barriers to a target on the other side.
+// This does two passes, so that if its just a public access door, the windows nearby don't need to be smashed.
+/datum/ai_holder/proc/breakthrough(atom/target_atom)
+ ai_log("breakthrough() : Entering", AI_LOG_TRACE)
+
+ if(!can_breakthrough)
+ ai_log("breakthrough() : Not allowed to breakthrough. Exiting.", AI_LOG_TRACE)
+ return FALSE
+
+ if(!isturf(holder.loc))
+ ai_log("breakthrough() : Trapped inside \the [holder.loc]. Exiting.", AI_LOG_TRACE)
+ return FALSE
+
+ var/dir_to_target = get_dir(holder, target_atom)
+ holder.face_atom(target_atom)
+ ai_log("breakthrough() : Exiting", AI_LOG_DEBUG)
+
+ // Sometimes the mob will try to hit something diagonally, and generally this fails.
+ // So instead we will try two more times with some adjustments if the attack fails.
+ var/list/directions_to_try = list(
+ dir_to_target,
+ turn(dir_to_target, 45),
+ turn(dir_to_target, -45)
+ )
+
+ ai_log("breakthrough() : Starting peaceful pass.", AI_LOG_DEBUG)
+
+ var/result = FALSE
+
+ // First, we will try to peacefully make a path, I.E opening a door we have access to.
+ for(var/direction in directions_to_try)
+ result = destroy_surroundings(direction, violent = FALSE)
+ if(result)
+ break
+
+ // Alright, lets smash some shit instead, if it didn't work and we're allowed to be violent.
+ if(!result && can_violently_breakthrough())
+ ai_log("breakthrough() : Starting violent pass.", AI_LOG_DEBUG)
+ for(var/direction in directions_to_try)
+ result = destroy_surroundings(direction, violent = TRUE)
+ if(result)
+ break
+
+ ai_log("breakthrough() : Exiting with [result].", AI_LOG_TRACE)
+ return result
+
+// Despite the name, this can also be used to help clear a path without any destruction.
+/datum/ai_holder/proc/destroy_surroundings(direction, violent = TRUE)
+ ai_log("destroy_surroundings() : Entering.", AI_LOG_TRACE)
+ if(!direction)
+ direction = pick(cardinal) // FLAIL WILDLY
+ ai_log("destroy_surroundings() : No direction given, picked [direction] randomly.", AI_LOG_DEBUG)
+
+ var/turf/problem_turf = get_step(holder, direction)
+
+ // First, give peace a chance.
+ if(!violent)
+ ai_log("destroy_surroundings() : Going to try to peacefully clear [problem_turf].", AI_LOG_DEBUG)
+ for(var/obj/machinery/door/D in problem_turf)
+ if(D.density && holder.Adjacent(D) && D.allowed(holder) && D.operable())
+ // First, try to open the door if possible without smashing it. We might have access.
+ ai_log("destroy_surroundings() : Opening closed door.", AI_LOG_INFO)
+ return D.open()
+
+ // Peace has failed us, can we just smash the things in the way?
+ else
+ ai_log("destroy_surroundings() : Going to try to violently clear [problem_turf].", AI_LOG_DEBUG)
+ // First, kill windows in the way.
+ for(var/obj/structure/window/W in problem_turf)
+ if(W.dir == reverse_dir[holder.dir]) // So that windows get smashed in the right order
+ ai_log("destroy_surroundings() : Attacking side window.", AI_LOG_INFO)
+ return holder.IAttack(W)
+
+ else if(W.is_fulltile())
+ ai_log("destroy_surroundings() : Attacking full tile window.", AI_LOG_INFO)
+ return holder.IAttack(W)
+
+ // Kill hull shields in the way.
+ for(var/obj/effect/energy_field/shield in problem_turf)
+ if(shield.density) // Don't attack shields that are already down.
+ ai_log("destroy_surroundings() : Attacking hull shield.", AI_LOG_INFO)
+ return holder.IAttack(shield)
+
+ // Kill common obstacle in the way like tables.
+ var/obj/structure/obstacle = locate(/obj/structure, problem_turf)
+ if(istype(obstacle, /obj/structure/window) || istype(obstacle, /obj/structure/closet) || istype(obstacle, /obj/structure/table) || istype(obstacle, /obj/structure/grille))
+ ai_log("destroy_surroundings() : Attacking generic structure.", AI_LOG_INFO)
+ return holder.IAttack(obstacle)
+
+ for(var/obj/machinery/door/D in problem_turf) // Required since firelocks take up the same turf.
+ if(D.density)
+ ai_log("destroy_surroundings() : Attacking closed door.", AI_LOG_INFO)
+ return holder.IAttack(D)
+
+ ai_log("destroy_surroundings() : Exiting due to nothing to attack.", AI_LOG_INFO)
+ return FALSE // Nothing to attack.
+
+// Override for special behaviour.
+/datum/ai_holder/proc/can_violently_breakthrough()
+ return violent_breakthrough
\ No newline at end of file
diff --git a/code/modules/ai/ai_holder_combat_unseen.dm b/code/modules/ai/ai_holder_combat_unseen.dm
new file mode 100644
index 0000000000..0cb518f08c
--- /dev/null
+++ b/code/modules/ai/ai_holder_combat_unseen.dm
@@ -0,0 +1,43 @@
+// Used for fighting invisible things.
+
+// Used when a target is out of sight or invisible.
+/datum/ai_holder/proc/engage_unseen_enemy()
+ // Lets do some last things before giving up.
+ if(!ranged)
+ if(get_dist(holder, target_last_seen_turf > 1)) // We last saw them over there.
+ // Go to where you last saw the enemy.
+ give_destination(target_last_seen_turf, 1, TRUE) // This will set it to STANCE_REPOSITION.
+ else // We last saw them next to us, so do a blind attack on that tile.
+ melee_on_tile(target_last_seen_turf)
+
+ else if(!conserve_ammo)
+ shoot_near_turf(target_last_seen_turf)
+
+// This shoots semi-randomly near a specific turf.
+/datum/ai_holder/proc/shoot_near_turf(turf/targeted_turf)
+ if(!ranged)
+ return // Can't shoot.
+ if(get_dist(holder, targeted_turf) > max_range(targeted_turf))
+ return // Too far to shoot.
+
+ var/turf/T = pick(RANGE_TURFS(2, targeted_turf)) // The turf we're actually gonna shoot at.
+ on_engagement(T)
+ if(firing_lanes && !test_projectile_safety(T))
+ step_rand(holder)
+ holder.face_atom(T)
+ return
+
+ ranged_attack(T)
+
+// Attempts to attack something on a specific tile.
+// TODO: Put on mob/living?
+/datum/ai_holder/proc/melee_on_tile(turf/T)
+ var/mob/living/L = locate() in T
+ if(!L)
+ T.visible_message("\The [holder] attacks nothing around \the [T].")
+ return
+
+ if(holder.IIsAlly(L)) // Don't hurt our ally.
+ return
+
+ melee_attack(L)
\ No newline at end of file
diff --git a/code/modules/ai/ai_holder_communication.dm b/code/modules/ai/ai_holder_communication.dm
new file mode 100644
index 0000000000..93267d19f4
--- /dev/null
+++ b/code/modules/ai/ai_holder_communication.dm
@@ -0,0 +1,134 @@
+// Contains code for speaking and emoting.
+
+/datum/ai_holder
+ var/threaten = FALSE // If hostile and sees a valid target, gives a 'warning' to the target before beginning the attack.
+ var/threatening = FALSE // If the mob actually gave the warning, checked so it doesn't constantly yell every tick.
+ var/threaten_delay = 3 SECONDS // How long a 'threat' lasts, until actual fighting starts. If null, the mob never starts the fight but still does the threat.
+ var/threaten_timeout = 1 MINUTE // If the mob threatens someone, they leave, and then come back before this timeout period, the mob escalates to fighting immediately.
+ var/last_conflict_time = null // Last occurance of fighting being used, in world.time.
+ var/last_threaten_time = null // Ditto but only for threats.
+
+ var/speak_chance = 0 // Probability that the mob talks (this is 'X in 200' chance since even 1/100 is pretty noisy)
+
+
+/datum/ai_holder/proc/should_threaten()
+ if(!threaten)
+ return FALSE // We don't negotiate.
+ if(target in attackers)
+ return FALSE // They (or someone like them) attacked us before, escalate immediately.
+ if(!will_threaten(target))
+ return FALSE // Pointless to threaten an animal, a mindless drone, or an object.
+ if(stance in STANCES_COMBAT)
+ return FALSE // We're probably already fighting or recently fought if not in these stances.
+ if(last_threaten_time && threaten_delay && last_conflict_time + threaten_timeout > world.time)
+ return FALSE // We threatened someone recently, so lets show them we mean business.
+ return TRUE // Lets give them a chance to choose wisely and walk away.
+
+/datum/ai_holder/proc/threaten_target()
+ holder.face_atom(target) // Constantly face the target.
+
+ if(!threatening) // First tick.
+ threatening = TRUE
+ last_threaten_time = world.time
+
+ if(holder.say_list)
+ holder.ISay(safepick(holder.say_list.say_threaten))
+ playsound(holder.loc, holder.say_list.threaten_sound, 50, 1) // We do this twice to make the sound -very- noticable to the target.
+ playsound(target.loc, holder.say_list.threaten_sound, 50, 1) // Actual aim-mode also does that so at least it's consistant.
+ else // Otherwise we are waiting for them to go away or to wait long enough for escalate.
+ if(target in list_targets()) // Are they still visible?
+ var/should_escalate = FALSE
+
+ if(threaten_delay && last_threaten_time + threaten_delay < world.time) // Waited too long.
+ should_escalate = TRUE
+ else if(last_conflict_time + threaten_timeout > world.time) // We got attacked while threatening them.
+ should_escalate = TRUE
+
+ if(should_escalate)
+ threatening = FALSE
+ set_stance(STANCE_APPROACH)
+ if(holder.say_list)
+ holder.ISay(safepick(holder.say_list.say_escalate))
+ else
+ return // Wait a bit.
+
+ else // They left, or so we think.
+ threatening = FALSE
+ set_stance(STANCE_IDLE)
+ if(holder.say_list)
+ holder.ISay(safepick(holder.say_list.say_stand_down))
+ playsound(holder.loc, holder.say_list.stand_down_sound, 50, 1) // We do this twice to make the sound -very- noticable to the target.
+ playsound(target.loc, holder.say_list.stand_down_sound, 50, 1) // Actual aim-mode also does that so at least it's consistant.
+
+// Determines what is deserving of a warning when STANCE_ALERT is active.
+/datum/ai_holder/proc/will_threaten(mob/living/the_target)
+ if(!isliving(the_target))
+ return FALSE // Turrets don't give a fuck so neither will we.
+ /*
+ // Find a nice way of doing this later.
+ if(istype(the_target, /mob/living/simple_mob) && istype(holder, /mob/living/simple_mob))
+ var/mob/living/simple_mob/us = holder
+ var/mob/living/simple_mob/them = target
+
+ if(them.intelligence_level < us.intelligence_level) // Todo: Bitflag these.
+ return FALSE // Humanoids don't care about drones/animals/etc. Drones don't care about animals, and so on.
+ */
+ return TRUE
+
+// Temp defines to make the below code a bit more readable.
+#define COMM_SAY "say"
+#define COMM_AUDIBLE_EMOTE "audible emote"
+#define COMM_VISUAL_EMOTE "visual emote"
+
+/datum/ai_holder/proc/handle_idle_speaking()
+ if(rand(0,200) < speak_chance)
+ // Check if anyone is around to 'appreciate' what we say.
+ var/alone = TRUE
+ for(var/m in viewers(holder))
+ var/mob/M = m
+ if(M.client)
+ alone = FALSE
+ break
+ if(alone) // Forever alone. No point doing anything else.
+ return
+
+ var/list/comm_types = list() // What kinds of things can we do?
+ if(!holder.say_list)
+ return
+
+ if(holder.say_list.speak.len)
+ comm_types += COMM_SAY
+ if(holder.say_list.emote_hear.len)
+ comm_types += COMM_AUDIBLE_EMOTE
+ if(holder.say_list.emote_see.len)
+ comm_types += COMM_VISUAL_EMOTE
+
+ if(!comm_types.len)
+ return // All the relevant lists are empty, so do nothing.
+
+ switch(pick(comm_types))
+ if(COMM_SAY)
+ holder.ISay(safepick(holder.say_list.speak))
+ if(COMM_AUDIBLE_EMOTE)
+ holder.audible_emote(safepick(holder.say_list.emote_hear))
+ if(COMM_VISUAL_EMOTE)
+ holder.visible_emote(safepick(holder.say_list.emote_see))
+
+#undef COMM_SAY
+#undef COMM_AUDIBLE_EMOTE
+#undef COMM_VISUAL_EMOTE
+
+// Handles the holder hearing a mob's say()
+// Does nothing by default, override this proc for special behavior.
+/datum/ai_holder/proc/on_hear_say(mob/living/speaker, message)
+ return
+
+// This is to make responses feel a bit more natural and not instant.
+/datum/ai_holder/proc/delayed_say(var/message, var/mob/speak_to)
+ spawn(rand(1 SECOND, 2 SECONDS))
+ if(!src || !holder || !can_act()) // We might've died/got deleted/etc in the meantime.
+ return
+
+ if(speak_to)
+ holder.face_atom(speak_to)
+ holder.ISay(message)
diff --git a/code/modules/ai/ai_holder_cooperation.dm b/code/modules/ai/ai_holder_cooperation.dm
new file mode 100644
index 0000000000..0f6b0bcfa2
--- /dev/null
+++ b/code/modules/ai/ai_holder_cooperation.dm
@@ -0,0 +1,115 @@
+// Involves cooperating with other ai_holders.
+/datum/ai_holder
+ var/cooperative = FALSE // If true, asks allies to help when fighting something.
+ var/call_distance = 14 // How far away calls for help will go for.
+ var/last_helpask_time = 0 // world.time when a mob asked for help.
+ var/list/faction_friends = list() // List of all mobs inside the faction with ai_holders that have cooperate on, to call for help without using range().
+ // Note that this is only used for sending calls out. Receiving calls doesn't care about this list, only if the mob is in the faction.
+ // This means the AI could respond to a player's call for help, if a way to do so was implemented.
+
+ // These vars don't do anything currently. They did before but an optimization made them nonfunctional.
+ // It was probably worth it.
+ var/call_players = FALSE // (Currently nonfunctional) If true, players get notified of an allied mob calling for help.
+ var/called_player_message = "needs help!" // (Currently nonfunctional) Part of a message used when above var is true. Full message is "\The [holder] [called_player_message]"
+
+/datum/ai_holder/New(new_holder)
+ ..()
+ if(cooperative)
+ build_faction_friends()
+
+/datum/ai_holder/Destroy()
+ if(faction_friends.len) //This list is shared amongst the faction
+ faction_friends -= src
+ return ..()
+
+// Handles everything about that list.
+// Call on initialization or if something weird happened like the mob switched factions.
+/datum/ai_holder/proc/build_faction_friends()
+ if(faction_friends.len) // Already have a list.
+ // Assume we're moving to a new faction.
+ faction_friends -= src // Get us out of the current list shared by everyone else.
+ faction_friends = list() // Then make our list empty and unshared in case we become a loner.
+
+ // Find another AI-controlled mob in the same faction if possible.
+ var/mob/living/first_friend
+ for(var/mob/living/L in living_mob_list)
+ if(L.faction == holder.faction && L.ai_holder)
+ first_friend = L
+ break
+
+ if(first_friend) // Joining an already established faction.
+ faction_friends = first_friend.ai_holder.faction_friends
+ faction_friends |= holder
+ else // We're the 'founder' (first and/or only member) of this faction.
+ faction_friends |= holder
+
+// Requests help in combat from other mobs possessing ai_holders.
+/datum/ai_holder/proc/request_help()
+ ai_log("request_help() : Entering.", AI_LOG_DEBUG)
+ if(!cooperative || ((world.time - last_helpask_time) < 10 SECONDS))
+ return
+
+ ai_log("request_help() : Asking for help.", AI_LOG_INFO)
+ last_helpask_time = world.time
+
+// for(var/mob/living/L in range(call_distance, holder))
+ for(var/mob/living/L in faction_friends)
+ if(L == holder) // Lets not call ourselves.
+ continue
+ if(holder.z != L.z) // On seperate z-level.
+ continue
+ if(get_dist(L, holder) > call_distance) // Too far to 'hear' the call for help.
+ continue
+
+ if(holder.IIsAlly(L))
+ // This will currently never run sadly, until faction_friends is made to accept players too.
+ // That might be for the best since I can imagine it getting spammy in a big fight.
+ if(L.client && call_players) // Dealing with a player.
+ ai_log("request_help() : Asking [L] (Player) for help.", AI_LOG_INFO)
+ to_chat(L, "\The [holder] [called_player_message]")
+
+ else if(L.ai_holder) // Dealing with an AI.
+ ai_log("request_help() : Asking [L] (AI) for help.", AI_LOG_INFO)
+ L.ai_holder.help_requested(holder)
+
+ ai_log("request_help() : Exiting.", AI_LOG_DEBUG)
+
+// What allies receive when someone else is calling for help.
+/datum/ai_holder/proc/help_requested(mob/living/friend)
+ ai_log("help_requested() : Entering.", AI_LOG_DEBUG)
+ if(stance == STANCE_SLEEP)
+ ai_log("help_requested() : Help requested by [friend] but we are asleep.", AI_LOG_INFO)
+ return
+ if(!cooperative)
+ ai_log("help_requested() : Help requested by [friend] but we're not cooperative.", AI_LOG_INFO)
+ return
+ if(stance in STANCES_COMBAT)
+ ai_log("help_requested() : Help requested by [friend] but we are busy fighting something else.", AI_LOG_INFO)
+ return
+ if(!can_act())
+ ai_log("help_requested() : Help requested by [friend] but cannot act (stunned or dead).", AI_LOG_INFO)
+ return
+ if(!holder.IIsAlly(friend)) // Extra sanity.
+ ai_log("help_requested() : Help requested by [friend] but we hate them.", AI_LOG_INFO)
+ return
+ if(friend.ai_holder && friend.ai_holder.target && !can_attack(friend.ai_holder.target))
+ ai_log("help_requested() : Help requested by [friend] but we don't want to fight their target.", AI_LOG_INFO)
+ return
+ if(get_dist(holder, friend) <= follow_distance)
+ ai_log("help_requested() : Help requested by [friend] but we're already here.", AI_LOG_INFO)
+ return
+ if(get_dist(holder, friend) <= vision_range) // Within our sight.
+ ai_log("help_requested() : Help requested by [friend], and within target sharing range.", AI_LOG_INFO)
+ if(friend.ai_holder) // AI calling for help.
+ if(friend.ai_holder.target && can_attack(friend.ai_holder.target)) // Friend wants us to attack their target.
+ last_conflict_time = world.time // So we attack immediately and not threaten.
+ give_target(friend.ai_holder.target) // This will set us to the appropiate stance.
+ ai_log("help_requested() : Given target [target] by [friend]. Exiting", AI_LOG_DEBUG)
+ return
+
+ // Otherwise they're outside our sight, lack a target, or aren't AI controlled, but within call range.
+ // So assuming we're AI controlled, we'll go to them and see whats wrong.
+ ai_log("help_requested() : Help requested by [friend], going to go to friend.", AI_LOG_INFO)
+ set_follow(friend, 10 SECONDS)
+ ai_log("help_requested() : Exiting.", AI_LOG_DEBUG)
+
diff --git a/code/modules/ai/ai_holder_debug.dm b/code/modules/ai/ai_holder_debug.dm
new file mode 100644
index 0000000000..beee998af8
--- /dev/null
+++ b/code/modules/ai/ai_holder_debug.dm
@@ -0,0 +1,89 @@
+// Contains settings to make it easier to debug things.
+
+/datum/ai_holder
+ var/path_display = FALSE // Displays a visual path when A* is being used.
+ var/path_icon = 'icons/misc/debug_group.dmi' // What icon to use for the overlay
+ var/path_icon_state = "red" // What state to use for the overlay
+ var/image/path_overlay // A reference to the overlay
+
+ var/last_turf_display = FALSE // Similar to above, but shows the target's last known turf visually.
+ var/last_turf_icon_state = "green" // A seperate icon_state from the previous.
+ var/image/last_turf_overlay // Another reference for an overlay.
+
+ var/stance_coloring = FALSE // Colors the mob depending on its stance.
+
+ var/debug_ai = AI_LOG_OFF // The level of debugging information to display to people who can see log_debug().
+
+/datum/ai_holder/New()
+ ..()
+ path_overlay = new(path_icon,path_icon_state)
+ last_turf_overlay = new(path_icon, last_turf_icon_state)
+
+/datum/ai_holder/Destroy()
+ path_overlay = null
+ last_turf_overlay = null
+ return ..()
+
+//For debug purposes!
+/datum/ai_holder/proc/ai_log_output(var/msg = "missing message", var/ver = AI_LOG_INFO)
+ var/span_type
+ switch(ver)
+ if(AI_LOG_OFF)
+ return
+ if(AI_LOG_ERROR)
+ span_type = "debug_error"
+ if(AI_LOG_WARNING)
+ span_type = "debug_warning"
+ if(AI_LOG_INFO)
+ span_type = "debug_info"
+ if(AI_LOG_DEBUG)
+ span_type = "debug_debug" // RAS syndrome at work.
+ if(AI_LOG_TRACE)
+ span_type = "debug_trace"
+ if(ver <= debug_ai)
+ log_debug("AI: ([holder]:\ref[holder] | [holder.x],[holder.y],[holder.z])(@[world.time]): [msg] ")
+
+// Colors the mob based on stance, to visually tell what stance it is for debugging.
+// Probably not something you want for regular use.
+/datum/ai_holder/proc/stance_color()
+ var/new_color = null
+ switch(stance)
+ if(STANCE_SLEEP)
+ new_color = "#FFFFFF" // White
+ if(STANCE_IDLE)
+ new_color = "#00FF00" // Green
+ if(STANCE_ALERT)
+ new_color = "#FFFF00" // Yellow
+ if(STANCE_APPROACH)
+ new_color = "#FF9933" // Orange
+ if(STANCE_FIGHT)
+ new_color = "#FF0000" // Red
+ if(STANCE_MOVE)
+ new_color = "#0000FF" // Blue
+ if(STANCE_REPOSITION)
+ new_color = "#FF00FF" // Purple
+ if(STANCE_FOLLOW)
+ new_color = "#00FFFF" // Cyan
+ if(STANCE_FLEE)
+ new_color = "#666666" // Grey
+ if(STANCE_DISABLED)
+ new_color = "#000000" // Black
+ holder.color = new_color
+
+// Turns on all the debugging stuff.
+/datum/ai_holder/proc/debug()
+ stance_coloring = TRUE
+ path_display = TRUE
+ last_turf_display = TRUE
+ debug_ai = AI_LOG_INFO
+
+/datum/ai_holder/hostile/debug
+ wander = FALSE
+ conserve_ammo = FALSE
+ intelligence_level = AI_SMART
+
+ stance_coloring = TRUE
+ path_display = TRUE
+ last_turf_display = TRUE
+ debug_ai = AI_LOG_INFO
+
diff --git a/code/modules/ai/ai_holder_disabled.dm b/code/modules/ai/ai_holder_disabled.dm
new file mode 100644
index 0000000000..e7cd6aa1f8
--- /dev/null
+++ b/code/modules/ai/ai_holder_disabled.dm
@@ -0,0 +1,95 @@
+// Handles AI while stunned or otherwise disabled.
+
+/datum/ai_holder
+ var/respect_confusion = TRUE // If false, the mob won't wander around recklessly.
+
+// If our holder is able to do anything.
+/datum/ai_holder/proc/can_act()
+ if(holder.stat) // Dead or unconscious.
+ ai_log("can_act() : Stat was non-zero ([holder.stat]).", AI_LOG_TRACE)
+ return FALSE
+ if(holder.incapacitated(INCAPACITATION_DISABLED)) // Stunned in some form.
+ ai_log("can_act() : Incapacited.", AI_LOG_TRACE)
+ return FALSE
+ return TRUE
+
+// Test if we should switch to STANCE_DISABLE.
+// Currently tests for death, stuns, and confusion.
+/datum/ai_holder/proc/is_disabled()
+ if(!can_act())
+ return TRUE
+ if(is_confused())
+ return TRUE
+ return FALSE
+
+/datum/ai_holder/proc/is_confused()
+ return holder.confused > 0 && respect_confusion
+
+// Called by the main loop.
+/datum/ai_holder/proc/handle_disabled()
+ if(!can_act())
+ return // Just sit there and take it.
+ else if(is_confused())
+ dangerous_wander() // Let's bump into allies and hit them.
+
+// Similar to normal wander, but will walk into tiles that are harmful, and attack anything they bump into, including allies.
+// Occurs when confused.
+/datum/ai_holder/proc/dangerous_wander()
+ ai_log("dangerous_wander() : Entered.", AI_LOG_DEBUG)
+ if(isturf(holder.loc) && can_act())
+ // Test if we should refrain from falling/attacking allies, if we're smart enough to realize that.
+ if(intelligence_level > AI_NORMAL)
+ var/unsafe = FALSE
+
+ tile_test:
+ for(var/dir_tested in cardinal)
+ var/turf/turf_tested = get_step(holder, dir_tested)
+ // Look for unsafe tiles.
+ if(!turf_tested.is_safe_to_enter(holder))
+ unsafe = TRUE
+ break
+
+ // Look for allies.
+ for(var/mob/living/L in turf_tested)
+ if(holder.IIsAlly(L))
+ unsafe = TRUE
+ break tile_test
+
+
+ if(unsafe)
+ ai_log("dangerous_wander() : Staying still due to risk of harm to self or allies.", AI_LOG_TRACE)
+ return // Just stay still.
+
+ var/moving_to = 0
+ moving_to = pick(cardinal)
+ var/turf/T = get_step(holder, moving_to)
+
+ var/mob/living/L = locate() in T
+ if(L)
+ // Attack whoever's on the tile. Even if it's an ally.
+ ai_log("dangerous_wander() : Going to confuse-attack [L].", AI_LOG_TRACE)
+ melee_attack(L)
+ else
+ // Move to the tile. Even if it's unsafe.
+ ai_log("dangerous_wander() : Going to confuse-walk to [T] ([T.x],[T.y],[T.z]).", AI_LOG_TRACE)
+ holder.IMove(T, safety = FALSE)
+ ai_log("dangerous_wander() : Exited.", AI_LOG_DEBUG)
+
+/*
+// Wanders randomly in cardinal directions.
+/datum/ai_holder/proc/handle_wander_movement()
+ ai_log("handle_wander_movement() : Entered.", AI_LOG_DEBUG)
+ if(isturf(holder.loc) && can_act())
+ wander_delay--
+ if(wander_delay <= 0)
+ if(!wander_when_pulled && holder.pulledby)
+ ai_log("handle_wander_movement() : Being pulled and cannot wander. Exiting.", AI_LOG_DEBUG)
+ return
+
+ var/moving_to = 0 // Apparently this is required or it always picks 4, according to the previous developer for simplemob AI.
+ moving_to = pick(cardinal)
+ holder.set_dir(moving_to)
+ holder.IMove(get_step(holder,moving_to))
+ wander_delay = base_wander_delay
+ ai_log("handle_wander_movement() : Exited.", AI_LOG_DEBUG)
+*/
\ No newline at end of file
diff --git a/code/modules/ai/ai_holder_fleeing.dm b/code/modules/ai/ai_holder_fleeing.dm
new file mode 100644
index 0000000000..83a7be94b8
--- /dev/null
+++ b/code/modules/ai/ai_holder_fleeing.dm
@@ -0,0 +1,45 @@
+// This code handles what to do inside STANCE_FLEE.
+
+/datum/ai_holder
+ var/can_flee = TRUE // If they're even allowed to flee.
+ var/flee_when_dying = TRUE // If they should flee when low on health.
+ var/dying_threshold = 0.3 // How low on health the holder needs to be before fleeing. Defaults to 30% or lower health.
+ var/flee_when_outmatched = FALSE // If they should flee upon reaching a specific tension threshold.
+ var/outmatched_threshold = 200 // The tension threshold needed for a mob to decide it should run away.
+
+
+
+/datum/ai_holder/proc/should_flee(force = FALSE)
+ if(holder.has_modifier_of_type(/datum/modifier/berserk)) // Berserked mobs will never flee, even if 'forced' to.
+ return FALSE
+ if(force)
+ return TRUE
+
+ if(can_flee)
+ if(special_flee_check())
+ return TRUE
+ if(!hostile && !retaliate)
+ return TRUE // We're not hostile and someone attacked us first.
+ if(flee_when_dying && (holder.health / holder.getMaxHealth()) <= dying_threshold)
+ return TRUE // We're gonna die!
+ else if(flee_when_outmatched && holder.get_tension() >= outmatched_threshold)
+ return TRUE // We're fighting something way way stronger then us.
+ return FALSE
+
+// Override for special fleeing conditionally.
+/datum/ai_holder/proc/special_flee_check()
+ return FALSE
+
+/datum/ai_holder/proc/flee_from_target()
+ ai_log("flee_from_target() : Entering.", AI_LOG_DEBUG)
+
+ if(!target || !should_flee() || !can_attack(target)) // can_attack() is used since it checks the same things we would need to anyways.
+ ai_log("flee_from_target() : Lost target to flee from.", AI_LOG_INFO)
+ lose_target()
+ set_stance(STANCE_IDLE)
+ ai_log("flee_from_target() : Exiting.", AI_LOG_DEBUG)
+ return
+
+ ai_log("flee_from_target() : Stepping away.", AI_LOG_TRACE)
+ step_away(holder, target, vision_range)
+ ai_log("flee_from_target() : Exiting.", AI_LOG_DEBUG)
\ No newline at end of file
diff --git a/code/modules/ai/ai_holder_follow.dm b/code/modules/ai/ai_holder_follow.dm
new file mode 100644
index 0000000000..1e7bb0875d
--- /dev/null
+++ b/code/modules/ai/ai_holder_follow.dm
@@ -0,0 +1,68 @@
+// This handles following a specific atom/movable, without violently murdering it.
+
+/datum/ai_holder
+ // Following.
+ var/atom/movable/leader = null // The movable atom that the mob wants to follow.
+ var/follow_distance = 2 // How far leader must be to start moving towards them.
+ var/follow_until_time = 0 // world.time when the mob will stop following leader. 0 means it won't time out.
+
+/datum/ai_holder/proc/walk_to_leader()
+ ai_log("walk_to_leader() : Entering.",AI_LOG_TRACE)
+ if(!leader)
+ ai_log("walk_to_leader() : No leader.", AI_LOG_WARNING)
+ forget_path()
+ set_stance(STANCE_IDLE)
+ ai_log("walk_to_leader() : Exiting.", AI_LOG_TRACE)
+ return
+
+ // Did we time out?
+ if(follow_until_time && world.time > follow_until_time)
+ ai_log("walk_to_leader() : Follow timed out, losing leader.", AI_LOG_INFO)
+ lose_follow()
+ set_stance(STANCE_IDLE)
+ ai_log("walk_to_leader() : Exiting.", AI_LOG_TRACE)
+ return
+
+ var/get_to = follow_distance
+ var/distance = get_dist(holder, leader)
+ ai_log("walk_to_leader() : get_to is [get_to].", AI_LOG_TRACE)
+
+ // We're here!
+ if(distance <= get_to)
+ give_up_movement()
+ set_stance(STANCE_IDLE)
+ ai_log("walk_to_leader() : Within range, exiting.", AI_LOG_INFO)
+ return
+
+ ai_log("walk_to_leader() : Walking.", AI_LOG_TRACE)
+ walk_path(leader, get_to)
+ ai_log("walk_to_leader() : Exiting.",AI_LOG_DEBUG)
+
+/datum/ai_holder/proc/set_follow(mob/living/L, follow_for = 0)
+ ai_log("set_follow() : Entered.", AI_LOG_DEBUG)
+ if(!L)
+ ai_log("set_follow() : Was told to follow a nonexistant mob.", AI_LOG_ERROR)
+ return FALSE
+
+ leader = L
+ follow_until_time = !follow_for ? 0 : world.time + follow_for
+ ai_log("set_follow() : Exited.", AI_LOG_DEBUG)
+ return TRUE
+
+/datum/ai_holder/proc/lose_follow()
+ ai_log("lose_follow() : Entered.", AI_LOG_DEBUG)
+ ai_log("lose_follow() : Going to lose leader [leader].", AI_LOG_INFO)
+ leader = null
+ give_up_movement()
+ ai_log("lose_follow() : Exited.", AI_LOG_DEBUG)
+
+/datum/ai_holder/proc/should_follow_leader()
+ if(!leader)
+ return FALSE
+ if(follow_until_time && world.time > follow_until_time)
+ lose_follow()
+ set_stance(STANCE_IDLE)
+ return FALSE
+ if(get_dist(holder, leader) > follow_distance)
+ return TRUE
+ return FALSE
\ No newline at end of file
diff --git a/code/modules/ai/ai_holder_movement.dm b/code/modules/ai/ai_holder_movement.dm
new file mode 100644
index 0000000000..55a1098b90
--- /dev/null
+++ b/code/modules/ai/ai_holder_movement.dm
@@ -0,0 +1,154 @@
+/datum/ai_holder
+ // General.
+ var/turf/destination = null // The targeted tile the mob wants to walk to.
+ var/min_distance_to_destination = 1 // Holds how close the mob should go to destination until they're done.
+
+ // Home.
+ var/turf/home_turf = null // The mob's 'home' turf. It will try to stay near it if told to do so. This is the turf the AI was initialized on by default.
+ var/returns_home = FALSE // If true, makes the mob go to its 'home' if it strays too far.
+ var/home_low_priority = FALSE // If true, the mob will not go home unless it has nothing better to do, e.g. its following someone.
+ var/max_home_distance = 3 // How far the mob can go away from its home before being told to go_home().
+ // Note that there is a 'BYOND cap' of 14 due to limitations of get_/step_to().
+
+ // Wandering.
+ var/wander = FALSE // If true, the mob will randomly move in the four cardinal directions when idle.
+ var/wander_delay = 0 // How many ticks until the mob can move a tile in handle_wander_movement().
+ var/base_wander_delay = 2 // What the above var gets set to when it wanders. Note that a tick happens every half a second.
+ var/wander_when_pulled = FALSE // If the mob will refrain from wandering if someone is pulling it.
+
+
+/datum/ai_holder/proc/walk_to_destination()
+ ai_log("walk_to_destination() : Entering.",AI_LOG_TRACE)
+ if(!destination)
+ ai_log("walk_to_destination() : No destination.", AI_LOG_WARNING)
+ forget_path()
+ set_stance(stance == STANCE_REPOSITION ? STANCE_APPROACH : STANCE_IDLE)
+ ai_log("walk_to_destination() : Exiting.", AI_LOG_TRACE)
+ return
+
+ var/get_to = min_distance_to_destination
+ var/distance = get_dist(holder, destination)
+ ai_log("walk_to_destination() : get_to is [get_to].", AI_LOG_TRACE)
+
+ // We're here!
+ if(distance <= get_to)
+ give_up_movement()
+ set_stance(stance == STANCE_REPOSITION ? STANCE_APPROACH : STANCE_IDLE)
+ ai_log("walk_to_destination() : Destination reached. Exiting.", AI_LOG_INFO)
+ return
+
+ ai_log("walk_to_destination() : Walking.", AI_LOG_TRACE)
+ walk_path(destination, get_to)
+ ai_log("walk_to_destination() : Exiting.",AI_LOG_TRACE)
+
+/datum/ai_holder/proc/should_go_home()
+ if(!returns_home || !home_turf)
+ return FALSE
+ if(get_dist(holder, home_turf) > max_home_distance)
+ if(!home_low_priority)
+ return TRUE
+ else if(!leader && !target)
+ return TRUE
+ return FALSE
+// return (returns_home && home_turf) && (get_dist(holder, home_turf) > max_home_distance)
+
+/datum/ai_holder/proc/go_home()
+ if(home_turf)
+ ai_log("go_home() : Telling holder to go home.", AI_LOG_INFO)
+ lose_follow() // So they don't try to path back and forth.
+ give_destination(home_turf, max_home_distance)
+ else
+ ai_log("go_home() : Told to go home without home_turf.", AI_LOG_ERROR)
+
+/datum/ai_holder/proc/give_destination(turf/new_destination, min_distance = 1, combat = FALSE)
+ ai_log("give_destination() : Entering.", AI_LOG_DEBUG)
+
+ destination = new_destination
+ min_distance_to_destination = min_distance
+
+ if(new_destination != null)
+ ai_log("give_destination() : Going to new destination.", AI_LOG_INFO)
+ set_stance(combat ? STANCE_REPOSITION : STANCE_MOVE)
+ return TRUE
+ else
+ ai_log("give_destination() : Given null destination.", AI_LOG_ERROR)
+
+ ai_log("give_destination() : Exiting.", AI_LOG_DEBUG)
+
+
+// Walk towards whatever.
+/datum/ai_holder/proc/walk_path(atom/A, get_to = 1)
+ ai_log("walk_path() : Entered.", AI_LOG_TRACE)
+
+ if(use_astar)
+ if(!path.len) // If we're missing a path, make a new one.
+ ai_log("walk_path() : No path. Attempting to calculate path.", AI_LOG_DEBUG)
+ calculate_path(A, get_to)
+
+ if(!path.len) // If we still don't have one, then the target's probably somewhere inaccessible to us. Get as close as we can.
+ ai_log("walk_path() : Failed to obtain path to target. Using get_step_to() instead.", AI_LOG_INFO)
+ // step_to(holder, A)
+ if(holder.IMove(get_step_to(holder, A)) == MOVEMENT_FAILED)
+ ai_log("walk_path() : Failed to move, attempting breakthrough.", AI_LOG_INFO)
+ breakthrough(A) // We failed to move, time to smash things.
+ return
+
+ if(move_once() == FALSE) // Start walking the path.
+ ai_log("walk_path() : Failed to step.", AI_LOG_TRACE)
+ ++failed_steps
+ if(failed_steps > 3) // We're probably stuck.
+ ai_log("walk_path() : Too many failed_steps.", AI_LOG_DEBUG)
+ forget_path() // So lets try again with a new path.
+ failed_steps = 0
+
+ else
+ // step_to(holder, A)
+ ai_log("walk_path() : Going to IMove().", AI_LOG_TRACE)
+ if(holder.IMove(get_step_to(holder, A)) == MOVEMENT_FAILED )
+ ai_log("walk_path() : Failed to move, attempting breakthrough.", AI_LOG_INFO)
+ breakthrough(A) // We failed to move, time to smash things.
+
+ ai_log("walk_path() : Exited.", AI_LOG_TRACE)
+
+
+//Take one step along a path
+/datum/ai_holder/proc/move_once()
+ ai_log("move_once() : Entered.", AI_LOG_TRACE)
+ if(!path.len)
+ return
+
+ if(path_display)
+ var/turf/T = src.path[1]
+ T.overlays -= path_overlay
+
+// step_towards(holder, src.path[1])
+ if(holder.IMove(get_step_towards(holder, src.path[1])) != MOVEMENT_ON_COOLDOWN)
+ if(holder.loc != src.path[1])
+ ai_log("move_once() : Failed step. Exiting.", AI_LOG_TRACE)
+ return MOVEMENT_FAILED
+ else
+ path -= src.path[1]
+ ai_log("move_once() : Successful step. Exiting.", AI_LOG_TRACE)
+ return MOVEMENT_SUCCESSFUL
+ ai_log("move_once() : Mob movement on cooldown. Exiting.", AI_LOG_TRACE)
+ return MOVEMENT_ON_COOLDOWN
+
+/datum/ai_holder/proc/should_wander()
+ return wander && !leader
+
+// Wanders randomly in cardinal directions.
+/datum/ai_holder/proc/handle_wander_movement()
+ ai_log("handle_wander_movement() : Entered.", AI_LOG_TRACE)
+ if(isturf(holder.loc) && can_act())
+ wander_delay--
+ if(wander_delay <= 0)
+ if(!wander_when_pulled && holder.pulledby)
+ ai_log("handle_wander_movement() : Being pulled and cannot wander. Exiting.", AI_LOG_DEBUG)
+ return
+
+ var/moving_to = 0 // Apparently this is required or it always picks 4, according to the previous developer for simplemob AI.
+ moving_to = pick(cardinal)
+ holder.set_dir(moving_to)
+ holder.IMove(get_step(holder,moving_to))
+ wander_delay = base_wander_delay
+ ai_log("handle_wander_movement() : Exited.", AI_LOG_TRACE)
diff --git a/code/modules/ai/ai_holder_pathfinding.dm b/code/modules/ai/ai_holder_pathfinding.dm
new file mode 100644
index 0000000000..1a20c6f682
--- /dev/null
+++ b/code/modules/ai/ai_holder_pathfinding.dm
@@ -0,0 +1,58 @@
+// This handles obtaining a (usually A*) path towards something, such as a target, destination, or leader.
+// This interacts heavily with code inside ai_holder_movement.dm
+
+/datum/ai_holder
+ // Pathfinding.
+ var/use_astar = FALSE // Do we use the more expensive A* implementation or stick with BYOND's default step_to()?
+ var/list/path = list() // A list of tiles that A* gave us as a solution to reach the target.
+ var/list/obstacles = list() // Things A* will try to avoid.
+ var/astar_adjacent_proc = /turf/proc/CardinalTurfsWithAccess // Proc to use when A* pathfinding. Default makes them bound to cardinals.
+ var/failed_steps = 0 // If move_once() fails to move the mob onto the correct tile, this increases. When it reaches 3, the path is recalc'd since they're probably stuck.
+
+// This clears the stored A* path.
+/datum/ai_holder/proc/forget_path()
+ ai_log("forget_path() : Entering.", AI_LOG_DEBUG)
+ if(path_display)
+ for(var/turf/T in path)
+ T.overlays -= path_overlay
+ path.Cut()
+ ai_log("forget_path() : Exiting.", AI_LOG_DEBUG)
+
+/datum/ai_holder/proc/give_up_movement()
+ ai_log("give_up_movement() : Entering.", AI_LOG_DEBUG)
+ forget_path()
+ destination = null
+ ai_log("give_up_movement() : Exiting.", AI_LOG_DEBUG)
+
+/datum/ai_holder/proc/calculate_path(atom/A, get_to = 1)
+ ai_log("calculate_path([A],[get_to]) : Entering.", AI_LOG_DEBUG)
+ if(!A)
+ ai_log("calculate_path() : Called without an atom. Exiting.",AI_LOG_WARNING)
+ return
+
+ if(!use_astar) // If we don't use A* then this is pointless.
+ ai_log("calculate_path() : Not using A*, Exiting.", AI_LOG_DEBUG)
+ return
+
+ get_path(get_turf(A), get_to)
+
+ ai_log("calculate_path() : Exiting.", AI_LOG_DEBUG)
+
+//A* now, try to a path to a target
+/datum/ai_holder/proc/get_path(var/turf/target,var/get_to = 1, var/max_distance = world.view*6)
+ ai_log("get_path() : Entering.",AI_LOG_DEBUG)
+ forget_path()
+ var/list/new_path = AStar(get_turf(holder.loc), target, astar_adjacent_proc, /turf/proc/Distance, min_target_dist = get_to, max_node_depth = max_distance, id = holder.IGetID(), exclude = obstacles)
+
+ if(new_path && new_path.len)
+ path = new_path
+ ai_log("get_path() : Made new path.",AI_LOG_DEBUG)
+ if(path_display)
+ for(var/turf/T in path)
+ T.overlays |= path_overlay
+ else
+ ai_log("get_path() : Failed to make new path. Exiting.",AI_LOG_DEBUG)
+ return 0
+
+ ai_log("get_path() : Exiting.", AI_LOG_DEBUG)
+ return path.len
\ No newline at end of file
diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm
new file mode 100644
index 0000000000..acb3da2309
--- /dev/null
+++ b/code/modules/ai/ai_holder_targeting.dm
@@ -0,0 +1,237 @@
+// Used for assigning a target for attacking.
+
+/datum/ai_holder
+ var/hostile = FALSE // Do we try to hurt others?
+ var/retaliate = FALSE // Attacks whatever struck it first. Mobs will still attack back if this is false but hostile is true.
+
+ var/atom/movable/target = null // The thing (mob or object) we're trying to kill.
+ var/atom/movable/preferred_target = null// If set, and if given the chance, we will always prefer to target this over other options.
+ var/turf/target_last_seen_turf = null // Where the mob last observed the target being, used if the target disappears but the mob wants to keep fighting.
+
+ var/vision_range = 7 // How far the targeting system will look for things to kill. Note that values higher than 7 are 'offscreen' and might be unsporting.
+ var/respect_alpha = TRUE // If true, mobs with a sufficently low alpha will be treated as invisible.
+ var/alpha_vision_threshold = 127 // Targets with an alpha less or equal to this will be considered invisible. Requires above var to be true.
+
+ var/lose_target_time = 0 // world.time when a target was lost.
+ var/lose_target_timeout = 5 SECONDS // How long until a mob 'times out' and stops trying to find the mob that disappeared.
+
+ var/list/attackers = list() // List of strings of names of people who attacked us before in our life.
+ // This uses strings and not refs to allow for disguises, and to avoid needing to use weakrefs.
+
+// A lot of this is based off of /TG/'s AI code.
+
+// Step 1, find out what we can see.
+/datum/ai_holder/proc/list_targets()
+ . = hearers(vision_range, holder) - src // Remove ourselves to prevent suicidal decisions.
+
+ var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha))
+
+ for(var/HM in typecache_filter_list(range(vision_range, holder), hostile_machines))
+ if(can_see(holder, HM, vision_range))
+ . += HM
+
+// Step 2, filter down possible targets to things we actually care about.
+/datum/ai_holder/proc/find_target(var/list/possible_targets, var/has_targets_list = FALSE)
+ if(!hostile) // So retaliating mobs only attack the thing that hit it.
+ return null
+ . = list()
+ if(!has_targets_list)
+ possible_targets = list_targets()
+ for(var/possible_target in possible_targets)
+ var/atom/A = possible_target
+ if(found(A)) // In case people want to override this.
+ . = list(A)
+ break
+ if(can_attack(A)) // Can we attack it?
+ . += A
+ continue
+
+ var/new_target = pick_target(.)
+ give_target(new_target)
+ return new_target
+
+// Step 3, pick among the possible, attackable targets.
+/datum/ai_holder/proc/pick_target(list/targets)
+ if(target != null) // If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets.
+ targets = target_filter_distance(targets)
+// for(var/possible_target in targets)
+// var/atom/A = possible_target
+// var/target_dist = get_dist(holder, target)
+// var/possible_target_distance = get_dist(holder, A)
+// if(target_dist < possible_target_distance)
+// targets -= A
+ if(!targets.len) // We found nothing.
+ return
+
+ var/chosen_target
+ if(preferred_target && preferred_target in targets)
+ chosen_target = preferred_target
+ else
+ chosen_target = pick(targets)
+ return chosen_target
+
+// Step 4, give us our selected target.
+/datum/ai_holder/proc/give_target(new_target)
+ target = new_target
+ if(target != null)
+ if(should_threaten())
+ set_stance(STANCE_ALERT)
+ else
+ set_stance(STANCE_APPROACH)
+ return TRUE
+
+// Filters return one or more 'preferred' targets.
+
+// This one is for closest targets.
+/datum/ai_holder/proc/target_filter_distance(list/targets)
+ for(var/possible_target in targets)
+ var/atom/A = possible_target
+ var/target_dist = get_dist(holder, target)
+ var/possible_target_distance = get_dist(holder, A)
+ if(target_dist < possible_target_distance)
+ targets -= A
+ return targets
+
+/datum/ai_holder/proc/can_attack(atom/movable/the_target)
+ if(!can_see_target(the_target))
+ return FALSE
+
+ if(istype(the_target, /mob/zshadow))
+ return FALSE // no
+
+ if(isliving(the_target))
+ var/mob/living/L = the_target
+ if(L.stat == DEAD)
+ return FALSE
+ if(holder.IIsAlly(L))
+ return FALSE
+ return TRUE
+
+ if(istype(the_target, /obj/mecha))
+ var/obj/mecha/M = the_target
+ if(M.occupant)
+ return can_attack(M.occupant)
+
+ if(istype(the_target, /obj/machinery/porta_turret))
+ var/obj/machinery/porta_turret/P = the_target
+ if(P.stat & BROKEN)
+ return FALSE // Already dead.
+ if(P.faction == holder.faction)
+ return FALSE // Don't shoot allied turrets.
+ if(!P.raised && !P.raising)
+ return FALSE // Turrets won't get hurt if they're still in their cover.
+ return TRUE
+
+ return TRUE
+// return FALSE
+
+// Override this for special targeting criteria.
+// If it returns true, the mob will always select it as the target.
+/datum/ai_holder/proc/found(atom/movable/the_target)
+ return FALSE
+
+//We can't see the target, go look or attack where they were last seen.
+/datum/ai_holder/proc/lose_target()
+ if(target)
+ target = null
+ lose_target_time = world.time
+
+ give_up_movement()
+
+
+//Target is no longer valid (?)
+/datum/ai_holder/proc/lost_target()
+ set_stance(STANCE_IDLE)
+ lose_target_position()
+ lose_target()
+
+// Check if target is visible to us.
+/datum/ai_holder/proc/can_see_target(atom/movable/the_target, view_range = vision_range)
+ ai_log("can_see_target() : Entering.", AI_LOG_TRACE)
+
+ if(!the_target) // Nothing to target.
+ ai_log("can_see_target() : There is no target. Exiting.", AI_LOG_WARNING)
+ return FALSE
+
+ if(holder.see_invisible < the_target.invisibility) // Real invis.
+ ai_log("can_see_target() : Target ([the_target]) was invisible to holder. Exiting.", AI_LOG_TRACE)
+ return FALSE
+
+ if(respect_alpha && the_target.alpha <= alpha_vision_threshold) // Fake invis.
+ ai_log("can_see_target() : Target ([the_target]) was sufficently transparent to holder and is hidden. Exiting.", AI_LOG_TRACE)
+ return FALSE
+
+ if(get_dist(holder, the_target) > view_range) // Too far away.
+ ai_log("can_see_target() : Target ([the_target]) was too far from holder. Exiting.", AI_LOG_TRACE)
+ return FALSE
+
+ if(!can_see(holder, the_target, view_range))
+ ai_log("can_see_target() : Target ([the_target]) failed can_see(). Exiting.", AI_LOG_TRACE)
+ return FALSE
+
+ ai_log("can_see_target() : Target ([the_target]) can be seen. Exiting.", AI_LOG_TRACE)
+ return TRUE
+
+// Updates the last known position of the target.
+/datum/ai_holder/proc/track_target_position()
+ if(!target)
+ lose_target_position()
+
+ if(last_turf_display && target_last_seen_turf)
+ target_last_seen_turf.overlays -= last_turf_overlay
+
+ target_last_seen_turf = get_turf(target)
+
+ if(last_turf_display)
+ target_last_seen_turf.overlays += last_turf_overlay
+
+// Resets the last known position to null.
+/datum/ai_holder/proc/lose_target_position()
+ if(last_turf_display && target_last_seen_turf)
+ target_last_seen_turf.overlays -= last_turf_overlay
+ ai_log("lose_target_position() : Last position is being reset.", AI_LOG_INFO)
+ target_last_seen_turf = null
+
+// Responds to a hostile action against its mob.
+/datum/ai_holder/proc/react_to_attack(atom/movable/attacker)
+ if(holder.stat) // We're dead.
+ ai_log("react_to_attack() : Was attacked by [attacker], but we are dead/unconscious.", AI_LOG_TRACE)
+ return FALSE
+ if(!hostile && !retaliate) // Not allowed to defend ourselves.
+ ai_log("react_to_attack() : Was attacked by [attacker], but we are not allowed to attack back.", AI_LOG_TRACE)
+ return FALSE
+ if(holder.IIsAlly(attacker)) // I'll overlook it THIS time...
+ ai_log("react_to_attack() : Was attacked by [attacker], but they were an ally.", AI_LOG_TRACE)
+ return FALSE
+ if(target) // Already fighting someone. Switching every time we get hit would impact our combat performance.
+ ai_log("react_to_attack() : Was attacked by [attacker], but we already have a target.", AI_LOG_TRACE)
+ on_attacked(attacker) // So we attack immediately and not threaten.
+ return FALSE
+
+ if(stance == STANCE_SLEEP) // If we're asleep, try waking up if someone's wailing on us.
+ ai_log("react_to_attack() : AI is asleep. Waking up.", AI_LOG_TRACE)
+ go_wake()
+
+ ai_log("react_to_attack() : Was attacked by [attacker].", AI_LOG_INFO)
+ on_attacked(attacker) // So we attack immediately and not threaten.
+ return give_target(attacker) // Also handles setting the appropiate stance.
+
+// Sets a few vars so mobs that threaten will react faster to an attacker or someone who attacked them before.
+/datum/ai_holder/proc/on_attacked(atom/movable/AM)
+ last_conflict_time = world.time
+ if(isliving(AM))
+ var/mob/living/L = AM
+ attackers |= L.name
+
+// Causes targeting to prefer targeting the taunter if possible.
+// This generally occurs if more than one option is within striking distance, including the taunter.
+// Otherwise the default filter will prefer the closest target.
+/datum/ai_holder/proc/receive_taunt(atom/movable/taunter, force_target_switch = FALSE)
+ ai_log("receive_taunt() : Was taunted by [taunter].", AI_LOG_INFO)
+ preferred_target = taunter
+ if(force_target_switch)
+ give_target(taunter)
+
+/datum/ai_holder/proc/lose_taunt()
+ ai_log("lose_taunt() : Resetting preferred_target.", AI_LOG_INFO)
+ preferred_target = null
\ No newline at end of file
diff --git a/code/modules/ai/interfaces.dm b/code/modules/ai/interfaces.dm
new file mode 100644
index 0000000000..dbadac8757
--- /dev/null
+++ b/code/modules/ai/interfaces.dm
@@ -0,0 +1,92 @@
+// 'Interfaces' are procs that the ai_holder datum uses to communicate its will to the mob its attached.
+// The reason for using this proc in the middle is to ensure the AI has some form of compatibility with most mob types,
+// since some actions work very differently between mob types (e.g. executing an attack as a simple animal compared to a human).
+// The AI can just call holder.IAttack(target) and the mob is responsible for determining how to actually attack the target.
+
+/mob/living/proc/IAttack(atom/A)
+ return FALSE
+
+/mob/living/simple_mob/IAttack(atom/A)
+ if(!canClick()) // Still on cooldown from a "click".
+ return FALSE
+ return attack_target(A) // This will set click cooldown.
+
+/mob/living/proc/IRangedAttack(atom/A)
+ return FALSE
+
+/mob/living/simple_mob/IRangedAttack(atom/A)
+ if(!canClick()) // Still on cooldown from a "click".
+ return FALSE
+ return shoot_target(A)
+
+// Test if the AI is allowed to attempt a ranged attack.
+/mob/living/proc/ICheckRangedAttack(atom/A)
+ return FALSE
+
+/mob/living/simple_mob/ICheckRangedAttack(atom/A)
+ if(needs_reload)
+ if(reload_count >= reload_max)
+ try_reload()
+ return FALSE
+ return projectiletype ? TRUE : FALSE
+
+/mob/living/proc/ISpecialAttack(atom/A)
+ return FALSE
+
+/mob/living/simple_mob/ISpecialAttack(atom/A)
+ return special_attack_target(A)
+
+// Is the AI allowed to attempt to do it?
+/mob/living/proc/ICheckSpecialAttack(atom/A)
+ return FALSE
+
+/mob/living/simple_mob/ICheckSpecialAttack(atom/A)
+ return can_special_attack(A) && should_special_attack(A) // Just because we can doesn't mean we should.
+
+/mob/living/proc/ISay(message)
+ return say(message)
+
+/mob/living/proc/IIsAlly(mob/living/L)
+ return src.faction == L.faction
+
+/mob/living/simple_mob/IIsAlly(mob/living/L)
+ . = ..()
+ if(!.) // Outside the faction, try to see if they're friends.
+ return L in friends
+
+/mob/living/proc/IGetID()
+
+/mob/living/simple_mob/IGetID()
+ if(myid)
+ return myid.GetID()
+
+// Respects move cooldowns as if it had a client.
+// Also tries to avoid being superdumb with moving into certain tiles (unless that's desired).
+/mob/living/proc/IMove(turf/newloc, safety = TRUE)
+ if(check_move_cooldown())
+// if(!newdir)
+// newdir = get_dir(get_turf(src), newloc)
+
+ // Check to make sure moving to newloc won't actually kill us. e.g. we're a slime and trying to walk onto water.
+ if(istype(newloc))
+ if(safety && !newloc.is_safe_to_enter(src))
+ return MOVEMENT_FAILED
+
+ // Move()ing to another tile successfully returns 32 because BYOND. Would rather deal with TRUE/FALSE-esque terms.
+ // Note that moving to the same tile will be 'successful'.
+ var/turf/old_T = get_turf(src)
+
+ // An adjacency check to avoid mobs phasing diagonally past windows.
+ // This might be better in general movement code but I'm too scared to add it, and most things don't move diagonally anyways.
+ if(!old_T.Adjacent(newloc))
+ return MOVEMENT_FAILED
+
+ . = SelfMove(newloc) ? MOVEMENT_SUCCESSFUL : MOVEMENT_FAILED
+ if(. == MOVEMENT_SUCCESSFUL)
+ set_dir(get_dir(old_T, newloc))
+ // Apply movement delay.
+ // Player movement has more factors but its all in the client and fixing that would be its own project.
+ setMoveCooldown(movement_delay())
+ return
+
+ . = MOVEMENT_ON_COOLDOWN // To avoid superfast mobs that aren't meant to be superfast. Is actually -1.
diff --git a/code/modules/ai/say_list.dm b/code/modules/ai/say_list.dm
new file mode 100644
index 0000000000..43732abf0c
--- /dev/null
+++ b/code/modules/ai/say_list.dm
@@ -0,0 +1,119 @@
+// A simple datum that just holds many lists of lines for mobs to pick from.
+// This is its own datum in order to be able to have different types of mobs be able to use the same lines if desired,
+// even when inheritence wouldn't be able to do so.
+
+// Also note this also contains emotes, despite its name.
+// and now sounds because its probably better that way.
+
+/mob/living
+ var/datum/say_list/say_list = null
+ var/say_list_type = /datum/say_list // Type to give us on initialization. Default has empty lists, so the mob will be silent.
+
+/mob/living/initialize()
+ if(say_list_type)
+ say_list = new say_list_type(src)
+ return ..()
+
+/mob/living/Destroy()
+ QDEL_NULL(say_list)
+ return ..()
+
+
+/datum/say_list
+ var/list/speak = list() // Things the mob might say if it talks while idle.
+ var/list/emote_hear = list() // Hearable emotes it might perform
+ var/list/emote_see = list() // Unlike speak_emote, the list of things in this variable only show by themselves with no spoken text. IE: Ian barks, Ian yaps
+
+ var/list/say_understood = list() // When accepting an order.
+ var/list/say_cannot = list() // When they cannot comply.
+ var/list/say_maybe_target = list() // When they briefly see something.
+ var/list/say_got_target = list() // When a target is first assigned.
+ var/list/say_threaten = list() // When threatening someone.
+ var/list/say_stand_down = list() // When the threatened thing goes away.
+ var/list/say_escalate = list() // When the threatened thing doesn't go away.
+
+ var/threaten_sound = null // Sound file played when the mob's AI calls threaten_target() for the first time.
+ var/stand_down_sound = null // Sound file played when the mob's AI loses sight of the threatened target.
+
+
+
+
+
+
+
+// Subtypes.
+
+// This one's pretty dumb, but pirates are dumb anyways and it makes for a good test.
+/datum/say_list/pirate
+ speak = list("Yarr!")
+
+ say_understood = list("Alright, matey.")
+ say_cannot = list("No, matey.")
+ say_maybe_target = list("Eh?")
+ say_got_target = list("Yarrrr!")
+ say_threaten = list("You best leave, this booty is mine.", "No plank to walk on, just walk away.")
+ say_stand_down = list("Good.")
+ say_escalate = list("Yarr! The booty is mine!")
+
+// Mercs!
+/datum/say_list/merc
+ speak = list("When are we gonna get out of this chicken-shit outfit?",
+ "Wish I had better equipment...",
+ "I knew I should have been a line chef...",
+ "Fuckin' helmet keeps fogging up.",
+ "Anyone else smell that?")
+ emote_see = list("sniffs", "coughs", "taps his foot", "looks around", "checks his equipment")
+
+ say_understood = list("Understood!", "Affirmative!")
+ say_cannot = list("Negative!")
+ say_maybe_target = list("Who's there?")
+ say_got_target = list("Engaging!")
+ say_threaten = list("Get out of here!", "Hey! Private Property!")
+ say_stand_down = list("Good.")
+ say_escalate = list("Your funeral!", "Bring it!")
+
+/datum/say_list/malf_drone
+ speak = list("ALERT.","Hostile-ile-ile entities dee-twhoooo-wected.","Threat parameterszzzz- szzet.","Bring sub-sub-sub-systems uuuup to combat alert alpha-a-a.")
+ emote_see = list("beeps menacingly","whirrs threateningly","scans its immediate vicinity")
+
+ say_understood = list("Affirmative.", "Positive.")
+ say_cannot = list("Denied.", "Negative.")
+ say_maybe_target = list("Possible threat detected. Investigating.", "Motion detected.", "Investigating.")
+ say_got_target = list("Threat detected.", "New task: Remove threat.", "Threat removal engaged.", "Engaging target.")
+ say_threaten = list("Motion detected, judging target...")
+ say_stand_down = list("Visual lost.", "Error: Target not found.")
+ say_escalate = list("Viable target found. Removing.", "Engaging target.", "Target judgement complete. Removal required.")
+
+ threaten_sound = 'sound/effects/turret/move1.wav'
+ stand_down_sound = 'sound/effects/turret/move2.wav'
+
+/datum/say_list/mercenary
+ threaten_sound = 'sound/weapons/TargetOn.ogg'
+ stand_down_sound = 'sound/weapons/TargetOff.ogg'
+
+
+/datum/say_list/crab
+ emote_hear = list("clicks")
+ emote_see = list("clacks")
+
+/datum/say_list/spider
+ emote_hear = list("chitters")
+
+/datum/say_list/hivebot
+ speak = list(
+ "Resuming task: Protect area.",
+ "No threats found.",
+ "Error: No targets found."
+ )
+ emote_hear = list("hums ominously", "whirrs softly", "grinds a gear")
+ emote_see = list("looks around the area", "turns from side to side")
+ say_understood = list("Affirmative.", "Positive.")
+ say_cannot = list("Denied.", "Negative.")
+ say_maybe_target = list("Possible threat detected. Investigating.", "Motion detected.", "Investigating.")
+ say_got_target = list("Threat detected.", "New task: Remove threat.", "Threat removal engaged.", "Engaging target.")
+
+/datum/say_list/lizard
+ emote_hear = list("hisses")
+
+/datum/say_list/crab
+ emote_hear = list("hisses")
\ No newline at end of file
diff --git a/code/modules/artifice/deadringer.dm b/code/modules/artifice/deadringer.dm
index e12c0b0045..c19da40873 100644
--- a/code/modules/artifice/deadringer.dm
+++ b/code/modules/artifice/deadringer.dm
@@ -76,13 +76,14 @@
return
/obj/item/weapon/deadringer/proc/deathprevent()
- for(var/mob/living/simple_animal/D in oviewers(7, src))
- D.LoseTarget()
+ for(var/mob/living/simple_mob/D in oviewers(7, src))
+ if(!D.has_AI())
+ continue
+ D.ai_holder.lose_target()
+
watchowner.emote("deathgasp")
watchowner.alpha = 15
makeacorpse(watchowner)
- for(var/mob/living/simple_animal/D in oviewers(7, src))
- D.LoseTarget()
return
/obj/item/weapon/deadringer/proc/uncloak()
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index e45c6d8beb..7d1c5346c0 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -40,7 +40,7 @@
H.UpdateDamageIcon()
H.updatehealth()
else if(ismouse(target))
- var/mob/living/simple_animal/mouse/M = target
+ var/mob/living/simple_mob/animal/passive/mouse/M = target
visible_message("SPLAT!")
M.splat()
playsound(target.loc, 'sound/effects/snap.ogg', 50, 1)
diff --git a/code/modules/blob2/blobs/factory.dm b/code/modules/blob2/blobs/factory.dm
index 9577f3c14e..08d378f1d0 100644
--- a/code/modules/blob2/blobs/factory.dm
+++ b/code/modules/blob2/blobs/factory.dm
@@ -15,7 +15,7 @@
var/spore_cooldown = 8 SECONDS
/obj/structure/blob/factory/Destroy()
- for(var/mob/living/simple_animal/hostile/blob/spore/spore in spores)
+ for(var/mob/living/simple_mob/blob/spore/spore in spores)
if(istype(spore) && spore.factory == src)
spore.factory = null
else
@@ -31,7 +31,7 @@
return
flick("blob_factory_glow", src)
spore_delay = world.time + spore_cooldown
- var/mob/living/simple_animal/hostile/blob/spore/S = null
+ var/mob/living/simple_mob/blob/spore/S = null
if(overmind)
S = new overmind.blob_type.spore_type(src.loc, src)
S.faction = "blob"
@@ -39,10 +39,8 @@
S.overmind = overmind
overmind.blob_mobs.Add(S)
if(overmind.blob_type.ranged_spores)
- S.ranged = TRUE
S.projectiletype = overmind.blob_type.spore_projectile
S.projectilesound = overmind.blob_type.spore_firesound
- S.shoot_range = overmind.blob_type.spore_range
else //Other mobs don't add themselves in New. Ew.
S.nest = src
spores += S
diff --git a/code/modules/blob2/overmind/overmind.dm b/code/modules/blob2/overmind/overmind.dm
index 8ba73eb1e6..6477c86f22 100644
--- a/code/modules/blob2/overmind/overmind.dm
+++ b/code/modules/blob2/overmind/overmind.dm
@@ -53,7 +53,7 @@ var/list/overminds = list()
B.update_icon() //reset anything that was ours
for(var/BLO in blob_mobs)
- var/mob/living/simple_animal/hostile/blob/BM = BLO
+ var/mob/living/simple_mob/blob/spore/BM = BLO
if(BM)
BM.overmind = null
BM.update_icons()
diff --git a/code/modules/blob2/overmind/types.dm b/code/modules/blob2/overmind/types.dm
index c8aca03cf6..6049ccfc72 100644
--- a/code/modules/blob2/overmind/types.dm
+++ b/code/modules/blob2/overmind/types.dm
@@ -32,7 +32,7 @@
var/can_build_resources = FALSE // Ditto, for resource blobs.
var/can_build_nodes = TRUE // Ditto, for nodes.
- var/spore_type = /mob/living/simple_animal/hostile/blob/spore
+ var/spore_type = /mob/living/simple_mob/blob/spore
var/ranged_spores = FALSE // For proper spores of the type above.
var/spore_firesound = 'sound/effects/slime_squish.ogg'
var/spore_range = 7 // The range the spore can fire.
@@ -72,7 +72,7 @@
return
// Spore things
-/datum/blob_type/proc/on_spore_death(mob/living/simple_animal/hostile/blob/spore/S)
+/datum/blob_type/proc/on_spore_death(mob/living/simple_mob/blob/spore/S)
return
@@ -120,7 +120,7 @@
brute_multiplier = 0.25
burn_multiplier = 0.6
ai_aggressiveness = 50 //Really doesn't like you near it.
- spore_type = /mob/living/simple_animal/hostile/hivebot/swarm
+ spore_type = /mob/living/simple_mob/mechanical/hivebot/swarm
/datum/blob_type/fabrication_swarm/on_received_damage(var/obj/structure/blob/B, damage, damage_type, mob/living/attacker)
if(istype(B, /obj/structure/blob/normal))
@@ -227,9 +227,9 @@
burn_multiplier = 3
ai_aggressiveness = 40
can_build_factories = TRUE
- spore_type = /mob/living/simple_animal/hostile/blob/spore/infesting
+ spore_type = /mob/living/simple_mob/blob/spore/infesting
-/datum/blob_type/fungal_bloom/on_spore_death(mob/living/simple_animal/hostile/blob/spore/S)
+/datum/blob_type/fungal_bloom/on_spore_death(mob/living/simple_mob/blob/spore/S)
if(S.is_infesting)
return // Don't make blobs if they were on someone's head.
var/turf/T = get_turf(S)
@@ -258,11 +258,11 @@
brute_multiplier = 1.5
ai_aggressiveness = 30 // The spores do most of the fighting.
can_build_factories = TRUE
- spore_type = /mob/living/simple_animal/hostile/blob/spore/weak
+ spore_type = /mob/living/simple_mob/blob/spore/weak
/datum/blob_type/fulminant_organism/on_expand(var/obj/structure/blob/B, var/obj/structure/blob/new_B, var/turf/T, var/mob/observer/blob/O)
if(prob(10)) // 10% chance to make a weak spore when expanding.
- var/mob/living/simple_animal/hostile/blob/S = new spore_type(T)
+ var/mob/living/simple_mob/blob/spore/S = new spore_type(T)
if(istype(S))
S.overmind = O
O.blob_mobs.Add(S)
@@ -272,7 +272,7 @@
/datum/blob_type/fulminant_organism/on_death(obj/structure/blob/B)
if(prob(33)) // 33% chance to make a spore when dying.
- var/mob/living/simple_animal/hostile/blob/S = new spore_type(get_turf(B))
+ var/mob/living/simple_mob/blob/spore/S = new spore_type(get_turf(B))
B.visible_message("\The [S] floats free from the [name]!")
if(istype(S))
S.overmind = B.overmind
@@ -614,7 +614,7 @@
attack_verb = "crashes against"
can_build_factories = TRUE
can_build_resources = TRUE
- spore_type = /mob/living/simple_animal/hostile/blob/spore/weak
+ spore_type = /mob/living/simple_mob/blob/spore/weak
ranged_spores = TRUE
spore_range = 3
spore_projectile = /obj/item/projectile/energy/blob/splattering
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 807faab47f..e711006b2a 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -18,7 +18,7 @@
//OTHER//
/////////
var/datum/preferences/prefs = null
- var/move_delay = 1
+ //var/move_delay = 1
var/moving = null
var/adminobs = null
var/area = null
diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm
index e051daf585..32450813bf 100644
--- a/code/modules/client/preference_setup/loadout/loadout_head.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_head.dm
@@ -370,4 +370,4 @@
/datum/gear/head/circuitry
display_name = "headwear, circuitry (empty)"
- path = /obj/item/clothing/head/circuitry
\ No newline at end of file
+ path = /obj/item/clothing/head/circuitry
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index d0f9a8165c..b30a5d4898 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -37,15 +37,15 @@
while (i <= num_groups)
var/group_size = rand(group_size_min, group_size_max)
for (var/j = 1, j <= group_size, j++)
- spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i]))
+ spawned_carp.Add(new /mob/living/simple_mob/animal/space/carp/event(spawn_locations[i]))
i++
/datum/event/carp_migration/end()
spawn(0)
- for(var/mob/living/simple_animal/hostile/C in spawned_carp)
- if(!C.stat)
- var/turf/T = get_turf(C)
+ for(var/mob/living/simple_mob/SM in spawned_carp)
+ if(!SM.stat)
+ var/turf/T = get_turf(SM)
if(istype(T, /turf/space))
if(prob(75))
- qdel(C)
+ qdel(SM)
sleep(1)
\ No newline at end of file
diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm
index 16f2b78521..3800bc999f 100644
--- a/code/modules/events/infestation.dm
+++ b/code/modules/events/infestation.dm
@@ -65,11 +65,11 @@
vermin = rand(0,2)
switch(vermin)
if(VERM_MICE)
- spawn_types = list(/mob/living/simple_animal/mouse/gray, /mob/living/simple_animal/mouse/brown, /mob/living/simple_animal/mouse/white)
+ spawn_types = list(/mob/living/simple_mob/animal/passive/mouse/gray, /mob/living/simple_mob/animal/passive/mouse/brown, /mob/living/simple_mob/animal/passive/mouse/white)
max_number = 12
vermstring = "mice"
if(VERM_LIZARDS)
- spawn_types = list(/mob/living/simple_animal/lizard)
+ spawn_types = list(/mob/living/simple_mob/animal/passive/lizard)
max_number = 6
vermstring = "lizards"
if(VERM_SPIDERS)
diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm
index 768628f8fb..9cfcc648b5 100644
--- a/code/modules/events/rogue_drones.dm
+++ b/code/modules/events/rogue_drones.dm
@@ -16,10 +16,8 @@
else
num = rand(2,6)
for(var/i=0, iThe gibber is locked and running, wait for it to finish."
- return
- else
- src.startgibbing(user)
-
-/obj/machinery/gibber/examine()
- ..()
- usr << "The safety guard is [emagged ? "disabled" : "enabled"]."
-
-/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user)
- emagged = !emagged
- user << "You [emagged ? "disable" : "enable"] the gibber safety guard."
- return 1
-
-/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
- var/obj/item/weapon/grab/G = W
-
- if(default_unfasten_wrench(user, W, 40))
- return
-
- if(!istype(G))
- return ..()
-
- if(G.state < 2)
- user << "You need a better grip to do that!"
- return
-
- move_into_gibber(user,G.affecting)
- // Grab() process should clean up the grab item, no need to del it.
-
-/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user)
- if(user.stat || user.restrained())
- return
- move_into_gibber(user,target)
-
-/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim)
-
- if(src.occupant)
- user << "The gibber is full, empty it first!"
- return
-
- if(operating)
- user << "The gibber is locked and running, wait for it to finish."
- return
-
- if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_animal)) )
- user << "This is not suitable for the gibber!"
- return
-
- if(istype(victim,/mob/living/carbon/human) && !emagged)
- user << "The gibber safety guard is engaged!"
- return
-
-
- if(victim.abiotic(1))
- user << "Subject may not have abiotic items on."
- return
-
- user.visible_message("[user] starts to put [victim] into the gibber!")
- src.add_fingerprint(user)
- if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
- user.visible_message("[user] stuffs [victim] into the gibber!")
- if(victim.client)
- victim.client.perspective = EYE_PERSPECTIVE
- victim.client.eye = src
- victim.loc = src
- src.occupant = victim
- update_icon()
-
-/obj/machinery/gibber/verb/eject()
- set category = "Object"
- set name = "Empty Gibber"
- set src in oview(1)
-
- if (usr.stat != 0)
- return
- src.go_out()
- add_fingerprint(usr)
- return
-
-/obj/machinery/gibber/proc/go_out()
- if(operating || !src.occupant)
- return
- for(var/obj/O in src)
- O.loc = src.loc
- if (src.occupant.client)
- src.occupant.client.eye = src.occupant.client.mob
- src.occupant.client.perspective = MOB_PERSPECTIVE
- src.occupant.loc = src.loc
- src.occupant = null
- update_icon()
- return
-
-
-/obj/machinery/gibber/proc/startgibbing(mob/user as mob)
- if(src.operating)
- return
- if(!src.occupant)
- visible_message("You hear a loud metallic grinding sound.")
- return
-
- use_power(1000)
- visible_message("You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.")
- src.operating = 1
- update_icon()
-
- var/slab_name = occupant.name
- var/slab_count = 3
- var/slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat
- var/slab_nutrition = src.occupant.nutrition / 15
-
- // Some mobs have specific meat item types.
- if(istype(src.occupant,/mob/living/simple_animal))
- var/mob/living/simple_animal/critter = src.occupant
- if(critter.meat_amount)
- slab_count = critter.meat_amount
- if(critter.meat_type)
- slab_type = critter.meat_type
- else if(istype(src.occupant,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = occupant
- slab_name = src.occupant.real_name
- slab_type = H.isSynthetic() ? /obj/item/stack/material/steel : H.species.meat_type
-
- // Small mobs don't give as much nutrition.
- if(issmall(src.occupant))
- slab_nutrition *= 0.5
- slab_nutrition /= slab_count
-
- for(var/i=1 to slab_count)
- var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8))
- if(istype(new_meat))
- new_meat.name = "[slab_name] [new_meat.name]"
- new_meat.reagents.add_reagent("nutriment",slab_nutrition)
- if(src.occupant.reagents)
- src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
-
- add_attack_logs(user,occupant,"Used [src] to gib")
-
- src.occupant.ghostize()
-
- spawn(gib_time)
-
- src.operating = 0
- src.occupant.gib()
- qdel(src.occupant)
-
- playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
- operating = 0
- for (var/obj/item/thing in contents)
- // There's a chance that the gibber will fail to destroy some evidence.
- if(istype(thing,/obj/item/organ) && prob(80))
- qdel(thing)
- continue
- thing.forceMove(get_turf(thing)) // Drop it onto the turf for throwing.
- thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt.
-
- update_icon()
-
-
+
+/obj/machinery/gibber
+ name = "gibber"
+ desc = "The name isn't descriptive enough?"
+ icon = 'icons/obj/kitchen.dmi'
+ icon_state = "grinder"
+ density = 1
+ anchored = 1
+ req_access = list(access_kitchen,access_morgue)
+
+ var/operating = 0 //Is it on?
+ var/dirty = 0 // Does it need cleaning?
+ var/mob/living/occupant // Mob who has been put inside
+ var/gib_time = 40 // Time from starting until meat appears
+ var/gib_throw_dir = WEST // Direction to spit meat and gibs in.
+
+ use_power = 1
+ idle_power_usage = 2
+ active_power_usage = 500
+
+//auto-gibs anything that bumps into it
+/obj/machinery/gibber/autogibber
+ var/turf/input_plate
+
+/obj/machinery/gibber/autogibber/New()
+ ..()
+ spawn(5)
+ for(var/i in cardinal)
+ var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
+ if(input_obj)
+ if(isturf(input_obj.loc))
+ input_plate = input_obj.loc
+ gib_throw_dir = i
+ qdel(input_obj)
+ break
+
+ if(!input_plate)
+ log_misc("a [src] didn't find an input plate.")
+ return
+
+/obj/machinery/gibber/autogibber/Bumped(var/atom/A)
+ if(!input_plate) return
+
+ if(ismob(A))
+ var/mob/M = A
+
+ if(M.loc == input_plate
+ )
+ M.loc = src
+ M.gib()
+
+
+/obj/machinery/gibber/New()
+ ..()
+ src.overlays += image('icons/obj/kitchen.dmi', "grjam")
+
+/obj/machinery/gibber/update_icon()
+ overlays.Cut()
+ if (dirty)
+ src.overlays += image('icons/obj/kitchen.dmi', "grbloody")
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if (!occupant)
+ src.overlays += image('icons/obj/kitchen.dmi', "grjam")
+ else if (operating)
+ src.overlays += image('icons/obj/kitchen.dmi', "gruse")
+ else
+ src.overlays += image('icons/obj/kitchen.dmi', "gridle")
+
+/obj/machinery/gibber/relaymove(mob/user as mob)
+ src.go_out()
+ return
+
+/obj/machinery/gibber/attack_hand(mob/user as mob)
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if(operating)
+ user << "The gibber is locked and running, wait for it to finish."
+ return
+ else
+ src.startgibbing(user)
+
+/obj/machinery/gibber/examine()
+ ..()
+ usr << "The safety guard is [emagged ? "disabled" : "enabled"]."
+
+/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user)
+ emagged = !emagged
+ user << "You [emagged ? "disable" : "enable"] the gibber safety guard."
+ return 1
+
+/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
+ var/obj/item/weapon/grab/G = W
+
+ if(default_unfasten_wrench(user, W, 40))
+ return
+
+ if(!istype(G))
+ return ..()
+
+ if(G.state < 2)
+ user << "You need a better grip to do that!"
+ return
+
+ move_into_gibber(user,G.affecting)
+ // Grab() process should clean up the grab item, no need to del it.
+
+/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user)
+ if(user.stat || user.restrained())
+ return
+ move_into_gibber(user,target)
+
+/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim)
+
+ if(src.occupant)
+ user << "The gibber is full, empty it first!"
+ return
+
+ if(operating)
+ user << "The gibber is locked and running, wait for it to finish."
+ return
+
+ if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_mob)) )
+ user << "This is not suitable for the gibber!"
+ return
+
+ if(istype(victim,/mob/living/carbon/human) && !emagged)
+ user << "The gibber safety guard is engaged!"
+ return
+
+
+ if(victim.abiotic(1))
+ user << "Subject may not have abiotic items on."
+ return
+
+ user.visible_message("[user] starts to put [victim] into the gibber!")
+ src.add_fingerprint(user)
+ if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
+ user.visible_message("[user] stuffs [victim] into the gibber!")
+ if(victim.client)
+ victim.client.perspective = EYE_PERSPECTIVE
+ victim.client.eye = src
+ victim.loc = src
+ src.occupant = victim
+ update_icon()
+
+/obj/machinery/gibber/verb/eject()
+ set category = "Object"
+ set name = "Empty Gibber"
+ set src in oview(1)
+
+ if (usr.stat != 0)
+ return
+ src.go_out()
+ add_fingerprint(usr)
+ return
+
+/obj/machinery/gibber/proc/go_out()
+ if(operating || !src.occupant)
+ return
+ for(var/obj/O in src)
+ O.loc = src.loc
+ if (src.occupant.client)
+ src.occupant.client.eye = src.occupant.client.mob
+ src.occupant.client.perspective = MOB_PERSPECTIVE
+ src.occupant.loc = src.loc
+ src.occupant = null
+ update_icon()
+ return
+
+
+/obj/machinery/gibber/proc/startgibbing(mob/user as mob)
+ if(src.operating)
+ return
+ if(!src.occupant)
+ visible_message("You hear a loud metallic grinding sound.")
+ return
+
+ use_power(1000)
+ visible_message("You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.")
+ src.operating = 1
+ update_icon()
+
+ var/slab_name = occupant.name
+ var/slab_count = 3
+ var/slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+ var/slab_nutrition = src.occupant.nutrition / 15
+
+ // Some mobs have specific meat item types.
+ if(istype(src.occupant,/mob/living/simple_mob))
+ var/mob/living/simple_mob/critter = src.occupant
+ if(critter.meat_amount)
+ slab_count = critter.meat_amount
+ if(critter.meat_type)
+ slab_type = critter.meat_type
+ else if(istype(src.occupant,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = occupant
+ slab_name = src.occupant.real_name
+ slab_type = H.isSynthetic() ? /obj/item/stack/material/steel : H.species.meat_type
+
+ // Small mobs don't give as much nutrition.
+ if(issmall(src.occupant))
+ slab_nutrition *= 0.5
+ slab_nutrition /= slab_count
+
+ for(var/i=1 to slab_count)
+ var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8))
+ if(istype(new_meat))
+ new_meat.name = "[slab_name] [new_meat.name]"
+ new_meat.reagents.add_reagent("nutriment",slab_nutrition)
+ if(src.occupant.reagents)
+ src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
+
+ add_attack_logs(user,occupant,"Used [src] to gib")
+
+ src.occupant.ghostize()
+
+ spawn(gib_time)
+
+ src.operating = 0
+ src.occupant.gib()
+ qdel(src.occupant)
+
+ playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
+ operating = 0
+ for (var/obj/item/thing in contents)
+ // There's a chance that the gibber will fail to destroy some evidence.
+ if(istype(thing,/obj/item/organ) && prob(80))
+ qdel(thing)
+ continue
+ thing.forceMove(get_turf(thing)) // Drop it onto the turf for throwing.
+ thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt.
+
+ update_icon()
+
+
diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm
index 7357dd5568..1ece9225b1 100644
--- a/code/modules/food/kitchen/microwave.dm
+++ b/code/modules/food/kitchen/microwave.dm
@@ -1,392 +1,392 @@
-/obj/machinery/microwave
- name = "microwave"
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "mw"
- density = 1
- anchored = 1
- use_power = 1
- idle_power_usage = 5
- active_power_usage = 100
- flags = OPENCONTAINER | NOREACT
- circuit = /obj/item/weapon/circuitboard/microwave
- var/operating = 0 // Is it on?
- var/dirty = 0 // = {0..100} Does it need cleaning?
- var/broken = 0 // ={0,1,2} How broken is it???
- var/global/list/datum/recipe/available_recipes // List of the recipes you can use
- var/global/list/acceptable_items // List of the items you can put in
- var/global/list/acceptable_reagents // List of the reagents you can put in
- var/global/max_n_of_items = 0
-
-
-// see code/modules/food/recipes_microwave.dm for recipes
-
-/*******************
-* Initialising
-********************/
-
-/obj/machinery/microwave/New()
- ..()
- reagents = new/datum/reagents(100)
- reagents.my_atom = src
-
- component_parts = list()
- component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
- component_parts += new /obj/item/weapon/stock_parts/motor(src)
- component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
-
- if (!available_recipes)
- available_recipes = new
- for (var/type in (typesof(/datum/recipe)-/datum/recipe))
- available_recipes+= new type
- acceptable_items = new
- acceptable_reagents = new
- for (var/datum/recipe/recipe in available_recipes)
- for (var/item in recipe.items)
- acceptable_items |= item
- for (var/reagent in recipe.reagents)
- acceptable_reagents |= reagent
- if (recipe.items)
- max_n_of_items = max(max_n_of_items,recipe.items.len)
- // This will do until I can think of a fun recipe to use dionaea in -
- // will also allow anything using the holder item to be microwaved into
- // impure carbon. ~Z
- acceptable_items |= /obj/item/weapon/holder
- acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown
-
- RefreshParts()
-
-/*******************
-* Item Adding
-********************/
-
-/obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(src.broken > 0)
- if(src.broken == 2 && O.is_screwdriver()) // If it's broken and they're using a screwdriver
- user.visible_message( \
- "\The [user] starts to fix part of the microwave.", \
- "You start to fix part of the microwave." \
- )
- playsound(src, O.usesound, 50, 1)
- if (do_after(user,20 * O.toolspeed))
- user.visible_message( \
- "\The [user] fixes part of the microwave.", \
- "You have fixed part of the microwave." \
- )
- src.broken = 1 // Fix it a bit
- else if(src.broken == 1 && O.is_wrench()) // If it's broken and they're doing the wrench
- user.visible_message( \
- "\The [user] starts to fix part of the microwave.", \
- "You start to fix part of the microwave." \
- )
- if (do_after(user,20 * O.toolspeed))
- user.visible_message( \
- "\The [user] fixes the microwave.", \
- "You have fixed the microwave." \
- )
- src.icon_state = "mw"
- src.broken = 0 // Fix it!
- src.dirty = 0 // just to be sure
- src.flags = OPENCONTAINER | NOREACT
- else
- to_chat(user, "It's broken!")
- return 1
- else if(default_deconstruction_screwdriver(user, O))
- return
- else if(default_deconstruction_crowbar(user, O))
- return
- else if(default_unfasten_wrench(user, O, 10))
- return
-
- else if(src.dirty==100) // The microwave is all dirty so can't be used!
- if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
- user.visible_message( \
- "\The [user] starts to clean the microwave.", \
- "You start to clean the microwave." \
- )
- if (do_after(user,20))
- user.visible_message( \
- "\The [user] has cleaned the microwave.", \
- "You have cleaned the microwave." \
- )
- src.dirty = 0 // It's clean!
- src.broken = 0 // just to be sure
- src.icon_state = "mw"
- src.flags = OPENCONTAINER | NOREACT
- else //Otherwise bad luck!!
- to_chat(user, "It's dirty!")
- return 1
- else if(is_type_in_list(O,acceptable_items))
- if (contents.len>=(max_n_of_items + component_parts.len + 1)) //Adds component_parts to the maximum number of items. The 1 is from the circuit
- to_chat(user, "This [src] is full of ingredients, you cannot put more.")
- return 1
- if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it
- var/obj/item/stack/S = O
- new O.type (src)
- S.use(1)
- user.visible_message( \
- "\The [user] has added one of [O] to \the [src].", \
- "You add one of [O] to \the [src].")
- return
- else
- // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete
- user.drop_item()
- O.loc = src
- user.visible_message( \
- "\The [user] has added \the [O] to \the [src].", \
- "You add \the [O] to \the [src].")
- return
- else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
- istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
- istype(O,/obj/item/weapon/reagent_containers/food/condiment) \
- )
- if (!O.reagents)
- return 1
- for (var/datum/reagent/R in O.reagents.reagent_list)
- if (!(R.id in acceptable_reagents))
- to_chat(user, "Your [O] contains components unsuitable for cookery.")
- return 1
- return
- else if(istype(O,/obj/item/weapon/grab))
- var/obj/item/weapon/grab/G = O
- to_chat(user, "This is ridiculous. You can not fit \the [G.affecting] in this [src].")
- return 1
- else
- to_chat(user, "You have no idea what you can cook with this [O].")
- ..()
- src.updateUsrDialog()
-
-/obj/machinery/microwave/attack_ai(mob/user as mob)
- if(istype(user, /mob/living/silicon/robot) && Adjacent(user))
- attack_hand(user)
-
-/obj/machinery/microwave/attack_hand(mob/user as mob)
- user.set_machine(src)
- interact(user)
-
-/*******************
-* Microwave Menu
-********************/
-
-/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu
- var/dat = ""
- if(src.broken > 0)
- dat = {"Bzzzzttttt"}
- else if(src.operating)
- dat = {"Microwaving in progress!
Please wait...!"}
- else if(src.dirty==100)
- dat = {"This microwave is dirty!
Please clean it before use!"}
- else
- var/list/items_counts = new
- var/list/items_measures = new
- var/list/items_measures_p = new
- for (var/obj/O in ((contents - component_parts) - circuit))
- var/display_name = O.name
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
- items_measures[display_name] = "egg"
- items_measures_p[display_name] = "eggs"
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
- items_measures[display_name] = "tofu chunk"
- items_measures_p[display_name] = "tofu chunks"
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
- items_measures[display_name] = "slab of meat"
- items_measures_p[display_name] = "slabs of meat"
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
- display_name = "Turnovers"
- items_measures[display_name] = "turnover"
- items_measures_p[display_name] = "turnovers"
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
- items_measures[display_name] = "fillet of meat"
- items_measures_p[display_name] = "fillets of meat"
- items_counts[display_name]++
- for (var/O in items_counts)
- var/N = items_counts[O]
- if (!(O in items_measures))
- dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"}
- else
- if (N==1)
- dat += {"[capitalize(O)]: [N] [items_measures[O]]
"}
- else
- dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"}
-
- for (var/datum/reagent/R in reagents.reagent_list)
- var/display_name = R.name
- if (R.id == "capsaicin")
- display_name = "Hotsauce"
- if (R.id == "frostoil")
- display_name = "Coldsauce"
- dat += {"[display_name]: [R.volume] unit\s
"}
-
- if (items_counts.len==0 && reagents.reagent_list.len==0)
- dat = {"The microwave is empty
"}
- else
- dat = {"Ingredients:
[dat]"}
- dat += {"
\
-Turn on!
\
-Eject ingredients!
\
-"}
-
- to_chat(user, browse("Microwave Controls[dat]", "window=microwave"))
- onclose(user, "microwave")
- return
-
-
-
-/***********************************
-* Microwave Menu Handling/Cooking
-************************************/
-
-/obj/machinery/microwave/proc/cook()
- if(stat & (NOPOWER|BROKEN))
- return
- start()
- if (reagents.total_volume==0 && !(locate(/obj) in ((contents - component_parts) - circuit))) //dry run
- if (!wzhzhzh(10))
- abort()
- return
- stop()
- return
-
- var/datum/recipe/recipe = select_recipe(available_recipes,src)
- var/obj/cooked
- if (!recipe)
- dirty += 1
- if (prob(max(10,dirty*5)))
- if (!wzhzhzh(4))
- abort()
- return
- muck_start()
- wzhzhzh(4)
- muck_finish()
- cooked = fail()
- cooked.loc = src.loc
- return
- else if (has_extra_item())
- if (!wzhzhzh(4))
- abort()
- return
- broke()
- cooked = fail()
- cooked.loc = src.loc
- return
- else
- if (!wzhzhzh(10))
- abort()
- return
- stop()
- cooked = fail()
- cooked.loc = src.loc
- return
- else
- var/halftime = round(recipe.time/10/2)
- if (!wzhzhzh(halftime))
- abort()
- return
- if (!wzhzhzh(halftime))
- abort()
- cooked = fail()
- cooked.loc = src.loc
- return
- cooked = recipe.make_food(src)
- stop()
- if(cooked)
- cooked.loc = src.loc
- return
-
-/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num) // Whoever named this proc is fucking literally Satan. ~ Z
- for (var/i=1 to seconds)
- if (stat & (NOPOWER|BROKEN))
- return 0
- use_power(500)
- sleep(10)
- return 1
-
-/obj/machinery/microwave/proc/has_extra_item()
- for (var/obj/O in ((contents - component_parts) - circuit))
- if ( \
- !istype(O,/obj/item/weapon/reagent_containers/food) && \
- !istype(O, /obj/item/weapon/grown) \
- )
- return 1
- return 0
-
-/obj/machinery/microwave/proc/start()
- src.visible_message("The microwave turns on.", "You hear a microwave.")
- src.operating = 1
- src.icon_state = "mw1"
- src.updateUsrDialog()
-
-/obj/machinery/microwave/proc/abort()
- src.operating = 0 // Turn it off again aferwards
- src.icon_state = "mw"
- src.updateUsrDialog()
-
-/obj/machinery/microwave/proc/stop()
- playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
- src.operating = 0 // Turn it off again aferwards
- src.icon_state = "mw"
- src.updateUsrDialog()
-
-/obj/machinery/microwave/proc/dispose()
- for (var/obj/O in ((contents-component_parts)-circuit))
- O.loc = src.loc
- if (src.reagents.total_volume)
- src.dirty++
- src.reagents.clear_reagents()
- usr << "You dispose of the microwave contents."
- src.updateUsrDialog()
-
-/obj/machinery/microwave/proc/muck_start()
- playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
- src.icon_state = "mwbloody1" // Make it look dirty!!
-
-/obj/machinery/microwave/proc/muck_finish()
- playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
- src.visible_message("The microwave gets covered in muck!")
- src.dirty = 100 // Make it dirty so it can't be used util cleaned
- src.flags = null //So you can't add condiments
- src.icon_state = "mwbloody" // Make it look dirty too
- src.operating = 0 // Turn it off again aferwards
- src.updateUsrDialog()
-
-/obj/machinery/microwave/proc/broke()
- var/datum/effect/effect/system/spark_spread/s = new
- s.set_up(2, 1, src)
- s.start()
- src.icon_state = "mwb" // Make it look all busted up and shit
- src.visible_message("The microwave breaks!") //Let them know they're stupid
- src.broken = 2 // Make it broken so it can't be used util fixed
- src.flags = null //So you can't add condiments
- src.operating = 0 // Turn it off again aferwards
- src.updateUsrDialog()
-
-/obj/machinery/microwave/proc/fail()
- var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
- var/amount = 0
- for (var/obj/O in (((contents - ffuu) - component_parts) - circuit))
- amount++
- if (O.reagents)
- var/id = O.reagents.get_master_reagent_id()
- if (id)
- amount+=O.reagents.get_reagent_amount(id)
- qdel(O)
- src.reagents.clear_reagents()
- ffuu.reagents.add_reagent("carbon", amount)
- ffuu.reagents.add_reagent("toxin", amount/10)
- return ffuu
-
-/obj/machinery/microwave/Topic(href, href_list)
- if(..())
- return
-
- usr.set_machine(src)
- if(src.operating)
- src.updateUsrDialog()
- return
-
- switch(href_list["action"])
- if ("cook")
- cook()
-
- if ("dispose")
- dispose()
- return
+/obj/machinery/microwave
+ name = "microwave"
+ icon = 'icons/obj/kitchen.dmi'
+ icon_state = "mw"
+ density = 1
+ anchored = 1
+ use_power = 1
+ idle_power_usage = 5
+ active_power_usage = 100
+ flags = OPENCONTAINER | NOREACT
+ circuit = /obj/item/weapon/circuitboard/microwave
+ var/operating = 0 // Is it on?
+ var/dirty = 0 // = {0..100} Does it need cleaning?
+ var/broken = 0 // ={0,1,2} How broken is it???
+ var/global/list/datum/recipe/available_recipes // List of the recipes you can use
+ var/global/list/acceptable_items // List of the items you can put in
+ var/global/list/acceptable_reagents // List of the reagents you can put in
+ var/global/max_n_of_items = 0
+
+
+// see code/modules/food/recipes_microwave.dm for recipes
+
+/*******************
+* Initialising
+********************/
+
+/obj/machinery/microwave/New()
+ ..()
+ reagents = new/datum/reagents(100)
+ reagents.my_atom = src
+
+ component_parts = list()
+ component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
+ component_parts += new /obj/item/weapon/stock_parts/motor(src)
+ component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
+
+ if (!available_recipes)
+ available_recipes = new
+ for (var/type in (typesof(/datum/recipe)-/datum/recipe))
+ available_recipes+= new type
+ acceptable_items = new
+ acceptable_reagents = new
+ for (var/datum/recipe/recipe in available_recipes)
+ for (var/item in recipe.items)
+ acceptable_items |= item
+ for (var/reagent in recipe.reagents)
+ acceptable_reagents |= reagent
+ if (recipe.items)
+ max_n_of_items = max(max_n_of_items,recipe.items.len)
+ // This will do until I can think of a fun recipe to use dionaea in -
+ // will also allow anything using the holder item to be microwaved into
+ // impure carbon. ~Z
+ acceptable_items |= /obj/item/weapon/holder
+ acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown
+
+ RefreshParts()
+
+/*******************
+* Item Adding
+********************/
+
+/obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(src.broken > 0)
+ if(src.broken == 2 && O.is_screwdriver()) // If it's broken and they're using a screwdriver
+ user.visible_message( \
+ "\The [user] starts to fix part of the microwave.", \
+ "You start to fix part of the microwave." \
+ )
+ playsound(src, O.usesound, 50, 1)
+ if (do_after(user,20 * O.toolspeed))
+ user.visible_message( \
+ "\The [user] fixes part of the microwave.", \
+ "You have fixed part of the microwave." \
+ )
+ src.broken = 1 // Fix it a bit
+ else if(src.broken == 1 && O.is_wrench()) // If it's broken and they're doing the wrench
+ user.visible_message( \
+ "\The [user] starts to fix part of the microwave.", \
+ "You start to fix part of the microwave." \
+ )
+ if (do_after(user,20 * O.toolspeed))
+ user.visible_message( \
+ "\The [user] fixes the microwave.", \
+ "You have fixed the microwave." \
+ )
+ src.icon_state = "mw"
+ src.broken = 0 // Fix it!
+ src.dirty = 0 // just to be sure
+ src.flags = OPENCONTAINER | NOREACT
+ else
+ to_chat(user, "It's broken!")
+ return 1
+ else if(default_deconstruction_screwdriver(user, O))
+ return
+ else if(default_deconstruction_crowbar(user, O))
+ return
+ else if(default_unfasten_wrench(user, O, 10))
+ return
+
+ else if(src.dirty==100) // The microwave is all dirty so can't be used!
+ if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
+ user.visible_message( \
+ "\The [user] starts to clean the microwave.", \
+ "You start to clean the microwave." \
+ )
+ if (do_after(user,20))
+ user.visible_message( \
+ "\The [user] has cleaned the microwave.", \
+ "You have cleaned the microwave." \
+ )
+ src.dirty = 0 // It's clean!
+ src.broken = 0 // just to be sure
+ src.icon_state = "mw"
+ src.flags = OPENCONTAINER | NOREACT
+ else //Otherwise bad luck!!
+ to_chat(user, "It's dirty!")
+ return 1
+ else if(is_type_in_list(O,acceptable_items))
+ if (contents.len>=(max_n_of_items + component_parts.len + 1)) //Adds component_parts to the maximum number of items. The 1 is from the circuit
+ to_chat(user, "This [src] is full of ingredients, you cannot put more.")
+ return 1
+ if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it
+ var/obj/item/stack/S = O
+ new O.type (src)
+ S.use(1)
+ user.visible_message( \
+ "\The [user] has added one of [O] to \the [src].", \
+ "You add one of [O] to \the [src].")
+ return
+ else
+ // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete
+ user.drop_item()
+ O.loc = src
+ user.visible_message( \
+ "\The [user] has added \the [O] to \the [src].", \
+ "You add \the [O] to \the [src].")
+ return
+ else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
+ istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
+ istype(O,/obj/item/weapon/reagent_containers/food/condiment) \
+ )
+ if (!O.reagents)
+ return 1
+ for (var/datum/reagent/R in O.reagents.reagent_list)
+ if (!(R.id in acceptable_reagents))
+ to_chat(user, "Your [O] contains components unsuitable for cookery.")
+ return 1
+ return
+ else if(istype(O,/obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = O
+ to_chat(user, "This is ridiculous. You can not fit \the [G.affecting] in this [src].")
+ return 1
+ else
+ to_chat(user, "You have no idea what you can cook with this [O].")
+ ..()
+ src.updateUsrDialog()
+
+/obj/machinery/microwave/attack_ai(mob/user as mob)
+ if(istype(user, /mob/living/silicon/robot) && Adjacent(user))
+ attack_hand(user)
+
+/obj/machinery/microwave/attack_hand(mob/user as mob)
+ user.set_machine(src)
+ interact(user)
+
+/*******************
+* Microwave Menu
+********************/
+
+/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu
+ var/dat = ""
+ if(src.broken > 0)
+ dat = {"Bzzzzttttt"}
+ else if(src.operating)
+ dat = {"Microwaving in progress!
Please wait...!"}
+ else if(src.dirty==100)
+ dat = {"This microwave is dirty!
Please clean it before use!"}
+ else
+ var/list/items_counts = new
+ var/list/items_measures = new
+ var/list/items_measures_p = new
+ for (var/obj/O in ((contents - component_parts) - circuit))
+ var/display_name = O.name
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
+ items_measures[display_name] = "egg"
+ items_measures_p[display_name] = "eggs"
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
+ items_measures[display_name] = "tofu chunk"
+ items_measures_p[display_name] = "tofu chunks"
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
+ items_measures[display_name] = "slab of meat"
+ items_measures_p[display_name] = "slabs of meat"
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
+ display_name = "Turnovers"
+ items_measures[display_name] = "turnover"
+ items_measures_p[display_name] = "turnovers"
+ if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
+ items_measures[display_name] = "fillet of meat"
+ items_measures_p[display_name] = "fillets of meat"
+ items_counts[display_name]++
+ for (var/O in items_counts)
+ var/N = items_counts[O]
+ if (!(O in items_measures))
+ dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"}
+ else
+ if (N==1)
+ dat += {"[capitalize(O)]: [N] [items_measures[O]]
"}
+ else
+ dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"}
+
+ for (var/datum/reagent/R in reagents.reagent_list)
+ var/display_name = R.name
+ if (R.id == "capsaicin")
+ display_name = "Hotsauce"
+ if (R.id == "frostoil")
+ display_name = "Coldsauce"
+ dat += {"[display_name]: [R.volume] unit\s
"}
+
+ if (items_counts.len==0 && reagents.reagent_list.len==0)
+ dat = {"The microwave is empty
"}
+ else
+ dat = {"Ingredients:
[dat]"}
+ dat += {"
\
+Turn on!
\
+Eject ingredients!
\
+"}
+
+ to_chat(user, browse("Microwave Controls[dat]", "window=microwave"))
+ onclose(user, "microwave")
+ return
+
+
+
+/***********************************
+* Microwave Menu Handling/Cooking
+************************************/
+
+/obj/machinery/microwave/proc/cook()
+ if(stat & (NOPOWER|BROKEN))
+ return
+ start()
+ if (reagents.total_volume==0 && !(locate(/obj) in ((contents - component_parts) - circuit))) //dry run
+ if (!wzhzhzh(10))
+ abort()
+ return
+ stop()
+ return
+
+ var/datum/recipe/recipe = select_recipe(available_recipes,src)
+ var/obj/cooked
+ if (!recipe)
+ dirty += 1
+ if (prob(max(10,dirty*5)))
+ if (!wzhzhzh(4))
+ abort()
+ return
+ muck_start()
+ wzhzhzh(4)
+ muck_finish()
+ cooked = fail()
+ cooked.loc = src.loc
+ return
+ else if (has_extra_item())
+ if (!wzhzhzh(4))
+ abort()
+ return
+ broke()
+ cooked = fail()
+ cooked.loc = src.loc
+ return
+ else
+ if (!wzhzhzh(10))
+ abort()
+ return
+ stop()
+ cooked = fail()
+ cooked.loc = src.loc
+ return
+ else
+ var/halftime = round(recipe.time/10/2)
+ if (!wzhzhzh(halftime))
+ abort()
+ return
+ if (!wzhzhzh(halftime))
+ abort()
+ cooked = fail()
+ cooked.loc = src.loc
+ return
+ cooked = recipe.make_food(src)
+ stop()
+ if(cooked)
+ cooked.loc = src.loc
+ return
+
+/obj/machinery/microwave/proc/wzhzhzh(var/seconds as num) // Whoever named this proc is fucking literally Satan. ~ Z
+ for (var/i=1 to seconds)
+ if (stat & (NOPOWER|BROKEN))
+ return 0
+ use_power(500)
+ sleep(10)
+ return 1
+
+/obj/machinery/microwave/proc/has_extra_item()
+ for (var/obj/O in ((contents - component_parts) - circuit))
+ if ( \
+ !istype(O,/obj/item/weapon/reagent_containers/food) && \
+ !istype(O, /obj/item/weapon/grown) \
+ )
+ return 1
+ return 0
+
+/obj/machinery/microwave/proc/start()
+ src.visible_message("The microwave turns on.", "You hear a microwave.")
+ src.operating = 1
+ src.icon_state = "mw1"
+ src.updateUsrDialog()
+
+/obj/machinery/microwave/proc/abort()
+ src.operating = 0 // Turn it off again aferwards
+ src.icon_state = "mw"
+ src.updateUsrDialog()
+
+/obj/machinery/microwave/proc/stop()
+ playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
+ src.operating = 0 // Turn it off again aferwards
+ src.icon_state = "mw"
+ src.updateUsrDialog()
+
+/obj/machinery/microwave/proc/dispose()
+ for (var/obj/O in ((contents-component_parts)-circuit))
+ O.loc = src.loc
+ if (src.reagents.total_volume)
+ src.dirty++
+ src.reagents.clear_reagents()
+ usr << "You dispose of the microwave contents."
+ src.updateUsrDialog()
+
+/obj/machinery/microwave/proc/muck_start()
+ playsound(src.loc, 'sound/effects/splat.ogg', 50, 1) // Play a splat sound
+ src.icon_state = "mwbloody1" // Make it look dirty!!
+
+/obj/machinery/microwave/proc/muck_finish()
+ playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
+ src.visible_message("The microwave gets covered in muck!")
+ src.dirty = 100 // Make it dirty so it can't be used util cleaned
+ src.flags = null //So you can't add condiments
+ src.icon_state = "mwbloody" // Make it look dirty too
+ src.operating = 0 // Turn it off again aferwards
+ src.updateUsrDialog()
+
+/obj/machinery/microwave/proc/broke()
+ var/datum/effect/effect/system/spark_spread/s = new
+ s.set_up(2, 1, src)
+ s.start()
+ src.icon_state = "mwb" // Make it look all busted up and shit
+ src.visible_message("The microwave breaks!") //Let them know they're stupid
+ src.broken = 2 // Make it broken so it can't be used util fixed
+ src.flags = null //So you can't add condiments
+ src.operating = 0 // Turn it off again aferwards
+ src.updateUsrDialog()
+
+/obj/machinery/microwave/proc/fail()
+ var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
+ var/amount = 0
+ for (var/obj/O in (((contents - ffuu) - component_parts) - circuit))
+ amount++
+ if (O.reagents)
+ var/id = O.reagents.get_master_reagent_id()
+ if (id)
+ amount+=O.reagents.get_reagent_amount(id)
+ qdel(O)
+ src.reagents.clear_reagents()
+ ffuu.reagents.add_reagent("carbon", amount)
+ ffuu.reagents.add_reagent("toxin", amount/10)
+ return ffuu
+
+/obj/machinery/microwave/Topic(href, href_list)
+ if(..())
+ return
+
+ usr.set_machine(src)
+ if(src.operating)
+ src.updateUsrDialog()
+ return
+
+ switch(href_list["action"])
+ if ("cook")
+ cook()
+
+ if ("dispose")
+ dispose()
+ return
diff --git a/code/modules/food/kitchen/smartfridge.dm b/code/modules/food/kitchen/smartfridge.dm
index 005f7749b6..b7c3ac443f 100644
--- a/code/modules/food/kitchen/smartfridge.dm
+++ b/code/modules/food/kitchen/smartfridge.dm
@@ -10,7 +10,11 @@
idle_power_usage = 5
active_power_usage = 100
flags = NOREACT
+<<<<<<< HEAD
var/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000. //VOREStation Edit - Non-global
+=======
+ var/global/max_n_of_items = 999 // Sorry but the BYOND infinite loop detector doesn't look things over 1000.
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
var/icon_on = "smartfridge"
var/icon_off = "smartfridge-off"
var/icon_panel = "smartfridge-panel"
diff --git a/code/modules/gamemaster/actions/carp_migration.dm b/code/modules/gamemaster/actions/carp_migration.dm
index 7c76a5119c..7bf7d80ee3 100644
--- a/code/modules/gamemaster/actions/carp_migration.dm
+++ b/code/modules/gamemaster/actions/carp_migration.dm
@@ -52,12 +52,12 @@
while (i <= carp_amount)
var/group_size = rand(group_size_min, group_size_max)
for (var/j = 1, j <= group_size, j++)
- spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i]))
+ spawned_carp.Add(new /mob/living/simple_mob/animal/space/carp/event(spawn_locations[i]))
i++
message_admins("[spawned_carp.len] carp spawned by event.")
/datum/gm_action/carp_migration/end()
- for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
+ for(var/mob/living/simple_mob/animal/space/carp/C in spawned_carp)
if(!C.stat)
var/turf/T = get_turf(C)
if(istype(T, /turf/space))
diff --git a/code/modules/gamemaster/actions/surprise_carp_attack.dm b/code/modules/gamemaster/actions/surprise_carp_attack.dm
index e78dd72343..14c4b03e0e 100644
--- a/code/modules/gamemaster/actions/surprise_carp_attack.dm
+++ b/code/modules/gamemaster/actions/surprise_carp_attack.dm
@@ -47,7 +47,5 @@
spawning_turf = space
break
if(spawning_turf)
- var/mob/living/simple_animal/hostile/carp/C = new(spawning_turf)
- C.target_mob = victim
- C.stance = STANCE_ATTACK
+ new /mob/living/simple_mob/animal/space/carp(spawning_turf)
number_of_carp--
\ No newline at end of file
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index cbeff5fb34..f5b6b28e11 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -238,7 +238,7 @@
/obj/item/weapon/deck/MouseDrop(mob/user as mob) // Code from Paper bin, so you can still pick up the deck
if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr))))))
- if(!istype(usr, /mob/living/simple_animal))
+ if(!istype(usr, /mob/living/simple_mob))
if( !usr.get_active_hand() ) //if active hand is empty
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
@@ -256,7 +256,7 @@
/obj/item/weapon/deck/verb_pickup(mob/user as mob) // Snowflaked so pick up verb work as intended
if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr))))))
- if(!istype(usr, /mob/living/simple_animal))
+ if(!istype(usr, /mob/living/simple_mob))
if( !usr.get_active_hand() ) //if active hand is empty
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm
index e5c9b81d99..845b4701bd 100644
--- a/code/modules/holodeck/HolodeckControl.dm
+++ b/code/modules/holodeck/HolodeckControl.dm
@@ -177,7 +177,7 @@
for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
H.damtype = initial(H.damtype)
- for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
+ for(var/mob/living/simple_mob/animal/space/carp/holodeck/C in holographic_mobs)
C.set_safety(!safety_disabled)
if (last_to_emag)
C.friends = list(last_to_emag)
@@ -210,7 +210,7 @@
derez(item, 0)
if (!safety_disabled)
- for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
+ for(var/mob/living/simple_mob/animal/space/carp/holodeck/C in holographic_mobs)
if (get_area(C.loc) != linkedholodeck)
holographic_mobs -= C
C.derez()
@@ -306,7 +306,7 @@
for(var/item in holographic_objs)
derez(item)
- for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
+ for(var/mob/living/simple_mob/animal/space/carp/holodeck/C in holographic_mobs)
holographic_mobs -= C
C.derez()
@@ -340,11 +340,11 @@
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
if(L.name=="Holocarp Spawn")
- holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc)
+ holographic_mobs += new /mob/living/simple_mob/animal/space/carp/holodeck(L.loc)
if(L.name=="Holocarp Spawn Random")
if (prob(4)) //With 4 spawn points, carp should only appear 15% of the time.
- holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc)
+ holographic_mobs += new /mob/living/simple_mob/animal/space/carp/holodeck(L.loc)
update_projections()
diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm
index 8e6d20eab9..8dd32997a7 100644
--- a/code/modules/holodeck/HolodeckObjects.dm
+++ b/code/modules/holodeck/HolodeckObjects.dm
@@ -419,7 +419,7 @@
//Holocarp
-/mob/living/simple_animal/hostile/carp/holodeck
+/mob/living/simple_mob/animal/space/carp/holodeck
icon = 'icons/mob/AI.dmi'
icon_state = "holo4"
icon_living = "holo4"
@@ -429,31 +429,27 @@
meat_amount = 0
meat_type = null
-/mob/living/simple_animal/hostile/carp/holodeck/New()
+/mob/living/simple_mob/animal/space/carp/holodeck/New()
..()
set_light(2) //hologram lighting
-/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe)
+/mob/living/simple_mob/animal/space/carp/holodeck/proc/set_safety(var/safe)
if (safe)
faction = "neutral"
melee_damage_lower = 0
melee_damage_upper = 0
- environment_smash = 0
- destroy_surroundings = 0
else
faction = "carp"
melee_damage_lower = initial(melee_damage_lower)
melee_damage_upper = initial(melee_damage_upper)
- environment_smash = initial(environment_smash)
- destroy_surroundings = initial(destroy_surroundings)
-/mob/living/simple_animal/hostile/carp/holodeck/gib()
+/mob/living/simple_mob/animal/space/carp/holodeck/gib()
derez() //holograms can't gib
-/mob/living/simple_animal/hostile/carp/holodeck/death()
+/mob/living/simple_mob/animal/space/carp/holodeck/death()
..()
derez()
-/mob/living/simple_animal/hostile/carp/holodeck/proc/derez()
+/mob/living/simple_mob/animal/space/carp/holodeck/proc/derez()
visible_message("\The [src] fades away!")
qdel(src)
diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm
index 5c6053aba4..0118088b27 100644
--- a/code/modules/hydroponics/seed.dm
+++ b/code/modules/hydroponics/seed.dm
@@ -104,10 +104,10 @@
return
if(!istype(target))
- if(istype(target, /mob/living/simple_animal/mouse))
+ if(istype(target, /mob/living/simple_mob/animal/passive/mouse))
new /obj/effect/decal/remains/mouse(get_turf(target))
qdel(target)
- else if(istype(target, /mob/living/simple_animal/lizard))
+ else if(istype(target, /mob/living/simple_mob/animal/passive/lizard))
new /obj/effect/decal/remains/lizard(get_turf(target))
qdel(target)
return
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index b70a02af4c..eab78597b1 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -184,7 +184,7 @@
display_name = "killer tomato plant"
mutants = null
can_self_harvest = 1
- has_mob_product = /mob/living/simple_animal/hostile/tomato
+ has_mob_product = /mob/living/simple_mob/tomato
/datum/seed/tomato/killer/New()
..()
diff --git a/code/modules/integrated_electronics/core/assemblies/device.dm b/code/modules/integrated_electronics/core/assemblies/device.dm
index 63e0bef562..bcdd0e9bea 100644
--- a/code/modules/integrated_electronics/core/assemblies/device.dm
+++ b/code/modules/integrated_electronics/core/assemblies/device.dm
@@ -1,84 +1,84 @@
-/obj/item/device/assembly/electronic_assembly
- name = "electronic device"
- desc = "It's a case for building electronics with. It can be attached to other small devices."
- icon_state = "setup_device"
- var/opened = 0
-
- var/obj/item/device/electronic_assembly/device/EA
-
-/obj/item/device/assembly/electronic_assembly/New()
- EA = new(src)
- EA.holder = src
- ..()
-
-/obj/item/device/assembly/electronic_assembly/attackby(obj/item/I as obj, mob/user as mob)
- if (I.is_crowbar())
- toggle_open(user)
- else if (opened)
- EA.attackby(I, user)
- else
- ..()
-
-/obj/item/device/assembly/electronic_assembly/proc/toggle_open(mob/user)
- playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
- opened = !opened
- EA.opened = opened
- to_chat(user, "You [opened ? "opened" : "closed"] \the [src].")
- secured = 1
- update_icon()
-
-/obj/item/device/assembly/electronic_assembly/update_icon()
- if(EA)
- icon_state = initial(icon_state)
- else
- icon_state = initial(icon_state)+"0"
- if(opened)
- icon_state = icon_state + "-open"
-
-/obj/item/device/assembly/electronic_assembly/attack_self(mob/user as mob)
- if(EA)
- EA.attack_self(user)
-
-/obj/item/device/assembly/electronic_assembly/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
- if(EA)
- for(var/obj/item/integrated_circuit/built_in/device_input/I in EA.contents)
- I.do_work()
- return
-
-/obj/item/device/assembly/electronic_assembly/examine(mob/user)
- .=..(user, 1)
- if(EA)
- for(var/obj/item/integrated_circuit/IC in EA.contents)
- IC.external_examine(user)
-
-/obj/item/device/assembly/electronic_assembly/verb/toggle()
- set src in usr
- set category = "Object"
- set name = "Open/Close Device Assembly"
- set desc = "Open or close device assembly!"
-
- toggle_open(usr)
-
-
-/obj/item/device/electronic_assembly/device
- name = "electronic device"
- icon_state = "setup_device"
- desc = "It's a tiny electronic device with specific use for attaching to other devices."
- var/obj/item/device/assembly/electronic_assembly/holder
- w_class = ITEMSIZE_TINY
- max_components = IC_COMPONENTS_BASE * 3/4
- max_complexity = IC_COMPLEXITY_BASE * 3/4
-
-
-/obj/item/device/electronic_assembly/device/New()
- ..()
- var/obj/item/integrated_circuit/built_in/device_input/input = new(src)
- var/obj/item/integrated_circuit/built_in/device_output/output = new(src)
- input.assembly = src
- output.assembly = src
-
-/obj/item/device/electronic_assembly/device/check_interactivity(mob/user)
- if(!CanInteract(user, state = deep_inventory_state))
- return 0
- return 1
-
+/obj/item/device/assembly/electronic_assembly
+ name = "electronic device"
+ desc = "It's a case for building electronics with. It can be attached to other small devices."
+ icon_state = "setup_device"
+ var/opened = 0
+
+ var/obj/item/device/electronic_assembly/device/EA
+
+/obj/item/device/assembly/electronic_assembly/New()
+ EA = new(src)
+ EA.holder = src
+ ..()
+
+/obj/item/device/assembly/electronic_assembly/attackby(obj/item/I as obj, mob/user as mob)
+ if (I.is_crowbar())
+ toggle_open(user)
+ else if (opened)
+ EA.attackby(I, user)
+ else
+ ..()
+
+/obj/item/device/assembly/electronic_assembly/proc/toggle_open(mob/user)
+ playsound(get_turf(src), 'sound/items/Crowbar.ogg', 50, 1)
+ opened = !opened
+ EA.opened = opened
+ to_chat(user, "You [opened ? "opened" : "closed"] \the [src].")
+ secured = 1
+ update_icon()
+
+/obj/item/device/assembly/electronic_assembly/update_icon()
+ if(EA)
+ icon_state = initial(icon_state)
+ else
+ icon_state = initial(icon_state)+"0"
+ if(opened)
+ icon_state = icon_state + "-open"
+
+/obj/item/device/assembly/electronic_assembly/attack_self(mob/user as mob)
+ if(EA)
+ EA.attack_self(user)
+
+/obj/item/device/assembly/electronic_assembly/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
+ if(EA)
+ for(var/obj/item/integrated_circuit/built_in/device_input/I in EA.contents)
+ I.do_work()
+ return
+
+/obj/item/device/assembly/electronic_assembly/examine(mob/user)
+ .=..(user, 1)
+ if(EA)
+ for(var/obj/item/integrated_circuit/IC in EA.contents)
+ IC.external_examine(user)
+
+/obj/item/device/assembly/electronic_assembly/verb/toggle()
+ set src in usr
+ set category = "Object"
+ set name = "Open/Close Device Assembly"
+ set desc = "Open or close device assembly!"
+
+ toggle_open(usr)
+
+
+/obj/item/device/electronic_assembly/device
+ name = "electronic device"
+ icon_state = "setup_device"
+ desc = "It's a tiny electronic device with specific use for attaching to other devices."
+ var/obj/item/device/assembly/electronic_assembly/holder
+ w_class = ITEMSIZE_TINY
+ max_components = IC_COMPONENTS_BASE * 3/4
+ max_complexity = IC_COMPLEXITY_BASE * 3/4
+
+
+/obj/item/device/electronic_assembly/device/New()
+ ..()
+ var/obj/item/integrated_circuit/built_in/device_input/input = new(src)
+ var/obj/item/integrated_circuit/built_in/device_output/output = new(src)
+ input.assembly = src
+ output.assembly = src
+
+/obj/item/device/electronic_assembly/device/check_interactivity(mob/user)
+ if(!CanInteract(user, state = deep_inventory_state))
+ return 0
+ return 1
+
diff --git a/code/modules/mob/_modifiers/auras.dm b/code/modules/mob/_modifiers/auras.dm
new file mode 100644
index 0000000000..fcc023ee2e
--- /dev/null
+++ b/code/modules/mob/_modifiers/auras.dm
@@ -0,0 +1,18 @@
+/*
+'Aura' modifiers are semi-permanent, in that they do not have a set duration, but will expire if out of range of the 'source' of the aura.
+Note: The source is defined as an argument in New(), and if not specified, it is assumed the holder is the source,
+making it not expire ever, which is likely not what you want.
+*/
+
+/datum/modifier/aura
+ var/aura_max_distance = 5 // If more than this many tiles away from the source, the modifier expires next tick.
+
+/datum/modifier/aura/check_if_valid()
+ if(!origin)
+ expire()
+ var/atom/A = origin.resolve()
+ if(istype(A)) // Make sure we're not null.
+ if(get_dist(holder, A) > aura_max_distance)
+ expire()
+ else
+ expire() // Source got deleted or something.
diff --git a/code/modules/mob/_modifiers/modifiers.dm b/code/modules/mob/_modifiers/modifiers.dm
index 4f449b723b..115acb1b3e 100644
--- a/code/modules/mob/_modifiers/modifiers.dm
+++ b/code/modules/mob/_modifiers/modifiers.dm
@@ -149,6 +149,13 @@
/mob/living/proc/remove_specific_modifier(var/datum/modifier/M, var/silent = FALSE)
M.expire(silent)
+// Removes one modifier of a type
+/mob/living/proc/remove_a_modifier_of_type(var/modifier_type, var/silent = FALSE)
+ for(var/datum/modifier/M in modifiers)
+ if(ispath(M.type, modifier_type))
+ M.expire(silent)
+ break
+
// Removes all modifiers of a type
/mob/living/proc/remove_modifiers_of_type(var/modifier_type, var/silent = FALSE)
for(var/datum/modifier/M in modifiers)
diff --git a/code/modules/mob/_modifiers/modifiers_misc.dm b/code/modules/mob/_modifiers/modifiers_misc.dm
index fbe9e35624..af5be943d1 100644
--- a/code/modules/mob/_modifiers/modifiers_misc.dm
+++ b/code/modules/mob/_modifiers/modifiers_misc.dm
@@ -29,7 +29,7 @@ Berserk is a somewhat rare modifier to obtain freely (and for good reason), howe
- Red Slimes will berserk if they go rabid.
- Red slime core reactions will berserk slimes that can see the user in addition to making them go rabid.
- Red slime core reactions will berserk prometheans that can see the user.
-- Bears will berserk when losing a fight.
+- Saviks will berserk when losing a fight.
- Changelings can evolve a 2 point ability to use a changeling-specific variant of Berserk, that replaces the text with a 'we' variant.
Recursive Enhancement allows the changeling to instead used an improved variant that features less exhaustion time and less nutrition drain.
- Xenoarch artifacts may have forced berserking as one of their effects. This is especially fun if an artifact that makes hostile mobs is nearby.
@@ -180,3 +180,70 @@ the artifact triggers the rage.
accuracy = -75 // Aiming requires focus.
accuracy_dispersion = 3 // Ditto.
evasion = -45 // Too angry to dodge.
+
+
+
+
+// Ignition, but confined to the modifier system.
+// This makes it more predictable and thus, easier to balance.
+/datum/modifier/fire
+ name = "on fire"
+ desc = "You are on fire! You will be harmed until the fire goes out or you extinguish it with water."
+ mob_overlay_state = "on_fire"
+
+ on_created_text = "You combust into flames!"
+ on_expired_text = "The fire starts to fade."
+ stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot.
+ var/damage_per_tick = 5
+
+/datum/modifier/fire/tick()
+ holder.inflict_heat_damage(damage_per_tick)
+
+
+// Applied when near something very cold.
+// Reduces mobility, attack speed.
+/datum/modifier/chilled
+ name = "chilled"
+ desc = "You feel yourself freezing up. Its hard to move."
+ mob_overlay_state = "chilled"
+
+ on_created_text = "You feel like you're going to freeze! It's hard to move."
+ on_expired_text = "You feel somewhat warmer and more mobile now."
+ stacks = MODIFIER_STACK_EXTEND
+
+ slowdown = 2
+ evasion = -40
+ attack_speed_percent = 1.4
+ disable_duration_percent = 1.2
+
+
+// Similar to being on fire, except poison tends to be more long term.
+// Antitoxins will remove stacks over time.
+// Synthetics can't receive this.
+/datum/modifier/poisoned
+ name = "poisoned"
+ desc = "You have poison inside of you. It will cause harm over a long span of time if not cured."
+ mob_overlay_state = "poisoned"
+
+ on_created_text = "You feel sick..."
+ on_expired_text = "You feel a bit better."
+ stacks = MODIFIER_STACK_ALLOWED // Multiple instances will hurt a lot.
+ var/damage_per_tick = 1
+
+/datum/modifier/poisoned/weak
+ damage_per_tick = 0.5
+
+/datum/modifier/poisoned/strong
+ damage_per_tick = 2
+
+/datum/modifier/poisoned/tick()
+ if(holder.stat == DEAD)
+ expire(silent = TRUE)
+ holder.inflict_poison_damage(damage_per_tick)
+
+/datum/modifier/poisoned/can_apply(mob/living/L)
+ if(L.isSynthetic())
+ return FALSE
+ if(L.get_poison_protection() >= 1)
+ return FALSE
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/_modifiers/traits_phobias.dm b/code/modules/mob/_modifiers/traits_phobias.dm
index 0fbe099c22..bd30891fbe 100644
--- a/code/modules/mob/_modifiers/traits_phobias.dm
+++ b/code/modules/mob/_modifiers/traits_phobias.dm
@@ -207,8 +207,8 @@
if(istype(thing, /obj/structure/snowman/spider)) //Snow spiders are also spooky so people can be assholes with those too.
fear_amount += 1
- if(istype(thing, /mob/living/simple_animal/hostile/giant_spider)) // Actual giant spiders are the scariest of them all.
- var/mob/living/simple_animal/hostile/giant_spider/S = thing
+ if(istype(thing, /mob/living/simple_mob/animal/giant_spider)) // Actual giant spiders are the scariest of them all.
+ var/mob/living/simple_mob/animal/giant_spider/S = thing
if(S.stat == DEAD) // Dead giant spiders are less scary than alive ones.
fear_amount += 4
else
@@ -425,14 +425,18 @@
if(istype(thing, /obj/item/clothing/head/collectable/slime)) // Some hats are spooky so people can be assholes with them.
fear_amount += 1
- if(istype(thing, /mob/living/simple_animal/slime)) // An actual predatory specimen!
- var/mob/living/simple_animal/slime/S = thing
+ if(istype(thing, /mob/living/simple_mob/slime)) // An actual predatory specimen!
+ var/mob/living/simple_mob/slime/S = thing
if(S.stat == DEAD) // Dead slimes are somewhat less spook.
fear_amount += 4
- if(S.is_adult == TRUE) //big boy
- fear_amount += 8
+ if(istype(S, /mob/living/simple_mob/slime/xenobio))
+ var/mob/living/simple_mob/slime/xenobio/X = S
+ if(X.is_adult == TRUE) //big boy
+ fear_amount += 8
+ else
+ fear_amount += 6
else
- fear_amount += 6
+ fear_amount += 10 // It's huge and feral.
if(istype(thing, /mob/living/carbon/human))
var/mob/living/carbon/human/S = thing
diff --git a/code/modules/mob/_modifiers/unholy.dm b/code/modules/mob/_modifiers/unholy.dm
index cc4a23aa40..0eadabc83a 100644
--- a/code/modules/mob/_modifiers/unholy.dm
+++ b/code/modules/mob/_modifiers/unholy.dm
@@ -71,7 +71,7 @@
/datum/modifier/repair_aura/tick()
spawn()
- for(var/mob/living/simple_animal/construct/T in view(4,holder))
+ for(var/mob/living/simple_mob/construct/T in view(4,holder))
T.adjustBruteLoss(rand(-10,-15))
T.adjustFireLoss(rand(-10,-15))
@@ -110,7 +110,7 @@
spawn()
if(isliving(holder))
var/mob/living/L = holder
- if(istype(L, /mob/living/simple_animal/construct))
+ if(istype(L, /mob/living/simple_mob/construct))
L.adjustBruteLoss(rand(-5,-10))
L.adjustFireLoss(rand(-5,-10))
else
diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm
index c5bded9765..9b9ce3957f 100644
--- a/code/modules/mob/animations.dm
+++ b/code/modules/mob/animations.dm
@@ -180,8 +180,33 @@ note dizziness decrements automatically in the mob's Life() proc.
pixel_z = default_pixel_z
alpha = initial_alpha
-/atom/movable/proc/do_attack_animation(atom/A)
+// Similar to attack animations, but in reverse and is longer to act as a telegraph.
+/atom/movable/proc/do_windup_animation(atom/A, windup_time)
+ var/pixel_x_diff = 0
+ var/pixel_y_diff = 0
+ var/direction = get_dir(src, A)
+ if(direction & NORTH)
+ pixel_y_diff = -8
+ else if(direction & SOUTH)
+ pixel_y_diff = 8
+ if(direction & EAST)
+ pixel_x_diff = -8
+ else if(direction & WEST)
+ pixel_x_diff = 8
+
+ var/default_pixel_x = initial(pixel_x)
+ var/default_pixel_y = initial(pixel_y)
+ var/mob/mob = src
+ if(istype(mob))
+ default_pixel_x = mob.default_pixel_x
+ default_pixel_y = mob.default_pixel_y
+
+ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = windup_time - 2)
+ animate(pixel_x = default_pixel_x, pixel_y = default_pixel_y, time = 2)
+
+
+/atom/movable/proc/do_attack_animation(atom/A)
var/pixel_x_diff = 0
var/pixel_y_diff = 0
var/direction = get_dir(src, A)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 7345e7e9b1..fa021509fb 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -498,7 +498,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
//find a viable mouse candidate
- var/mob/living/simple_animal/mouse/host
+ var/mob/living/simple_mob/animal/passive/mouse/host
var/obj/machinery/atmospherics/unary/vent_pump/vent_found
var/list/found_vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/v in machines)
@@ -506,7 +506,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
found_vents.Add(v)
if(found_vents.len)
vent_found = pick(found_vents)
- host = new /mob/living/simple_animal/mouse(vent_found)
+ host = new /mob/living/simple_mob/animal/passive/mouse(vent_found)
else
src << "Unable to find any unwelded vents to spawn mice at."
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index 0ecdb2fc20..f67f70eb87 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -52,6 +52,13 @@
if(O)
O.see_emote(src, message, m_type)
+// Shortcuts for above proc
+/mob/proc/visible_emote(var/act_desc)
+ custom_emote(1, act_desc)
+
+/mob/proc/audible_emote(var/act_desc)
+ custom_emote(2, act_desc)
+
/mob/proc/emote_dead(var/message)
if(client.prefs.muted & MUTE_DEADCHAT)
diff --git a/code/modules/mob/freelook/mask/chunk.dm b/code/modules/mob/freelook/mask/chunk.dm
index f98a9b936b..b540a8023b 100644
--- a/code/modules/mob/freelook/mask/chunk.dm
+++ b/code/modules/mob/freelook/mask/chunk.dm
@@ -25,10 +25,10 @@
/mob/living/silicon/seen_cult_turfs()
return list()
-/mob/living/simple_animal/seen_cult_turfs()
+/mob/living/simple_mob/seen_cult_turfs()
return seen_turfs_in_range(src, 1)
-/mob/living/simple_animal/shade/narsie/seen_cult_turfs()
+/mob/living/simple_mob/construct/shade/seen_cult_turfs()
return view(2, src)
/proc/seen_turfs_in_range(var/source, var/range)
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 1e862472a2..e7c097c2b3 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -78,6 +78,12 @@
var/turf/source = speaker? get_turf(speaker) : get_turf(src)
src.playsound_local(source, speech_sound, sound_vol, 1)
+// Done here instead of on_hear_say() since that is NOT called if the mob is clientless (which includes most AI mobs).
+/mob/living/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
+ ..()
+ if(has_AI()) // Won't happen if no ai_holder exists or there's a player inside w/o autopilot active.
+ ai_holder.on_hear_say(speaker, message)
+
/mob/proc/on_hear_say(var/message)
to_chat(src, message)
if(teleop)
@@ -158,17 +164,10 @@
if(!(language && (language.flags & INNATE))) // skip understanding checks for INNATE languages
if(!say_understands(speaker,language))
- if(istype(speaker,/mob/living/simple_animal))
- var/mob/living/simple_animal/S = speaker
- if(S.speak && S.speak.len)
- message = pick(S.speak)
- else
- return
+ if(language)
+ message = language.scramble(message)
else
- if(language)
- message = language.scramble(message)
- else
- message = stars(message)
+ message = stars(message)
if(hard_to_hear)
message = stars(message)
diff --git a/code/modules/mob/language/outsider.dm b/code/modules/mob/language/outsider.dm
index fdd719df89..de78a9c1b5 100644
--- a/code/modules/mob/language/outsider.dm
+++ b/code/modules/mob/language/outsider.dm
@@ -27,16 +27,16 @@
/datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
- var/mob/living/simple_animal/borer/B
+ var/mob/living/simple_mob/animal/borer/B
if(istype(speaker,/mob/living/carbon))
var/mob/living/carbon/M = speaker
B = M.has_brain_worms()
- else if(istype(speaker,/mob/living/simple_animal/borer))
+ else if(istype(speaker,/mob/living/simple_mob/animal/borer))
B = speaker
if(B)
- speaker_mask = B.truename
+ speaker_mask = B.true_name
..(speaker,message,speaker_mask)
/datum/language/vox
diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm
index ba8c0945f0..23008d126a 100644
--- a/code/modules/mob/living/bot/secbot.dm
+++ b/code/modules/mob/living/bot/secbot.dm
@@ -215,7 +215,7 @@
else
if(declare_arrests)
var/action = arrest_type ? "detaining" : "arresting"
- if(istype(target, /mob/living/simple_animal))
+ if(istype(target, /mob/living/simple_mob))
action = "fighting"
global_announcer.autosay("[src] is [action] a level [threat] [action != "fighting" ? "suspect" : "threat"] [target_name(target)] in [get_area(src)].", "[src]", "Security")
UnarmedAttack(target)
@@ -269,8 +269,8 @@
C.handcuffed = new /obj/item/weapon/handcuffs(C)
C.update_inv_handcuffed()
busy = 0
- else if(istype(M, /mob/living/simple_animal))
- var/mob/living/simple_animal/S = M
+ else if(istype(M, /mob/living/simple_mob))
+ var/mob/living/simple_mob/S = M
S.Weaken(xeno_stun_strength)
S.adjustBruteLoss(xeno_harm_strength)
do_attack_animation(M)
@@ -286,8 +286,8 @@
/mob/living/bot/secbot/slime/UnarmedAttack(var/mob/living/L, var/proximity)
..()
- if(istype(L, /mob/living/simple_animal/slime))
- var/mob/living/simple_animal/slime/S = L
+ if(istype(L, /mob/living/simple_mob/slime/xenobio))
+ var/mob/living/simple_mob/slime/xenobio/S = L
S.adjust_discipline(2)
diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
index 585b421c7f..aea0054418 100644
--- a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
+++ b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
@@ -63,5 +63,5 @@
if(istype(M))
for(var/atom/A in M.contents)
- if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
+ if(istype(A,/mob/living/simple_mob/animal/borer) || istype(A,/obj/item/weapon/holder))
return
diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm
index 7165c36fa8..561dd0c139 100644
--- a/code/modules/mob/living/carbon/brain/brain.dm
+++ b/code/modules/mob/living/carbon/brain/brain.dm
@@ -46,7 +46,7 @@
return 1
if (istype(other, /mob/living/carbon/human))
return 1
- if (istype(other, /mob/living/simple_animal/slime))
+ if (istype(other, /mob/living/simple_mob/slime))
return 1
return ..()
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index b631e8ae13..4ab220083d 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -76,7 +76,6 @@
if(ingested) ingested.metabolize()
if(bloodstr) bloodstr.metabolize()
- AdjustConfused(-1)
// decrement dizziness counter, clamped to 0
if(resting)
dizziness = max(0, dizziness - 5)
diff --git a/code/modules/mob/living/carbon/carbon_powers.dm b/code/modules/mob/living/carbon/carbon_powers.dm
index f1360504ef..337f0b0ff1 100644
--- a/code/modules/mob/living/carbon/carbon_powers.dm
+++ b/code/modules/mob/living/carbon/carbon_powers.dm
@@ -5,7 +5,7 @@
set name = "Release Control"
set desc = "Release control of your host's body."
- var/mob/living/simple_animal/borer/B = has_brain_worms()
+ var/mob/living/simple_mob/animal/borer/B = has_brain_worms()
if(B && B.host_brain)
src << "You withdraw your probosci, releasing control of [B.host_brain]"
@@ -25,7 +25,7 @@
set name = "Torment host"
set desc = "Punish your host with agony."
- var/mob/living/simple_animal/borer/B = has_brain_worms()
+ var/mob/living/simple_mob/animal/borer/B = has_brain_worms()
if(!B)
return
@@ -43,7 +43,7 @@
set name = "Reproduce"
set desc = "Spawn several young."
- var/mob/living/simple_animal/borer/B = has_brain_worms()
+ var/mob/living/simple_mob/animal/borer/B = has_brain_worms()
if(!B)
return
@@ -55,7 +55,7 @@
B.has_reproduced = 1
vomit(1)
- new /mob/living/simple_animal/borer(get_turf(src))
+ new /mob/living/simple_mob/animal/borer(get_turf(src))
else
src << "You do not have enough chemicals stored to reproduce."
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 24a5bac586..2244cdac51 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -61,11 +61,11 @@
//Handle brain slugs.
var/obj/item/organ/external/Hd = get_organ(BP_HEAD)
- var/mob/living/simple_animal/borer/B
+ var/mob/living/simple_mob/animal/borer/B
if(Hd)
for(var/I in Hd.implants)
- if(istype(I,/mob/living/simple_animal/borer))
+ if(istype(I,/mob/living/simple_mob/animal/borer))
B = I
if(B)
if(!B.ckey && ckey && B.controlling)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index c5f259e0b4..57cb8d0f58 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -135,6 +135,27 @@ emp_act
return siemens_coefficient
+// Similar to above but is for the mob's overall protection, being the average of all slots.
+/mob/living/carbon/human/proc/get_siemens_coefficient_average()
+ var/siemens_value = 0
+ var/total = 0
+ for(var/organ_name in organs_by_name)
+ if(organ_name in organ_rel_size)
+ var/obj/item/organ/external/organ = organs_by_name[organ_name]
+ if(organ)
+ var/weight = organ_rel_size[organ_name]
+ siemens_value += get_siemens_coefficient_organ(organ) * weight
+ total += weight
+
+ if(fire_stacks < 0) // Water makes you more conductive.
+ siemens_value *= 1.5
+
+ return (siemens_value/max(total, 1))
+
+// Returns a number between 0 to 1, with 1 being total protection.
+/mob/living/carbon/human/get_shock_protection()
+ return between(0, 1-get_siemens_coefficient_average(), 1)
+
// Returns a list of clothing that is currently covering def_zone.
/mob/living/carbon/human/proc/get_clothing_list_organ(var/obj/item/organ/external/def_zone, var/type)
var/list/results = list()
@@ -542,6 +563,20 @@ emp_act
return perm
+// This is for preventing harm by being covered in water, which only prometheans need to deal with.
+// This is not actually used for now since the code for prometheans gets changed a lot.
+/mob/living/carbon/human/get_water_protection()
+ var/protection = ..() // Todo: Replace with species var later.
+ if(protection == 1) // No point doing permeability checks if it won't matter.
+ return protection
+ // Wearing clothing with a low permeability_coefficient can protect from water.
+
+ var/converted_protection = 1 - protection
+ var/perm = reagent_permeability()
+ converted_protection *= perm
+ return 1-converted_protection
+
+
/mob/living/carbon/human/shank_attack(obj/item/W, obj/item/weapon/grab/G, mob/user, hit_zone)
if(!..())
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 2589b1c9da..24a63bf1a4 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -42,6 +42,16 @@
if(cloaker.active)
cloaker.deactivate()
+/mob/living/carbon/human/is_cloaked()
+ if(mind && mind.changeling && mind.changeling.cloaked) // Ling camo.
+ return TRUE
+ else if(istype(back, /obj/item/weapon/rig)) //Ninja cloak
+ var/obj/item/weapon/rig/suit = back
+ for(var/obj/item/rig_module/stealth_field/cloaker in suit.installed_modules)
+ if(cloaker.active)
+ return TRUE
+ return ..()
+
/mob/living/carbon/human/get_ear_protection()
var/sum = 0
if(istype(l_ear, /obj/item/clothing/ears))
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 8a4fe6a18b..e9cbc80d95 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1047,8 +1047,6 @@
sleeping += 1
Paralyse(5)
- confused = max(0, confused - 1)
-
// If you're dirty, your gloves will become dirty, too.
if(gloves && germ_level > gloves.germ_level && prob(10))
gloves.germ_level += 1
@@ -1602,7 +1600,7 @@
else if(foundVirus)
holder.icon_state = "hudill"
else if(has_brain_worms())
- var/mob/living/simple_animal/borer/B = has_brain_worms()
+ var/mob/living/simple_mob/animal/borer/B = has_brain_worms()
if(B.controlling)
holder.icon_state = "hudbrainworm"
else
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index d42c26880b..7f0e42e599 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -64,7 +64,7 @@
return 1
if (istype(other, /mob/living/carbon/brain))
return 1
- if (istype(other, /mob/living/simple_animal/slime))
+ if (istype(other, /mob/living/simple_mob/slime))
return 1
//This is already covered by mob/say_understands()
diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm
index b78d530707..1a24ad9e1b 100644
--- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm
+++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm
@@ -116,7 +116,7 @@ var/datum/species/shapeshifter/promethean/prometheans
/datum/species/shapeshifter/promethean/equip_survival_gear(var/mob/living/carbon/human/H)
var/boxtype = pick(typesof(/obj/item/weapon/storage/toolbox/lunchbox))
var/obj/item/weapon/storage/toolbox/lunchbox/L = new boxtype(get_turf(H))
- var/mob/living/simple_animal/mouse/mouse = new (L)
+ var/mob/living/simple_mob/animal/passive/mouse/mouse = new (L)
var/obj/item/weapon/holder/holder = new (L)
mouse.forceMove(holder)
holder.sync(mouse)
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index a5da193678..17d6b693d4 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -1,5 +1,6 @@
/mob/living/death()
clear_fullscreens()
+<<<<<<< HEAD
reveal(TRUE) //Silently reveal the mob if they were hidden.
//VOREStation Edit - Mob spawner stuff
if(source_spawner)
@@ -7,6 +8,11 @@
source_spawner = null
//VOREStation Edit End
. = ..()
+=======
+
+ if(ai_holder)
+ ai_holder.go_sleep()
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
if(nest) //Ew.
if(istype(nest, /obj/structure/prop/nest))
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 02131c8cd0..24d56945b8 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -110,6 +110,7 @@
handle_silent()
handle_drugged()
handle_slurring()
+ handle_confused()
/mob/living/proc/handle_stunned()
if(stunned)
@@ -146,6 +147,11 @@
AdjustParalysis(-1)
return paralysis
+/mob/living/proc/handle_confused()
+ if(confused)
+ AdjustConfused(-1)
+ return confused
+
/mob/living/proc/handle_disabilities()
//Eyes
if(sdisabilities & BLIND || stat) //blindness from disability or unconsciousness doesn't get better on its own
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 3bcfbe7b60..3a65cb2d2d 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -16,6 +16,8 @@
dsma.blend_mode = BLEND_ADD
dsoverlay.appearance = dsma
+ selected_image = image(icon = 'icons/mob/screen1.dmi', loc = src, icon_state = "centermarker")
+
/mob/living/Destroy()
dsoverlay.loc = null //I'll take my coat with me
dsoverlay = null
@@ -29,6 +31,7 @@
nest = null
if(buckled)
buckled.unbuckle_mob(src, TRUE)
+ qdel(selected_image)
return ..()
//mob verbs are faster than object verbs. See mob/verb/examine.
@@ -550,6 +553,36 @@ default behaviour is:
// ++++ROCKDTBEN++++ MOB PROCS //END
+// Applies direct "cold" damage while checking protection against the cold.
+/mob/living/proc/inflict_cold_damage(amount)
+ amount *= 1 - get_cold_protection(50) // Within spacesuit protection.
+ if(amount > 0)
+ adjustFireLoss(amount)
+
+// Ditto, but for "heat".
+/mob/living/proc/inflict_heat_damage(amount)
+ amount *= 1 - get_heat_protection(10000) // Within firesuit protection.
+ if(amount > 0)
+ adjustFireLoss(amount)
+
+// and one for electricity because why not
+/mob/living/proc/inflict_shock_damage(amount)
+ electrocute_act(amount, null, 1 - get_shock_protection())
+
+// also one for water (most things resist it entirely, except for slimes)
+/mob/living/proc/inflict_water_damage(amount)
+ amount *= 1 - get_water_protection()
+ if(amount > 0)
+ adjustToxLoss(amount)
+
+// one for abstracted away ""poison"" (mostly because simplemobs shouldn't handle reagents)
+/mob/living/proc/inflict_poison_damage(amount)
+ if(isSynthetic())
+ return
+ amount *= 1 - get_poison_protection()
+ if(amount > 0)
+ adjustToxLoss(amount)
+
/mob/proc/get_contents()
@@ -663,6 +696,8 @@ default behaviour is:
BITSET(hud_updateflag, LIFE_HUD)
ExtinguishMob()
fire_stacks = 0
+ if(ai_holder) // AI gets told to sleep when killed. Since they're not dead anymore, wake it up.
+ ai_holder.go_wake()
/mob/living/proc/rejuvenate()
if(reagents)
@@ -891,7 +926,7 @@ default behaviour is:
// Update whether or not this mob needs to pass emotes to contents.
for(var/atom/A in M.contents)
- if(istype(A,/mob/living/simple_animal/borer) || istype(A,/obj/item/weapon/holder))
+ if(istype(A,/mob/living/simple_mob/animal/borer) || istype(A,/obj/item/weapon/holder))
return
else if(istype(H.loc,/obj/item/clothing/accessory/holster))
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 08d35e5de2..23507d88bc 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -92,6 +92,13 @@
/mob/living/proc/getsoak(var/def_zone, var/type)
return 0
+// Clicking with an empty hand
+/mob/living/attack_hand(mob/living/L)
+ ..()
+ if(istype(L) && L.a_intent != I_HELP)
+ if(ai_holder) // Using disarm, grab, or harm intent is considered a hostile action to the mob's AI.
+ ai_holder.react_to_attack(L)
+
/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone)
//Being hit while using a deadman switch
@@ -102,6 +109,9 @@
src.visible_message("[src] triggers their deadman's switch!")
signaler.signal()
+ if(ai_holder && P.firer)
+ ai_holder.react_to_attack(P.firer)
+
//Armor
var/soaked = get_armor_soak(def_zone, P.check_armour, P.armor_penetration)
var/absorb = run_armor_check(def_zone, P.check_armour, P.armor_penetration)
@@ -267,6 +277,8 @@
var/client/assailant = M.client
if(assailant)
add_attack_logs(M,src,"Hit by thrown [O.name]")
+ if(ai_holder)
+ ai_holder.react_to_attack(O.thrower)
// Begin BS12 momentum-transfer code.
var/mass = 1.5
@@ -324,12 +336,13 @@
// End BS12 momentum-transfer code.
/mob/living/attack_generic(var/mob/user, var/damage, var/attack_message)
-
if(!damage)
return
adjustBruteLoss(damage)
- add_attack_logs(user,src,"Generic attack (probably animal)", admin_notify = FALSE) //Usually due to simple_animal attacks
+ add_attack_logs(user,src,"Generic attack (probably animal)", admin_notify = FALSE) //Usually due to simple_mob attacks
+ if(ai_holder)
+ ai_holder.react_to_attack(user)
src.visible_message("[user] has [attack_message] [src]!")
user.do_attack_animation(src)
spawn(1) updatehealth()
@@ -412,6 +425,15 @@
/mob/living/proc/get_heat_protection()
return 0
+/mob/living/proc/get_shock_protection()
+ return 0
+
+/mob/living/proc/get_water_protection()
+ return 1 // Water won't hurt most things.
+
+/mob/living/proc/get_poison_protection()
+ return 0
+
//Finds the effective temperature that the mob is burning at.
/mob/living/proc/fire_burn_temperature()
if (fire_stacks <= 0)
@@ -421,6 +443,15 @@
//lower limit of 700 K, same as matches and roughly the temperature of a cool flame.
return max(2.25*round(FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE*(fire_stacks/FIRE_MAX_FIRESUIT_STACKS)**2), 700)
+// Called when struck by lightning.
+/mob/living/proc/lightning_act()
+ // The actual damage/electrocution is handled by the tesla_zap() that accompanies this.
+ Paralyse(5)
+ stuttering += 20
+ make_jittery(150)
+ emp_act(1)
+ to_chat(src, span("critical", "You've been struck by lightning!"))
+
/mob/living/proc/reagent_permeability()
return 1
return round(FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE*(fire_stacks/FIRE_MAX_FIRESUIT_STACKS)**2)
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 9486eb9960..8e3b9fb9a4 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -5,6 +5,8 @@
var/maxHealth = 100 //Maximum health that should be possible. Avoid adjusting this if you can, and instead use modifiers datums.
var/health = 100 //A mob's health
+ var/mob_class = null // A mob's "class", e.g. human, mechanical, animal, etc. Used for certain projectile effects. See __defines/mob.dm for available classes.
+
var/hud_updateflag = 0
//Damage related vars, NOTE: THESE SHOULD ONLY BE MODIFIED BY PROCS
@@ -20,6 +22,7 @@
var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm
var/last_special = 0 //Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out.
+ var/base_attack_cooldown = DEFAULT_ATTACK_COOLDOWN
var/t_phoron = null
var/t_oxygen = null
@@ -64,4 +67,5 @@
var/makes_dirt = TRUE //FALSE if the mob shouldn't be making dirt on the ground when it walks
var/looking_elsewhere = FALSE //If the mob's view has been relocated to somewhere else, like via a camera or with binocs
-
\ No newline at end of file
+
+ var/image/selected_image = null // Used for buildmode AI control stuff.
\ No newline at end of file
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index 275e88be08..96d59dc330 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -8,4 +8,9 @@
update_antag_icons(mind)
client.screen |= global_hud.darksight
client.images |= dsoverlay
+
+ if(ai_holder && !ai_holder.autopilot)
+ ai_holder.go_sleep()
+ to_chat(src,"Mob AI disabled while you are controlling the mob.")
+
return .
diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm
index 577221a03e..fa04b0b317 100644
--- a/code/modules/mob/living/logout.dm
+++ b/code/modules/mob/living/logout.dm
@@ -1,6 +1,11 @@
/mob/living/Logout()
..()
- if (mind)
+ if (mind)
//Per BYOND docs key remains set if the player DCs, becomes null if switching bodies.
- if(!key) //key and mind have become seperated.
+ if(!key) //key and mind have become seperated.
mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body.
+
+ spawn(15 SECONDS) //15 seconds to get back into the mob before it goes wild
+ if(src && !src.client)
+ if(ai_holder)
+ ai_holder.go_wake()
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index ac78f5aab9..20087b19bb 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -344,7 +344,7 @@
var/grabbed_something = 0
for(var/mob/M in T)
- if(istype(M,/mob/living/simple_animal/lizard) || istype(M,/mob/living/simple_animal/mouse))
+ if(istype(M,/mob/living/simple_mob/animal/passive/lizard) || istype(M,/mob/living/simple_mob/animal/passive/mouse))
src.loc.visible_message("[src.loc] sucks [M] into its decompiler. There's a horrible crunching noise.","It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises.")
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
qdel(M)
diff --git a/code/modules/mob/living/simple_animal/aliens/faithless.dm b/code/modules/mob/living/simple_animal/aliens/faithless.dm
index af2e7da48d..3b5e520fcd 100644
--- a/code/modules/mob/living/simple_animal/aliens/faithless.dm
+++ b/code/modules/mob/living/simple_animal/aliens/faithless.dm
@@ -72,7 +72,6 @@
melee_damage_lower = 13
melee_damage_upper = 28
-
/mob/living/simple_animal/hostile/faithless/strong/cult
faction = "cult"
supernatural = 1
diff --git a/code/modules/mob/living/simple_animal/aliens/hivebot.dm b/code/modules/mob/living/simple_animal/aliens/hivebot.dm
index e322198815..6d53b30cfa 100644
--- a/code/modules/mob/living/simple_animal/aliens/hivebot.dm
+++ b/code/modules/mob/living/simple_animal/aliens/hivebot.dm
@@ -1,6 +1,6 @@
// Hivebots are tuned towards how many default lasers are needed to kill them.
// As such, if laser damage is ever changed, you should change this define.
-#define LASERS_TO_KILL *30
+#define LASERS_TO_KILL * 40
// Default hivebot is melee, and a bit more meaty, so it can meatshield for their ranged friends.
/mob/living/simple_animal/hostile/hivebot
@@ -238,3 +238,5 @@
/obj/item/projectile/bullet/hivebot
damage = 10
damage_type = BRUTE
+
+#undef LASERS_TO_KILL
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/animals/cat.dm b/code/modules/mob/living/simple_animal/animals/cat.dm
index 8877ea8959..30d23e0105 100644
--- a/code/modules/mob/living/simple_animal/animals/cat.dm
+++ b/code/modules/mob/living/simple_animal/animals/cat.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//Cat
/mob/living/simple_animal/cat
name = "cat"
@@ -202,3 +203,203 @@
/obj/item/weapon/holder/cat/kitten
icon_state = "kitten"
w_class = ITEMSIZE_SMALL
+=======
+//Cat
+/mob/living/simple_animal/cat
+ name = "cat"
+ desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers."
+ tt_desc = "E Felis silvestris catus"
+ intelligence_level = SA_ANIMAL
+ icon_state = "cat2"
+ item_state = "cat2"
+ icon_living = "cat2"
+ icon_dead = "cat2_dead"
+ icon_rest = "cat2_rest"
+
+ investigates = 1
+ specific_targets = 1 //Only targets with Found()
+ run_at_them = 0 //DOMESTICATED
+ view_range = 5
+
+ turns_per_move = 5
+ see_in_dark = 6
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
+
+ min_oxy = 16 //Require atleast 16kPA oxygen
+ minbodytemp = 223 //Below -50 Degrees Celcius
+ maxbodytemp = 323 //Above 50 Degrees Celcius
+
+ holder_type = /obj/item/weapon/holder/cat
+ mob_size = MOB_SMALL
+
+ has_langs = list("Cat")
+ speak_chance = 1
+ speak = list("Meow!","Esp!","Purr!","HSSSSS")
+ speak_emote = list("purrs", "meows")
+ emote_hear = list("meows","mews")
+ emote_see = list("shakes their head", "shivers")
+ say_maybe_target = list("Meow?","Mew?","Mao?")
+ say_got_target = list("MEOW!","HSSSS!","REEER!")
+
+ meat_amount = 1
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ var/turns_since_scan = 0
+ var/mob/flee_target
+
+/mob/living/simple_animal/cat/Life()
+ . = ..()
+ if(!.) return
+
+ if(prob(2)) //spooky
+ var/mob/observer/dead/spook = locate() in range(src,5)
+ if(spook)
+ var/turf/T = spook.loc
+ var/list/visible = list()
+ for(var/obj/O in T.contents)
+ if(!O.invisibility && O.name)
+ visible += O
+ if(visible.len)
+ var/atom/A = pick(visible)
+ visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].")
+
+ handle_flee_target()
+
+/mob/living/simple_animal/cat/PunchTarget()
+ if(ismouse(target_mob))
+ var/mob/living/simple_mob/animal/passive/mouse/mouse = target_mob
+ mouse.splat()
+ visible_emote(pick("bites \the [mouse]!","toys with \the [mouse].","chomps on \the [mouse]!"))
+ return mouse
+ else
+ ..()
+
+/mob/living/simple_animal/cat/Found(var/atom/found_atom)
+ if(ismouse(found_atom) && SA_attackable(found_atom))
+ return found_atom
+
+/mob/living/simple_animal/cat/proc/handle_flee_target()
+ //see if we should stop fleeing
+ if (flee_target && !(flee_target in ListTargets(view_range)))
+ flee_target = null
+ GiveUpMoving()
+
+ if (flee_target && !stat && !buckled)
+ if (resting)
+ lay_down()
+ if(prob(25)) say("HSSSSS")
+ stop_automated_movement = 1
+ walk_away(src, flee_target, 7, 2)
+
+/mob/living/simple_animal/cat/react_to_attack(var/atom/A)
+ if(A == src) return
+ flee_target = A
+ turns_since_scan = 5
+
+/mob/living/simple_animal/cat/ex_act()
+ . = ..()
+ react_to_attack(src.loc)
+
+//Basic friend AI
+/mob/living/simple_animal/cat/fluff
+ var/mob/living/carbon/human/friend
+ var/befriend_job = null
+
+/mob/living/simple_animal/cat/fluff/Life()
+ . = ..()
+ if(!. || ai_inactive || !friend) return
+
+ var/friend_dist = get_dist(src,friend)
+
+ if (friend_dist <= 4)
+ if(stance == STANCE_IDLE)
+ if(set_follow(friend))
+ handle_stance(STANCE_FOLLOW)
+
+ if (friend_dist <= 1)
+ if (friend.stat >= DEAD || friend.health <= config.health_threshold_softcrit)
+ if (prob((friend.stat < DEAD)? 50 : 15))
+ var/verb = pick("meows", "mews", "mrowls")
+ audible_emote(pick("[verb] in distress.", "[verb] anxiously."))
+ else
+ if (prob(5))
+ visible_emote(pick("nuzzles [friend].",
+ "brushes against [friend].",
+ "rubs against [friend].",
+ "purrs."))
+ else if (friend.health <= 50)
+ if (prob(10))
+ var/verb = pick("meows", "mews", "mrowls")
+ audible_emote("[verb] anxiously.")
+
+/mob/living/simple_animal/cat/fluff/verb/become_friends()
+ set name = "Become Friends"
+ set category = "IC"
+ set src in view(1)
+
+ if(!friend)
+ var/mob/living/carbon/human/H = usr
+ if(istype(H) && (!befriend_job || H.job == befriend_job))
+ friend = usr
+ . = 1
+ else if(usr == friend)
+ . = 1 //already friends, but show success anyways
+
+ if(.)
+ set_dir(get_dir(src, friend))
+ visible_emote(pick("nuzzles [friend].",
+ "brushes against [friend].",
+ "rubs against [friend].",
+ "purrs."))
+ else
+ usr << "[src] ignores you."
+ return
+
+//RUNTIME IS ALIVE! SQUEEEEEEEE~
+/mob/living/simple_animal/cat/fluff/Runtime
+ name = "Runtime"
+ desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
+ tt_desc = "E Felis silvestris medicalis" //a hypoallergenic breed produced by NT for... medical purposes? Sure.
+ gender = FEMALE
+ icon_state = "cat"
+ item_state = "cat"
+ icon_living = "cat"
+ icon_dead = "cat_dead"
+ icon_rest = "cat_rest"
+ befriend_job = "Chief Medical Officer"
+
+/mob/living/simple_animal/cat/kitten
+ name = "kitten"
+ desc = "D'aaawwww"
+ icon_state = "kitten"
+ item_state = "kitten"
+ icon_living = "kitten"
+ icon_dead = "kitten_dead"
+ gender = NEUTER
+
+// Leaving this here for now.
+/obj/item/weapon/holder/cat/fluff/bones
+ name = "Bones"
+ desc = "It's Bones! Meow."
+ gender = MALE
+ icon_state = "cat3"
+
+/mob/living/simple_animal/cat/fluff/bones
+ name = "Bones"
+ desc = "That's Bones the cat. He's a laid back, black cat. Meow."
+ gender = MALE
+ icon_state = "cat3"
+ item_state = "cat3"
+ icon_living = "cat3"
+ icon_dead = "cat3_dead"
+ icon_rest = "cat3_rest"
+ holder_type = /obj/item/weapon/holder/cat/fluff/bones
+ var/friend_name = "Erstatz Vryroxes"
+
+/mob/living/simple_animal/cat/kitten/New()
+ gender = pick(MALE, FEMALE)
+ ..()
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
diff --git a/code/modules/mob/living/simple_animal/animals/corgi.dm b/code/modules/mob/living/simple_animal/animals/corgi.dm
index 33bda8b2e0..6cc1f80523 100644
--- a/code/modules/mob/living/simple_animal/animals/corgi.dm
+++ b/code/modules/mob/living/simple_animal/animals/corgi.dm
@@ -207,6 +207,7 @@
set_dir(i)
sleep(1)
+
//Technically this should be like, its own file or something or a subset of dog but whatever. Not a coder.
/mob/living/simple_animal/corgi/tamaskan
name = "tamaskan"
diff --git a/code/modules/mob/living/simple_animal/animals/mouse.dm b/code/modules/mob/living/simple_animal/animals/mouse.dm
index bf5d03c52c..370001a7ca 100644
--- a/code/modules/mob/living/simple_animal/animals/mouse.dm
+++ b/code/modules/mob/living/simple_animal/animals/mouse.dm
@@ -16,10 +16,10 @@
see_in_dark = 6
universal_understand = 1
- mob_size = MOB_MINISCULE
+ mob_size = MOB_SMALL
pass_flags = PASSTABLE
- can_pull_size = ITEMSIZE_TINY
- can_pull_mobs = MOB_PULL_NONE
+// can_pull_size = ITEMSIZE_TINY
+// can_pull_mobs = MOB_PULL_NONE
layer = MOB_LAYER
density = 0
diff --git a/code/modules/mob/living/simple_animal/animals/spiderbot.dm b/code/modules/mob/living/simple_animal/animals/spiderbot.dm
index b76351b976..9145e1923f 100644
--- a/code/modules/mob/living/simple_animal/animals/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/animals/spiderbot.dm
@@ -46,7 +46,7 @@
/obj/item/device/radio/borg,
/obj/item/weapon/holder,
/obj/machinery/camera,
- /mob/living/simple_animal/borer,
+ /mob/living/simple_mob/animal/borer,
/obj/item/device/mmi,
)
diff --git a/code/modules/mob/living/simple_animal/borer/borer.dm b/code/modules/mob/living/simple_animal/borer/borer.dm
index e4add4d749..43edd45602 100644
--- a/code/modules/mob/living/simple_animal/borer/borer.dm
+++ b/code/modules/mob/living/simple_animal/borer/borer.dm
@@ -1,4 +1,4 @@
-/mob/living/simple_animal/borer
+/mob/living/simple_mob/animal/borer
name = "cortical borer"
real_name = "cortical borer"
desc = "A small, quivering sluglike creature."
@@ -35,15 +35,15 @@
can_be_antagged = TRUE
-/mob/living/simple_animal/borer/roundstart
+/mob/living/simple_mob/animal/borer/roundstart
roundstart = 1
-/mob/living/simple_animal/borer/Login()
+/mob/living/simple_mob/animal/borer/Login()
..()
if(mind)
borers.add_antagonist(mind)
-/mob/living/simple_animal/borer/New()
+/mob/living/simple_mob/animal/borer/New()
..()
add_language("Cortical Link")
@@ -53,7 +53,7 @@
truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]"
if(!roundstart) request_player()
-/mob/living/simple_animal/borer/Life()
+/mob/living/simple_mob/animal/borer/Life()
..()
@@ -91,7 +91,7 @@
if(prob(host.brainloss/20))
host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]")
-/mob/living/simple_animal/borer/Stat()
+/mob/living/simple_mob/animal/borer/Stat()
..()
statpanel("Status")
@@ -103,7 +103,7 @@
if (client.statpanel == "Status")
stat("Chemicals", chemicals)
-/mob/living/simple_animal/borer/proc/detatch()
+/mob/living/simple_mob/animal/borer/proc/detatch()
if(!host || !controlling) return
@@ -154,7 +154,7 @@
qdel(host_brain)
-/mob/living/simple_animal/borer/proc/leave_host()
+/mob/living/simple_mob/animal/borer/proc/leave_host()
if(!host) return
@@ -172,7 +172,7 @@
return
//Procs for grabbing players.
-/mob/living/simple_animal/borer/proc/request_player()
+/mob/living/simple_mob/animal/borer/proc/request_player()
for(var/mob/observer/dead/O in player_list)
if(jobban_isbanned(O, "Borer"))
continue
@@ -180,7 +180,7 @@
if(O.client.prefs.be_special & BE_ALIEN)
question(O.client)
-/mob/living/simple_animal/borer/proc/question(var/client/C)
+/mob/living/simple_mob/animal/borer/proc/question(var/client/C)
spawn(0)
if(!C) return
var/response = alert(C, "A cortical borer needs a player. Are you interested?", "Cortical borer request", "Yes", "No", "Never for this round")
@@ -191,7 +191,7 @@
else if (response == "Never for this round")
C.prefs.be_special ^= BE_ALIEN
-/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate)
+/mob/living/simple_mob/animal/borer/proc/transfer_personality(var/client/candidate)
if(!candidate || !candidate.mob || !candidate.mob.mind)
return
@@ -209,5 +209,5 @@
your host and your eventual spawn safe and warm."
src << "You can speak to your victim with say, to other borers with say :x, and use your Abilities tab to access powers."
-/mob/living/simple_animal/borer/cannot_use_vents()
+/mob/living/simple_mob/animal/borer/cannot_use_vents()
return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/borer/borer_captive.dm b/code/modules/mob/living/simple_animal/borer/borer_captive.dm
index c34dca00e8..2e5af8be9a 100644
--- a/code/modules/mob/living/simple_animal/borer/borer_captive.dm
+++ b/code/modules/mob/living/simple_animal/borer/borer_captive.dm
@@ -10,7 +10,7 @@
src << "You cannot speak in IC (muted)."
return
- if(istype(src.loc,/mob/living/simple_animal/borer))
+ if(istype(src.loc,/mob/living/simple_mob/animal/borer))
message = sanitize(message)
if (!message)
@@ -19,7 +19,7 @@
if (stat == 2)
return say_dead(message)
- var/mob/living/simple_animal/borer/B = src.loc
+ var/mob/living/simple_mob/animal/borer/B = src.loc
src << "You whisper silently, \"[message]\""
B.host << "The captive mind of [src] whispers, \"[message]\""
@@ -34,8 +34,8 @@
/mob/living/captive_brain/process_resist()
//Resisting control by an alien mind.
- if(istype(src.loc,/mob/living/simple_animal/borer))
- var/mob/living/simple_animal/borer/B = src.loc
+ if(istype(src.loc,/mob/living/simple_mob/animal/borer))
+ var/mob/living/simple_mob/animal/borer/B = src.loc
var/mob/living/captive_brain/H = src
H << "You begin doggedly resisting the parasite's control (this will take approximately sixty seconds)."
diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm
index b75da20cc4..c12736a307 100644
--- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm
+++ b/code/modules/mob/living/simple_animal/borer/borer_powers.dm
@@ -1,4 +1,4 @@
-/mob/living/simple_animal/borer/verb/release_host()
+/mob/living/simple_mob/animal/borer/verb/release_host()
set category = "Abilities"
set name = "Release Host"
set desc = "Slither out of your host."
@@ -38,7 +38,7 @@
detatch()
leave_host()
-/mob/living/simple_animal/borer/verb/infest()
+/mob/living/simple_mob/animal/borer/verb/infest()
set category = "Abilities"
set name = "Infest"
set desc = "Infest a suitable humanoid host."
@@ -126,7 +126,7 @@
return
/*
-/mob/living/simple_animal/borer/verb/devour_brain()
+/mob/living/simple_mob/animal/borer/verb/devour_brain()
set category = "Abilities"
set name = "Devour Brain"
set desc = "Take permanent control of a dead host."
@@ -152,7 +152,7 @@
*/
// BRAIN WORM ZOMBIES AAAAH.
-/mob/living/simple_animal/borer/proc/replace_brain()
+/mob/living/simple_mob/animal/borer/proc/replace_brain()
var/mob/living/carbon/human/H = host
@@ -198,7 +198,7 @@
if(!H.lastKnownIP)
H.lastKnownIP = s2h_ip
-/mob/living/simple_animal/borer/verb/secrete_chemicals()
+/mob/living/simple_mob/animal/borer/verb/secrete_chemicals()
set category = "Abilities"
set name = "Secrete Chemicals"
set desc = "Push some chemicals into your host's bloodstream."
@@ -226,7 +226,7 @@
host.reagents.add_reagent(chem, 10)
chemicals -= 50
-/mob/living/simple_animal/borer/verb/dominate_victim()
+/mob/living/simple_mob/animal/borer/verb/dominate_victim()
set category = "Abilities"
set name = "Paralyze Victim"
set desc = "Freeze the limbs of a potential host with supernatural fear."
@@ -266,7 +266,7 @@
used_dominate = world.time
-/mob/living/simple_animal/borer/verb/bond_brain()
+/mob/living/simple_mob/animal/borer/verb/bond_brain()
set category = "Abilities"
set name = "Assume Control"
set desc = "Fully connect to the brain of your host."
@@ -335,20 +335,3 @@
host.verbs += /mob/living/carbon/proc/spawn_larvae
return
-
-/mob/living/carbon/human/proc/jumpstart()
- set category = "Abilities"
- set name = "Revive Host"
- set desc = "Send a jolt of electricity through your host, reviving them."
-
- if(stat != 2)
- usr << "Your host is already alive."
- return
-
- verbs -= /mob/living/carbon/human/proc/jumpstart
- visible_message("With a hideous, rattling moan, [src] shudders back to life!")
-
- rejuvenate()
- restore_blood()
- fixblood()
- update_canmove()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/borer/say.dm b/code/modules/mob/living/simple_animal/borer/say.dm
index 440dfa7ff7..f4c12a7458 100644
--- a/code/modules/mob/living/simple_animal/borer/say.dm
+++ b/code/modules/mob/living/simple_animal/borer/say.dm
@@ -1,4 +1,4 @@
-/mob/living/simple_animal/borer/say(var/message)
+/mob/living/simple_mob/animal/borer/say(var/message)
message = sanitize(message)
message = capitalize(message)
diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm
deleted file mode 100644
index 26ab3a1260..0000000000
--- a/code/modules/mob/living/simple_animal/constructs/constructs.dm
+++ /dev/null
@@ -1,488 +0,0 @@
-/mob/living/simple_animal/construct
- name = "Construct"
- real_name = "Construct"
- var/construct_type = "shade"
- desc = ""
- speak_emote = list("hisses")
- emote_hear = list("wails","screeches")
-
- ui_icons = 'icons/mob/screen1_construct.dmi'
- has_hands = 1
- hand_form = "stone manipulators"
-
- response_help = "thinks better of touching"
- response_disarm = "flailed at"
- response_harm = "punched"
-
- intelligence_level = SA_HUMANOID // Player controlled.
-
- hovering = TRUE
- softfall = TRUE //Beings made of Hellmarble and powered by the tears of the damned are not concerned with mortal things such as 'gravity'.
- parachuting = TRUE
-
- icon_dead = "shade_dead"
- var/do_glow = 1
-
- speed = -1
- a_intent = I_HURT
- stop_automated_movement = 1
-
- status_flags = CANPUSH
-
- universal_speak = 0
- universal_understand = 1
-
- attack_sound = 'sound/weapons/spiderlunge.ogg'
-
- min_oxy = 0
- max_oxy = 0
- min_tox = 0
- max_tox = 0
- min_co2 = 0
- max_co2 = 0
- min_n2 = 0
- max_n2 = 0
-
- minbodytemp = 0
- show_stat_health = 1
-
- faction = "cult"
- supernatural = 1
-
- see_invisible = SEE_INVISIBLE_NOLIGHTING
- see_in_dark = 7
-
- var/nullblock = 0
-
- mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
- mob_push_flags = ALLMOBS
-
- var/list/construct_spells = list()
-
- can_be_antagged = TRUE
-
- taser_kill = 0 // no
-
- shock_resistance = 0.9 //Electricity isn't very effective on stone, especially that from hell.
-
- armor = list(
- "melee" = 10,
- "bullet" = 10,
- "laser" = 10,
- "energy" = 10,
- "bomb" = 10,
- "bio" = 100,
- "rad" = 100)
-
-/mob/living/simple_animal/construct/place_spell_in_hand(var/path)
- if(!path || !ispath(path))
- return 0
-
- //var/obj/item/weapon/spell/S = new path(src)
- var/obj/item/weapon/spell/construct/S = new path(src)
-
- //No hands needed for innate casts.
- if(S.cast_methods & CAST_INNATE)
- if(S.run_checks())
- S.on_innate_cast(src)
-
- if(l_hand && r_hand) //Make sure our hands aren't full.
- if(istype(r_hand, /obj/item/weapon/spell)) //If they are full, perhaps we can still be useful.
- var/obj/item/weapon/spell/r_spell = r_hand
- if(r_spell.aspect == ASPECT_CHROMATIC) //Check if we can combine the new spell with one in our hands.
- r_spell.on_combine_cast(S, src)
- else if(istype(l_hand, /obj/item/weapon/spell))
- var/obj/item/weapon/spell/l_spell = l_hand
- if(l_spell.aspect == ASPECT_CHROMATIC) //Check the other hand too.
- l_spell.on_combine_cast(S, src)
- else //Welp
- to_chat(src, "You require a free manipulator to use this power.")
- return 0
-
- if(S.run_checks())
- put_in_hands(S)
- return 1
- else
- qdel(S)
- return 0
-
-/mob/living/simple_animal/construct/cultify()
- return
-
-/mob/living/simple_animal/construct/New()
- ..()
- name = text("[initial(name)] ([rand(1, 1000)])")
- real_name = name
- add_language("Cult")
- add_language("Occult")
- for(var/spell in construct_spells)
- src.add_spell(new spell, "const_spell_ready")
- updateicon()
-
-/mob/living/simple_animal/construct/updateicon()
- overlays.Cut()
- ..()
- if(do_glow)
- add_glow()
-
-/mob/living/simple_animal/construct/update_icon()
- ..()
- if(do_glow)
- add_glow()
-
-/mob/living/simple_animal/construct/death()
- new /obj/item/weapon/ectoplasm (src.loc)
- ..(null,"collapses in a shattered heap.")
- ghostize()
- qdel(src)
-
-/mob/living/simple_animal/construct/attack_generic(var/mob/user)
- if(istype(user, /mob/living/simple_animal/construct/builder))
- var/mob/living/simple_animal/construct/builder/B = user
- if(health < getMaxHealth())
- var/repair_lower_bound = B.melee_damage_lower * -1
- var/repair_upper_bound = B.melee_damage_upper * -1
- adjustBruteLoss(rand(repair_lower_bound, repair_upper_bound))
- adjustFireLoss(rand(repair_lower_bound, repair_upper_bound))
- user.visible_message("\The [user] mends some of \the [src]'s wounds.")
- else
- to_chat(user, "\The [src] is undamaged.")
- return
- return ..()
-
-/mob/living/simple_animal/construct/examine(mob/user)
- ..(user)
- var/msg = "*---------*\nThis is \icon[src] \a [src]!\n"
- if (src.health < src.getMaxHealth())
- msg += ""
- if (src.health >= src.getMaxHealth()/2)
- msg += "It looks slightly dented.\n"
- else
- msg += "It looks severely dented!\n"
- msg += ""
- msg += "*---------*"
-
- user << msg
-
-/mob/living/simple_animal/construct/Process_Spacemove()
- return 1 //Constructs levitate, can fall from a shuttle with no harm, and are piloted by either damned spirits or some otherworldly entity. It's not hard to believe.
-
-/////////////////Juggernaut///////////////
-
-
-
-/mob/living/simple_animal/construct/armoured
- name = "Juggernaut"
- real_name = "Juggernaut"
- construct_type = "juggernaut"
- desc = "A possessed suit of armour driven by the will of the restless dead"
- icon = 'icons/mob/mob.dmi'
- icon_state = "behemoth"
- icon_living = "behemoth"
- maxHealth = 300
- health = 300
- response_harm = "harmlessly punches"
- harm_intent_damage = 0
- melee_damage_lower = 30
- melee_damage_upper = 40
- attack_armor_pen = 60 //Being punched by a living, floating statue.
- attacktext = list("smashed their armoured gauntlet into")
- friendly = list("pats")
- mob_size = MOB_HUGE
- speed = 2 //Not super fast, but it might catch up to someone in armor who got punched once or twice.
- environment_smash = 2
- attack_sound = 'sound/weapons/heavysmash.ogg'
- status_flags = 0
- resistance = 10
- construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser,
- /spell/targeted/fortify,
- /spell/targeted/construct_advanced/slam
- )
-
- armor = list(
- "melee" = 70,
- "bullet" = 30,
- "laser" = 30,
- "energy" = 30,
- "bomb" = 10,
- "bio" = 100,
- "rad" = 100)
-
-/mob/living/simple_animal/construct/armoured/Life()
- weakened = 0
- ..()
-
-/mob/living/simple_animal/construct/armoured/bullet_act(var/obj/item/projectile/P)
-// if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) //If it's going to be slow, it's probably going to need every reflect it can get.
- var/reflectchance = 80 - round(P.damage/3)
- if(prob(reflectchance))
- var/damage_mod = rand(2,4)
- var/projectile_dam_type = P.damage_type
- var/incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3)))
- var/armorcheck = run_armor_check(null, P.check_armour)
- var/soakedcheck = get_armor_soak(null, P.check_armour)
- if(!(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)))
- visible_message("The [P.name] bounces off of [src]'s shell!", \
- "The [P.name] bounces off of [src]'s shell!")
- new /obj/item/weapon/material/shard/shrapnel(src.loc)
- if(!(P.damage_type == BRUTE || P.damage_type == BURN))
- projectile_dam_type = BRUTE
- incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to brute for physical projectiles, though severely decreased.
- apply_damage(incoming_damage, projectile_dam_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
- return -1 //Doesn't reflect non-beams or non-energy projectiles. They just smack and drop with little to no effect.
- else
- visible_message("The [P.name] gets reflected by [src]'s shell!", \
- "The [P.name] gets reflected by [src]'s shell!")
- damage_mod = rand(3,5)
- incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3)))
- if(!(P.damage_type == BRUTE || P.damage_type == BURN))
- projectile_dam_type = BURN
- incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to burn for energy-type projectiles, though severely decreased.
- apply_damage(incoming_damage, P.damage_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
-
- // Find a turf near or on the original location to bounce to
- if(P.starting)
- var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
- var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
- var/turf/curloc = get_turf(src)
-
- // redirect the projectile
- P.redirect(new_x, new_y, curloc, src)
- P.reflected = 1
-
- return -1 // complete projectile permutation
-
- return (..(P))
-
-
-
-////////////////////////Wraith/////////////////////////////////////////////
-
-
-
-/mob/living/simple_animal/construct/wraith
- name = "Wraith"
- real_name = "Wraith"
- construct_type = "wraith"
- desc = "A wicked bladed shell contraption piloted by a bound spirit."
- icon = 'icons/mob/mob.dmi'
- icon_state = "floating"
- icon_living = "floating"
- maxHealth = 200
- health = 200
- melee_damage_lower = 25
- melee_damage_upper = 30
- attack_armor_pen = 15
- attack_sharp = 1
- attack_edge = 1
- attacktext = list("slashed")
- friendly = list("pinches")
- speed = -1
- environment_smash = 1
- attack_sound = 'sound/weapons/rapidslice.ogg'
- construct_spells = list(/spell/targeted/ethereal_jaunt/shift,
- /spell/targeted/ambush_mode
- )
-
-/mob/living/simple_animal/construct/wraith/DoPunch(var/atom/A)
- . = ..()
- if(. && isliving(A))
- var/mob/living/L = A
- L.add_modifier(/datum/modifier/deep_wounds, 30 SECONDS)
-
-/////////////////////////////Artificer/////////////////////////
-
-
-
-/mob/living/simple_animal/construct/builder
- name = "Artificer"
- real_name = "Artificer"
- construct_type = "artificer"
- desc = "A bulbous construct dedicated to building and maintaining temples to their otherworldly lords."
- icon = 'icons/mob/mob.dmi'
- icon_state = "artificer"
- icon_living = "artificer"
- maxHealth = 150
- health = 150
- response_harm = "viciously beaten"
- harm_intent_damage = 5
- melee_damage_lower = 15 //It's not the strongest of the bunch, but that doesn't mean it can't hurt you.
- melee_damage_upper = 20
- attacktext = list("rammed")
- speed = 0
- environment_smash = 2
- attack_sound = 'sound/weapons/rapidslice.ogg'
- construct_spells = list(/spell/aoe_turf/conjure/construct/lesser,
- /spell/aoe_turf/conjure/wall,
- /spell/aoe_turf/conjure/floor,
- /spell/aoe_turf/conjure/soulstone,
- /spell/aoe_turf/conjure/pylon,
- /spell/aoe_turf/conjure/door,
- /spell/aoe_turf/conjure/grille,
- /spell/targeted/occult_repair_aura,
- /spell/targeted/construct_advanced/mend_acolyte
- )
-
-
-/////////////////////////////Behemoth/////////////////////////
-/*
- * The Behemoth. Admin-allowance only, still try to keep it in some guideline of 'Balanced', even if it means Security has to be fully geared to be so.
- */
-
-/mob/living/simple_animal/construct/behemoth
- name = "Behemoth"
- real_name = "Behemoth"
- construct_type = "juggernaut"
- desc = "The pinnacle of occult technology, Behemoths are nothing shy of both an Immovable Object, and Unstoppable Force."
- icon = 'icons/mob/mob.dmi'
- icon_state = "behemoth"
- icon_living = "behemoth"
- maxHealth = 750
- health = 750
- speak_emote = list("rumbles")
- response_harm = "harmlessly punched"
- harm_intent_damage = 0
- melee_damage_lower = 50
- melee_damage_upper = 50
- attacktext = list("brutally crushed")
- friendly = list("pokes") //Anything nice the Behemoth would do would still Kill the Human. Leave it at poke.
- speed = 5
- environment_smash = 2
- attack_sound = 'sound/weapons/heavysmash.ogg'
- resistance = 10
- icon_scale = 2
- var/energy = 0
- var/max_energy = 1000
- armor = list(
- "melee" = 60,
- "bullet" = 60,
- "laser" = 60,
- "energy" = 30,
- "bomb" = 10,
- "bio" = 100,
- "rad" = 100)
- construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser,
- /spell/targeted/fortify,
- /spell/targeted/construct_advanced/slam
- )
-
-/mob/living/simple_animal/construct/behemoth/bullet_act(var/obj/item/projectile/P)
- var/reflectchance = 80 - round(P.damage/3)
- if(prob(reflectchance))
- visible_message("The [P.name] gets reflected by [src]'s shell!", \
- "The [P.name] gets reflected by [src]'s shell!")
-
- // Find a turf near or on the original location to bounce to
- if(P.starting)
- var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
- var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
- var/turf/curloc = get_turf(src)
-
- // redirect the projectile
- P.redirect(new_x, new_y, curloc, src)
- P.reflected = 1
-
- return -1 // complete projectile permutation
-
- return (..(P))
-
-////////////////////////Harvester////////////////////////////////
-/*
- * Master of Spells and Ranged Abilities. Not as fragile as the Wraith, but nowhere near as maneuverable and deadly in melee.
- */
-
-/mob/living/simple_animal/construct/harvester
- name = "Harvester"
- real_name = "Harvester"
- construct_type = "harvester"
- desc = "A tendril-laden construct piloted by a chained mind."
- icon = 'icons/mob/mob.dmi'
- icon_state = "harvester"
- icon_living = "harvester"
- maxHealth = 150
- health = 150
- melee_damage_lower = 20
- melee_damage_upper = 25
- attack_sharp = 1
- attacktext = list("violently stabbed")
- friendly = list("caresses")
- speed = 0
- environment_smash = 1
- attack_sound = 'sound/weapons/pierce.ogg'
-
- armor = list(
- "melee" = 10,
- "bullet" = 20,
- "laser" = 20,
- "energy" = 20,
- "bomb" = 20,
- "bio" = 100,
- "rad" = 100)
-
- construct_spells = list(
- /spell/aoe_turf/knock/harvester,
- /spell/targeted/construct_advanced/inversion_beam,
- /spell/targeted/construct_advanced/agonizing_sphere,
- /spell/rune_write
- )
-
-////////////////Glow//////////////////
-/mob/living/simple_animal/construct/proc/add_glow()
- var/image/eye_glow = image(icon,"glow-[icon_state]")
- eye_glow.plane = PLANE_LIGHTING_ABOVE
- overlays += eye_glow
- set_light(2, -2, l_color = "#FFFFFF")
-
-/mob/living/simple_animal/construct/proc/remove_glow()
- overlays.Cut()
-
-////////////////HUD//////////////////////
-
-/mob/living/simple_animal/construct/Life()
- . = ..()
- if(.)
- if(fire)
- if(fire_alert) fire.icon_state = "fire1"
- else fire.icon_state = "fire0"
- if(pullin)
- if(pulling) pullin.icon_state = "pull1"
- else pullin.icon_state = "pull0"
-
- if(purged)
- if(purge > 0) purged.icon_state = "purge1"
- else purged.icon_state = "purge0"
-
- silence_spells(purge)
-
-/mob/living/simple_animal/construct/updatehealth() //Special icons.
- health = getMaxHealth() - getToxLoss() - getFireLoss() - getBruteLoss()
-
- //Alive, becoming dead
- if((stat < DEAD) && (health <= 0))
- death()
-
- //Overhealth
- if(health > getMaxHealth())
- health = getMaxHealth()
-
- //Update our hud if we have one
- if(healths)
- if(stat != DEAD)
- var/heal_per = (health / getMaxHealth()) * 100
- switch(heal_per)
- if(100 to INFINITY)
- healths.icon_state = "[construct_type]_health0"
- if(80 to 100)
- healths.icon_state = "[construct_type]_health1"
- if(60 to 80)
- healths.icon_state = "[construct_type]_health2"
- if(40 to 60)
- healths.icon_state = "[construct_type]_health3"
- if(20 to 40)
- healths.icon_state = "[construct_type]_health4"
- if(0 to 20)
- healths.icon_state = "[construct_type]_health5"
- else
- healths.icon_state = "[construct_type]_health6"
- else
- healths.icon_state = "[construct_type]_health7"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/humanoids/head.dm b/code/modules/mob/living/simple_animal/humanoids/head.dm
deleted file mode 100644
index 22460f0990..0000000000
--- a/code/modules/mob/living/simple_animal/humanoids/head.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-//Look Sir, free head!
-/mob/living/simple_animal/head
- name = "CommandBattle AI"
- desc = "A standard borg shell on its chest crude marking saying CommandBattle AI MK4 : Head."
- icon_state = "crab"
- icon_living = "crab"
- icon_dead = "crab_dead"
- intelligence_level = SA_ANIMAL
-
- wander = 0
- stop_automated_movement = 1
- universal_speak = 1
- turns_per_move = 5
-
- response_help = "pets"
- response_disarm = "gently pushes aside"
- response_harm = "punches"
-
- speak_chance = 1
- speak_emote = list("clicks")
- emote_hear = list("clicks")
- emote_see = list("clacks")
-
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
-
- var/list/insults = list(
- "Man you suck",
- "You look like the most retarded douche around",
- "What's up?, oh wait nevermind you are a fucking asshat",
- "you are just overly retarded",
- "Whiteman said what?!",)
- var/list/comments = list("Man have you seen those furry cats?,I mean who in the right mind would like something like that?",
- "They call me abusive,I just like the truth",
- "Beeboop, im a robit",
- "Gooogooooll, break ya bones",
- "Crab say what?",
- "Man they say we have space lizards now, man this shit is getting more wack every minute",
- "The so called \"improved\" station AI is just bullshit, that thing aint fun for noone",
- "The Colony Director is a traitor, he took my power core.",
- "Say \"what\" again. Say \"what\" again. I dare you. I double-dare you, motherfucker. Say \"what\" one more goddamn time.",
- "Ezekiel 25:17 ,The path of the righteous man is beset on all sides by the iniquities of the selfish and the tyranny of evil men. Blessed is he who in the name of charity and good will shepherds the weak through the valley of darkness, for he is truly his brother's keeper and the finder of lost children. And I will strike down upon thee with great vengeance and furious anger those who attempt to poison and destroy my brothers. And you will know my name is the Lord... when I lay my vengeance upon thee.",
- "Did you notice a sign out in front of my house that said \"Dead Nigger Storage\"?")
-
-/mob/living/simple_animal/head/Life()
- . = ..()
- if(!. || ai_inactive) return
-
- for(var/mob/A in viewers(world.view,src))
- if(A.ckey)
- say_something(A)
-
-/mob/living/simple_animal/head/proc/say_something(mob/A)
- if(prob(85))
- return
- if(prob(30))
- var/msg = pick(insults)
- msg = "Hey, [A.name].. [msg]"
- src.say(msg)
- else
- var/msg = pick(comments)
- src.say(msg)
diff --git a/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm b/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm
index 9f8c737894..1bc4b985a4 100644
--- a/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm
+++ b/code/modules/mob/living/simple_animal/humanoids/mechamobs.dm
@@ -96,7 +96,7 @@
..()
playsound(src,'sound/mecha/mechstep.ogg',40,1)
-
+// This is a PoI mob, not the normal, floaty drones that hang out around windows
/mob/living/simple_animal/hostile/mecha/malf_drone
name = "autonomous mechanized drone"
desc = "It appears to be an exosuit, piloted by a drone intelligence. It looks scary."
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 71a523c7d0..304fd3e7b2 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -591,12 +591,6 @@
if(act)
..(act, type, desc)
-/mob/living/simple_animal/proc/visible_emote(var/act_desc)
- custom_emote(1, act_desc)
-
-/mob/living/simple_animal/proc/audible_emote(var/act_desc)
- custom_emote(2, act_desc)
-
/mob/living/simple_animal/bullet_act(var/obj/item/projectile/Proj)
ai_log("bullet_act() I was shot by: [Proj.firer]",2)
@@ -710,9 +704,9 @@
//SA vs SA basically
/mob/living/simple_animal/attack_generic(var/mob/attacker)
- ..()
if(attacker)
react_to_attack(attacker)
+ return ..()
/mob/living/simple_animal/movement_delay()
var/tally = 0 //Incase I need to add stuff other than "speed" later
@@ -1280,8 +1274,11 @@
/mob/living/simple_animal/proc/PunchTarget()
if(!Adjacent(target_mob))
return
- if(!client)
- sleep(rand(melee_attack_minDelay, melee_attack_maxDelay))
+ if(!canClick())
+ return
+ setClickCooldown(get_attack_speed())
+// if(!client)
+// sleep(rand(melee_attack_minDelay, melee_attack_maxDelay))
if(isliving(target_mob))
var/mob/living/L = target_mob
@@ -1322,13 +1319,18 @@
//The actual top-level ranged attack proc
/mob/living/simple_animal/proc/ShootTarget()
+ if(!canClick())
+ return FALSE
+
+ setClickCooldown(get_attack_speed())
+
var/target = target_mob
var/tturf = get_turf(target)
if((firing_lines && !client) && !CheckFiringLine(tturf))
step_rand(src)
face_atom(tturf)
- return 0
+ return FALSE
visible_message("[src] fires at [target]!")
if(rapid)
@@ -1349,7 +1351,7 @@
if(casingtype)
new casingtype
- return 1
+ return TRUE
//Check firing lines for faction_friends (if we're not cooperative, we don't care)
/mob/living/simple_animal/proc/CheckFiringLine(var/turf/tturf)
@@ -1582,13 +1584,13 @@
return 0
else
return armorval
-
+/*
// Force it to target something
/mob/living/simple_animal/proc/taunt(var/mob/living/new_target, var/forced = FALSE)
if(intelligence_level == SA_HUMANOID && !forced)
return
set_target(new_target)
-
+*/
/mob/living/simple_animal/is_sentient()
return intelligence_level != SA_PLANT && intelligence_level != SA_ROBOTIC
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 843990c7f6..2b5d44ded9 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -17,8 +17,8 @@
maxHealth = 150
var/maxHealth_adult = 200
- melee_damage_lower = 5
- melee_damage_upper = 25
+ melee_damage_lower = 10
+ melee_damage_upper = 15
melee_miss_chance = 0
gender = NEUTER
diff --git a/code/modules/mob/living/simple_mob/appearance.dm b/code/modules/mob/living/simple_mob/appearance.dm
new file mode 100644
index 0000000000..05f758d7c4
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/appearance.dm
@@ -0,0 +1,76 @@
+/mob/living/simple_mob/update_icon()
+ . = ..()
+ cut_overlays()
+// var/mutable_appearance/ma = new(src)
+// ma.layer = layer
+// ma.plane = plane
+
+ add_overlay(modifier_overlay)
+
+ if(!icon_living) // Prevent the mob from turning invisible if icon_living is null.
+ icon_living = initial(icon_state)
+
+ //Awake and normal
+ if((stat == CONSCIOUS) && (!icon_rest || !resting || !incapacitated(INCAPACITATION_DISABLED) ))
+ icon_state = icon_living
+
+ //Dead
+ else if(stat >= DEAD)
+ icon_state = icon_dead
+
+ //Resting or KO'd
+ else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest)
+ icon_state = icon_rest
+
+ //Backup
+ else
+ icon_state = initial(icon_state)
+
+ if(has_hands)
+ if(r_hand_sprite)
+ add_overlay(r_hand_sprite)
+ if(l_hand_sprite)
+ add_overlay(l_hand_sprite)
+
+ if(has_eye_glow)
+ if(icon_state != icon_living)
+ remove_eyes()
+ else
+ add_eyes()
+
+// appearance = ma
+
+
+// If your simple mob's update_icon() call calls overlays.Cut(), this needs to be called after this, or manually apply modifier_overly to overlays.
+/mob/living/simple_mob/update_modifier_visuals()
+ var/image/effects = null
+ if(modifier_overlay)
+ cut_overlay(modifier_overlay)
+ modifier_overlay.cut_overlays()
+ effects = modifier_overlay
+ else
+ effects = new()
+
+ for(var/datum/modifier/M in modifiers)
+ if(M.mob_overlay_state)
+ var/image/I = image("icon" = 'icons/mob/modifier_effects.dmi', "icon_state" = M.mob_overlay_state)
+ I.appearance_flags = RESET_COLOR // So colored mobs don't affect the overlay.
+ effects.add_overlay(I)
+
+ modifier_overlay = effects
+ add_overlay(modifier_overlay)
+
+
+/mob/living/simple_mob/proc/add_eyes()
+ if(!eye_layer)
+ eye_layer = image(icon, "[icon_state]-eyes")
+ eye_layer.plane = PLANE_LIGHTING_ABOVE
+
+ add_overlay(eye_layer)
+
+/mob/living/simple_mob/proc/remove_eyes()
+ cut_overlay(eye_layer)
+
+
+/mob/living/simple_mob/gib()
+ ..(icon_gib,1,icon) // we need to specify where the gib animation is stored
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/combat.dm b/code/modules/mob/living/simple_mob/combat.dm
new file mode 100644
index 0000000000..e0cf980cc3
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/combat.dm
@@ -0,0 +1,236 @@
+// Does a melee attack.
+/mob/living/simple_mob/proc/attack_target(atom/A)
+ set waitfor = FALSE // For attack animations. Don't want the AI processor to get held up.
+
+ if(!A.Adjacent(src))
+ return FALSE
+ var/turf/their_T = get_turf(A)
+
+ face_atom(A)
+
+ if(melee_attack_delay)
+ // their_T.color = "#FF0000"
+ melee_pre_animation(A)
+ handle_attack_delay(A, melee_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false.
+
+ // Cooldown testing is done at click code (for players) and interface code (for AI).
+ setClickCooldown(get_attack_speed())
+
+ . = do_attack(A, their_T)
+
+ if(melee_attack_delay)
+ melee_post_animation(A)
+ // their_T.color = "#FFFFFF"
+
+
+
+// This does the actual attack.
+// This is a seperate proc for the purposes of attack animations.
+// A is the thing getting attacked, T is the turf A is/was on when attack_target was called.
+/mob/living/simple_mob/proc/do_attack(atom/A, turf/T)
+ face_atom(A)
+ var/missed = FALSE
+ if(!isturf(A) && !(A in T) ) // Turfs don't contain themselves so checking contents is pointless if we're targeting a turf.
+ missed = TRUE
+ else if(!T.AdjacentQuick(src))
+ missed = TRUE
+
+ if(missed) // Most likely we have a slow attack and they dodged it or we somehow got moved.
+ add_attack_logs(src, A, "Animal-attacked (dodged)", admin_notify = FALSE)
+ playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
+ visible_message(span("warning", "\The [src] misses their attack."))
+ return FALSE
+
+ var/damage_to_do = rand(melee_damage_lower, melee_damage_upper)
+
+ damage_to_do = apply_bonus_melee_damage(A, damage_to_do)
+
+ for(var/datum/modifier/M in modifiers)
+ if(!isnull(M.outgoing_melee_damage_percent))
+ damage_to_do *= M.outgoing_melee_damage_percent
+
+ if(isliving(A)) // Check defenses.
+ var/mob/living/L = A
+
+ if(prob(melee_miss_chance))
+ add_attack_logs(src, L, "Animal-attacked (miss)", admin_notify = FALSE)
+ do_attack_animation(src)
+ playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
+ return FALSE // We missed.
+
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(H.check_shields(damage = damage_to_do, damage_source = src, attacker = src, def_zone = null, attack_text = "the attack"))
+ return FALSE // We were blocked.
+
+ if(apply_attack(A, damage_to_do))
+ apply_melee_effects(A)
+ if(attack_sound)
+ playsound(src, attack_sound, 75, 1)
+
+ return TRUE
+
+// Generally used to do the regular attack.
+// Override for doing special stuff with the direct result of the attack.
+/mob/living/simple_mob/proc/apply_attack(atom/A, damage_to_do)
+ return A.attack_generic(src, damage_to_do, pick(attacktext))
+
+// Override for special effects after a successful attack, like injecting poison or stunning the target.
+/mob/living/simple_mob/proc/apply_melee_effects(atom/A)
+ return
+
+// Override to modify the amount of damage the mob does conditionally.
+// This must return the amount of outgoing damage.
+// Note that this is done before mob modifiers scale the damage.
+/mob/living/simple_mob/proc/apply_bonus_melee_damage(atom/A, damage_amount)
+ return damage_amount
+
+//The actual top-level ranged attack proc
+/mob/living/simple_mob/proc/shoot_target(atom/A)
+ set waitfor = FALSE
+ setClickCooldown(get_attack_speed())
+
+ face_atom(A)
+
+ if(ranged_attack_delay)
+ ranged_pre_animation(A)
+ handle_attack_delay(A, ranged_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false.
+
+ if(needs_reload)
+ if(reload_count >= reload_max)
+ try_reload()
+ return FALSE
+
+ visible_message("\The [src] fires at \the [A]!")
+ shoot(A, src.loc, src)
+ if(casingtype)
+ new casingtype(loc)
+
+ if(ranged_attack_delay)
+ ranged_post_animation(A)
+
+ return TRUE
+
+
+//Shoot a bullet at someone (idk why user is an argument when src would fit???)
+/mob/living/simple_mob/proc/shoot(atom/A, turf/start, mob/living/user, bullet = 0)
+ if(A == start)
+ return
+
+ face_atom(A)
+
+ var/obj/item/projectile/P = new projectiletype(user.loc)
+ if(!P)
+ return
+
+ // If the projectile has its own sound, use it.
+ // Otherwise default to the mob's firing sound.
+ playsound(user, P.fire_sound ? P.fire_sound : projectilesound, 80, 1)
+
+ P.launch(A)
+ if(needs_reload)
+ reload_count++
+
+// if(distance >= special_attack_min_range && distance <= special_attack_max_range)
+// return TRUE
+
+/mob/living/simple_mob/proc/try_reload()
+ set waitfor = FALSE
+ set_AI_busy(TRUE)
+
+ if(do_after(src, reload_time))
+ if(reload_sound)
+ playsound(src.loc, reload_sound, 50, 1)
+ reload_count = 0
+ . = TRUE
+ else
+ . = FALSE
+ set_AI_busy(FALSE)
+
+// Can we currently do a special attack?
+/mob/living/simple_mob/proc/can_special_attack(atom/A)
+ // Validity check.
+ if(!istype(A))
+ return FALSE
+
+ // Ability check.
+ if(isnull(special_attack_min_range) || isnull(special_attack_max_range))
+ return FALSE
+
+ // Distance check.
+ var/distance = get_dist(src, A)
+ if(distance < special_attack_min_range || distance > special_attack_max_range)
+ return FALSE
+
+ // Cooldown check.
+ if(!isnull(special_attack_cooldown) && last_special_attack + special_attack_cooldown > world.time)
+ return FALSE
+
+ // Charge check.
+ if(!isnull(special_attack_charges) && special_attack_charges <= 0)
+ return FALSE
+
+ return TRUE
+
+// Should we do one? Used to make the AI not waste their special attacks. Only checked for AI. Players are free to screw up on their own.
+/mob/living/simple_mob/proc/should_special_attack(atom/A)
+ return TRUE
+
+// Special attacks, like grenades or blinding spit or whatever.
+// Don't override this, override do_special_attack() for your blinding spit/etc.
+/mob/living/simple_mob/proc/special_attack_target(atom/A)
+ face_atom(A)
+
+ if(special_attack_delay)
+ special_pre_animation(A)
+ handle_attack_delay(A, special_attack_delay) // This will sleep this proc for a bit, which is why waitfor is false.
+
+ last_special_attack = world.time
+ if(do_special_attack(A))
+ if(special_attack_charges)
+ special_attack_charges -= 1
+ . = TRUE
+ else
+ . = FALSE
+
+ if(special_attack_delay)
+ special_post_animation(A)
+
+// Override this for the actual special attack.
+/mob/living/simple_mob/proc/do_special_attack(atom/A)
+ return FALSE
+
+// Sleeps the proc that called it for the correct amount of time.
+// Also makes sure the AI doesn't do anything stupid in the middle of the delay.
+/mob/living/simple_mob/proc/handle_attack_delay(atom/A, delay_amount)
+ set_AI_busy(TRUE)
+
+ // Click delay modifiers also affect telegraphing time.
+ // This means berserked enemies will leave less time to dodge.
+ var/true_attack_delay = delay_amount
+ for(var/datum/modifier/M in modifiers)
+ if(!isnull(M.attack_speed_percent))
+ true_attack_delay *= M.attack_speed_percent
+
+ setClickCooldown(true_attack_delay) // Insurance against a really long attack being longer than default click delay.
+
+ sleep(true_attack_delay)
+
+ set_AI_busy(FALSE)
+
+
+// Override these four for special custom animations (like the GOLEM).
+/mob/living/simple_mob/proc/melee_pre_animation(atom/A)
+ do_windup_animation(A, melee_attack_delay)
+
+/mob/living/simple_mob/proc/melee_post_animation(atom/A)
+
+/mob/living/simple_mob/proc/ranged_pre_animation(atom/A)
+ do_windup_animation(A, ranged_attack_delay) // Semi-placeholder.
+
+/mob/living/simple_mob/proc/ranged_post_animation(atom/A)
+
+/mob/living/simple_mob/proc/special_pre_animation(atom/A)
+ do_windup_animation(A, special_attack_delay) // Semi-placeholder.
+
+/mob/living/simple_mob/proc/special_post_animation(atom/A)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm
new file mode 100644
index 0000000000..af1b2774b3
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/defense.dm
@@ -0,0 +1,224 @@
+// Hit by a projectile.
+/mob/living/simple_mob/bullet_act(var/obj/item/projectile/P)
+ //Projectiles with bonus SA damage
+ if(!P.nodamage)
+ // if(!P.SA_vulnerability || P.SA_vulnerability == intelligence_level)
+ if(P.SA_vulnerability & mob_class)
+ P.damage += P.SA_bonus_damage
+
+ . = ..()
+
+
+// When someone clicks us with an empty hand
+/mob/living/simple_mob/attack_hand(mob/living/L)
+ ..()
+
+ switch(L.a_intent)
+ if(I_HELP)
+ if(health > 0)
+ L.visible_message("\The [L] [response_help] \the [src].")
+
+ if(I_DISARM)
+ L.visible_message("\The [L] [response_disarm] \the [src].")
+ L.do_attack_animation(src)
+ //TODO: Push the mob away or something
+
+ if(I_GRAB)
+ if (L == src)
+ return
+ if (!(status_flags & CANPUSH))
+ return
+ if(!incapacitated(INCAPACITATION_ALL) && prob(grab_resist))
+ L.visible_message("\The [L] tries to grab \the [src] but fails!")
+ return
+
+ var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(L, src)
+
+ L.put_in_active_hand(G)
+
+ G.synch()
+ G.affecting = src
+ LAssailant = L
+
+ L.visible_message("\The [L] has grabbed [src] passively!")
+ L.do_attack_animation(src)
+
+ if(I_HURT)
+ var/armor = run_armor_check(def_zone = null, attack_flag = "melee")
+ apply_damage(damage = harm_intent_damage, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
+ L.visible_message("\The [L] [response_harm] \the [src]!")
+ L.do_attack_animation(src)
+
+ return
+
+
+// When somoene clicks us with an item in hand
+/mob/living/simple_mob/attackby(var/obj/item/O, var/mob/user)
+ if(istype(O, /obj/item/stack/medical))
+ if(stat != DEAD)
+ // This could be done better.
+ var/obj/item/stack/medical/MED = O
+ if(health < getMaxHealth())
+ if(MED.amount >= 1)
+ adjustBruteLoss(-MED.heal_brute)
+ MED.amount -= 1
+ if(MED.amount <= 0)
+ qdel(MED)
+ visible_message("\The [user] applies the [MED] on [src].")
+ else
+ var/datum/gender/T = gender_datums[src.get_visible_gender()]
+ to_chat(user, "\The [src] is dead, medical items won't bring [T.him] back to life.") // the gender lookup is somewhat overkill, but it functions identically to the obsolete gender macros and future-proofs this code
+ if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
+ if(istype(O, /obj/item/weapon/material/knife))
+ harvest(user)
+
+ return ..()
+
+
+// Handles the actual harming by a melee weapon.
+/mob/living/simple_mob/hit_with_weapon(obj/item/O, mob/living/user, var/effective_force, var/hit_zone)
+ effective_force = O.force
+
+ //Animals can't be stunned(?)
+ if(O.damtype == HALLOSS)
+ effective_force = 0
+ if(supernatural && istype(O,/obj/item/weapon/nullrod))
+ effective_force *= 2
+ purge = 3
+ if(O.force <= resistance)
+ to_chat(user,"This weapon is ineffective, it does no damage.")
+ return 2 //???
+
+ . = ..()
+
+
+// Exploding.
+/mob/living/simple_mob/ex_act(severity)
+ if(!blinded)
+ flash_eyes()
+ var/armor = run_armor_check(def_zone = null, attack_flag = "bomb")
+ var/bombdam = 500
+ switch (severity)
+ if (1.0)
+ bombdam = 500
+ if (2.0)
+ bombdam = 60
+ if (3.0)
+ bombdam = 30
+
+ apply_damage(damage = bombdam, damagetype = BRUTE, def_zone = null, blocked = armor, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
+
+ if(bombdam > maxHealth)
+ gib()
+
+// Cold stuff.
+/mob/living/simple_mob/get_cold_protection()
+ return cold_resist
+
+
+// Fire stuff. Not really exciting at the moment.
+/mob/living/simple_mob/handle_fire()
+ return
+/mob/living/simple_mob/update_fire()
+ return
+/mob/living/simple_mob/IgniteMob()
+ return
+/mob/living/simple_mob/ExtinguishMob()
+ return
+
+/mob/living/simple_mob/get_heat_protection()
+ return heat_resist
+
+// Electricity
+/mob/living/simple_mob/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null)
+ shock_damage *= siemens_coeff
+ if(shock_damage < 1)
+ return 0
+
+ apply_damage(damage = shock_damage, damagetype = BURN, def_zone = null, blocked = null, blocked = resistance, used_weapon = null, sharp = FALSE, edge = FALSE)
+ playsound(loc, "sparks", 50, 1, -1)
+
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, loc)
+ s.start()
+
+/mob/living/simple_mob/get_shock_protection()
+ return shock_resist
+
+// Shot with taser/stunvolver
+/mob/living/simple_mob/stun_effect_act(var/stun_amount, var/agony_amount, var/def_zone, var/used_weapon=null)
+ if(taser_kill)
+ var/stunDam = 0
+ var/agonyDam = 0
+ var/armor = run_armor_check(def_zone = null, attack_flag = "energy")
+
+ if(stun_amount)
+ stunDam += stun_amount * 0.5
+ apply_damage(damage = stunDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE)
+
+ if(agony_amount)
+ agonyDam += agony_amount * 0.5
+ apply_damage(damage = agonyDam, damagetype = BURN, def_zone = null, blocked = armor, blocked = resistance, used_weapon = used_weapon, sharp = FALSE, edge = FALSE)
+
+
+// Electromagnetism
+/mob/living/simple_mob/emp_act(severity)
+ ..() // To emp_act() its contents.
+ if(!isSynthetic())
+ return
+ switch(severity)
+ if(1)
+ // adjustFireLoss(rand(15, 25))
+ adjustFireLoss(min(60, getMaxHealth()*0.5)) // Weak mobs will always take two direct EMP hits to kill. Stronger ones might take more.
+ if(2)
+ adjustFireLoss(min(30, getMaxHealth()*0.25))
+ // adjustFireLoss(rand(10, 18))
+ if(3)
+ adjustFireLoss(min(15, getMaxHealth()*0.125))
+ // adjustFireLoss(rand(5, 12))
+ if(4)
+ adjustFireLoss(min(7, getMaxHealth()*0.0625))
+ // adjustFireLoss(rand(1, 6))
+
+// Water
+/mob/living/simple_mob/get_water_protection()
+ return water_resist
+
+// "Poison" (aka what reagents would do if we wanted to deal with those).
+/mob/living/simple_mob/get_poison_protection()
+ return poison_resist
+
+// Armor
+/mob/living/simple_mob/getarmor(def_zone, attack_flag)
+ var/armorval = armor[attack_flag]
+ if(!armorval)
+ return 0
+ else
+ return armorval
+
+/mob/living/simple_mob/getsoak(def_zone, attack_flag)
+ var/armorval = armor_soak[attack_flag]
+ if(!armorval)
+ return 0
+ else
+ return armorval
+
+// Lightning
+/mob/living/simple_mob/lightning_act()
+ ..()
+ // If a non-player simple_mob was struck, inflict huge damage.
+ // If the damage is fatal, it is turned to ash.
+ if(!client)
+ inflict_shock_damage(200) // Mobs that are very beefy or resistant to shock may survive getting struck.
+ updatehealth()
+ if(health <= 0)
+ visible_message(span("critical", "\The [src] disintegrates into ash!"))
+ ash()
+ return // No point deafening something that wont exist.
+
+// Injections.
+/mob/living/simple_mob/can_inject(mob/user, error_msg, target_zone, ignore_thickness)
+ if(ignore_thickness)
+ return TRUE
+ return !thick_armor
+
diff --git a/code/modules/mob/living/simple_mob/hands.dm b/code/modules/mob/living/simple_mob/hands.dm
new file mode 100644
index 0000000000..0e8820fe2e
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/hands.dm
@@ -0,0 +1,143 @@
+// Hand procs for player-controlled SA's
+/mob/living/simple_mob/swap_hand()
+ src.hand = !( src.hand )
+ if(hud_used.l_hand_hud_object && hud_used.r_hand_hud_object)
+ if(hand) //This being 1 means the left hand is in use
+ hud_used.l_hand_hud_object.icon_state = "l_hand_active"
+ hud_used.r_hand_hud_object.icon_state = "r_hand_inactive"
+ else
+ hud_used.l_hand_hud_object.icon_state = "l_hand_inactive"
+ hud_used.r_hand_hud_object.icon_state = "r_hand_active"
+ return
+
+/mob/living/simple_mob/put_in_hands(var/obj/item/W) // No hands.
+ if(has_hands)
+ put_in_active_hand(W)
+ return 1
+ W.forceMove(get_turf(src))
+ return 1
+
+//Puts the item into our active hand if possible. returns 1 on success.
+/mob/living/simple_mob/put_in_active_hand(var/obj/item/W)
+ if(!has_hands)
+ return FALSE
+ return (hand ? put_in_l_hand(W) : put_in_r_hand(W))
+
+/mob/living/simple_mob/put_in_l_hand(var/obj/item/W)
+ if(!..() || l_hand)
+ return 0
+ W.forceMove(src)
+ l_hand = W
+ W.equipped(src,slot_l_hand)
+ W.add_fingerprint(src)
+ update_inv_l_hand()
+ return TRUE
+
+/mob/living/simple_mob/put_in_r_hand(var/obj/item/W)
+ if(!..() || r_hand)
+ return 0
+ W.forceMove(src)
+ r_hand = W
+ W.equipped(src,slot_r_hand)
+ W.add_fingerprint(src)
+ update_inv_r_hand()
+ return TRUE
+
+/mob/living/simple_mob/update_inv_r_hand()
+ if(QDESTROYING(src))
+ return
+
+ if(r_hand)
+ r_hand.screen_loc = ui_rhand //TODO
+
+ //determine icon state to use
+ var/t_state
+ if(r_hand.item_state_slots && r_hand.item_state_slots[slot_r_hand_str])
+ t_state = r_hand.item_state_slots[slot_r_hand_str]
+ else if(r_hand.item_state)
+ t_state = r_hand.item_state
+ else
+ t_state = r_hand.icon_state
+
+ //determine icon to use
+ var/icon/t_icon
+ if(r_hand.item_icons && (slot_r_hand_str in r_hand.item_icons))
+ t_icon = r_hand.item_icons[slot_r_hand_str]
+ else if(r_hand.icon_override)
+ t_state += "_r"
+ t_icon = r_hand.icon_override
+ else
+ t_icon = INV_R_HAND_DEF_ICON
+
+ //apply color
+ var/image/standing = image(icon = t_icon, icon_state = t_state)
+ standing.color = r_hand.color
+
+ r_hand_sprite = standing
+
+ else
+ r_hand_sprite = null
+
+ update_icon()
+
+/mob/living/simple_mob/update_inv_l_hand()
+ if(QDESTROYING(src))
+ return
+
+ if(l_hand)
+ l_hand.screen_loc = ui_lhand //TODO
+
+ //determine icon state to use
+ var/t_state
+ if(l_hand.item_state_slots && l_hand.item_state_slots[slot_l_hand_str])
+ t_state = l_hand.item_state_slots[slot_l_hand_str]
+ else if(l_hand.item_state)
+ t_state = l_hand.item_state
+ else
+ t_state = l_hand.icon_state
+
+ //determine icon to use
+ var/icon/t_icon
+ if(l_hand.item_icons && (slot_l_hand_str in l_hand.item_icons))
+ t_icon = l_hand.item_icons[slot_l_hand_str]
+ else if(l_hand.icon_override)
+ t_state += "_l"
+ t_icon = l_hand.icon_override
+ else
+ t_icon = INV_L_HAND_DEF_ICON
+
+ //apply color
+ var/image/standing = image(icon = t_icon, icon_state = t_state)
+ standing.color = l_hand.color
+
+ l_hand_sprite = standing
+
+ else
+ l_hand_sprite = null
+
+ update_icon()
+
+//Can insert extra huds into the hud holder here.
+/mob/living/simple_mob/proc/extra_huds(var/datum/hud/hud,var/icon/ui_style,var/list/hud_elements)
+ return
+
+//If they can or cannot use tools/machines/etc
+/mob/living/simple_mob/IsAdvancedToolUser()
+ return has_hands
+
+/mob/living/simple_mob/proc/IsHumanoidToolUser(var/atom/tool)
+ if(!humanoid_hands)
+ var/display_name = null
+ if(tool)
+ display_name = tool
+ else
+ display_name = "object"
+ to_chat(src, "Your [hand_form] are not fit for use of \the [display_name].")
+ return humanoid_hands
+
+/mob/living/simple_mob/drop_from_inventory(var/obj/item/W, var/atom/target = null)
+ . = ..(W, target)
+ if(!target)
+ target = src.loc
+ if(.)
+ W.forceMove(src.loc)
diff --git a/code/modules/mob/living/simple_mob/life.dm b/code/modules/mob/living/simple_mob/life.dm
new file mode 100644
index 0000000000..bab2aa4129
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/life.dm
@@ -0,0 +1,160 @@
+/mob/living/simple_mob/Life()
+ ..()
+
+ //Health
+ updatehealth()
+ if(stat >= DEAD)
+ return FALSE
+
+ handle_stunned()
+ handle_weakened()
+ handle_paralysed()
+ handle_supernatural()
+ handle_atmos()
+
+ handle_special()
+
+ return TRUE
+
+
+//Should we be dead?
+/mob/living/simple_mob/updatehealth()
+ health = getMaxHealth() - getFireLoss() - getBruteLoss() - getToxLoss() - getOxyLoss() - getCloneLoss()
+
+ //Alive, becoming dead
+ if((stat < DEAD) && (health <= 0))
+ death()
+
+ //Overhealth
+ if(health > getMaxHealth())
+ health = getMaxHealth()
+
+ //Update our hud if we have one
+ if(healths)
+ if(stat != DEAD)
+ var/heal_per = (health / getMaxHealth()) * 100
+ switch(heal_per)
+ if(100 to INFINITY)
+ healths.icon_state = "health0"
+ if(80 to 100)
+ healths.icon_state = "health1"
+ if(60 to 80)
+ healths.icon_state = "health2"
+ if(40 to 60)
+ healths.icon_state = "health3"
+ if(20 to 40)
+ healths.icon_state = "health4"
+ if(0 to 20)
+ healths.icon_state = "health5"
+ else
+ healths.icon_state = "health6"
+ else
+ healths.icon_state = "health7"
+
+ //Updates the nutrition while we're here
+ if(nutrition_icon)
+ var/food_per = (nutrition / initial(nutrition)) * 100
+ switch(food_per)
+ if(90 to INFINITY)
+ nutrition_icon.icon_state = "nutrition0"
+ if(75 to 90)
+ nutrition_icon.icon_state = "nutrition1"
+ if(50 to 75)
+ nutrition_icon.icon_state = "nutrition2"
+ if(25 to 50)
+ nutrition_icon.icon_state = "nutrition3"
+ if(0 to 25)
+ nutrition_icon.icon_state = "nutrition4"
+
+// Override for special bullshit.
+/mob/living/simple_mob/proc/handle_special()
+ return
+
+
+// Handle interacting with and taking damage from atmos
+// TODO - Refactor this to use handle_environment() like a good /mob/living
+/mob/living/simple_mob/proc/handle_atmos()
+ var/atmos_unsuitable = 0
+
+ var/atom/A = src.loc
+
+ if(istype(A,/turf))
+ var/turf/T = A
+
+ var/datum/gas_mixture/Environment = T.return_air()
+
+ if(Environment)
+
+ if( abs(Environment.temperature - bodytemperature) > 40 )
+ bodytemperature += ((Environment.temperature - bodytemperature) / 5)
+
+ if(min_oxy)
+ if(Environment.gas["oxygen"] < min_oxy)
+ atmos_unsuitable = 1
+ if(max_oxy)
+ if(Environment.gas["oxygen"] > max_oxy)
+ atmos_unsuitable = 1
+ if(min_tox)
+ if(Environment.gas["phoron"] < min_tox)
+ atmos_unsuitable = 2
+ if(max_tox)
+ if(Environment.gas["phoron"] > max_tox)
+ atmos_unsuitable = 2
+ if(min_n2)
+ if(Environment.gas["nitrogen"] < min_n2)
+ atmos_unsuitable = 1
+ if(max_n2)
+ if(Environment.gas["nitrogen"] > max_n2)
+ atmos_unsuitable = 1
+ if(min_co2)
+ if(Environment.gas["carbon_dioxide"] < min_co2)
+ atmos_unsuitable = 1
+ if(max_co2)
+ if(Environment.gas["carbon_dioxide"] > max_co2)
+ atmos_unsuitable = 1
+
+ //Atmos effect
+ if(bodytemperature < minbodytemp)
+ fire_alert = 2
+ adjustFireLoss(cold_damage_per_tick)
+ if(fire)
+ fire.icon_state = "fire1"
+ else if(bodytemperature > maxbodytemp)
+ fire_alert = 1
+ adjustFireLoss(heat_damage_per_tick)
+ if(fire)
+ fire.icon_state = "fire2"
+ else
+ fire_alert = 0
+ if(fire)
+ fire.icon_state = "fire0"
+
+ if(atmos_unsuitable)
+ adjustOxyLoss(unsuitable_atoms_damage)
+ if(oxygen)
+ oxygen.icon_state = "oxy1"
+ else if(oxygen)
+ if(oxygen)
+ oxygen.icon_state = "oxy0"
+ adjustOxyLoss(-unsuitable_atoms_damage)
+
+
+/mob/living/simple_mob/proc/handle_supernatural()
+ if(purge)
+ purge -= 1
+
+/mob/living/simple_mob/death(gibbed, deathmessage = "dies!")
+ density = 0 //We don't block even if we did before
+
+ if(has_eye_glow)
+ remove_eyes()
+
+ if(loot_list.len) //Drop any loot
+ for(var/path in loot_list)
+ if(prob(loot_list[path]))
+ new path(get_turf(src))
+
+ spawn(3) //We'll update our icon in a sec
+ update_icon()
+
+ return ..(gibbed,deathmessage)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/on_click.dm b/code/modules/mob/living/simple_mob/on_click.dm
new file mode 100644
index 0000000000..4b824c9580
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/on_click.dm
@@ -0,0 +1,48 @@
+/*
+ Animals
+*/
+/mob/living/simple_mob/UnarmedAttack(var/atom/A, var/proximity)
+ if(!(. = ..()))
+ return
+
+// setClickCooldown(get_attack_speed())
+
+ if(has_hands && istype(A,/obj) && a_intent != I_HURT)
+ var/obj/O = A
+ return O.attack_hand(src)
+
+ switch(a_intent)
+ if(I_HELP)
+ if(isliving(A))
+ custom_emote(1,"[pick(friendly)] \the [A]!")
+
+ if(I_HURT)
+ if(can_special_attack(A) && special_attack_target(A))
+ return
+
+ else if(melee_damage_upper == 0 && istype(A,/mob/living))
+ custom_emote(1,"[pick(friendly)] \the [A]!")
+
+ else
+ attack_target(A)
+
+ if(I_GRAB)
+ if(has_hands)
+ A.attack_hand(src)
+ else
+ attack_target(A)
+
+ if(I_DISARM)
+ if(has_hands)
+ A.attack_hand(src)
+ else
+ attack_target(A)
+
+/mob/living/simple_mob/RangedAttack(var/atom/A)
+// setClickCooldown(get_attack_speed())
+
+ if(can_special_attack(A) && special_attack_target(A))
+ return
+
+ if(projectiletype)
+ shoot_target(A)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/simple_hud.dm b/code/modules/mob/living/simple_mob/simple_hud.dm
new file mode 100644
index 0000000000..fe851648b4
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/simple_hud.dm
@@ -0,0 +1,311 @@
+/mob/living/simple_mob/instantiate_hud(var/datum/hud/hud)
+ if(!client)
+ return //Why bother.
+
+ var/ui_style = 'icons/mob/screen1_animal.dmi'
+ if(ui_icons)
+ ui_style = ui_icons
+
+ var/ui_color = "#ffffff"
+ var/ui_alpha = 255
+
+ var/list/adding = list()
+ var/list/other = list()
+ var/list/hotkeybuttons = list()
+ var/list/slot_info = list()
+
+ hud.adding = adding
+ hud.other = other
+ hud.hotkeybuttons = hotkeybuttons
+
+ var/list/hud_elements = list()
+ var/obj/screen/using
+ var/obj/screen/inventory/inv_box
+
+ var/has_hidden_gear
+ if(LAZYLEN(hud_gears))
+ for(var/gear_slot in hud_gears)
+ inv_box = new /obj/screen/inventory()
+ inv_box.icon = ui_style
+ inv_box.color = ui_color
+ inv_box.alpha = ui_alpha
+
+ var/list/slot_data = hud_gears[gear_slot]
+ inv_box.name = gear_slot
+ inv_box.screen_loc = slot_data["loc"]
+ inv_box.slot_id = slot_data["slot"]
+ inv_box.icon_state = slot_data["state"]
+ slot_info["[inv_box.slot_id]"] = inv_box.screen_loc
+
+ if(slot_data["dir"])
+ inv_box.set_dir(slot_data["dir"])
+
+ if(slot_data["toggle"])
+ other += inv_box
+ has_hidden_gear = 1
+ else
+ adding += inv_box
+
+ if(has_hidden_gear)
+ using = new /obj/screen()
+ using.name = "toggle"
+ using.icon = ui_style
+ using.icon_state = "other"
+ using.screen_loc = ui_inventory
+ using.hud_layerise()
+ using.color = ui_color
+ using.alpha = ui_alpha
+ adding += using
+
+ //Intent Backdrop
+ using = new /obj/screen()
+ using.name = "act_intent"
+ using.icon = ui_style
+ using.icon_state = "intent_"+a_intent
+ using.screen_loc = ui_acti
+ using.color = ui_color
+ using.alpha = ui_alpha
+ hud.adding += using
+ hud.action_intent = using
+
+ hud_elements |= using
+
+ //Small intent quarters
+ var/icon/ico
+
+ ico = new(ui_style, "black")
+ ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
+ ico.DrawBox(rgb(255,255,255,1),1,ico.Height()/2,ico.Width()/2,ico.Height())
+ using = new /obj/screen()
+ using.name = I_HELP
+ using.icon = ico
+ using.screen_loc = ui_acti
+ using.alpha = ui_alpha
+ using.layer = LAYER_HUD_ITEM //These sit on the intent box
+ hud.adding += using
+ hud.help_intent = using
+
+ ico = new(ui_style, "black")
+ ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
+ ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,ico.Height()/2,ico.Width(),ico.Height())
+ using = new /obj/screen()
+ using.name = I_DISARM
+ using.icon = ico
+ using.screen_loc = ui_acti
+ using.alpha = ui_alpha
+ using.layer = LAYER_HUD_ITEM
+ hud.adding += using
+ hud.disarm_intent = using
+
+ ico = new(ui_style, "black")
+ ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
+ ico.DrawBox(rgb(255,255,255,1),ico.Width()/2,1,ico.Width(),ico.Height()/2)
+ using = new /obj/screen()
+ using.name = I_GRAB
+ using.icon = ico
+ using.screen_loc = ui_acti
+ using.alpha = ui_alpha
+ using.layer = LAYER_HUD_ITEM
+ hud.adding += using
+ hud.grab_intent = using
+
+ ico = new(ui_style, "black")
+ ico.MapColors(0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0, -1,-1,-1,-1)
+ ico.DrawBox(rgb(255,255,255,1),1,1,ico.Width()/2,ico.Height()/2)
+ using = new /obj/screen()
+ using.name = I_HURT
+ using.icon = ico
+ using.screen_loc = ui_acti
+ using.alpha = ui_alpha
+ using.layer = LAYER_HUD_ITEM
+ hud.adding += using
+ hud.hurt_intent = using
+
+ //Move intent (walk/run)
+ using = new /obj/screen()
+ using.name = "mov_intent"
+ using.icon = ui_style
+ using.icon_state = (m_intent == "run" ? "running" : "walking")
+ using.screen_loc = ui_movi
+ using.color = ui_color
+ using.alpha = ui_alpha
+ hud.adding += using
+ hud.move_intent = using
+
+ //Resist button
+ using = new /obj/screen()
+ using.name = "resist"
+ using.icon = ui_style
+ using.icon_state = "act_resist"
+ using.screen_loc = ui_pull_resist
+ using.color = ui_color
+ using.alpha = ui_alpha
+ hud.hotkeybuttons += using
+
+ //Pull button
+ pullin = new /obj/screen()
+ pullin.icon = ui_style
+ pullin.icon_state = "pull0"
+ pullin.name = "pull"
+ pullin.screen_loc = ui_pull_resist
+ hud.hotkeybuttons += pullin
+ hud_elements |= pullin
+
+ //Health status
+ healths = new /obj/screen()
+ healths.icon = ui_style
+ healths.icon_state = "health0"
+ healths.name = "health"
+ healths.screen_loc = ui_health
+ hud_elements |= healths
+
+ //Oxygen dep icon
+ oxygen = new /obj/screen()
+ oxygen.icon = ui_style
+ oxygen.icon_state = "oxy0"
+ oxygen.name = "oxygen"
+ oxygen.screen_loc = ui_oxygen
+ hud_elements |= oxygen
+
+ //Toxins present icon
+ toxin = new /obj/screen()
+ toxin.icon = ui_style
+ toxin.icon_state = "tox0"
+ toxin.name = "toxin"
+ toxin.screen_loc = ui_toxin
+ hud_elements |= toxin
+
+ //Fire warning
+ fire = new /obj/screen()
+ fire.icon = ui_style
+ fire.icon_state = "fire0"
+ fire.name = "fire"
+ fire.screen_loc = ui_fire
+ hud_elements |= fire
+
+ //Pressure warning
+ pressure = new /obj/screen()
+ pressure.icon = ui_style
+ pressure.icon_state = "pressure0"
+ pressure.name = "pressure"
+ pressure.screen_loc = ui_pressure
+ hud_elements |= pressure
+
+ //Body temp warning
+ bodytemp = new /obj/screen()
+ bodytemp.icon = ui_style
+ bodytemp.icon_state = "temp0"
+ bodytemp.name = "body temperature"
+ bodytemp.screen_loc = ui_temp
+ hud_elements |= bodytemp
+
+ //Nutrition status
+ nutrition_icon = new /obj/screen()
+ nutrition_icon.icon = ui_style
+ nutrition_icon.icon_state = "nutrition0"
+ nutrition_icon.name = "nutrition"
+ nutrition_icon.screen_loc = ui_nutrition
+ hud_elements |= nutrition_icon
+
+ pain = new /obj/screen( null )
+
+ zone_sel = new /obj/screen/zone_sel( null )
+ zone_sel.icon = ui_style
+ zone_sel.color = ui_color
+ zone_sel.alpha = ui_alpha
+ zone_sel.overlays.Cut()
+ zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[zone_sel.selecting]")
+ hud_elements |= zone_sel
+
+ //Hand things
+ if(has_hands)
+ //Drop button
+ using = new /obj/screen()
+ using.name = "drop"
+ using.icon = ui_style
+ using.icon_state = "act_drop"
+ using.screen_loc = ui_drop_throw
+ using.color = ui_color
+ using.alpha = ui_alpha
+ hud.hotkeybuttons += using
+
+ //Equip detail
+ using = new /obj/screen()
+ using.name = "equip"
+ using.icon = ui_style
+ using.icon_state = "act_equip"
+ using.screen_loc = ui_equip
+ using.color = ui_color
+ using.alpha = ui_alpha
+ hud.adding += using
+
+ //Hand slots themselves
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.hud = src
+ inv_box.name = "r_hand"
+ inv_box.icon = ui_style
+ inv_box.icon_state = "r_hand_inactive"
+ if(!hand) //This being 0 or null means the right hand is in use
+ inv_box.icon_state = "r_hand_active"
+ inv_box.screen_loc = ui_rhand
+ inv_box.slot_id = slot_r_hand
+ inv_box.color = ui_color
+ inv_box.alpha = ui_alpha
+ hud.r_hand_hud_object = inv_box
+ hud.adding += inv_box
+ slot_info["[slot_r_hand]"] = inv_box.screen_loc
+
+ inv_box = new /obj/screen/inventory/hand()
+ inv_box.hud = src
+ inv_box.name = "l_hand"
+ inv_box.icon = ui_style
+ inv_box.icon_state = "l_hand_inactive"
+ if(hand) //This being 1 means the left hand is in use
+ inv_box.icon_state = "l_hand_active"
+ inv_box.screen_loc = ui_lhand
+ inv_box.slot_id = slot_l_hand
+ inv_box.color = ui_color
+ inv_box.alpha = ui_alpha
+ hud.l_hand_hud_object = inv_box
+ hud.adding += inv_box
+ slot_info["[slot_l_hand]"] = inv_box.screen_loc
+
+ //Swaphand titlebar
+ using = new /obj/screen/inventory()
+ using.name = "hand"
+ using.icon = ui_style
+ using.icon_state = "hand1"
+ using.screen_loc = ui_swaphand1
+ using.color = ui_color
+ using.alpha = ui_alpha
+ hud.adding += using
+
+ using = new /obj/screen/inventory()
+ using.name = "hand"
+ using.icon = ui_style
+ using.icon_state = "hand2"
+ using.screen_loc = ui_swaphand2
+ using.color = ui_color
+ using.alpha = ui_alpha
+ hud.adding += using
+
+ //Throw button
+ throw_icon = new /obj/screen()
+ throw_icon.icon = ui_style
+ throw_icon.icon_state = "act_throw_off"
+ throw_icon.name = "throw"
+ throw_icon.screen_loc = ui_drop_throw
+ throw_icon.color = ui_color
+ throw_icon.alpha = ui_alpha
+ hud.hotkeybuttons += throw_icon
+ hud_elements |= throw_icon
+
+ extra_huds(hud,ui_style,hud_elements)
+
+ client.screen = list()
+
+ client.screen += hud_elements
+ client.screen += adding + hotkeybuttons
+ client.screen += client.void
+
+ return
diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm
new file mode 100644
index 0000000000..c1e6b91adb
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/simple_mob.dm
@@ -0,0 +1,290 @@
+// Reorganized and somewhat cleaned up.
+// AI code has been made into a datum, inside the AI module folder.
+
+/mob/living/simple_mob
+ name = "animal"
+ desc = ""
+ icon = 'icons/mob/animal.dmi'
+ health = 20
+ maxHealth = 20
+
+ // Generally we don't want simple_mobs to get displaced when bumped into due to it trivializing combat with windup attacks.
+ // Some subtypes allow displacement, like passive animals.
+ mob_bump_flag = HEAVY
+ mob_swap_flags = ~HEAVY
+ mob_push_flags = ~HEAVY
+
+ var/tt_desc = "Uncataloged Life Form" //Tooltip description
+
+ //Settings for played mobs
+ var/show_stat_health = 1 // Does the percentage health show in the stat panel for the mob
+ var/has_hands = 0 // Set to 1 to enable the use of hands and the hands hud
+ var/humanoid_hands = 0 // Can a player in this mob use things like guns or AI cards?
+ var/hand_form = "hands" // Used in IsHumanoidToolUser. 'Your X are not fit-'.
+ var/list/hud_gears // Slots to show on the hud (typically none)
+ var/ui_icons // Icon file path to use for the HUD, otherwise generic icons are used
+ var/r_hand_sprite // If they have hands,
+ var/l_hand_sprite // they could use some icons.
+ var/player_msg // Message to print to players about 'how' to play this mob on login.
+
+ //Mob icon/appearance settings
+ var/icon_living = "" // The iconstate if we're alive, required
+ var/icon_dead = "" // The iconstate if we're dead, required
+ var/icon_gib = "generic_gib" // The iconstate for being gibbed, optional. Defaults to a generic gib animation.
+ var/icon_rest = null // The iconstate for resting, optional
+ var/image/modifier_overlay = null // Holds overlays from modifiers.
+ var/image/eye_layer = null // Holds the eye overlay.
+ var/has_eye_glow = FALSE // If true, adds an overlay over the lighting plane for [icon_state]-eyes.
+ attack_icon = 'icons/effects/effects.dmi' //Just the default, played like the weapon attack anim
+ attack_icon_state = "slash" //Just the default
+
+ //Mob talking settings
+ universal_speak = 0 // Can all mobs in the entire universe understand this one?
+ var/has_langs = list(LANGUAGE_GALCOM)// Text name of their language if they speak something other than galcom. They speak the first one.
+
+ //Movement things.
+ var/movement_cooldown = 5 // Lower is faster.
+ var/movement_sound = null // If set, will play this sound when it moves on its own will.
+ var/turn_sound = null // If set, plays the sound when the mob's dir changes in most cases.
+ var/movement_shake_radius = 0 // If set, moving will shake the camera of all living mobs within this radius slightly.
+
+ //Mob interaction
+ var/response_help = "tries to help" // If clicked on help intent
+ var/response_disarm = "tries to disarm" // If clicked on disarm intent
+ var/response_harm = "tries to hurt" // If clicked on harm intent
+ var/list/friends = list() // Mobs on this list wont get attacked regardless of faction status.
+ var/harm_intent_damage = 3 // How much an unarmed harm click does to this mob.
+ var/meat_amount = 0 // How much meat to drop from this mob when butchered
+ var/obj/meat_type // The meat object to drop
+ var/list/loot_list = list() // The list of lootable objects to drop, with "/path = prob%" structure
+ var/obj/item/weapon/card/id/myid// An ID card if they have one to give them access to stuff.
+
+ //Mob environment settings
+ var/minbodytemp = 250 // Minimum "okay" temperature in kelvin
+ var/maxbodytemp = 350 // Maximum of above
+ var/heat_damage_per_tick = 3 // Amount of damage applied if animal's body temperature is higher than maxbodytemp
+ var/cold_damage_per_tick = 2 // Same as heat_damage_per_tick, only if the bodytemperature it's lower than minbodytemp
+ var/fire_alert = 0 // 0 = fine, 1 = hot, 2 = cold
+
+ var/min_oxy = 5 // Oxygen in moles, minimum, 0 is 'no minimum'
+ var/max_oxy = 0 // Oxygen in moles, maximum, 0 is 'no maximum'
+ var/min_tox = 0 // Phoron min
+ var/max_tox = 1 // Phoron max
+ var/min_co2 = 0 // CO2 min
+ var/max_co2 = 5 // CO2 max
+ var/min_n2 = 0 // N2 min
+ var/max_n2 = 0 // N2 max
+ var/unsuitable_atoms_damage = 2 // This damage is taken when atmos doesn't fit all the requirements above
+
+ //Hostility settings
+ var/taser_kill = 1 // Is the mob weak to tasers
+
+ //Attack ranged settings
+ var/projectiletype // The projectiles I shoot
+ var/projectilesound // The sound I make when I do it
+ var/casingtype // What to make the hugely laggy casings pile out of
+
+ // Reloading settings, part of ranged code
+ var/needs_reload = FALSE // If TRUE, mob needs to reload occasionally
+ var/reload_max = 1 // How many shots the mob gets before it has to reload, will not be used if needs_reload is FALSE
+ var/reload_count = 0 // A counter to keep track of how many shots the mob has fired so far. Reloads when it hits reload_max.
+ var/reload_time = 1 SECONDS // How long it takes for a mob to reload. This is to buy a player a bit of time to run or fight.
+ var/reload_sound = 'sound/weapons/flipblade.ogg' // What sound gets played when the mob successfully reloads. Defaults to the same sound as reloading guns. Can be null.
+
+ //Mob melee settings
+ var/melee_damage_lower = 2 // Lower bound of randomized melee damage
+ var/melee_damage_upper = 6 // Upper bound of randomized melee damage
+ var/list/attacktext = list("attacked") // "You are [attacktext] by the mob!"
+ var/list/friendly = list("nuzzles") // "The mob [friendly] the person."
+ var/attack_sound = null // Sound to play when I attack
+ var/melee_miss_chance = 0 // percent chance to miss a melee attack.
+ var/attack_armor_type = "melee" // What armor does this check?
+ var/attack_armor_pen = 0 // How much armor pen this attack has.
+ var/attack_sharp = FALSE // Is the attack sharp?
+ var/attack_edge = FALSE // Does the attack have an edge?
+
+ var/melee_attack_delay = null // If set, the mob will do a windup animation and can miss if the target moves out of the way.
+ var/ranged_attack_delay = null
+ var/special_attack_delay = null
+
+ //Special attacks
+// var/special_attack_prob = 0 // The chance to ATTEMPT a special_attack_target(). If it fails, it will do a regular attack instead.
+ // This is commented out to ease the AI attack logic by being (a bit more) determanistic.
+ // You should instead limit special attacks using the below vars instead.
+ var/special_attack_min_range = null // The minimum distance required for an attempt to be made.
+ var/special_attack_max_range = null // The maximum for an attempt.
+ var/special_attack_charges = null // If set, special attacks will work off of a charge system, and won't be usable if all charges are expended. Good for grenades.
+ var/special_attack_cooldown = null // If set, special attacks will have a cooldown between uses.
+ var/last_special_attack = null // world.time when a special attack occured last, for cooldown calculations.
+
+ //Damage resistances
+ var/grab_resist = 0 // Chance for a grab attempt to fail. Note that this is not a true resist and is just a prob() of failure.
+ var/resistance = 0 // Damage reduction for all types
+ var/list/armor = list( // Values for normal getarmor() checks
+ "melee" = 0,
+ "bullet" = 0,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 100,
+ "rad" = 100
+ )
+ var/list/armor_soak = list( // Values for getsoak() checks.
+ "melee" = 0,
+ "bullet" = 0,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+ // Protection against heat/cold/electric/water effects.
+ // 0 is no protection, 1 is total protection. Negative numbers increase vulnerability.
+ var/heat_resist = 0.0
+ var/cold_resist = 0.0
+ var/shock_resist = 0.0
+ var/water_resist = 1.0
+ var/poison_resist = 0.0
+ var/thick_armor = FALSE // Stops injections and "injections".
+ var/purge = 0 // Cult stuff.
+ var/supernatural = FALSE // Ditto.
+
+
+/mob/living/simple_mob/initialize()
+ verbs -= /mob/verb/observe
+ health = maxHealth
+
+ for(var/L in has_langs)
+ languages |= all_languages[L]
+ if(languages.len)
+ default_language = languages[1]
+
+ if(has_eye_glow)
+ add_eyes()
+ return ..()
+
+
+/mob/living/simple_mob/Destroy()
+ default_language = null
+ if(myid)
+ qdel(myid)
+ myid = null
+
+ friends.Cut()
+ languages.Cut()
+
+ if(has_eye_glow)
+ remove_eyes()
+ return ..()
+
+/mob/living/simple_mob/death()
+ update_icon()
+ ..()
+
+
+//Client attached
+/mob/living/simple_mob/Login()
+ . = ..()
+ to_chat(src,"You are \the [src]. [player_msg]")
+
+
+/mob/living/simple_mob/emote(var/act, var/type, var/desc)
+ if(act)
+ ..(act, type, desc)
+
+
+/mob/living/simple_mob/SelfMove(turf/n, direct)
+ var/turf/old_turf = get_turf(src)
+ var/old_dir = dir
+ . = ..()
+ if(. && movement_shake_radius)
+ for(var/mob/living/L in range(movement_shake_radius, src))
+ shake_camera(L, 1, 1)
+ if(turn_sound && dir != old_dir)
+ playsound(src, turn_sound, 50, 1)
+ else if(movement_sound && old_turf != get_turf(src)) // Playing both sounds at the same time generally sounds bad.
+ playsound(src, movement_sound, 50, 1)
+/*
+/mob/living/simple_mob/set_dir(new_dir)
+ if(dir != new_dir)
+ playsound(src, turn_sound, 50, 1)
+ return ..()
+*/
+/mob/living/simple_mob/movement_delay()
+ var/tally = 0 //Incase I need to add stuff other than "speed" later
+
+ tally = movement_cooldown
+
+ if(force_max_speed)
+ return -3
+
+ for(var/datum/modifier/M in modifiers)
+ if(!isnull(M.haste) && M.haste == TRUE)
+ return -3
+ if(!isnull(M.slowdown))
+ tally += M.slowdown
+
+ // Turf related slowdown
+ var/turf/T = get_turf(src)
+ if(T && T.movement_cost && !hovering) // Flying mobs ignore turf-based slowdown.
+ tally += T.movement_cost
+
+ if(purge)//Purged creatures will move more slowly. The more time before their purge stops, the slower they'll move.
+ if(tally <= 0)
+ tally = 1
+ tally *= purge
+
+ if(m_intent == "walk")
+ tally *= 1.5
+
+ return tally+config.animal_delay
+
+
+/mob/living/simple_mob/Stat()
+ ..()
+ if(statpanel("Status") && show_stat_health)
+ stat(null, "Health: [round((health / getMaxHealth()) * 100)]%")
+
+/mob/living/simple_mob/lay_down()
+ ..()
+ if(resting && icon_rest)
+ icon_state = icon_rest
+ else
+ icon_state = icon_living
+ update_icon()
+
+
+/mob/living/simple_mob/say(var/message,var/datum/language/language)
+ var/verb = "says"
+ if(speak_emote.len)
+ verb = pick(speak_emote)
+
+ message = sanitize(message)
+
+ ..(message, null, verb)
+
+/mob/living/simple_mob/get_speech_ending(verb, var/ending)
+ return verb
+
+
+// Harvest an animal's delicious byproducts
+/mob/living/simple_mob/proc/harvest(var/mob/user)
+ var/actual_meat_amount = max(1,(meat_amount/2))
+ if(meat_type && actual_meat_amount>0 && (stat == DEAD))
+ for(var/i=0;i[user] chops up \the [src]!")
+ new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
+ qdel(src)
+ else
+ user.visible_message("[user] butchers \the [src] messily!")
+ gib()
+
+
+/mob/living/simple_mob/is_sentient()
+ return mob_class & MOB_CLASS_HUMANOID|MOB_CLASS_ANIMAL|MOB_CLASS_SLIME // Update this if needed.
+
+/mob/living/simple_mob/get_nametag_desc(mob/user)
+ return "[tt_desc]"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm b/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm
new file mode 100644
index 0000000000..e41d5ae66b
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/animal.dm
@@ -0,0 +1,9 @@
+/mob/living/simple_mob/animal
+ mob_class = MOB_CLASS_ANIMAL
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ response_help = "pets"
+ response_disarm = "shoos"
+ response_harm = "hits"
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm
new file mode 100644
index 0000000000..92f4e51c9c
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm
@@ -0,0 +1,237 @@
+// Borers are probably still going to be buggy as fuck, this is just bringing their mob defines up to the new system.
+// IMO they're a relic of several ages we're long past, their code and their design showing this plainly, but removing them would
+// make certain people Unhappy so here we are. They need a complete redesign but thats beyond the scope of the rewrite.
+
+/mob/living/simple_mob/animal/borer
+ name = "cortical borer"
+ desc = "A small, quivering sluglike creature."
+ icon_state = "brainslug"
+ item_state = "brainslug"
+ icon_living = "brainslug"
+ icon_dead = "brainslug_dead"
+
+ response_help = "pokes"
+ response_disarm = "prods"
+ response_harm = "stomps on"
+ attacktext = list("nipped")
+ friendly = list("prods")
+
+ status_flags = CANPUSH
+ pass_flags = PASSTABLE
+ movement_cooldown = 5
+
+ universal_understand = TRUE
+ can_be_antagged = TRUE
+
+ holder_type = /obj/item/weapon/holder/borer
+ ai_holder_type = null // This is player-controlled, always.
+
+ var/chemicals = 10 // A resource used for reproduction and powers.
+ var/mob/living/carbon/human/host = null // The humanoid host for the brain worm.
+ var/true_name = null // String used when speaking among other worms.
+ var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth.
+ var/controlling = FALSE // Used in human death ceck.
+ var/docile = FALSE // Sugar can stop borers from acting.
+ var/has_reproduced = FALSE
+ var/roundstart = FALSE // If true, spawning won't try to pull a ghost.
+ var/used_dominate // world.time when the dominate power was last used.
+
+
+/mob/living/simple_mob/animal/borer/roundstart
+ roundstart = TRUE
+
+/mob/living/simple_mob/animal/borer/Login()
+ ..()
+ if(mind)
+ borers.add_antagonist(mind)
+
+/mob/living/simple_mob/animal/borer/initialize()
+ add_language("Cortical Link")
+
+ verbs += /mob/living/proc/ventcrawl
+ verbs += /mob/living/proc/hide
+
+ true_name = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]"
+
+ if(!roundstart)
+ request_player()
+
+ return ..()
+
+/mob/living/simple_mob/animal/borer/handle_special()
+ if(host && !stat && !host.stat)
+ // Handle docility.
+ if(host.reagents.has_reagent("sugar") && !docile)
+ var/message = "You feel the soporific flow of sugar in your host's blood, lulling you into docility."
+ var/target = controlling ? host : src
+ to_chat(target, span("warning", message))
+ docile = TRUE
+
+ else if(docile)
+ var/message = "You shake off your lethargy as the sugar leaves your host's blood."
+ var/target = controlling ? host : src
+ to_chat(target, span("notice", message))
+ docile = FALSE
+
+ // Chem regen.
+ if(chemicals < 250)
+ chemicals++
+
+ // Control stuff.
+ if(controlling)
+ if(docile)
+ to_chat(host, span("warning", "You are feeling far too docile to continue controlling your host..."))
+ host.release_control()
+ return
+
+ if(prob(5))
+ host.adjustBrainLoss(0.1)
+
+ if(prob(host.brainloss/20))
+ host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_v","gasp"))]")
+
+/mob/living/simple_mob/animal/borer/Stat()
+ ..()
+ if(client.statpanel == "Status")
+ statpanel("Status")
+ if(emergency_shuttle)
+ var/eta_status = emergency_shuttle.get_status_panel_eta()
+ if(eta_status)
+ stat(null, eta_status)
+ stat("Chemicals", chemicals)
+
+/mob/living/simple_mob/animal/borer/proc/detatch()
+ if(!host || !controlling)
+ return
+
+ if(istype(host, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = host
+ var/obj/item/organ/external/head = H.get_organ(BP_HEAD)
+ if(head)
+ head.implants -= src
+
+ controlling = FALSE
+
+ host.remove_language("Cortical Link")
+ host.verbs -= /mob/living/carbon/proc/release_control
+ host.verbs -= /mob/living/carbon/proc/punish_host
+ host.verbs -= /mob/living/carbon/proc/spawn_larvae
+
+ if(host_brain)
+ // these are here so bans and multikey warnings are not triggered on the wrong people when ckey is changed.
+ // computer_id and IP are not updated magically on their own in offline mobs -walter0o
+
+ // This shit need to die in a phoron fire.
+
+ // host -> self
+ var/h2s_id = host.computer_id
+ var/h2s_ip= host.lastKnownIP
+ host.computer_id = null
+ host.lastKnownIP = null
+
+ src.ckey = host.ckey
+
+ if(!src.computer_id)
+ src.computer_id = h2s_id
+
+ if(!host_brain.lastKnownIP)
+ src.lastKnownIP = h2s_ip
+
+ // brain -> host
+ var/b2h_id = host_brain.computer_id
+ var/b2h_ip= host_brain.lastKnownIP
+ host_brain.computer_id = null
+ host_brain.lastKnownIP = null
+
+ host.ckey = host_brain.ckey
+
+ if(!host.computer_id)
+ host.computer_id = b2h_id
+
+ if(!host.lastKnownIP)
+ host.lastKnownIP = b2h_ip
+
+ qdel(host_brain)
+
+
+/mob/living/simple_mob/animal/borer/proc/leave_host()
+ if(!host)
+ return
+
+ if(host.mind)
+ borers.remove_antagonist(host.mind)
+
+ forceMove(get_turf(host))
+
+ reset_view(null)
+ machine = null
+
+ host.reset_view(null)
+ host.machine = null
+ host = null
+
+/mob/living/simple_mob/animal/borer/proc/request_player()
+ var/datum/ghost_query/Q = new /datum/ghost_query/borer()
+ var/list/winner = Q.query() // This will sleep the proc for awhile.
+ if(winner.len)
+ var/mob/observer/dead/D = winner[1]
+ transfer_personality(D)
+
+/mob/living/simple_mob/animal/borer/proc/transfer_personality(mob/candidate)
+ if(!candidate || !candidate.mind)
+ return
+
+ src.mind = candidate.mind
+ candidate.mind.current = src
+ ckey = candidate.ckey
+
+ if(mind)
+ mind.assigned_role = "Cortical Borer"
+ mind.special_role = "Cortical Borer"
+
+ to_chat(src, span("notice", "You are a cortical borer! You are a brain slug that worms its way \
+ into the head of its victim. Use stealth, persuasion and your powers of mind control to keep you, \
+ your host and your eventual spawn safe and warm."))
+ to_chat(src, "You can speak to your victim with say, to other borers with say :x, and use your Abilities tab to access powers.")
+
+/mob/living/simple_mob/animal/borer/cannot_use_vents()
+ return
+
+// This is awful but its literally say code.
+/mob/living/simple_mob/animal/borer/say(message)
+ message = sanitize(message)
+ message = capitalize(message)
+
+ if(!message)
+ return
+
+ if(stat >= DEAD)
+ return say_dead(message)
+ else if(stat)
+ return
+
+ if(client && client.prefs.muted & MUTE_IC)
+ to_chat(src, span("danger", "You cannot speak in IC (muted)."))
+ return
+
+ if(copytext(message, 1, 2) == "*")
+ return emote(copytext(message, 2))
+
+ var/datum/language/L = parse_language(message)
+ if(L && L.flags & HIVEMIND)
+ L.broadcast(src,trim(copytext(message,3)), src.true_name)
+ return
+
+ if(!host)
+ //TODO: have this pick a random mob within 3 tiles to speak for the borer.
+ to_chat(src, span("warning", "You have no host to speak to."))
+ return //No host, no audible speech.
+
+ to_chat(src, "You drop words into [host]'s mind: \"[message]\"")
+ to_chat(host, "Your own thoughts speak: \"[message]\"")
+
+ for(var/mob/M in player_list)
+ if(istype(M, /mob/new_player))
+ continue
+ else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
+ to_chat(M, "[src.true_name] whispers to [host], \"[message]\"")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm
new file mode 100644
index 0000000000..f5da079b97
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm
@@ -0,0 +1,59 @@
+// Straight move from the old location, with the paths corrected.
+
+/mob/living/captive_brain
+ name = "host brain"
+ real_name = "host brain"
+ universal_understand = 1
+
+/mob/living/captive_brain/say(var/message)
+
+ if (src.client)
+ if(client.prefs.muted & MUTE_IC)
+ src << "You cannot speak in IC (muted)."
+ return
+
+ if(istype(src.loc, /mob/living/simple_mob/animal/borer))
+
+ message = sanitize(message)
+ if (!message)
+ return
+ log_say(message,src)
+ if (stat == 2)
+ return say_dead(message)
+
+ var/mob/living/simple_mob/animal/borer/B = src.loc
+ src << "You whisper silently, \"[message]\""
+ B.host << "The captive mind of [src] whispers, \"[message]\""
+
+ for (var/mob/M in player_list)
+ if (istype(M, /mob/new_player))
+ continue
+ else if(M.stat == DEAD && M.is_preference_enabled(/datum/client_preference/ghost_ears))
+ M << "The captive mind of [src] whispers, \"[message]\""
+
+/mob/living/captive_brain/emote(var/message)
+ return
+
+/mob/living/captive_brain/process_resist()
+ //Resisting control by an alien mind.
+ if(istype(src.loc, /mob/living/simple_mob/animal/borer))
+ var/mob/living/simple_mob/animal/borer/B = src.loc
+ var/mob/living/captive_brain/H = src
+
+ H << "You begin doggedly resisting the parasite's control (this will take approximately sixty seconds)."
+ B.host << "You feel the captive mind of [src] begin to resist your control."
+
+ spawn(rand(200,250)+B.host.brainloss)
+ if(!B || !B.controlling) return
+
+ B.host.adjustBrainLoss(rand(0.1,0.5))
+ H << "With an immense exertion of will, you regain control of your body!"
+ B.host << "You feel control of the host brain ripped from your grasp, and retract your probosci before the wild neural impulses can damage you."
+ B.detatch()
+ verbs -= /mob/living/carbon/proc/release_control
+ verbs -= /mob/living/carbon/proc/punish_host
+ verbs -= /mob/living/carbon/proc/spawn_larvae
+
+ return
+
+ ..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm
new file mode 100644
index 0000000000..55dac2492a
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_powers.dm
@@ -0,0 +1,354 @@
+/mob/living/simple_mob/animal/borer/verb/release_host()
+ set category = "Abilities"
+ set name = "Release Host"
+ set desc = "Slither out of your host."
+
+ if(!host)
+ src << "You are not inside a host body."
+ return
+
+ if(stat)
+ src << "You cannot leave your host in your current state."
+
+ if(docile)
+ src << "You are feeling far too docile to do that."
+ return
+
+ if(!host || !src) return
+
+ src << "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal."
+
+ if(!host.stat)
+ host << "An odd, uncomfortable pressure begins to build inside your skull, behind your ear..."
+
+ spawn(100)
+
+ if(!host || !src) return
+
+ if(src.stat)
+ src << "You cannot release your host in your current state."
+ return
+
+ src << "You wiggle out of [host]'s ear and plop to the ground."
+ if(host.mind)
+ if(!host.stat)
+ host << "Something slimy wiggles out of your ear and plops to the ground!"
+ host << "As though waking from a dream, you shake off the insidious mind control of the brain worm. Your thoughts are your own again."
+
+ detatch()
+ leave_host()
+
+/mob/living/simple_mob/animal/borer/verb/infest()
+ set category = "Abilities"
+ set name = "Infest"
+ set desc = "Infest a suitable humanoid host."
+
+ if(host)
+ src << "You are already within a host."
+ return
+
+ if(stat)
+ src << "You cannot infest a target in your current state."
+ return
+
+ var/list/choices = list()
+ for(var/mob/living/carbon/C in view(1,src))
+ if(src.Adjacent(C))
+ choices += C
+
+ if(!choices.len)
+ src << "There are no viable hosts within range..."
+ return
+
+ var/mob/living/carbon/M = input(src,"Who do you wish to infest?") in null|choices
+
+ if(!M || !src) return
+
+ if(!(src.Adjacent(M))) return
+
+ if(M.has_brain_worms())
+ src << "You cannot infest someone who is already infested!"
+ return
+
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+
+ var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD]
+ if(!E || E.is_stump())
+ src << "\The [H] does not have a head!"
+
+ if(!H.should_have_organ("brain"))
+ src << "\The [H] does not seem to have an ear canal to breach."
+ return
+
+ if(H.check_head_coverage())
+ src << "You cannot get through that host's protective gear."
+ return
+
+ M << "Something slimy begins probing at the opening of your ear canal..."
+ src << "You slither up [M] and begin probing at their ear canal..."
+
+ if(!do_after(src,30))
+ src << "As [M] moves away, you are dislodged and fall to the ground."
+ return
+
+ if(!M || !src) return
+
+ if(src.stat)
+ src << "You cannot infest a target in your current state."
+ return
+
+ if(M in view(1, src))
+ src << "You wiggle into [M]'s ear."
+ if(!M.stat)
+ M << "Something disgusting and slimy wiggles into your ear!"
+
+ src.host = M
+ src.forceMove(M)
+
+ //Update their traitor status.
+ if(host.mind)
+ borers.add_antagonist_mind(host.mind, 1, borers.faction_role_text, borers.faction_welcome)
+
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/I = H.internal_organs_by_name["brain"]
+ if(!I) // No brain organ, so the borer moves in and replaces it permanently.
+ replace_brain()
+ else
+ // If they're in normally, implant removal can get them out.
+ var/obj/item/organ/external/head = H.get_organ(BP_HEAD)
+ head.implants += src
+
+ return
+ else
+ src << "They are no longer in range!"
+ return
+
+/*
+/mob/living/simple_mob/animal/borer/verb/devour_brain()
+ set category = "Abilities"
+ set name = "Devour Brain"
+ set desc = "Take permanent control of a dead host."
+
+ if(!host)
+ src << "You are not inside a host body."
+ return
+
+ if(host.stat != 2)
+ src << "Your host is still alive."
+ return
+
+ if(stat)
+ src << "You cannot do that in your current state."
+
+ if(docile)
+ src << "You are feeling far too docile to do that."
+ return
+
+
+ src << "It only takes a few moments to render the dead host brain down into a nutrient-rich slurry..."
+ replace_brain()
+*/
+
+// BRAIN WORM ZOMBIES AAAAH.
+/mob/living/simple_mob/animal/borer/proc/replace_brain()
+
+ var/mob/living/carbon/human/H = host
+
+ if(!istype(host))
+ src << "This host does not have a suitable brain."
+ return
+
+ src << "You settle into the empty brainpan and begin to expand, fusing inextricably with the dead flesh of [H]."
+
+ H.add_language("Cortical Link")
+
+ if(host.stat == 2)
+ H.verbs |= /mob/living/carbon/human/proc/jumpstart
+
+ H.verbs |= /mob/living/carbon/human/proc/psychic_whisper
+ H.verbs |= /mob/living/carbon/human/proc/tackle
+ H.verbs |= /mob/living/carbon/proc/spawn_larvae
+
+ if(H.client)
+ H.ghostize(0)
+
+ if(src.mind)
+ src.mind.special_role = "Borer Husk"
+ src.mind.transfer_to(host)
+
+ H.ChangeToHusk()
+
+ var/obj/item/organ/internal/borer/B = new(H)
+ H.internal_organs_by_name["brain"] = B
+ H.internal_organs |= B
+
+ var/obj/item/organ/external/affecting = H.get_organ(BP_HEAD)
+ affecting.implants -= src
+
+ var/s2h_id = src.computer_id
+ var/s2h_ip= src.lastKnownIP
+ src.computer_id = null
+ src.lastKnownIP = null
+
+ if(!H.computer_id)
+ H.computer_id = s2h_id
+
+ if(!H.lastKnownIP)
+ H.lastKnownIP = s2h_ip
+
+/mob/living/simple_mob/animal/borer/verb/secrete_chemicals()
+ set category = "Abilities"
+ set name = "Secrete Chemicals"
+ set desc = "Push some chemicals into your host's bloodstream."
+
+ if(!host)
+ src << "You are not inside a host body."
+ return
+
+ if(stat)
+ src << "You cannot secrete chemicals in your current state."
+
+ if(docile)
+ src << "You are feeling far too docile to do that."
+ return
+
+ if(chemicals < 50)
+ src << "You don't have enough chemicals!"
+
+ var/chem = input("Select a chemical to secrete.", "Chemicals") as null|anything in list("alkysine","bicaridine","hyperzine","tramadol")
+
+ if(!chem || chemicals < 50 || !host || controlling || !src || stat) //Sanity check.
+ return
+
+ src << "You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream."
+ host.reagents.add_reagent(chem, 10)
+ chemicals -= 50
+
+/mob/living/simple_mob/animal/borer/verb/dominate_victim()
+ set category = "Abilities"
+ set name = "Paralyze Victim"
+ set desc = "Freeze the limbs of a potential host with supernatural fear."
+
+ if(world.time - used_dominate < 150)
+ src << "You cannot use that ability again so soon."
+ return
+
+ if(host)
+ src << "You cannot do that from within a host body."
+ return
+
+ if(src.stat)
+ src << "You cannot do that in your current state."
+ return
+
+ var/list/choices = list()
+ for(var/mob/living/carbon/C in view(3,src))
+ if(C.stat != 2)
+ choices += C
+
+ if(world.time - used_dominate < 150)
+ src << "You cannot use that ability again so soon."
+ return
+
+ var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices
+
+ if(!M || !src) return
+
+ if(M.has_brain_worms())
+ src << "You cannot infest someone who is already infested!"
+ return
+
+ src << "You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread."
+ M << "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing."
+ M.Weaken(10)
+
+ used_dominate = world.time
+
+/mob/living/simple_mob/animal/borer/verb/bond_brain()
+ set category = "Abilities"
+ set name = "Assume Control"
+ set desc = "Fully connect to the brain of your host."
+
+ if(!host)
+ src << "You are not inside a host body."
+ return
+
+ if(src.stat)
+ src << "You cannot do that in your current state."
+ return
+
+ if(docile)
+ src << "You are feeling far too docile to do that."
+ return
+
+ src << "You begin delicately adjusting your connection to the host brain..."
+
+ spawn(100+(host.brainloss*5))
+
+ if(!host || !src || controlling)
+ return
+ else
+
+ src << "You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system."
+ host << "You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours."
+ host.add_language("Cortical Link")
+
+ // host -> brain
+ var/h2b_id = host.computer_id
+ var/h2b_ip= host.lastKnownIP
+ host.computer_id = null
+ host.lastKnownIP = null
+
+ qdel(host_brain)
+ host_brain = new(src)
+
+ host_brain.ckey = host.ckey
+
+ host_brain.name = host.name
+
+ if(!host_brain.computer_id)
+ host_brain.computer_id = h2b_id
+
+ if(!host_brain.lastKnownIP)
+ host_brain.lastKnownIP = h2b_ip
+
+ // self -> host
+ var/s2h_id = src.computer_id
+ var/s2h_ip= src.lastKnownIP
+ src.computer_id = null
+ src.lastKnownIP = null
+
+ host.ckey = src.ckey
+
+ if(!host.computer_id)
+ host.computer_id = s2h_id
+
+ if(!host.lastKnownIP)
+ host.lastKnownIP = s2h_ip
+
+ controlling = 1
+
+ host.verbs += /mob/living/carbon/proc/release_control
+ host.verbs += /mob/living/carbon/proc/punish_host
+ host.verbs += /mob/living/carbon/proc/spawn_larvae
+
+ return
+
+/mob/living/carbon/human/proc/jumpstart()
+ set category = "Abilities"
+ set name = "Revive Host"
+ set desc = "Send a jolt of electricity through your host, reviving them."
+
+ if(stat != 2)
+ usr << "Your host is already alive."
+ return
+
+ verbs -= /mob/living/carbon/human/proc/jumpstart
+ visible_message("With a hideous, rattling moan, [src] shudders back to life!")
+
+ rejuvenate()
+ restore_blood()
+ fixblood()
+ update_canmove()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm
new file mode 100644
index 0000000000..775f9ae6cb
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/chicken.dm
@@ -0,0 +1,156 @@
+GLOBAL_VAR_CONST(MAX_CHICKENS, 50) // How many chickens CAN we have?
+GLOBAL_VAR_INIT(chicken_count, 0) // How mant chickens DO we have?
+
+/mob/living/simple_mob/animal/passive/chicken
+ name = "chicken"
+ desc = "Hopefully the eggs are good this season."
+ tt_desc = "E Gallus gallus"
+ icon_state = "chicken"
+ icon_living = "chicken"
+ icon_dead = "chicken_dead"
+
+ health = 10
+ maxHealth = 10
+
+ pass_flags = PASSTABLE
+ mob_size = MOB_SMALL
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
+ attacktext = list("kicked")
+
+ has_langs = list("Bird")
+
+ say_list_type = /datum/say_list/chicken
+
+ meat_amount = 2
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ var/eggsleft = 0
+ var/body_color
+
+/mob/living/simple_mob/animal/passive/chicken/New()
+ ..()
+ if(!body_color)
+ body_color = pick( list("brown","black","white") )
+ icon_state = "chicken_[body_color]"
+ icon_living = "chicken_[body_color]"
+ icon_dead = "chicken_[body_color]_dead"
+ pixel_x = rand(-6, 6)
+ pixel_y = rand(0, 10)
+ GLOB.chicken_count += 1
+
+/mob/living/simple_mob/animal/passive/chicken/Destroy()
+ ..()
+ GLOB.chicken_count -= 1
+
+/mob/living/simple_mob/animal/passive/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/grown)) //feedin' dem chickens
+ var/obj/item/weapon/reagent_containers/food/snacks/grown/G = O
+ if(G.seed && G.seed.kitchen_tag == "wheat")
+ if(!stat && eggsleft < 8)
+ user.visible_message("[user] feeds [O] to [name]! It clucks happily.","You feed [O] to [name]! It clucks happily.")
+ user.drop_item()
+ qdel(O)
+ eggsleft += rand(1, 4)
+ else
+ to_chat(user, "[name] doesn't seem hungry!")
+ else
+ to_chat(user, "[name] doesn't seem interested in that.")
+ else
+ ..()
+
+/mob/living/simple_mob/animal/passive/chicken/Life()
+ . =..()
+ if(!.)
+ return
+ if(!stat && prob(3) && eggsleft > 0)
+ visible_message("[src] [pick("lays an egg.","squats down and croons.","begins making a huge racket.","begins clucking raucously.")]")
+ eggsleft--
+ var/obj/item/weapon/reagent_containers/food/snacks/egg/E = new(get_turf(src))
+ E.pixel_x = rand(-6,6)
+ E.pixel_y = rand(-6,6)
+ if(GLOB.chicken_count < GLOB.MAX_CHICKENS && prob(10))
+ processing_objects.Add(E)
+
+
+
+
+
+
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/var/amount_grown = 0
+
+// This only starts normally if there are less than MAX_CHICKENS chickens
+/obj/item/weapon/reagent_containers/food/snacks/egg/process()
+ if(isturf(loc))
+ amount_grown += rand(1,2)
+ if(amount_grown >= 100)
+ visible_message("[src] hatches with a quiet cracking sound.")
+ new /mob/living/simple_mob/animal/passive/chick(get_turf(src))
+ processing_objects.Remove(src)
+ qdel(src)
+ else
+ processing_objects.Remove(src)
+
+
+
+
+
+
+
+/mob/living/simple_mob/animal/passive/chick
+ name = "chick"
+ desc = "Adorable! They make such a racket though."
+ tt_desc = "E Gallus gallus"
+ icon_state = "chick"
+ icon_living = "chick"
+ icon_dead = "chick_dead"
+ icon_gib = "chick_gib"
+
+ health = 1
+ maxHealth = 1
+
+ pass_flags = PASSTABLE | PASSGRILLE
+ mob_size = MOB_MINISCULE
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
+ attacktext = list("kicked")
+
+ has_langs = list("Bird")
+
+ say_list_type = /datum/say_list/chick
+
+ meat_amount = 1
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ var/amount_grown = 0
+
+/mob/living/simple_mob/animal/passive/chick/New()
+ ..()
+ pixel_x = rand(-6, 6)
+ pixel_y = rand(0, 10)
+
+/mob/living/simple_mob/animal/passive/chick/Life()
+ . =..()
+ if(!.)
+ return
+ if(!stat)
+ amount_grown += rand(1,2)
+ if(amount_grown >= 100)
+ new /mob/living/simple_mob/animal/passive/chicken(src.loc)
+ qdel(src)
+
+// Say Lists
+/datum/say_list/chicken
+ speak = list("Cluck!","BWAAAAARK BWAK BWAK BWAK!","Bwaak bwak.")
+ emote_hear = list("clucks","croons")
+ emote_see = list("pecks at the ground","flaps its wings viciously")
+
+/datum/say_list/chick
+ speak = list("Cherp.","Cherp?","Chirrup.","Cheep!")
+ emote_hear = list("cheeps")
+ emote_see = list("pecks at the ground","flaps its tiny wings")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm
new file mode 100644
index 0000000000..b5373c176a
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/cow.dm
@@ -0,0 +1,67 @@
+/mob/living/simple_mob/animal/passive/cow
+ name = "cow"
+ desc = "Known for their milk, just don't tip them over."
+ tt_desc = "E Bos taurus"
+ icon_state = "cow"
+ icon_living = "cow"
+ icon_dead = "cow_dead"
+ icon_gib = "cow_gib"
+
+ health = 50
+ maxHealth = 50
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
+ attacktext = list("kicked")
+
+ say_list_type = /datum/say_list/cow
+
+ meat_amount = 6
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ var/datum/reagents/udder = null
+
+/mob/living/simple_mob/animal/passive/cow/New()
+ udder = new(50)
+ udder.my_atom = src
+ ..()
+
+/mob/living/simple_mob/animal/passive/cow/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ var/obj/item/weapon/reagent_containers/glass/G = O
+ if(stat == CONSCIOUS && istype(G) && G.is_open_container())
+ user.visible_message("[user] milks [src] using \the [O].")
+ var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
+ if(G.reagents.total_volume >= G.volume)
+ to_chat(user, "The [O] is full.")
+ if(!transfered)
+ to_chat(user, "The udder is dry. Wait a bit longer...")
+ else
+ ..()
+
+/mob/living/simple_mob/animal/passive/cow/Life()
+ . = ..()
+ if(stat == CONSCIOUS)
+ if(udder && prob(5))
+ udder.add_reagent("milk", rand(5, 10))
+
+/mob/living/simple_mob/animal/passive/cow/attack_hand(mob/living/carbon/M as mob)
+ if(!stat && M.a_intent == I_DISARM && icon_state != icon_dead)
+ M.visible_message("[M] tips over [src].","You tip over [src].")
+ Weaken(30)
+ icon_state = icon_dead
+ spawn(rand(20,50))
+ if(!stat && M)
+ icon_state = icon_living
+ var/list/responses = list( "[src] looks at you imploringly.",
+ "[src] looks at you pleadingly",
+ "[src] looks at you with a resigned expression.",
+ "[src] seems resigned to its fate.")
+ to_chat(M, pick(responses))
+ else
+ ..()
+
+/datum/say_list/cow
+ speak = list("moo?","moo","MOOOOOO")
+ emote_hear = list("brays", "moos","moos hauntingly")
+ emote_see = list("shakes its head")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm
new file mode 100644
index 0000000000..7ff82a8160
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/farm animals/goat.dm
@@ -0,0 +1,81 @@
+/mob/living/simple_mob/animal/goat
+ name = "goat"
+ desc = "Not known for their pleasant disposition."
+ tt_desc = "E Oreamnos americanus"
+ icon_state = "goat"
+ icon_living = "goat"
+ icon_dead = "goat_dead"
+
+ faction = "goat"
+
+ health = 40
+ maxHealth = 40
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
+
+ melee_damage_lower = 1
+ melee_damage_upper = 5
+ attacktext = list("kicked")
+
+ say_list_type = /datum/say_list/goat
+ ai_holder_type = /datum/ai_holder/simple_mob/retaliate
+
+ meat_amount = 4
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ var/datum/reagents/udder = null
+
+/mob/living/simple_mob/animal/goat/New()
+ udder = new(50)
+ udder.my_atom = src
+ ..()
+
+/mob/living/simple_mob/animal/goat/Life()
+ . = ..()
+ if(.)
+ if(stat == CONSCIOUS)
+ if(udder && prob(5))
+ udder.add_reagent("milk", rand(5, 10))
+
+ if(locate(/obj/effect/plant) in loc)
+ var/obj/effect/plant/SV = locate() in loc
+ SV.die_off(1)
+
+ if(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in loc)
+ var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/SP = locate() in loc
+ qdel(SP)
+
+ if(!pulledby)
+ var/obj/effect/plant/food
+ food = locate(/obj/effect/plant) in oview(5,loc)
+ if(food)
+ var/step = get_step_to(src, food, 0)
+ Move(step)
+
+/mob/living/simple_mob/animal/goat/Move()
+ ..()
+ if(!stat)
+ for(var/obj/effect/plant/SV in loc)
+ SV.die_off(1)
+
+/mob/living/simple_mob/animal/goat/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ var/obj/item/weapon/reagent_containers/glass/G = O
+ if(stat == CONSCIOUS && istype(G) && G.is_open_container())
+ user.visible_message("[user] milks [src] using \the [O].")
+ var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
+ if(G.reagents.total_volume >= G.volume)
+ to_chat(user, "The [O] is full.")
+ if(!transfered)
+ to_chat(user, "The udder is dry. Wait a bit longer...")
+ else
+ ..()
+
+/datum/say_list/goat
+ speak = list("EHEHEHEHEH","eh?")
+ emote_hear = list("brays")
+ emote_see = list("shakes its head", "stamps a foot", "glares around")
+
+ // say_got_target doesn't seem to handle emotes, but keeping this here in case someone wants to make it work
+// say_got_target = list("[src] gets an evil-looking gleam in their eye.")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
new file mode 100644
index 0000000000..a85463d723
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/_giant_spider.dm
@@ -0,0 +1,64 @@
+/*
+ Spiders come in various types, and are a fairly common enemy both inside and outside the station.
+ Their attacks can inject reagents, which can cause harm long after the spider is killed.
+ Thick material will prevent injections, similar to other means of injections.
+*/
+
+// The base spider, in the 'walking tank' family.
+/mob/living/simple_mob/animal/giant_spider
+ name = "giant spider"
+ desc = "Furry and brown, it makes you shudder to look at it. This one has deep red eyes."
+ tt_desc = "Atrax robustus gigantus"
+ icon_state = "guard"
+ icon_living = "guard"
+ icon_dead = "guard_dead"
+ has_eye_glow = TRUE
+
+ faction = "spiders"
+ maxHealth = 200
+ health = 200
+ pass_flags = PASSTABLE
+ movement_cooldown = 10
+ poison_resist = 0.5
+
+ see_in_dark = 10
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "punches"
+
+ melee_damage_lower = 18
+ melee_damage_upper = 30
+ attack_sharp = 1
+ attack_edge = 1
+ attack_sound = 'sound/weapons/bite.ogg'
+
+ heat_damage_per_tick = 20
+ cold_damage_per_tick = 20
+ minbodytemp = 175 // So they can all survive Sif without having to be classed under /sif subtype.
+
+ speak_emote = list("chitters")
+
+ meat_amount = 1
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat
+
+ say_list_type = /datum/say_list/spider
+
+ var/poison_type = "spidertoxin" // The reagent that gets injected when it attacks.
+ var/poison_chance = 10 // Chance for injection to occur.
+ var/poison_per_bite = 5 // Amount added per injection.
+
+/mob/living/simple_mob/animal/giant_spider/apply_melee_effects(var/atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(L.reagents)
+ var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
+ if(L.can_inject(src, null, target_zone))
+ inject_poison(L, target_zone)
+
+// Does actual poison injection, after all checks passed.
+/mob/living/simple_mob/animal/giant_spider/proc/inject_poison(mob/living/L, target_zone)
+ if(prob(poison_chance))
+ to_chat(L, "You feel a tiny prick.")
+ L.reagents.add_reagent(poison_type, poison_per_bite)
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/carrier.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/carrier.dm
new file mode 100644
index 0000000000..575e3ad204
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/carrier.dm
@@ -0,0 +1,67 @@
+// Carriers are not too dangerous on their own, but they create more spiders when dying.
+
+/mob/living/simple_mob/animal/giant_spider/carrier
+ desc = "Furry, beige, and red, it makes you shudder to look at it. This one has luminous green eyes."
+ icon_state = "carrier"
+ icon_living = "carrier"
+ icon_dead = "carrier_dead"
+
+ maxHealth = 100
+ health = 100
+
+ melee_damage_lower = 8
+ melee_damage_upper = 25
+
+ poison_per_bite = 3
+ poison_type = "chloralhydrate"
+
+ movement_cooldown = 5
+
+ player_msg = "Upon dying, you will release a swarm of spiderlings or young hunter spiders.
\
+ If a spider emerges, you will be placed in control of it."
+
+ var/spiderling_count = 0
+ var/spiderling_type = /obj/effect/spider/spiderling
+ var/swarmling_type = /mob/living/simple_mob/animal/giant_spider/hunter
+ var/swarmling_faction = "spiders"
+ var/swarmling_prob = 10 // Odds that a spiderling will be a swarmling instead.
+
+/mob/living/simple_mob/animal/giant_spider/carrier/initialize()
+ spiderling_count = rand(5, 10)
+ adjust_scale(1.2)
+ return ..()
+
+/mob/living/simple_mob/animal/giant_spider/carrier/death()
+ visible_message(span("warning", "\The [src]'s abdomen splits as it rolls over, spiderlings crawling from the wound.") )
+ spawn(1)
+ var/list/new_spiders = list()
+ for(var/i = 1 to spiderling_count)
+ if(prob(swarmling_prob) && src)
+ var/mob/living/simple_mob/animal/giant_spider/swarmling = new swarmling_type(src.loc)
+ var/swarm_health = Floor(swarmling.maxHealth * 0.4)
+ var/swarm_dam_lower = Floor(melee_damage_lower * 0.4)
+ var/swarm_dam_upper = Floor(melee_damage_upper * 0.4)
+ swarmling.name = "spiderling"
+ swarmling.maxHealth = swarm_health
+ swarmling.health = swarm_health
+ swarmling.melee_damage_lower = swarm_dam_lower
+ swarmling.melee_damage_upper = swarm_dam_upper
+ swarmling.faction = swarmling_faction
+ swarmling.adjust_scale(0.75)
+ new_spiders += swarmling
+ else if(src)
+ var/obj/effect/spider/spiderling/child = new spiderling_type(src.loc)
+ child.skitter()
+ else // We might've gibbed or got deleted.
+ break
+ // Transfer our player to their new body, if RNG provided one.
+ if(new_spiders.len && client)
+ var/mob/living/simple_mob/animal/giant_spider/new_body = pick(new_spiders)
+ new_body.key = src.key
+ return ..()
+
+/mob/living/simple_mob/animal/giant_spider/carrier/recursive
+ desc = "Furry, beige, and red, it makes you shudder to look at it. This one has luminous green eyes. \
+ You have a distinctly bad feeling about this."
+
+ swarmling_type = /mob/living/simple_mob/animal/giant_spider/carrier/recursive
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/electric.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/electric.dm
new file mode 100644
index 0000000000..c3d1f60731
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/electric.dm
@@ -0,0 +1,45 @@
+// Electric spiders fire taser-like beams at their enemies.
+// TODO: AI
+
+/mob/living/simple_mob/animal/giant_spider/electric
+ desc = "Spined and yellow, it makes you shudder to look at it. This one has flickering gold eyes."
+ icon_state = "spark"
+ icon_living = "spark"
+ icon_dead = "spark_dead"
+
+ maxHealth = 210
+ health = 210
+
+ taser_kill = 0 //It -is- the taser.
+
+ base_attack_cooldown = 10
+ projectilesound = 'sound/weapons/taser2.ogg'
+ projectiletype = /obj/item/projectile/beam/stun/electric_spider
+
+ melee_damage_lower = 10
+ melee_damage_upper = 25
+
+ poison_chance = 15
+ poison_per_bite = 3
+ poison_type = "stimm"
+
+ shock_resist = 0.75
+
+ player_msg = "You can fire a taser-like ranged attack by clicking on an enemy or tile at a distance."
+
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/electric_spider
+
+
+/obj/item/projectile/beam/stun/electric_spider
+ name = "stun beam"
+ agony = 20
+
+// The electric spider's AI.
+/datum/ai_holder/simple_mob/ranged/electric_spider
+
+/datum/ai_holder/simple_mob/ranged/electric_spider/max_range(atom/movable/AM)
+ if(isliving(AM))
+ var/mob/living/L = AM
+ if(L.incapacitated(INCAPACITATION_DISABLED) || L.stat == UNCONSCIOUS) // If our target is stunned, go in for the kill.
+ return 1
+ return ..() // Do ranged if possible otherwise.
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/frost.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/frost.dm
new file mode 100644
index 0000000000..19b85cccd4
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/frost.dm
@@ -0,0 +1,20 @@
+// Frost spiders inject cryotoxin, slowing people down (which is very bad if trying to run from spiders).
+
+/mob/living/simple_mob/animal/giant_spider/frost
+ desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes."
+ icon_state = "frost"
+ icon_living = "frost"
+ icon_dead = "frost_dead"
+
+ maxHealth = 175
+ health = 175
+
+ poison_per_bite = 5
+ poison_type = "cryotoxin"
+ heat_resist = -0.50
+ cold_resist = 0.75
+
+// Sif variant with a somewhat different desc.
+/mob/living/simple_mob/animal/giant_spider/frost/sif
+ desc = "Icy and blue, it makes you shudder to look at it. This one has brilliant blue eyes. \
+ It isn't native to Sif."
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/hunter.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/hunter.dm
new file mode 100644
index 0000000000..f3eb1cf81e
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/hunter.dm
@@ -0,0 +1,165 @@
+// Hunters are fast, fragile, and possess a leaping attack.
+// The leaping attack is somewhat telegraphed and can be dodged if one is paying attention.
+// The AI would've followed up after a successful leap with dragging the downed victim away, but the dragging code was too janky.
+
+/mob/living/simple_mob/animal/giant_spider/hunter
+ desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes."
+ icon_state = "hunter"
+ icon_living = "hunter"
+ icon_dead = "hunter_dead"
+
+ maxHealth = 120
+ health = 120
+
+ poison_per_bite = 5
+ melee_damage_lower = 9
+ melee_damage_upper = 15
+
+ movement_cooldown = 0 // Hunters are FAST.
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee/hunter_spider
+
+ player_msg = "You are very fast, and can perform a leaping attack by clicking on someone from a short distance away.
\
+ If the leap succeeds, the target will be knocked down briefly and you will be on top of them.
\
+ Note that there is a short delay before you leap!
\
+ In addition, you will do more damage to incapacitated opponents."
+
+ // Leaping is a special attack, so these values determine when leap can happen.
+ // Leaping won't occur if its on cooldown.
+ special_attack_min_range = 2
+ special_attack_max_range = 4
+ special_attack_cooldown = 10 SECONDS
+
+ var/leap_warmup = 1 SECOND // How long the leap telegraphing is.
+ var/leap_sound = 'sound/weapons/spiderlunge.ogg'
+
+// Multiplies damage if the victim is stunned in some form, including a successful leap.
+/mob/living/simple_mob/animal/giant_spider/hunter/apply_bonus_melee_damage(atom/A, damage_amount)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(L.incapacitated(INCAPACITATION_DISABLED))
+ return damage_amount * 1.5
+ return ..()
+
+
+// The actual leaping attack.
+/mob/living/simple_mob/animal/giant_spider/hunter/do_special_attack(atom/A)
+ set waitfor = FALSE
+ set_AI_busy(TRUE)
+
+ // Telegraph, since getting stunned suddenly feels bad.
+ do_windup_animation(A, leap_warmup)
+ sleep(leap_warmup) // For the telegraphing.
+
+ // Do the actual leap.
+ status_flags |= LEAPING // Lets us pass over everything.
+ visible_message(span("danger","\The [src] leaps at \the [A]!"))
+ throw_at(get_step(get_turf(A), get_turf(src)), special_attack_max_range+1, 1, src)
+ playsound(src, leap_sound, 75, 1)
+
+ sleep(5) // For the throw to complete. It won't hold up the AI ticker due to waitfor being false.
+
+ if(status_flags & LEAPING)
+ status_flags &= ~LEAPING // Revert special passage ability.
+
+ var/turf/T = get_turf(src) // Where we landed. This might be different than A's turf.
+
+ . = FALSE
+
+ // Now for the stun.
+ var/mob/living/victim = null
+ for(var/mob/living/L in T) // So player-controlled spiders only need to click the tile to stun them.
+ if(L == src)
+ continue
+
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(H.check_shields(damage = 0, damage_source = src, attacker = src, def_zone = null, attack_text = "the leap"))
+ continue // We were blocked.
+
+ victim = L
+ break
+
+ if(victim)
+ victim.Weaken(2)
+ victim.visible_message(span("danger","\The [src] knocks down \the [victim]!"))
+ to_chat(victim, span("critical", "\The [src] jumps on you!"))
+ . = TRUE
+
+ set_AI_busy(FALSE)
+
+// var/obj/item/weapon/grab/G = new(src, victim)
+// put_in_active_hand(G)
+
+// G.synch()
+// G.affecting = victim
+// victim.LAssailant = src
+
+// visible_message("\The [src] seizes \the [victim] aggressively!")
+// do_attack_animation(victim)
+
+
+// This AI would've isolated people it stuns with its 'leap' attack, by dragging them away.
+/datum/ai_holder/simple_mob/melee/hunter_spider
+
+/*
+
+/datum/ai_holder/simple_mob/melee/hunter_spider/post_special_attack(mob/living/L)
+ drag_away(L)
+
+// Called after a successful leap.
+/datum/ai_holder/simple_mob/melee/hunter_spider/proc/drag_away(mob/living/L)
+ world << "Doing drag_away attack on [L]"
+ if(!istype(L))
+ world << "Invalid type."
+ return FALSE
+
+ // If they didn't get stunned, then don't bother.
+ if(!L.incapacitated(INCAPACITATION_DISABLED))
+ world << "Not incapcitated."
+ return FALSE
+
+ // Grab them.
+ if(!holder.start_pulling(L))
+ world << "Failed to pull."
+ return FALSE
+
+ holder.visible_message(span("danger","\The [holder] starts to drag \the [L] away!"))
+
+ var/list/allies = list()
+ var/list/enemies = list()
+ for(var/mob/living/thing in hearers(vision_range, holder))
+ if(thing == holder || thing == L) // Don't count ourselves or the thing we just started pulling.
+ continue
+ if(holder.IIsAlly(thing))
+ allies += thing
+ else
+ enemies += thing
+
+ // First priority: Move our victim to our friends.
+ if(allies.len)
+ world << "Going to move to ally"
+ give_destination(get_turf(pick(allies)), min_distance = 2, combat = TRUE) // This will switch our stance.
+
+ // Second priority: Move our victim away from their friends.
+ // There's a chance of it derping and pulling towards enemies if there's more than two people.
+ // Preventing that will likely be both a lot of effort for developers and the CPU.
+ else if(enemies.len)
+ world << "Going to move away from enemies"
+ var/mob/living/hostile = pick(enemies)
+ var/turf/move_to = get_turf(hostile)
+ for(var/i = 1 to vision_range) // Move them this many steps away from their friend.
+ move_to = get_step_away(move_to, L, 7)
+ if(move_to)
+ give_destination(move_to, min_distance = 2, combat = TRUE) // This will switch our stance.
+
+ // Third priority: Move our victim SOMEWHERE away from where they were.
+ else
+ world << "Going to move away randomly"
+ var/turf/move_to = get_turf(L)
+ move_to = get_step(move_to, pick(cardinal))
+ for(var/i = 1 to vision_range) // Move them this many steps away from where they were before.
+ move_to = get_step_away(move_to, L, 7)
+ if(move_to)
+ give_destination(move_to, min_distance = 2, combat = TRUE) // This will switch our stance.
+*/
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/lurker.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/lurker.dm
new file mode 100644
index 0000000000..1f1ecac678
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/lurker.dm
@@ -0,0 +1,103 @@
+// Lurkers are somewhat similar to Hunters, however the big difference is that Lurkers have an imperfect cloak.
+// Their AI will try to do hit and run tactics, striking the enemy when its "cloaked", for bonus damage and a stun.
+// They keep attacking until the stun ends, then retreat to cloak again and repeat the cycle.
+// Hitting the spider before it does its ambush attack will break the cloak and make the spider flee.
+
+/mob/living/simple_mob/animal/giant_spider/lurker
+ desc = "Translucent and white, it makes you shudder to look at it. This one has incandescent red eyes."
+ icon_state = "lurker"
+ icon_living = "lurker"
+ icon_dead = "lurker_dead"
+
+ maxHealth = 100
+ health = 100
+
+ poison_per_bite = 5
+
+ movement_cooldown = 5
+
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ poison_chance = 30
+ poison_type = "cryptobiolin"
+ poison_per_bite = 1
+
+ player_msg = "You have an imperfect, but automatic stealth. If you attack something while 'hidden', then \
+ you will do bonus damage, stun the target, and unstealth for a period of time.
\
+ Getting attacked will also break your stealth."
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee/hit_and_run
+
+ var/cloaked = FALSE
+ var/cloaked_alpha = 45 // Lower = Harder to see.
+ var/cloaked_bonus_damage = 30 // This is added on top of the normal melee damage.
+ var/cloaked_weaken_amount = 3 // How long to stun for.
+ var/cloak_cooldown = 10 SECONDS // Amount of time needed to re-cloak after losing it.
+ var/last_uncloak = 0 // world.time
+
+
+/mob/living/simple_mob/animal/giant_spider/lurker/proc/cloak()
+ if(cloaked)
+ return
+ animate(src, alpha = cloaked_alpha, time = 1 SECOND)
+ cloaked = TRUE
+
+
+/mob/living/simple_mob/animal/giant_spider/lurker/proc/uncloak()
+ last_uncloak = world.time // This is assigned even if it isn't cloaked already, to 'reset' the timer if the spider is continously getting attacked.
+ if(!cloaked)
+ return
+ animate(src, alpha = initial(alpha), time = 1 SECOND)
+ cloaked = FALSE
+
+
+// Check if cloaking if possible.
+/mob/living/simple_mob/animal/giant_spider/lurker/proc/can_cloak()
+ if(stat)
+ return FALSE
+ if(last_uncloak + cloak_cooldown > world.time)
+ return FALSE
+
+ return TRUE
+
+
+// Called by things that break cloaks, like Technomancer wards.
+/mob/living/simple_mob/animal/giant_spider/lurker/break_cloak()
+ uncloak()
+
+
+/mob/living/simple_mob/animal/giant_spider/lurker/is_cloaked()
+ return cloaked
+
+
+// Cloaks the spider automatically, if possible.
+/mob/living/simple_mob/animal/giant_spider/lurker/handle_special()
+ if(!cloaked && can_cloak())
+ cloak()
+
+
+// Applies bonus base damage if cloaked.
+/mob/living/simple_mob/animal/giant_spider/lurker/apply_bonus_melee_damage(atom/A, damage_amount)
+ if(cloaked)
+ return damage_amount + cloaked_bonus_damage
+ return ..()
+
+// Applies stun, then uncloaks.
+/mob/living/simple_mob/animal/giant_spider/lurker/apply_melee_effects(atom/A)
+ if(cloaked)
+ if(isliving(A))
+ var/mob/living/L = A
+ L.Weaken(cloaked_weaken_amount)
+ to_chat(L, span("danger", "\The [src] ambushes you!"))
+ playsound(L, 'sound/weapons/spiderlunge.ogg', 75, 1)
+ uncloak()
+ ..() // For the poison.
+
+// Force uncloaking if attacked.
+/mob/living/simple_mob/animal/giant_spider/lurker/bullet_act(obj/item/projectile/P)
+ . = ..()
+ break_cloak()
+
+/mob/living/simple_mob/animal/giant_spider/lurker/hit_with_weapon(obj/item/O, mob/living/user, effective_force, hit_zone)
+ . = ..()
+ break_cloak()
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm
new file mode 100644
index 0000000000..62934195dd
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm
@@ -0,0 +1,230 @@
+// Nurses, they create webs and eggs.
+// They're fragile but their attacks can cause horrifying consequences.
+/mob/living/simple_mob/animal/giant_spider/nurse
+ desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes."
+ icon_state = "nurse"
+ icon_living = "nurse"
+ icon_dead = "nurse_dead"
+
+ maxHealth = 40
+ health = 40
+
+ movement_cooldown = 5 // A bit faster so that they can inject the eggs easier.
+
+ melee_damage_lower = 5 // Doesn't do a lot of damage, since the goal is to make more spiders with egg attacks.
+ melee_damage_upper = 10
+ poison_per_bite = 5
+ poison_type = "stoxin"
+
+ player_msg = "You can spin webs on an adjacent tile, or cocoon an object by clicking on it.
\
+ You can also cocoon a dying or dead entity by clicking on them, and you will gain charges for egg-laying.
\
+ To lay eggs, click a nearby tile. Laying eggs will deplete a charge."
+ ai_holder_type = /datum/ai_holder/simple_mob/melee/nurse_spider
+
+ var/fed = 0 // Counter for how many egg laying 'charges' the spider has.
+ var/egg_inject_chance = 25 // One in four chance to get eggs.
+ var/egg_type = /obj/effect/spider/eggcluster/small
+ var/web_type = /obj/effect/spider/stickyweb/dark
+
+
+/mob/living/simple_mob/animal/giant_spider/nurse/inject_poison(mob/living/L, target_zone)
+ ..() // Inject the stoxin here.
+ if(ishuman(L) && prob(egg_inject_chance))
+ var/mob/living/carbon/human/H = L
+ var/obj/item/organ/external/O = H.get_organ(target_zone)
+ if(O)
+ var/eggcount = 0
+ for(var/obj/effect/spider/eggcluster/E in O.implants)
+ eggcount++
+ if(!eggcount)
+ var/eggs = new egg_type(O, src)
+ O.implants += eggs
+ to_chat(H, span("critical", "\The [src] injects something into your [O.name]!") ) // Oh god its laying eggs in me!
+
+// Webs target in a web if able to.
+/mob/living/simple_mob/animal/giant_spider/nurse/attack_target(atom/A)
+ if(isturf(A))
+ if(fed)
+ return lay_eggs(A)
+ return web_tile(A)
+
+ if(isliving(A))
+ var/mob/living/L = A
+ if(!L.stat)
+ return ..()
+
+ if(!istype(A, /atom/movable))
+ return
+ var/atom/movable/AM = A
+
+ if(AM.anchored)
+ return ..()
+
+ return spin_cocoon(AM)
+
+/mob/living/simple_mob/animal/giant_spider/nurse/proc/spin_cocoon(atom/movable/AM)
+ if(!istype(AM))
+ return FALSE // We can't cocoon walls sadly.
+ visible_message(span("notice", "\The [src] begins to secrete a sticky substance around \the [AM].") )
+
+ // Get our AI to stay still.
+ set_AI_busy(TRUE)
+
+ if(!do_mob(src, AM, 5 SECONDS))
+ set_AI_busy(FALSE)
+ to_chat(src, span("warning", "You need to stay still to spin a web around \the [AM]."))
+ return FALSE
+
+ set_AI_busy(FALSE)
+
+ if(!AM) // Make sure it didn't get deleted for whatever reason.
+ to_chat(src, span("warning", "Whatever you were spinning a web for, its no longer there..."))
+ return FALSE
+
+ if(!isturf(AM.loc))
+ to_chat(src, span("warning", "You can't spin \the [AM] in a web while it is inside \the [AM.loc]."))
+ return FALSE
+
+ if(!Adjacent(AM))
+ to_chat(src, span("warning", "You need to be next to \the [AM] to spin it into a web."))
+ return FALSE
+
+ // Finally done with the checks.
+ var/obj/effect/spider/cocoon/C = new(AM.loc)
+ var/large_cocoon = FALSE
+ for(var/mob/living/L in C.loc)
+ if(istype(L, /mob/living/simple_mob/animal/giant_spider)) // Cannibalism is bad.
+ continue
+ fed++
+ visible_message(span("warning","\The [src] sticks a proboscis into \the [L], and sucks a viscous substance out."))
+ to_chat(src, span("notice", "You've fed upon \the [L], and can now lay [fed] cluster\s of eggs."))
+ L.forceMove(C)
+ large_cocoon = TRUE
+ break
+
+ // This part's pretty stupid.
+ for(var/obj/O in C.loc)
+ if(!O.anchored)
+ O.forceMove(C)
+
+ // Todo: Put this code on the cocoon object itself?
+ if(large_cocoon)
+ C.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3")
+
+ return TRUE
+
+/mob/living/simple_mob/animal/giant_spider/nurse/handle_special()
+ set waitfor = FALSE
+ if(get_AI_stance() == STANCE_IDLE && !is_AI_busy() && isturf(loc))
+ if(fed)
+ lay_eggs(loc)
+ else
+ web_tile(loc)
+
+/mob/living/simple_mob/animal/giant_spider/nurse/proc/web_tile(turf/T)
+ if(!istype(T))
+ return FALSE
+
+ var/obj/effect/spider/stickyweb/W = locate() in T
+ if(W)
+ return FALSE // Already got webs here.
+
+ visible_message(span("notice", "\The [src] begins to secrete a sticky substance.") )
+ // Get our AI to stay still.
+ set_AI_busy(TRUE)
+
+ if(!do_mob(src, T, 5 SECONDS))
+ set_AI_busy(FALSE)
+ to_chat(src, span("warning", "You need to stay still to spin a web on \the [T]."))
+ return FALSE
+
+ W = locate() in T
+ if(W)
+ return FALSE // Spamclick protection.
+
+ set_AI_busy(FALSE)
+ new web_type(T)
+ return TRUE
+
+
+/mob/living/simple_mob/animal/giant_spider/nurse/proc/lay_eggs(turf/T)
+ if(!istype(T))
+ return FALSE
+
+ if(!fed)
+ return FALSE
+
+ var/obj/effect/spider/eggcluster/E = locate() in T
+ if(E)
+ return FALSE // Already got eggs here.
+
+ visible_message(span("notice", "\The [src] begins to lay a cluster of eggs.") )
+ // Get our AI to stay still.
+ set_AI_busy(TRUE)
+
+ if(!do_mob(src, T, 5 SECONDS))
+ set_AI_busy(FALSE)
+ to_chat(src, span("warning", "You need to stay still to lay eggs on \the [T]."))
+ return FALSE
+
+ E = locate() in T
+ if(E)
+ return FALSE // Spamclick protection.
+
+ set_AI_busy(FALSE)
+ new egg_type(T)
+ fed--
+ return TRUE
+
+
+// Variant that 'blocks' light (by being a negative light source).
+// This is done to make webbed rooms scary and allow for spiders on the other side of webs to see prey.
+/obj/effect/spider/stickyweb/dark
+ name = "dense web"
+ desc = "It's sticky, and blocks a lot of light."
+ light_color = "#FFFFFF"
+ light_range = 2
+ light_power = -3
+
+// This is still stupid, but whatever.
+/mob/living/simple_mob/animal/giant_spider/nurse/hat
+ desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes and a tiny nurse hat."
+ icon_state = "nursemed"
+ icon_living = "nursemed"
+ icon_dead = "nursemed_dead"
+
+
+// The AI for nurse spiders. Wraps things in webs by 'attacking' them.
+/datum/ai_holder/simple_mob/melee/nurse_spider
+ wander = TRUE
+ base_wander_delay = 8
+ cooperative = FALSE // So we don't ask our spider friends to attack things we're webbing. This might also make them stay at the base if their friends find tasty explorers.
+
+// Get us unachored objects as an option as well.
+/datum/ai_holder/simple_mob/melee/nurse_spider/list_targets()
+ . = ..()
+
+ var/static/alternative_targets = typecacheof(list(/obj/item, /obj/structure))
+
+ for(var/AT in typecache_filter_list(range(vision_range, holder), alternative_targets))
+ var/obj/O = AT
+ if(can_see(holder, O, vision_range) && !O.anchored)
+ . += O
+
+// Select an obj if no mobs are around.
+/datum/ai_holder/melee/nurse_spider/pick_target(list/targets)
+ var/mobs_only = locate(/mob/living) in targets // If a mob is in the list of targets, then ignore objects.
+ if(mobs_only)
+ for(var/A in targets)
+ if(!isliving(A))
+ targets -= A
+
+ return ..(targets)
+
+/datum/ai_holder/simple_mob/melee/nurse_spider/can_attack(atom/movable/the_target)
+ . = ..()
+ if(!.) // Parent returned FALSE.
+ if(istype(the_target, /obj))
+ var/obj/O = the_target
+ if(!O.anchored)
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/pepper.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/pepper.dm
new file mode 100644
index 0000000000..1c2eaa6dda
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/pepper.dm
@@ -0,0 +1,21 @@
+// Pepper spiders inject condensed capsaicin into their victims.
+
+/mob/living/simple_mob/animal/giant_spider/pepper
+ desc = "Red and brown, it makes you shudder to look at it. This one has glinting red eyes."
+ icon_state = "pepper"
+ icon_living = "pepper"
+ icon_dead = "pepper_dead"
+
+ maxHealth = 210
+ health = 210
+
+ melee_damage_lower = 8
+ melee_damage_upper = 15
+
+ poison_chance = 20
+ poison_per_bite = 5
+ poison_type = "condensedcapsaicin_v"
+
+/mob/living/simple_mob/animal/giant_spider/pepper/initialize()
+ adjust_scale(1.1)
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm
new file mode 100644
index 0000000000..d9508a05d8
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/phorogenic.dm
@@ -0,0 +1,56 @@
+// Phorogenic spiders explode when they die.
+// You really shouldn't melee them.
+
+/mob/living/simple_mob/animal/giant_spider/phorogenic
+ desc = "Crystalline and purple, it makes you shudder to look at it. This one has haunting purple eyes."
+ icon_state = "phoron"
+ icon_living = "phoron"
+ icon_dead = "phoron_dead"
+
+ maxHealth = 225
+ health = 225
+ taser_kill = FALSE //You will need more than a peashooter to kill the juggernaut.
+
+ melee_damage_lower = 25
+ melee_damage_upper = 40
+ attack_armor_pen = 15
+
+ movement_cooldown = 15
+
+ poison_chance = 30
+ poison_per_bite = 0.5
+ poison_type = "phoron"
+
+ var/exploded = FALSE
+ var/explosion_dev_range = 1
+ var/explosion_heavy_range = 2
+ var/explosion_light_range = 4
+ var/explosion_flash_range = 6 // This doesn't do anything iirc.
+
+ var/explosion_delay_lower = 1 SECOND // Lower bound for explosion delay.
+ var/explosion_delay_upper = 2 SECONDS // Upper bound.
+
+/mob/living/simple_mob/animal/giant_spider/phorogenic/initialize()
+ adjust_scale(1.25)
+ return ..()
+
+/mob/living/simple_mob/animal/giant_spider/phorogenic/death()
+ visible_message(span("critical", "\The [src]'s body begins to rupture!"))
+ var/delay = rand(explosion_delay_lower, explosion_delay_upper)
+ spawn(0)
+ // Flash black and red as a warning.
+ for(var/i = 1 to delay)
+ if(i % 2 == 0)
+ color = "#000000"
+ else
+ color = "#FF0000"
+ sleep(1)
+
+ spawn(delay)
+ // The actual boom.
+ if(src && !exploded)
+ visible_message(span("danger", "\The [src]'s body detonates!"))
+ exploded = TRUE
+ explosion(src.loc, explosion_dev_range, explosion_heavy_range, explosion_light_range, explosion_flash_range)
+ return ..()
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/thermic.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/thermic.dm
new file mode 100644
index 0000000000..dc0a345865
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/thermic.dm
@@ -0,0 +1,20 @@
+// Thermic spiders inject a special variant of thermite that burns someone from the inside.
+
+/mob/living/simple_mob/animal/giant_spider/thermic
+ desc = "Mirage-cloaked and orange, it makes you shudder to look at it. This one has simmering orange eyes."
+ icon_state = "pit"
+ icon_living = "pit"
+ icon_dead = "pit_dead"
+
+ maxHealth = 175
+ health = 175
+
+ melee_damage_lower = 10
+ melee_damage_upper = 25
+
+ heat_resist = 0.75
+ cold_resist = -0.50
+
+ poison_chance = 30
+ poison_per_bite = 1
+ poison_type = "thermite_v"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/tunneler.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/tunneler.dm
new file mode 100644
index 0000000000..82a68d4c1f
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/tunneler.dm
@@ -0,0 +1,185 @@
+// Tunnelers have a special ability that allows them to charge at an enemy by tunneling towards them.
+// Any mobs inbetween the tunneler's path and the target will be stunned if the tunneler hits them.
+// The target will suffer a stun as well, if the tunneler hits them at the end. A successful hit will stop the tunneler.
+// If the target moves fast enough, the tunneler can miss, causing it to overshoot.
+// If the tunneler hits a solid wall, the tunneler will suffer a stun.
+
+/mob/living/simple_mob/animal/giant_spider/tunneler
+ desc = "Sandy and brown, it makes you shudder to look at it. This one has glittering yellow eyes."
+ icon_state = "tunneler"
+ icon_living = "tunneler"
+ icon_dead = "tunneler_dead"
+
+ maxHealth = 120
+ health = 120
+
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+
+ poison_chance = 15
+ poison_per_bite = 3
+ poison_type = "serotrotium_v"
+
+// ai_holder_type = /datum/ai_holder/simple_mob/melee/tunneler
+
+ player_msg = "You can perform a tunneling attack by clicking on someone from a distance.
\
+ There is a noticable travel delay as you tunnel towards the tile the target was at when you started the tunneling attack.
\
+ Any entities inbetween you and the targeted tile will be stunned for a brief period of time.
\
+ Whatever is on the targeted tile when you arrive will suffer a potent stun.
\
+ If nothing is on the targeted tile, you will overshoot and keep going for a few more tiles.
\
+ If you hit a wall or other solid structure during that time, you will suffer a lengthy stun and be vulnerable to more harm."
+
+ // Tunneling is a special attack, similar to the hunter's Leap.
+ special_attack_min_range = 2
+ special_attack_max_range = 6
+ special_attack_cooldown = 10 SECONDS
+
+ var/tunnel_warning = 0.5 SECONDS // How long the dig telegraphing is.
+ var/tunnel_tile_speed = 2 // How long to wait between each tile. Higher numbers result in an easier to dodge tunnel attack.
+
+/mob/living/simple_mob/animal/giant_spider/tunneler/frequent
+ special_attack_cooldown = 5 SECONDS
+
+/mob/living/simple_mob/animal/giant_spider/tunneler/fast
+ tunnel_tile_speed = 1
+
+/mob/living/simple_mob/animal/giant_spider/tunneler/should_special_attack(atom/A)
+ // Make sure its possible for the spider to reach the target so it doesn't try to go through a window.
+ var/turf/destination = get_turf(A)
+ var/turf/starting_turf = get_turf(src)
+ var/turf/T = starting_turf
+ for(var/i = 1 to get_dist(starting_turf, destination))
+ if(T == destination)
+ break
+
+ T = get_step(T, get_dir(T, destination))
+ if(T.check_density(ignore_mobs = TRUE))
+ return FALSE
+ return T == destination
+
+
+/mob/living/simple_mob/animal/giant_spider/tunneler/do_special_attack(atom/A)
+ set waitfor = FALSE
+ set_AI_busy(TRUE)
+
+ // Save where we're gonna go soon.
+ var/turf/destination = get_turf(A)
+ var/turf/starting_turf = get_turf(src)
+
+ // Telegraph to give a small window to dodge if really close.
+ do_windup_animation(A, tunnel_warning)
+ sleep(tunnel_warning) // For the telegraphing.
+
+ // Do the dig!
+ visible_message(span("danger","\The [src] tunnels towards \the [A]!"))
+ submerge()
+
+ if(handle_tunnel(destination) == FALSE)
+ set_AI_busy(FALSE)
+ emerge()
+ return FALSE
+
+ // Did we make it?
+ if(!(src in destination))
+ set_AI_busy(FALSE)
+ emerge()
+ return FALSE
+
+ var/overshoot = TRUE
+
+ // Test if something is at destination.
+ for(var/mob/living/L in destination)
+ if(L == src)
+ continue
+
+ visible_message(span("danger","\The [src] erupts from underneath, and hits \the [L]!"))
+ playsound(L, 'sound/weapons/heavysmash.ogg', 75, 1)
+ L.Weaken(3)
+ overshoot = FALSE
+
+ if(!overshoot) // We hit the target, or something, at destination, so we're done.
+ set_AI_busy(FALSE)
+ emerge()
+ return TRUE
+
+ // Otherwise we need to keep going.
+ to_chat(src, span("warning", "You overshoot your target!"))
+ playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
+ var/dir_to_go = get_dir(starting_turf, destination)
+ for(var/i = 1 to rand(2, 4))
+ destination = get_step(destination, dir_to_go)
+
+ if(handle_tunnel(destination) == FALSE)
+ set_AI_busy(FALSE)
+ emerge()
+ return FALSE
+
+ set_AI_busy(FALSE)
+ emerge()
+ return FALSE
+
+
+
+// Does the tunnel movement, stuns enemies, etc.
+/mob/living/simple_mob/animal/giant_spider/tunneler/proc/handle_tunnel(turf/destination)
+ var/turf/T = get_turf(src) // Hold our current tile.
+
+ // Regular tunnel loop.
+ for(var/i = 1 to get_dist(src, destination))
+ if(stat)
+ return FALSE // We died or got knocked out on the way.
+ if(loc == destination)
+ break // We somehow got there early.
+
+ // Update T.
+ T = get_step(src, get_dir(src, destination))
+ if(T.check_density(ignore_mobs = TRUE))
+ to_chat(src, span("critical", "You hit something really solid!"))
+ playsound(src, "punch", 75, 1)
+ Weaken(5)
+ add_modifier(/datum/modifier/tunneler_vulnerable, 10 SECONDS)
+ return FALSE // Hit a wall.
+
+ // Stun anyone in our way.
+ for(var/mob/living/L in T)
+ playsound(L, 'sound/weapons/heavysmash.ogg', 75, 1)
+ L.Weaken(2)
+
+ // Get into the tile.
+ forceMove(T)
+
+ // Visuals and sound.
+ dig_under_floor(get_turf(src))
+ playsound(src, 'sound/effects/break_stone.ogg', 75, 1)
+ sleep(tunnel_tile_speed)
+
+// For visuals.
+/mob/living/simple_mob/animal/giant_spider/tunneler/proc/submerge()
+ alpha = 0
+ dig_under_floor(get_turf(src))
+ new /obj/effect/temporary_effect/tunneler_hole(get_turf(src))
+
+// Ditto.
+/mob/living/simple_mob/animal/giant_spider/tunneler/proc/emerge()
+ alpha = 255
+ dig_under_floor(get_turf(src))
+ new /obj/effect/temporary_effect/tunneler_hole(get_turf(src))
+
+/mob/living/simple_mob/animal/giant_spider/tunneler/proc/dig_under_floor(turf/T)
+ new /obj/item/weapon/ore/glass(T) // This will be rather weird when on station but the alternative is too much work.
+
+/obj/effect/temporary_effect/tunneler_hole
+ name = "hole"
+ desc = "A collapsing tunnel hole."
+ icon_state = "tunnel_hole"
+ time_to_die = 1 MINUTE
+
+/datum/modifier/tunneler_vulnerable
+ name = "Vulnerable"
+ desc = "You are vulnerable to more harm than usual."
+ on_created_text = "You feel vulnerable..."
+ on_expired_text = "You feel better."
+ stacks = MODIFIER_STACK_EXTEND
+
+ incoming_damage_percent = 2
+ evasion = -100
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/webslinger.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/webslinger.dm
new file mode 100644
index 0000000000..0024bc8962
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/webslinger.dm
@@ -0,0 +1,37 @@
+/mob/living/simple_mob/animal/giant_spider/webslinger
+ desc = "Furry and green, it makes you shudder to look at it. This one has brilliant green eyes, and a cloak of web."
+ tt_desc = "X Brachypelma phorus balisticus"
+ icon_state = "webslinger"
+ icon_living = "webslinger"
+ icon_dead = "webslinger_dead"
+ maxHealth = 90
+ health = 90
+ projectilesound = 'sound/weapons/thudswoosh.ogg'
+ projectiletype = /obj/item/projectile/webball
+ base_attack_cooldown = 10
+ melee_damage_lower = 8
+ melee_damage_upper = 15
+ poison_per_bite = 2
+ poison_type = "psilocybin"
+ player_msg = "You can fire a ranged attack by clicking on an enemy or tile at a distance."
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged
+
+// Check if we should bola, or just shoot the pain ball
+/mob/living/simple_mob/animal/giant_spider/webslinger/should_special_attack(atom/A)
+ if(ismob(A))
+ if(ishuman(A))
+ var/mob/living/carbon/human/H = A
+ if(!H.legcuffed)
+ return TRUE
+ return FALSE
+
+// Now we've got a running human in sight, time to throw the bola
+/mob/living/simple_mob/animal/giant_spider/webslinger/do_special_attack(atom/A)
+ set waitfor = FALSE
+ set_AI_busy(TRUE)
+ var/obj/item/projectile/bola/B = new /obj/item/projectile/bola(src.loc)
+ playsound(src, 'sound/weapons/thudswoosh.ogg', 100, 1)
+ if(!B)
+ return
+ B.launch(A)
+ set_AI_busy(FALSE)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
new file mode 100644
index 0000000000..3b40147794
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/crab.dm
@@ -0,0 +1,25 @@
+//Look Sir, free crabs!
+/mob/living/simple_mob/animal/passive/crab
+ name = "crab"
+ desc = "A hard-shelled crustacean. Seems quite content to lounge around all the time."
+ tt_desc = "E Cancer bellianus"
+ faction = "crabs"
+
+ icon_state = "crab"
+ icon_living = "crab"
+ icon_dead = "crab_dead"
+
+ mob_size = MOB_SMALL
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "stomps"
+ friendly = "pinches"
+
+ say_list_type = /datum/say_list/crab
+
+//COFFEE! SQUEEEEEEEEE!
+/mob/living/simple_mob/animal/passive/crab/Coffee
+ name = "Coffee"
+ real_name = "Coffee"
+ desc = "It's Coffee, the other pet!"
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
new file mode 100644
index 0000000000..bdf8853b4b
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/fish.dm
@@ -0,0 +1,77 @@
+// Different types of fish! They are all subtypes of this tho
+/mob/living/simple_mob/animal/passive/fish
+ name = "fish"
+ desc = "Its a fishy. No touchy fishy."
+ icon = 'icons/mob/fish.dmi'
+
+ mob_size = MOB_SMALL
+ // So fish are actually underwater.
+ plane = TURF_PLANE
+ layer = UNDERWATER_LAYER
+
+ // By default they can be in any water turf. Subtypes might restrict to deep/shallow etc
+ var/global/list/suitable_turf_types = list(
+ /turf/simulated/floor/beach/water,
+ /turf/simulated/floor/beach/coastline,
+ /turf/simulated/floor/holofloor/beach/water,
+ /turf/simulated/floor/holofloor/beach/coastline,
+ /turf/simulated/floor/water
+ )
+
+// Makes the AI unable to willingly go on land.
+/mob/living/simple_mob/animal/passive/fish/IMove(newloc)
+ if(is_type_in_list(newloc, suitable_turf_types))
+ return ..() // Procede as normal.
+ return MOVEMENT_FAILED // Don't leave the water!
+
+// Take damage if we are not in water
+/mob/living/simple_mob/animal/passive/fish/handle_breathing()
+ var/turf/T = get_turf(src)
+ if(T && !is_type_in_list(T, suitable_turf_types))
+ if(prob(50))
+ say(pick("Blub", "Glub", "Burble"))
+ adjustBruteLoss(unsuitable_atoms_damage)
+
+// Subtypes.
+/mob/living/simple_mob/animal/passive/fish/bass
+ name = "bass"
+ tt_desc = "E Micropterus notius"
+ icon_state = "bass-swim"
+ icon_living = "bass-swim"
+ icon_dead = "bass-dead"
+
+/mob/living/simple_mob/animal/passive/fish/trout
+ name = "trout"
+ tt_desc = "E Salmo trutta"
+ icon_state = "trout-swim"
+ icon_living = "trout-swim"
+ icon_dead = "trout-dead"
+
+/mob/living/simple_mob/animal/passive/fish/salmon
+ name = "salmon"
+ tt_desc = "E Oncorhynchus nerka"
+ icon_state = "salmon-swim"
+ icon_living = "salmon-swim"
+ icon_dead = "salmon-dead"
+
+/mob/living/simple_mob/animal/passive/fish/perch
+ name = "perch"
+ tt_desc = "E Perca flavescens"
+ icon_state = "perch-swim"
+ icon_living = "perch-swim"
+ icon_dead = "perch-dead"
+
+/mob/living/simple_mob/animal/passive/fish/pike
+ name = "pike"
+ tt_desc = "E Esox aquitanicus"
+ icon_state = "pike-swim"
+ icon_living = "pike-swim"
+ icon_dead = "pike-dead"
+
+/mob/living/simple_mob/animal/passive/fish/koi
+ name = "koi"
+ tt_desc = "E Cyprinus rubrofuscus"
+ icon_state = "koi-swim"
+ icon_living = "koi-swim"
+ icon_dead = "koi-dead"
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard.dm
new file mode 100644
index 0000000000..adb2ea83ca
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/lizard.dm
@@ -0,0 +1,24 @@
+/mob/living/simple_mob/animal/passive/lizard
+ name = "lizard"
+ desc = "A cute, tiny lizard."
+ tt_desc = "E Anolis cuvieri"
+
+ icon_state = "lizard"
+ icon_living = "lizard"
+ icon_dead = "lizard-dead"
+
+ health = 5
+ maxHealth = 5
+ mob_size = MOB_MINISCULE
+
+ response_help = "pets"
+ response_disarm = "shoos"
+ response_harm = "stomps on"
+
+ attacktext = list("bitten")
+ melee_damage_lower = 1
+ melee_damage_upper = 2
+
+ speak_emote = list("hisses")
+
+ say_list_type = /datum/say_list/lizard
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm
new file mode 100644
index 0000000000..6fc73fc5f9
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/misc.dm
@@ -0,0 +1,29 @@
+/mob/living/simple_mob/animal/passive/yithian
+ name = "yithian"
+ desc = "A friendly creature vaguely resembling an oversized snail without a shell."
+ tt_desc = "J Escargot escargot" // a product of Jade, which is a planet that totally exists
+
+ icon_state = "yithian"
+ icon_living = "yithian"
+ icon_dead = "yithian_dead"
+ icon = 'icons/jungle.dmi'
+
+ // Same stats as lizards.
+ health = 5
+ maxHealth = 5
+ mob_size = MOB_MINISCULE
+
+/mob/living/simple_mob/animal/passive/tindalos
+ name = "tindalos"
+ desc = "It looks like a large, flightless grasshopper."
+ tt_desc = "J Locusta bruchus"
+
+ icon_state = "tindalos"
+ icon_living = "tindalos"
+ icon_dead = "tindalos_dead"
+ icon = 'icons/jungle.dmi'
+
+ // Same stats as lizards.
+ health = 5
+ maxHealth = 5
+ mob_size = MOB_MINISCULE
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm
new file mode 100644
index 0000000000..70afdaf910
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm
@@ -0,0 +1,115 @@
+/mob/living/simple_mob/animal/passive/mouse
+ name = "mouse"
+ real_name = "mouse"
+ desc = "It's a small rodent."
+ tt_desc = "E Mus musculus"
+ icon_state = "mouse_gray"
+ item_state = "mouse_gray"
+ icon_living = "mouse_gray"
+ icon_dead = "mouse_gray_dead"
+
+ maxHealth = 5
+ health = 5
+
+ mob_size = MOB_MINISCULE
+ pass_flags = PASSTABLE
+// can_pull_size = ITEMSIZE_TINY
+// can_pull_mobs = MOB_PULL_NONE
+ layer = MOB_LAYER
+ density = 0
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "stamps on"
+
+ min_oxy = 16 //Require atleast 16kPA oxygen
+ minbodytemp = 223 //Below -50 Degrees Celcius
+ maxbodytemp = 323 //Above 50 Degrees Celcius
+
+ has_langs = list("Mouse")
+
+ holder_type = /obj/item/weapon/holder/mouse
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ say_list_type = /datum/say_list/mouse
+
+ var/body_color //brown, gray and white, leave blank for random
+
+/mob/living/simple_mob/animal/passive/mouse/New()
+ ..()
+
+ verbs += /mob/living/proc/ventcrawl
+ verbs += /mob/living/proc/hide
+
+ if(name == initial(name))
+ name = "[name] ([rand(1, 1000)])"
+ real_name = name
+
+ if(!body_color)
+ body_color = pick( list("brown","gray","white") )
+ icon_state = "mouse_[body_color]"
+ item_state = "mouse_[body_color]"
+ icon_living = "mouse_[body_color]"
+ icon_dead = "mouse_[body_color]_dead"
+ icon_rest = "mouse_[body_color]_sleep"
+ desc = "A small [body_color] rodent, often seen hiding in maintenance areas and making a nuisance of itself."
+
+/mob/living/simple_mob/animal/passive/mouse/Crossed(AM as mob|obj)
+ if( ishuman(AM) )
+ if(!stat)
+ var/mob/M = AM
+ M.visible_message("\icon[src] Squeek!")
+ playsound(src, 'sound/effects/mouse_squeak.ogg', 35, 1)
+ ..()
+
+/mob/living/simple_mob/animal/passive/mouse/death()
+ layer = MOB_LAYER
+ playsound(src, 'sound/effects/mouse_squeak_loud.ogg', 35, 1)
+ if(client)
+ client.time_died_as_mouse = world.time
+ ..()
+
+/mob/living/simple_mob/animal/passive/mouse/cannot_use_vents()
+ return
+
+/mob/living/simple_mob/animal/passive/mouse/proc/splat()
+ src.health = 0
+ src.stat = DEAD
+ src.icon_dead = "mouse_[body_color]_splat"
+ src.icon_state = "mouse_[body_color]_splat"
+ layer = MOB_LAYER
+ if(client)
+ client.time_died_as_mouse = world.time
+
+/*
+ * Mouse types
+ */
+
+/mob/living/simple_mob/animal/passive/mouse/white
+ body_color = "white"
+ icon_state = "mouse_white"
+
+/mob/living/simple_mob/animal/passive/mouse/gray
+ body_color = "gray"
+ icon_state = "mouse_gray"
+
+/mob/living/simple_mob/animal/passive/mouse/brown
+ body_color = "brown"
+ icon_state = "mouse_brown"
+
+//TOM IS ALIVE! SQUEEEEEEEE~K :)
+/mob/living/simple_mob/animal/passive/mouse/brown/Tom
+ name = "Tom"
+ desc = "Jerry the cat is not amused."
+
+/mob/living/simple_mob/animal/passive/mouse/brown/Tom/New()
+ ..()
+ // Change my name back, don't want to be named Tom (666)
+ name = initial(name)
+
+
+// Mouse noises
+/datum/say_list/mouse
+ speak = list("Squeek!","SQUEEK!","Squeek?")
+ emote_hear = list("squeeks","squeaks","squiks")
+ emote_see = list("runs in a circle", "shakes", "scritches at something")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm
new file mode 100644
index 0000000000..c488d1ed28
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/passive.dm
@@ -0,0 +1,5 @@
+// Passive mobs can't attack things, and will run away instead.
+// They can also be displaced by all mobs.
+/mob/living/simple_mob/animal/passive
+ ai_holder_type = /datum/ai_holder/simple_mob/passive
+ mob_bump_flag = 0
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm
new file mode 100644
index 0000000000..7fcd020f8e
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/penguin.dm
@@ -0,0 +1,27 @@
+/mob/living/simple_mob/animal/passive/penguin
+ name = "penguin"
+ desc = "An ungainly, waddling, cute, and VERY well-dressed bird."
+ tt_desc = "Aptenodytes forsteri"
+ icon_state = "penguin"
+ icon_living = "penguin"
+ icon_dead = "penguin_dead"
+
+ maxHealth = 20
+ health = 20
+ minbodytemp = 175 // Same as Sif mobs.
+
+ response_help = "pets"
+ response_disarm = "pushes aside"
+ response_harm = "hits"
+
+ harm_intent_damage = 5
+ melee_damage_lower = 10
+ melee_damage_upper = 15
+ attacktext = list("pecked")
+
+ has_langs = list("Bird")
+
+/mob/living/simple_mob/animal/passive/penguin/tux
+ name = "Tux"
+ desc = "A penguin that has been known to associate with gnus."
+ speak_emote = list("interjects")
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm
new file mode 100644
index 0000000000..5e77a57a3c
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/bird.dm
@@ -0,0 +1,93 @@
+// Base bird type.
+
+/mob/living/simple_mob/animal/passive/bird
+ name = "bird"
+ desc = "A domesticated bird. Tweet tweet!"
+ player_msg = "You are able to fly."
+
+ icon = 'icons/mob/birds.dmi'
+ icon_state = "parrot"
+ item_state = null
+ icon_rest = "parrot-held"
+ icon_dead = "parrot-dead"
+
+ pass_flags = PASSTABLE
+
+ health = 30
+ maxHealth = 30
+ melee_damage_lower = 3
+ melee_damage_upper = 3
+
+ movement_cooldown = 0
+ hovering = TRUE // Birds can fly.
+ softfall = TRUE
+ parachuting = TRUE
+
+ attacktext = list("claws", "pecks")
+ speak_emote = list("chirps", "caws")
+ has_langs = list("Bird")
+ response_help = "pets"
+ response_disarm = "gently moves aside"
+ response_harm = "swats"
+
+ say_list_type = /datum/say_list/bird
+ holder_type = /obj/item/weapon/holder/bird
+
+/datum/say_list/bird
+ speak = list("Chirp!","Caw!","Screech!","Squawk!")
+ emote_hear = list("chirps","caws")
+ emote_see = list("shakes their head", "ruffles their feathers")
+
+/obj/item/weapon/holder/bird
+ name = "bird"
+ desc = "It's a bird!"
+ icon_state = null
+ item_icons = null
+ w_class = ITEMSIZE_SMALL
+
+/obj/item/weapon/holder/bird/sync(var/mob/living/simple_mob/SM)
+ ..()
+ icon_state = SM.icon_rest // Looks better if the bird isn't flapping constantly in the UI.
+
+// Subtypes for birbs.
+
+/mob/living/simple_mob/animal/passive/bird/black_bird
+ name = "common blackbird"
+ desc = "A species of bird, both the males and females are known to be territorial on their breeding grounds."
+ icon_state = "commonblackbird"
+ icon_dead = "commonblackbird-dead"
+ tt_desc = "E Turdus merula"
+ icon_scale = 0.5
+
+/mob/living/simple_mob/animal/passive/bird/azure_tit
+ name = "azure tit"
+ desc = "A species of bird, colored blue and white."
+ icon_state = "azuretit"
+ icon_dead = "azuretit-dead"
+ tt_desc = "E Cyanistes cyanus"
+ icon_scale = 0.5
+
+/mob/living/simple_mob/animal/passive/bird/european_robin
+ name = "european robin"
+ desc = "A species of bird, they have been studied for their sense of magnetoreception."
+ icon_state = "europeanrobin"
+ icon_dead = "europeanrobin-dead"
+ tt_desc = "E Erithacus rubecula"
+ icon_scale = 0.5
+
+/mob/living/simple_mob/animal/passive/bird/goldcrest
+ name = "goldcrest"
+ desc = "A species of bird, they were once called 'king of the birds' in ancient human folklore, for their golden crest. \
+ Today, their scientific name still elude towards this, with regulus, meaning petty king."
+ icon_state = "goldcrest"
+ icon_dead = "goldcrest-dead"
+ tt_desc = "E Regulus regulus"
+ icon_scale = 0.5
+
+/mob/living/simple_mob/animal/passive/bird/ringneck_dove
+ name = "ringneck dove"
+ desc = "A species of bird. They are also known as the barbary dove, and have a distinct ring-like shape around the back of their neck."
+ icon_state = "ringneckdove"
+ icon_dead = "ringneckdove-dead"
+ tt_desc = "E Streptopelia risoria" // This is actually disputed IRL but since we can't tell the future it'll stay the same for 500+ years.
+ icon_scale = 0.5
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm
new file mode 100644
index 0000000000..6ded938dff
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/cat.dm
@@ -0,0 +1,136 @@
+/mob/living/simple_mob/animal/passive/cat
+ name = "cat"
+ desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers."
+ tt_desc = "E Felis silvestris catus"
+ icon_state = "cat2"
+ item_state = "cat2"
+ icon_living = "cat2"
+ icon_dead = "cat2_dead"
+ icon_rest = "cat2_rest"
+
+ movement_cooldown = 0.5 SECONDS
+
+ see_in_dark = 6 // Not sure if this actually works.
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
+
+ holder_type = /obj/item/weapon/holder/cat
+ mob_size = MOB_SMALL
+
+ has_langs = list("Cat")
+
+ var/mob/living/friend = null // Our best pal, who we'll follow. Meow.
+
+/mob/living/simple_mob/animal/passive/cat/handle_special()
+ if(!stat && prob(2)) // spooky
+ var/mob/observer/dead/spook = locate() in range(src, 5)
+ if(spook)
+ var/turf/T = get_turf(spook)
+ var/list/visible = list()
+ for(var/obj/O in T.contents)
+ if(!O.invisibility && O.name)
+ visible += O
+ if(visible.len)
+ var/atom/A = pick(visible)
+ visible_emote("suddenly stops and stares at something unseen[istype(A) ? " near [A]":""].")
+
+// Instakills mice.
+/mob/living/simple_mob/animal/passive/cat/apply_melee_effects(var/atom/A)
+ if(ismouse(A))
+ var/mob/living/simple_mob/animal/passive/mouse/mouse = A
+ if(mouse.getMaxHealth() < 20) // In case a badmin makes giant mice or something.
+ mouse.splat()
+ visible_emote(pick("bites \the [mouse]!", "toys with \the [mouse].", "chomps on \the [mouse]!"))
+ else
+ ..()
+
+/mob/living/simple_mob/animal/passive/cat/IIsAlly(mob/living/L)
+ if(L == friend) // Always be pals with our special friend.
+ return TRUE
+
+ . = ..()
+
+ if(.) // We're pals, but they might be a dirty mouse...
+ if(ismouse(L))
+ return FALSE // Cats and mice can never get along.
+
+/mob/living/simple_mob/animal/passive/cat/verb/become_friends()
+ set name = "Become Friends"
+ set category = "IC"
+ set src in view(1)
+
+ var/mob/living/L = usr
+ if(!istype(L))
+ return // Fuck off ghosts.
+
+ if(friend)
+ if(friend == usr)
+ to_chat(L, span("notice", "\The [src] is already your friend! Meow!"))
+ return
+ else
+ to_chat(L, span("warning", "\The [src] ignores you."))
+ return
+
+ friend = L
+ face_atom(L)
+ to_chat(L, span("notice", "\The [src] is now your friend! Meow."))
+ visible_emote(pick("nuzzles [friend].", "brushes against [friend].", "rubs against [friend].", "purrs."))
+
+ if(has_AI())
+ var/datum/ai_holder/AI = ai_holder
+ AI.set_follow(friend)
+
+
+//RUNTIME IS ALIVE! SQUEEEEEEEE~
+/mob/living/simple_mob/animal/passive/cat/runtime
+ name = "Runtime"
+ desc = "Her fur has the look and feel of velvet, and her tail quivers occasionally."
+ tt_desc = "E Felis silvestris medicalis" // a hypoallergenic breed produced by NT for... medical purposes? Sure.
+ gender = FEMALE
+ icon_state = "cat"
+ item_state = "cat"
+ icon_living = "cat"
+ icon_dead = "cat_dead"
+ icon_rest = "cat_rest"
+
+/mob/living/simple_mob/animal/passive/cat/kitten
+ name = "kitten"
+ desc = "D'aaawwww"
+ icon_state = "kitten"
+ item_state = "kitten"
+ icon_living = "kitten"
+ icon_dead = "kitten_dead"
+ gender = NEUTER
+
+/mob/living/simple_mob/animal/passive/cat/kitten/initialize()
+ if(gender == NEUTER)
+ gender = pick(MALE, FEMALE)
+ return ..()
+
+// Leaving this here for now.
+/obj/item/weapon/holder/cat/fluff/bones
+ name = "Bones"
+ desc = "It's Bones! Meow."
+ gender = MALE
+ icon_state = "cat3"
+
+/mob/living/simple_mob/animal/passive/cat/bones
+ name = "Bones"
+ desc = "That's Bones the cat. He's a laid back, black cat. Meow."
+ gender = MALE
+ icon_state = "cat3"
+ item_state = "cat3"
+ icon_living = "cat3"
+ icon_dead = "cat3_dead"
+ icon_rest = "cat3_rest"
+ holder_type = /obj/item/weapon/holder/cat/fluff/bones
+
+
+/datum/say_list/cat
+ speak = list("Meow!","Esp!","Purr!","HSSSSS")
+ emote_hear = list("meows","mews")
+ emote_see = list("shakes their head", "shivers")
+ say_maybe_target = list("Meow?","Mew?","Mao?")
+ say_got_target = list("MEOW!","HSSSS!","REEER!")
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
new file mode 100644
index 0000000000..fbfafc426a
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/dog.dm
@@ -0,0 +1,234 @@
+/mob/living/simple_mob/animal/passive/dog
+ name = "dog"
+ real_name = "dog"
+ desc = "It's a dog."
+ tt_desc = "E Canis lupus familiaris"
+ icon_state = "corgi"
+ icon_living = "corgi"
+ icon_dead = "corgi_dead"
+
+ health = 20
+ maxHealth = 20
+
+ response_help = "pets"
+ response_disarm = "bops"
+ response_harm = "kicks"
+
+ mob_size = MOB_SMALL
+
+ has_langs = list("Dog")
+
+ say_list_type = /datum/say_list/dog
+
+ meat_amount = 3
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/corgi
+
+ var/obj/item/inventory_head
+ var/obj/item/inventory_back
+
+
+/mob/living/simple_mob/animal/passive/dog/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(istype(O, /obj/item/weapon/newspaper))
+ if(!stat)
+ for(var/mob/M in viewers(user, null))
+ if ((M.client && !( M.blinded )))
+ M.show_message("[user] baps [name] on the nose with the rolled up [O]")
+ spawn(0)
+ for(var/i in list(1,2,4,8,4,2,1,2))
+ set_dir(i)
+ sleep(1)
+ else
+ ..()
+
+/mob/living/simple_mob/animal/passive/dog/regenerate_icons()
+ overlays = list()
+
+ if(inventory_head)
+ var/head_icon_state = inventory_head.icon_state
+ if(health <= 0)
+ head_icon_state += "2"
+
+ var/icon/head_icon = image('icons/mob/corgi_head.dmi',head_icon_state)
+ if(head_icon)
+ overlays += head_icon
+
+ if(inventory_back)
+ var/back_icon_state = inventory_back.icon_state
+ if(health <= 0)
+ back_icon_state += "2"
+
+ var/icon/back_icon = image('icons/mob/corgi_back.dmi',back_icon_state)
+ if(back_icon)
+ overlays += back_icon
+
+ return
+
+
+
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
+ name = "corgi meat"
+ desc = "Tastes like... well, you know..."
+
+
+
+
+/datum/say_list/dog
+ speak = list("YAP", "Woof!", "Bark!", "AUUUUUU")
+ emote_hear = list("barks", "woofs", "yaps","pants")
+ emote_see = list("shakes its head", "shivers")
+
+// This exists so not every type of dog has to be a subtype of corgi, and in case we get more dog sprites
+/mob/living/simple_mob/animal/passive/dog/corgi
+ name = "corgi"
+ real_name = "corgi"
+ desc = "It's a corgi."
+ tt_desc = "E Canis lupus familiaris"
+ icon_state = "corgi"
+ icon_living = "corgi"
+ icon_dead = "corgi_dead"
+
+/mob/living/simple_mob/animal/passive/dog/corgi/puppy
+ name = "corgi puppy"
+ real_name = "corgi"
+ desc = "It's a corgi puppy."
+ icon_state = "puppy"
+ icon_living = "puppy"
+ icon_dead = "puppy_dead"
+
+//pupplies cannot wear anything.
+/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Topic(href, href_list)
+ if(href_list["remove_inv"] || href_list["add_inv"])
+ usr << "You can't fit this on [src]"
+ return
+ ..()
+
+/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Bockscar
+ name = "Bockscar"
+ real_name = "Bockscar"
+
+//IAN! SQUEEEEEEEEE~
+/mob/living/simple_mob/animal/passive/dog/corgi/Ian
+ name = "Ian"
+ real_name = "Ian" //Intended to hold the name without altering it.
+ gender = MALE
+ desc = "It's a corgi."
+ var/turns_since_scan = 0
+ var/obj/movement_target
+
+/mob/living/simple_mob/animal/passive/dog/corgi/Ian/Life()
+ ..()
+
+ //Not replacing with SA FollowTarget mechanics because Ian behaves... very... specifically.
+
+ //Feeding, chasing food, FOOOOODDDD
+ if(!stat && !resting && !buckled)
+ turns_since_scan++
+ if(turns_since_scan > 5)
+ turns_since_scan = 0
+ if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
+ movement_target = null
+ if( !movement_target || !(movement_target.loc in oview(src, 3)) )
+ movement_target = null
+ for(var/obj/item/weapon/reagent_containers/food/snacks/S in oview(src,3))
+ if(isturf(S.loc) || ishuman(S.loc))
+ movement_target = S
+ break
+ if(movement_target)
+ step_to(src,movement_target,1)
+ sleep(3)
+ step_to(src,movement_target,1)
+ sleep(3)
+ step_to(src,movement_target,1)
+
+ if(movement_target) //Not redundant due to sleeps, Item can be gone in 6 decisecomds
+ if (movement_target.loc.x < src.x)
+ set_dir(WEST)
+ else if (movement_target.loc.x > src.x)
+ set_dir(EAST)
+ else if (movement_target.loc.y < src.y)
+ set_dir(SOUTH)
+ else if (movement_target.loc.y > src.y)
+ set_dir(NORTH)
+ else
+ set_dir(SOUTH)
+
+ if(isturf(movement_target.loc) )
+ UnarmedAttack(movement_target)
+ else if(ishuman(movement_target.loc) && prob(20))
+ visible_emote("stares at the [movement_target] that [movement_target.loc] has with sad puppy eyes.")
+
+ if(prob(1))
+ visible_emote(pick("dances around","chases their tail"))
+ spawn(0)
+ for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
+ set_dir(i)
+ sleep(1)
+
+//LISA! SQUEEEEEEEEE~
+/mob/living/simple_mob/animal/passive/dog/corgi/Lisa
+ name = "Lisa"
+ real_name = "Lisa"
+ gender = FEMALE
+ desc = "It's a corgi with a cute pink bow."
+ icon_state = "lisa"
+ icon_living = "lisa"
+ icon_dead = "lisa_dead"
+ response_help = "pets"
+ response_disarm = "bops"
+ response_harm = "kicks"
+ var/turns_since_scan = 0
+ var/puppies = 0
+
+//Lisa already has a cute bow!
+/mob/living/simple_mob/animal/passive/dog/corgi/Lisa/Topic(href, href_list)
+ if(href_list["remove_inv"] || href_list["add_inv"])
+ to_chat(usr, "[src] already has a cute bow!")
+ return
+ ..()
+
+/mob/living/simple_mob/animal/passive/dog/corgi/Lisa/Life()
+ ..()
+
+ if(!stat && !resting && !buckled)
+ turns_since_scan++
+ if(turns_since_scan > 15)
+ turns_since_scan = 0
+ var/alone = TRUE
+ var/ian = FALSE
+ for(var/mob/M in oviewers(7, src))
+ if(istype(M, /mob/living/simple_mob/animal/passive/dog/corgi/Ian))
+ if(M.client)
+ alone = FALSE
+ break
+ else
+ ian = M
+ else
+ alone = FALSE
+ break
+ if(alone && ian && puppies < 4)
+ if(near_camera(src) || near_camera(ian))
+ return
+ new /mob/living/simple_mob/animal/passive/dog/corgi/puppy(loc)
+
+ if(prob(1))
+ visible_emote(pick("dances around","chases her tail"))
+ spawn(0)
+ for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
+ set_dir(i)
+ sleep(1)
+
+// Tamaskans
+/mob/living/simple_mob/animal/passive/dog/tamaskan
+ name = "tamaskan"
+ real_name = "tamaskan"
+ desc = "It's a tamaskan."
+ icon_state = "tamaskan"
+ icon_living = "tamaskan"
+ icon_dead = "tamaskan_dead"
+
+/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice
+ name = "Spice"
+ real_name = "Spice" //Intended to hold the name without altering it.
+ gender = FEMALE
+ desc = "It's a tamaskan, the name Spice can be found on its collar."
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm b/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm
new file mode 100644
index 0000000000..bedd95e3ce
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/pets/parrot.dm
@@ -0,0 +1,252 @@
+// Parrots can talk, and may repeat things it hears.
+/mob/living/simple_mob/animal/passive/bird/parrot
+ name = "parrot"
+ description_info = "You can give it a headset by clicking on it with a headset. \
+ To remove it, click the bird while on grab intent."
+ has_langs = list("Galactic Common", "Bird")
+
+ ai_holder_type = /datum/ai_holder/simple_mob/passive/parrot
+
+ // A headset, so that talking parrots can yell at the crew over comms.
+ // If set to a type, on initialize it will be instantiated into that type.
+ var/obj/item/device/radio/headset/my_headset = null
+
+// Say list
+/datum/say_list/bird/poly
+ speak = list(
+ "Poly wanna cracker!",
+ "Check the singulo, you chucklefucks!",
+ "Wire the solars, you lazy bums!",
+ "WHO TOOK THE DAMN HARDSUITS?",
+ "OH GOD ITS FREE CALL THE SHUTTLE",
+ "Danger! Crystal hyperstructure instability!",
+ "CRYSTAL DELAMINATION IMMINENT.",
+ "Tweet tweet, I'm a Teshari.",
+ "Chitters.",
+ "Meteors have been detected on a collision course with the station!"
+ )
+
+// Lets the AI use headsets.
+// Player-controlled parrots will need to do it manually.
+/mob/living/simple_mob/animal/passive/bird/parrot/ISay(message)
+ if(my_headset && prob(50))
+ var/list/keys = list()
+ for(var/channel in my_headset.channels)
+ var/key = get_radio_key_from_channel(channel)
+ if(key)
+ keys += key
+ if(keys.len)
+ var/key_used = pick(keys)
+ return say("[key_used] [message]")
+ return say(message)
+
+// Ugly saycode so parrots can use their headsets.
+/mob/living/simple_mob/animal/passive/bird/parrot/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
+ ..()
+ if(message_mode)
+ if(my_headset && istype(my_headset, /obj/item/device/radio))
+ my_headset.talk_into(src, message, message_mode, verb, speaking)
+ used_radios += my_headset
+
+// Clicked on while holding an object.
+/mob/living/simple_mob/animal/passive/bird/parrot/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/device/radio/headset))
+ give_headset(I, user)
+ return
+ return ..()
+
+// Clicked on by empty hand.
+/mob/living/simple_mob/animal/passive/bird/parrot/attack_hand(mob/living/L)
+ if(L.a_intent == I_GRAB && my_headset)
+ remove_headset(L)
+ else
+ ..()
+
+
+/mob/living/simple_mob/animal/passive/bird/parrot/proc/give_headset(obj/item/device/radio/headset/new_headset, mob/living/user)
+ if(!istype(new_headset))
+ to_chat(user, span("warning", "\The [new_headset] isn't a headset."))
+ return
+ if(my_headset)
+ to_chat(user, span("warning", "\The [src] is already wearing \a [my_headset]."))
+ return
+ else
+ user.drop_item(new_headset)
+ my_headset = new_headset
+ new_headset.forceMove(src)
+ to_chat(user, span("warning", "You place \a [new_headset] on \the [src]. You monster."))
+ to_chat(src, span("notice", "\The [user] gives you \a [new_headset]. You should put it to good use immediately."))
+ return
+
+/mob/living/simple_mob/animal/passive/bird/parrot/proc/remove_headset(mob/living/user)
+ if(!my_headset)
+ to_chat(user, "\The [src] doesn't have a headset to remove, thankfully.")
+ else
+ ISay("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
+ my_headset.forceMove(get_turf(src))
+ user.put_in_hands(my_headset)
+ to_chat(user, span("notice", "You take away \the [src]'s [my_headset.name]. Finally."))
+ to_chat(src, span("warning", "\The [user] takes your [my_headset.name] away! How cruel!"))
+ my_headset = null
+
+/mob/living/simple_mob/animal/passive/bird/parrot/examine(mob/user)
+ ..()
+ if(my_headset)
+ to_chat(user, "It is wearing \a [my_headset].")
+
+/mob/living/simple_mob/animal/passive/bird/parrot/initialize()
+ if(my_headset)
+ my_headset = new my_headset(src)
+ return ..()
+
+// Subtypes.
+
+// Best Bird
+/mob/living/simple_mob/animal/passive/bird/parrot/poly
+ name = "Poly"
+ desc = "It's a parrot. An expert on quantum cracker theory."
+ icon_state = "poly"
+ icon_rest = "poly-held"
+ icon_dead = "poly-dead"
+ tt_desc = "E Ara macao"
+ my_headset = /obj/item/device/radio/headset/headset_eng
+ say_list_type = /datum/say_list/bird/poly
+
+// Best Bird with best headset.
+/mob/living/simple_mob/animal/passive/bird/parrot/poly/ultimate
+ my_headset = /obj/item/device/radio/headset/omni
+
+/mob/living/simple_mob/animal/passive/bird/parrot/kea
+ name = "kea"
+ desc = "A species of parrot. On Earth, they are unique among other parrots for residing in alpine climates. \
+ They are known to be intelligent and curious, which has made some consider them a pest."
+ icon_state = "kea"
+ icon_rest = "kea-held"
+ icon_dead = "kea-dead"
+ tt_desc = "E Nestor notabilis"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/eclectus
+ name = "eclectus"
+ desc = "A species of parrot, this species features extreme sexual dimorphism in their plumage's colors. \
+ A male eclectus has emerald green plumage, where as a female eclectus has red and purple plumage."
+ icon_state = "eclectus"
+ icon_rest = "eclectus-held"
+ icon_dead = "eclectus-dead"
+ tt_desc = "E Eclectus roratus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/eclectus/initialize()
+ gender = pick(MALE, FEMALE)
+ if(gender == FEMALE)
+ icon_state = "eclectusf"
+ icon_rest = "eclectusf-held"
+ icon_dead = "eclectusf-dead"
+ return ..()
+
+/mob/living/simple_mob/animal/passive/bird/parrot/grey_parrot
+ name = "grey parrot"
+ desc = "A species of parrot. This one is predominantly grey, but has red tail feathers."
+ icon_state = "agrey"
+ icon_rest = "agrey-held"
+ icon_dead = "agrey-dead"
+ tt_desc = "E Psittacus erithacus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/black_headed_caique
+ name = "black-headed caique"
+ desc = "A species of parrot, these birds have a distinct black color on their heads, distinguishing them from their relative Caiques."
+ icon_state = "bcaique"
+ icon_rest = "bcaique-held"
+ icon_dead = "bcaique-dead"
+ tt_desc = "E Pionites melanocephalus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/white_caique
+ name = "white-bellied caique"
+ desc = "A species of parrot, they are also known as the Green-Thighed Parrot."
+ icon_state = "wcaique"
+ icon_rest = "wcaique-held"
+ icon_dead = "wcaique-dead"
+ tt_desc = "E Pionites leucogaster"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar
+ name = "budgerigar"
+ desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
+ This one is has its natural colors of green and yellow."
+ icon_state = "gbudge"
+ icon_rest = "gbudge-held"
+ icon_dead = "gbudge-dead"
+ tt_desc = "E Melopsittacus undulatus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/blue
+ icon_state = "bbudge"
+ icon_rest = "bbudge-held"
+ icon_dead = "bbudge-dead"
+ desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
+ This one has a mutation which altered its color to be blue instead of green and yellow."
+
+/mob/living/simple_mob/animal/passive/bird/parrot/budgerigar/bluegreen
+ icon_state = "bgbudge"
+ icon_rest = "bgbudge-held"
+ icon_dead = "bgbudge-dead"
+ desc = "A species of parrot, they are also known as the common parakeet, or in some circles, the budgie. \
+ This one has a mutation which altered its color to be a mix of blue and green."
+
+/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel
+ name = "cockatiel"
+ desc = "A species of parrot. This one has a highly visible crest."
+ icon_state = "tiel"
+ icon_rest = "tiel-held"
+ icon_dead = "tiel-dead"
+ tt_desc = "E Nymphicus hollandicus"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/white
+ icon_state = "wtiel"
+ icon_rest = "wtiel-held"
+ icon_dead = "wtiel-dead"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/yellowish
+ icon_state = "luttiel"
+ icon_rest = "luttiel-held"
+ icon_dead = "luttiel-dead"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/cockatiel/grey
+ icon_state = "blutiel" // idk why this is blu.
+ icon_rest = "blutiel-held"
+ icon_dead = "blutiel-dead"
+
+// This actually might be the yellow-crested cockatoo but idk.
+/mob/living/simple_mob/animal/passive/bird/parrot/sulphur_cockatoo
+ name = "sulphur-crested cockatoo"
+ desc = "A species of parrot. This one has an expressive yellow crest. Their underwing and tail feathers are also yellow."
+ icon_state = "too"
+ icon_rest = "too-held"
+ icon_dead = "too-dead"
+ tt_desc = "E Cacatua galerita"
+
+// This was originally called 'hooded_too', which might not mean the unbrella cockatoo but idk.
+/mob/living/simple_mob/animal/passive/bird/parrot/white_cockatoo
+ name = "white cockatoo"
+ desc = "A species of parrot. This one is also known as the Umbrella Cockatoo, due to the semicircular shape of its crest."
+ icon_state = "utoo"
+ icon_rest = "utoo-held"
+ icon_dead = "utoo-dead"
+ tt_desc = "E Cacatua alba"
+
+/mob/living/simple_mob/animal/passive/bird/parrot/pink_cockatoo
+ name = "pink cockatoo"
+ desc = "A species of parrot. This one is also known as Major Mitchell's cockatoo, \
+ in honor of a human surveyor and explorer who existed before humans fully explored their home planet."
+ icon_state = "mtoo"
+ icon_rest = "mtoo-held"
+ icon_dead = "mtoo-dead"
+ tt_desc = "E Lophochroa leadbeateri"
+
+
+// AI
+/datum/ai_holder/simple_mob/passive/parrot
+ speak_chance = 2
+ base_wander_delay = 8
+
+/datum/ai_holder/simple_mob/passive/parrot/on_hear_say(mob/living/speaker, message)
+ if(holder.stat || !holder.say_list || !message || speaker == holder)
+ return
+ var/datum/say_list/S = holder.say_list
+ S.speak |= message
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm
new file mode 100644
index 0000000000..fdd9f66ae5
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/diyaab.dm
@@ -0,0 +1,35 @@
+// Diyaabs are rather weak, but tend to exist in large numbers.
+// They cooperate with other diyaabs, in order to swarm whoever decides to pick on the little fluffy critter.
+// A cleaving weapon like an axe will make short work of the pack.
+
+/mob/living/simple_mob/animal/sif/diyaab
+ name = "diyaab"
+ desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion."
+ tt_desc = "S Choeros hirtus" //diyaab and shantak are technically reletives!
+
+ faction = "diyaab"
+
+ icon_state = "diyaab"
+ icon_living = "diyaab"
+ icon_dead = "diyaab_dead"
+ icon = 'icons/jungle.dmi'
+
+ maxHealth = 25
+ health = 25
+
+ movement_cooldown = 0
+
+ melee_damage_lower = 2
+ melee_damage_upper = 6
+ base_attack_cooldown = 1 SECOND
+ attack_sharp = 1 //Bleeds, but it shouldn't rip off a limb?
+ attacktext = list("gouged")
+
+ say_list_type = /datum/say_list/diyaab
+ ai_holder_type = /datum/ai_holder/simple_mob/retaliate/cooperative
+
+/datum/say_list/diyaab
+ speak = list("Awrr?", "Aowrl!", "Worrl.")
+ emote_see = list("sniffs the air cautiously","looks around")
+ emote_hear = list("snuffles")
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm
new file mode 100644
index 0000000000..3b7f279653
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/hooligan_crab.dm
@@ -0,0 +1,102 @@
+/*
+ Hooligan Crabs are called so because they are rather curious and tend to follow people,
+ whether the people want them to or not, and sometimes causing vandalism by accident.
+ They're pretty strong and have strong melee armor, but won't attack first.
+ They unknowingly play a role in keeping the shoreline fairly safe, by killing whatever would attack other people.
+
+ They also have a slow, but very strong attack that is telegraphed. If it hits, it will briefly stun whatever got hit
+ and inflict a very large chunk of damage. If the thing was already stunned, the crab will 'throw' them away, to
+ hopefully prevent chainstuns forever.
+*/
+
+/mob/living/simple_mob/animal/sif/hooligan_crab
+ name = "hooligan crab"
+ desc = "A large, hard-shelled crustacean. This one is mostly grey. \
+ You probably shouldn't mess with it."
+ icon_state = "sif_crab"
+ icon_living = "sif_crab"
+ icon_dead = "sif_crab_dead"
+ icon_scale = 1.5
+
+ faction = "crabs"
+
+ maxHealth = 200
+ health = 200
+ movement_cooldown = 10
+ movement_sound = 'sound/weapons/heavysmash.ogg'
+ movement_shake_radius = 5
+
+ taser_kill = FALSE
+ armor = list(
+ "melee" = 40,
+ "bullet" = 20,
+ "laser" = 10,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+ armor_soak = list(
+ "melee" = 10,
+ "bullet" = 5,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+
+ mob_size = MOB_LARGE
+
+ melee_damage_lower = 22
+ melee_damage_upper = 35
+ attack_armor_pen = 35
+ attack_sharp = TRUE
+ attack_edge = TRUE
+ melee_attack_delay = 1 SECOND
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ response_help = "pets"
+ response_disarm = "gently pushes aside"
+ response_harm = "kicks"
+ friendly = "pinches"
+ attacktext = list("clawed", "pinched", "crushed")
+ speak_emote = list("clicks")
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee/hooligan
+ say_list_type = /datum/say_list/crab
+
+ var/weaken_amount = 2 // Be careful with this number. High values will equal a permastun.
+
+// Stuns the thing that got hit briefly.
+/mob/living/simple_mob/animal/sif/hooligan_crab/apply_melee_effects(atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ var/was_stunned = L.incapacitated(INCAPACITATION_DISABLED)
+ L.Weaken(weaken_amount)
+
+ playsound(L, 'sound/effects/break_stone.ogg', 75, 1)
+ if(was_stunned) // Try to prevent chain-stuns by having them thrown.
+ var/throwdir = get_dir(src, L)
+ L.throw_at(get_edge_target_turf(L, throwdir), 5, 1, src)
+ visible_message(span("danger", "\The [src] hurls \the [L] away!"))
+ else
+ visible_message(span("danger", "\The [src] crushes \the [L]!"))
+
+// The AI for hooligan crabs. Follows people for awhile.
+/datum/ai_holder/simple_mob/melee/hooligan
+ hostile = FALSE
+ retaliate = TRUE
+ returns_home = TRUE
+ max_home_distance = 12
+ var/random_follow = TRUE // Turn off if you want to bus with crabs.
+
+/datum/ai_holder/simple_mob/melee/hooligan/handle_stance_strategical()
+ ..()
+ if(random_follow && stance == STANCE_IDLE && !leader)
+ if(prob(10))
+ for(var/mob/living/L in hearers(holder))
+ if(!istype(L, holder)) // Don't follow other hooligan crabs.
+ holder.visible_message("\The [holder] starts to follow \the [L].")
+ set_follow(L, rand(20 SECONDS, 40 SECONDS))
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm
new file mode 100644
index 0000000000..e8d56d6bb4
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/savik.dm
@@ -0,0 +1,48 @@
+// Saviks are dangerous, angry creatures that hit hard, and will berserk if losing a fight.
+
+/mob/living/simple_mob/animal/sif/savik
+ name = "savik"
+ tt_desc = "S Pistris tellus" //landshark
+ player_msg = "You have the ability to berserk at will, which will grant strong physical bonuses for \
+ a short period of time, however it will tire you and you will be much weaker for awhile after it expires."
+
+ faction = "savik"
+
+ icon_state = "savik"
+ icon_living = "savik"
+ icon_dead = "savik_dead"
+ icon = 'icons/jungle.dmi'
+
+ maxHealth = 125
+ health = 125
+
+ movement_cooldown = 0.5 SECONDS
+
+ melee_damage_lower = 15
+ melee_damage_upper = 35
+ attack_armor_pen = 15
+ attack_sharp = TRUE
+ attack_edge = TRUE
+ melee_attack_delay = 1 SECOND
+ attacktext = list("mauled")
+
+ say_list_type = /datum/say_list/savik
+
+/datum/say_list/savik
+ speak = list("Hruuugh!","Hrunnph")
+ emote_see = list("paws the ground","shakes its mane","stomps")
+ emote_hear = list("snuffles")
+
+/mob/living/simple_mob/animal/sif/savik/handle_special()
+ if((get_AI_stance() in list(STANCE_APPROACH, STANCE_FIGHT)) && !is_AI_busy() && isturf(loc))
+ if(health <= (maxHealth * 0.5)) // At half health, and fighting someone currently.
+ berserk()
+
+
+// So players can use it too.
+/mob/living/simple_mob/animal/sif/savik/verb/berserk()
+ set name = "Berserk"
+ set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards."
+ set category = "Abilities"
+
+ add_modifier(/datum/modifier/berserk, 30 SECONDS)
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
new file mode 100644
index 0000000000..0148a39954
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/shantak.dm
@@ -0,0 +1,70 @@
+// Shantaks are essentially sif wolves.
+
+/mob/living/simple_mob/animal/sif/shantak
+ name = "shantak"
+ desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \
+ Don't be fooled by its beauty though."
+ tt_desc = "S Choeros shantak"
+
+ faction = "shantak"
+
+ icon_state = "shantak"
+ icon_living = "shantak"
+ icon_dead = "shantak_dead"
+ icon = 'icons/jungle.dmi'
+
+ maxHealth = 75
+
+ movement_cooldown = 5
+
+ melee_damage_lower = 6
+ melee_damage_upper = 14
+ base_attack_cooldown = 1 SECOND
+ melee_attack_delay = 0.5 SECONDS
+ attack_armor_pen = 5
+ attack_sharp = TRUE
+ attack_edge = TRUE
+ attacktext = list("gouged")
+
+ say_list_type = /datum/say_list/shantak
+
+/datum/say_list/shantak
+ speak = list("Shuhn.","Shrunnph?","Shunpf.")
+ emote_see = list("scratches the ground", "shakes out its mane", "clinks gently as it moves")
+
+
+// The pack leader.
+// Will command other shantaks to follow it.
+/mob/living/simple_mob/animal/sif/shantak/leader
+ name = "big shantak"
+ desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. \
+ This one seems bigger than the others, and has a commanding presence."
+ icon_scale = 1.5
+ maxHealth = 125
+ player_msg = "You have the ability to command other shantaks to follow you."
+
+/mob/living/simple_mob/animal/sif/shantak/leader/verb/rally_pack()
+ set name = "Rally Pack"
+ set desc = "Commands your fellow packmembers to follow you, the leader."
+ set category = "Abilities"
+
+ for(var/mob/living/simple_mob/animal/sif/shantak/S in hearers(7, src))
+ if(istype(S, /mob/living/simple_mob/animal/sif/shantak/leader)) // Leaders won't follow other leaders. Also avoids trying to follow ourselves.
+ continue
+ if(!S.ai_holder)
+ continue
+ if(S.faction != src.faction)
+ continue
+ var/datum/ai_holder/AI = S.ai_holder
+ AI.set_follow(src)
+
+// Variant that automatically commands nearby allies to follow it when created.
+// Suggested to spawn last so it can rally up all the shantaks easily before hunting for tasty explorers.
+/mob/living/simple_mob/animal/sif/shantak/leader/autofollow/initialize()
+ rally_pack()
+ return ..()
+
+
+// These ones only retaliate. Used for a PoI.
+/mob/living/simple_mob/animal/sif/shantak/retaliate
+ ai_holder_type = /datum/ai_holder/simple_mob/retaliate
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm
new file mode 100644
index 0000000000..8d19324cf2
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/sif/sif.dm
@@ -0,0 +1,5 @@
+// Mobs intended to be on Sif. As such, they won't die to the cold.
+/mob/living/simple_mob/animal/sif
+ minbodytemp = 175
+ cold_resist = 0.75
+ heat_resist = -0.5
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm
new file mode 100644
index 0000000000..7de14dc6e7
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/alien.dm
@@ -0,0 +1,118 @@
+/mob/living/simple_mob/animal/space/alien
+ name = "alien hunter"
+ desc = "Hiss!"
+ icon = 'icons/mob/alien.dmi'
+ icon_state = "alienh_running"
+ icon_living = "alienh_running"
+ icon_dead = "alien_l"
+ icon_gib = "syndicate_gib"
+ icon_rest = "alienh_sleep"
+
+ faction = "xeno"
+
+ mob_class = MOB_CLASS_ABERRATION
+
+ response_help = "pokes"
+ response_disarm = "shoves"
+ response_harm = "hits"
+
+ maxHealth = 100
+ health = 100
+
+ harm_intent_damage = 5
+ melee_damage_lower = 25
+ melee_damage_upper = 25
+ attack_sharp = TRUE
+ attack_edge = TRUE
+
+ attacktext = list("slashed")
+ attack_sound = 'sound/weapons/bladeslice.ogg'
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
+
+/mob/living/simple_mob/animal/space/alien/drone
+ name = "alien drone"
+ icon_state = "aliend_running"
+ icon_living = "aliend_running"
+ icon_dead = "aliend_l"
+ icon_rest = "aliend_sleep"
+ health = 60
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+
+/mob/living/simple_mob/animal/space/alien/sentinel
+ name = "alien sentinel"
+ icon_state = "aliens_running"
+ icon_living = "aliens_running"
+ icon_dead = "aliens_l"
+ icon_rest = "aliens_sleep"
+ health = 120
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ projectiletype = /obj/item/projectile/energy/neurotoxin/toxic
+ projectilesound = 'sound/weapons/pierce.ogg'
+
+/mob/living/simple_mob/animal/space/alien/sentinel/praetorian
+ name = "alien praetorian"
+ icon = 'icons/mob/64x64.dmi'
+ icon_state = "prat_s"
+ icon_living = "prat_s"
+ icon_dead = "prat_dead"
+ icon_rest = "prat_sleep"
+ maxHealth = 200
+ health = 200
+
+ pixel_x = -16
+ old_x = -16
+ meat_amount = 5
+
+/mob/living/simple_mob/animal/space/alien/queen
+ name = "alien queen"
+ icon_state = "alienq_running"
+ icon_living = "alienq_running"
+ icon_dead = "alienq_l"
+ icon_rest = "alienq_sleep"
+ health = 250
+ maxHealth = 250
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ projectiletype = /obj/item/projectile/energy/neurotoxin/toxic
+ projectilesound = 'sound/weapons/pierce.ogg'
+
+
+ movement_cooldown = 8
+
+/mob/living/simple_mob/animal/space/alien/queen/empress
+ name = "alien empress"
+ icon = 'icons/mob/64x64.dmi'
+ icon_state = "queen_s"
+ icon_living = "queen_s"
+ icon_dead = "queen_dead"
+ icon_rest = "queen_sleep"
+ maxHealth = 400
+ health = 400
+ meat_amount = 5
+
+ pixel_x = -16
+ old_x = -16
+
+/mob/living/simple_mob/animal/space/alien/queen/empress/mother
+ name = "alien mother"
+ icon = 'icons/mob/96x96.dmi'
+ icon_state = "empress_s"
+ icon_living = "empress_s"
+ icon_dead = "empress_dead"
+ icon_rest = "empress_rest"
+ maxHealth = 600
+ health = 600
+ meat_amount = 10
+ melee_damage_lower = 15
+ melee_damage_upper = 25
+
+ pixel_x = -32
+ old_x = -32
+
+/mob/living/simple_mob/animal/space/alien/death()
+ ..()
+ visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...")
+ playsound(src, 'sound/voice/hiss6.ogg', 100, 1)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm
new file mode 100644
index 0000000000..5244fd9b98
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/bats.dm
@@ -0,0 +1,52 @@
+/mob/living/simple_mob/animal/space/bats
+ name = "space bat swarm"
+ desc = "A swarm of cute little blood sucking bats that looks pretty upset."
+ tt_desc = "N Bestia gregaria" //Nispean swarm bats, because of course Nisp has swarm bats
+ icon = 'icons/mob/bats.dmi'
+ icon_state = "bat"
+ icon_living = "bat"
+ icon_dead = "bat_dead"
+ icon_gib = "bat_dead"
+
+ faction = "scarybat"
+
+ maxHealth = 20
+ health = 20
+
+ attacktext = list("bites")
+ attack_sound = 'sound/weapons/bite.ogg'
+
+ response_help = "pets the"
+ response_disarm = "gently pushes aside the"
+ response_harm = "hits the"
+
+ harm_intent_damage = 10
+
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ attack_sharp = TRUE
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
+
+ has_langs = list("Mouse")
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+ say_list_type = /datum/say_list/mouse // Close enough
+
+ var/scare_chance = 15
+
+/mob/living/simple_mob/animal/space/bats/apply_melee_effects(var/atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(prob(scare_chance))
+ L.Stun(1)
+ L.visible_message("\the [src] scares \the [L]!")
+
+// Spookiest of bats
+/mob/living/simple_mob/animal/space/bats/cult
+ faction = "cult"
+ supernatural = TRUE
+
+/mob/living/simple_mob/animal/space/bats/cult/cultify()
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm
new file mode 100644
index 0000000000..e4199373bd
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/bear.dm
@@ -0,0 +1,46 @@
+/mob/living/simple_mob/animal/space/bear
+ name = "space bear"
+ desc = "A product of Space Russia?"
+ tt_desc = "U Ursinae aetherius" //...bearspace? Maybe.
+ icon_state = "bear"
+ icon_living = "bear"
+ icon_dead = "bear_dead"
+ icon_gib = "bear_gib"
+
+ faction = "russian"
+
+ maxHealth = 125
+ health = 125
+
+ movement_cooldown = 0.5 SECONDS
+
+ melee_damage_lower = 15
+ melee_damage_upper = 35
+ attack_armor_pen = 15
+ attack_sharp = TRUE
+ attack_edge = TRUE
+ melee_attack_delay = 1 SECOND
+ attacktext = list("mauled")
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/bearmeat
+
+ say_list_type = /datum/say_list/bear
+
+/datum/say_list/bear
+ speak = list("RAWR!","Rawr!","GRR!","Growl!")
+ emote_see = list("stares ferociously", "stomps")
+ emote_hear = list("rawrs","grumbles","grawls", "growls", "roars")
+
+// Is it time to be mad?
+/mob/living/simple_mob/animal/space/bear/handle_special()
+ if((get_AI_stance() in list(STANCE_APPROACH, STANCE_FIGHT)) && !is_AI_busy() && isturf(loc))
+ if(health <= (maxHealth * 0.5)) // At half health, and fighting someone currently.
+ berserk()
+
+// So players can use it too.
+/mob/living/simple_mob/animal/space/bear/verb/berserk()
+ set name = "Berserk"
+ set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards."
+ set category = "Abilities"
+
+ add_modifier(/datum/modifier/berserk, 30 SECONDS)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
new file mode 100644
index 0000000000..e1327f033b
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/carp.dm
@@ -0,0 +1,128 @@
+// Space carp show up as a random event to wreck hapless people in space or near windows.
+// They generally fit the archetype of 'fast but fragile'.
+// This is compensated by being in groups (usually).
+/mob/living/simple_mob/animal/space/carp
+ name = "space carp"
+ desc = "A ferocious, fang-bearing creature that resembles a fish."
+ icon_state = "carp"
+ icon_living = "carp"
+ icon_dead = "carp_dead"
+ icon_gib = "carp_gib"
+
+ faction = "carp"
+ maxHealth = 25
+ health = 25
+ movement_cooldown = 0 // Carp go fast
+ hovering = TRUE
+
+ response_help = "pets the"
+ response_disarm = "gently pushes aside the"
+ response_harm = "hits the"
+
+ melee_damage_lower = 7 // About 14 DPS.
+ melee_damage_upper = 7
+ base_attack_cooldown = 10 // One attack a second.
+ attack_sharp = TRUE
+ attack_sound = 'sound/weapons/bite.ogg'
+ attacktext = list("bitten")
+
+ meat_amount = 1
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+
+ var/knockdown_chance = 15
+
+/mob/living/simple_mob/animal/space/carp/apply_melee_effects(var/atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(prob(knockdown_chance))
+ L.Weaken(3)
+ L.visible_message(span("danger", "\The [src] knocks down \the [L]!"))
+
+// Subtypes.
+
+// Won't wander away.
+/mob/living/simple_mob/animal/space/carp/event
+ ai_holder_type = /datum/ai_holder/simple_mob/event
+
+
+/mob/living/simple_mob/animal/space/carp/large
+ name = "elder carp"
+ desc = "An older, more matured carp. Few survive to this age due to their aggressiveness."
+ icon = 'icons/mob/64x32.dmi'
+ icon_state = "shark"
+ icon_living = "shark"
+ icon_dead = "shark_dead"
+
+ maxHealth = 50
+ health = 50
+ movement_cooldown = 5 // Slower than the younger carp.
+ mob_size = MOB_LARGE
+
+ pixel_x = -16
+ default_pixel_x = -16
+
+ meat_amount = 3
+
+
+/mob/living/simple_mob/animal/space/carp/large/huge
+ name = "great white carp"
+ desc = "A very rare breed of carp- and a very aggressive one."
+ icon = 'icons/mob/64x64.dmi'
+ icon_dead = "megacarp_dead"
+ icon_living = "megacarp"
+ icon_state = "megacarp"
+
+ maxHealth = 230
+ health = 230
+ movement_cooldown = 10
+
+ melee_damage_lower = 15 // About 20 DPS.
+ melee_damage_upper = 25
+
+ pixel_y = -16
+ default_pixel_y = -16
+
+ meat_amount = 10
+
+
+/mob/living/simple_mob/animal/space/carp/holographic
+ name = "holographic carp"
+ desc = "An obviously holographic, but still ferocious looking carp."
+ // Might be worth using a filter similar to AI holograms in the future.
+ icon = 'icons/mob/AI.dmi'
+ icon_state = "holo4"
+ icon_living = "holo4"
+ icon_dead = "holo4"
+ alpha = 127
+ icon_gib = null
+ meat_amount = 0
+ meat_type = null
+
+ mob_class = MOB_CLASS_PHOTONIC // Xeno-taser won't work on this as its not a 'real' carp.
+
+/mob/living/simple_mob/animal/space/carp/holographic/initialize()
+ set_light(2) // Hologram lighting.
+ return ..()
+
+// Presumably the holodeck emag code requires this.
+// Pass TRUE to make safe. Pass FALSE to make unsafe.
+/mob/living/simple_mob/animal/space/carp/holographic/proc/set_safety(safe)
+ if(!isnull(get_AI_stance())) // Will return null if lacking an AI holder or a player is controlling it w/o autopilot var.
+ ai_holder.hostile = !safe // Inverted so safe = TRUE means hostility = FALSE.
+ ai_holder.forget_everything() // Reset state so it'll stop chewing on its target.
+
+// Called on death.
+/mob/living/simple_mob/animal/space/carp/holographic/proc/derez()
+ visible_message(span("notice", "\The [src] fades away!"))
+ qdel(src)
+
+/mob/living/simple_mob/animal/space/carp/holographic/gib()
+ derez() // Holograms can't gib.
+
+/mob/living/simple_mob/animal/space/carp/holographic/death()
+ ..()
+ derez()
+
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm
new file mode 100644
index 0000000000..43d159a9f0
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/goose.dm
@@ -0,0 +1,44 @@
+/mob/living/simple_mob/animal/space/goose
+ name = "goose"
+ desc = "It looks pretty angry!"
+ tt_desc = "E Branta canadensis" //that iconstate is just a regular goose
+ icon_state = "goose"
+ icon_living = "goose"
+ icon_dead = "goose_dead"
+
+ faction = "geese"
+
+ maxHealth = 30
+ health = 30
+
+ response_help = "pets the"
+ response_disarm = "gently pushes aside the"
+ response_harm = "hits the"
+
+ harm_intent_damage = 5
+ melee_damage_lower = 5 //they're meant to be annoying, not threatening.
+ melee_damage_upper = 5 //unless there's like a dozen of them, then you're screwed.
+ attacktext = list("pecked")
+ attack_sound = 'sound/weapons/bite.ogg'
+
+ has_langs = list("Bird")
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+
+/datum/say_list/goose
+ speak = list("HONK!")
+ emote_hear = list("honks loudly!")
+ say_maybe_target = list("Honk?")
+ say_got_target = list("HONK!!!")
+
+/mob/living/simple_mob/animal/space/goose/handle_special()
+ if((get_AI_stance() in list(STANCE_APPROACH, STANCE_FIGHT)) && !is_AI_busy() && isturf(loc))
+ if(health <= (maxHealth * 0.5)) // At half health, and fighting someone currently.
+ berserk()
+
+/mob/living/simple_mob/animal/space/goose/verb/berserk()
+ set name = "Berserk"
+ set desc = "Enrage and become vastly stronger for a period of time, however you will be weaker afterwards."
+ set category = "Abilities"
+
+ add_modifier(/datum/modifier/berserk, 30 SECONDS)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/space/space.dm b/code/modules/mob/living/simple_mob/subtypes/animal/space/space.dm
new file mode 100644
index 0000000000..b7f77e6410
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/animal/space/space.dm
@@ -0,0 +1,15 @@
+// 'Space' mobs don't care about atmos (like carp)
+/mob/living/simple_mob/animal/space
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+// They can also, you know, move around, in space
+/mob/living/simple_mob/animal/space/Process_Spacemove(var/check_drift = 0)
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm
new file mode 100644
index 0000000000..2d700646ae
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/blob/blob.dm
@@ -0,0 +1,62 @@
+// Blob simple_mobs generally get made from the blob random event.
+// They're considered slimes for the purposes of attack bonuses from certain weapons.
+
+// Do not spawn, this is a base type.
+/mob/living/simple_mob/blob
+ icon = 'icons/mob/blob.dmi'
+ pass_flags = PASSBLOB | PASSTABLE
+ faction = "blob"
+
+ heat_damage_per_tick = 0
+ cold_damage_per_tick = 0
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+ taser_kill = FALSE
+
+ var/mob/observer/blob/overmind = null
+ var/obj/structure/blob/factory/factory = null
+
+ mob_class = MOB_CLASS_SLIME
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+
+/mob/living/simple_mob/blob/speech_bubble_appearance()
+ return "slime"
+
+/mob/living/simple_mob/blob/update_icons()
+ if(overmind)
+ color = overmind.blob_type.complementary_color
+ else
+ color = null
+ ..()
+
+/mob/living/simple_mob/blob/Destroy()
+ if(overmind)
+ overmind.blob_mobs -= src
+ return ..()
+
+/mob/living/simple_mob/blob/blob_act(obj/structure/blob/B)
+ if(!overmind && B.overmind)
+ overmind = B.overmind
+ update_icon()
+
+ if(stat != DEAD && health < maxHealth)
+ adjustBruteLoss(-maxHealth*0.0125)
+ adjustFireLoss(-maxHealth*0.0125)
+
+/mob/living/simple_mob/blob/CanPass(atom/movable/mover, turf/target)
+ if(istype(mover, /obj/structure/blob)) // Don't block blobs from expanding onto a tile occupied by a blob mob.
+ return TRUE
+ return ..()
+
+/mob/living/simple_mob/blob/Process_Spacemove()
+ for(var/obj/structure/blob/B in range(1, src))
+ return TRUE
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm
new file mode 100644
index 0000000000..fd91b00b33
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/blob/spore.dm
@@ -0,0 +1,148 @@
+// Spores are made from blob factories.
+// They are very weak and expendable, but can overwhelm when a lot of them are together.
+// When attacking, spores will hit harder if near other friendly spores.
+// Some blobs can infest dead non-robotic mobs, making them into Not Zombies.
+
+/mob/living/simple_mob/blob/spore
+ name = "blob spore"
+ desc = "A floating, fragile spore."
+
+ icon_state = "blobpod"
+ icon_living = "blobpod"
+ glow_range = 3
+ glow_intensity = 5
+ layer = ABOVE_MOB_LAYER // Over the blob.
+
+ health = 30
+ maxHealth = 30
+ melee_damage_lower = 2
+ melee_damage_upper = 4
+ movement_cooldown = 0
+ hovering = TRUE
+
+ attacktext = list("slams into")
+ attack_sound = 'sound/effects/slime_squish.ogg'
+ say_list_type = /datum/say_list/spore
+
+ var/mob/living/carbon/human/infested = null // The human this thing is totally not making into a zombie.
+ var/can_infest = FALSE
+ var/is_infesting = FALSE
+
+/datum/say_list/spore
+ emote_see = list("sways", "inflates briefly")
+
+/datum/say_list/infested
+ emote_see = list("shambles around", "twitches", "stares")
+
+
+/mob/living/simple_mob/blob/spore/infesting
+ name = "infesting blob spore"
+ can_infest = TRUE
+
+/mob/living/simple_mob/blob/spore/weak
+ name = "fragile blob spore"
+ health = 15
+ maxHealth = 15
+ melee_damage_lower = 1
+ melee_damage_upper = 2
+
+/mob/living/simple_mob/blob/spore/initialize(mapload, var/obj/structure/blob/factory/my_factory)
+ if(istype(my_factory))
+ factory = my_factory
+ factory.spores += src
+ return ..()
+
+/mob/living/simple_mob/blob/spore/Destroy()
+ if(factory)
+ factory.spores -= src
+ factory = null
+ if(infested)
+ infested.forceMove(get_turf(src))
+ visible_message(span("warning", "\The [infested] falls to the ground as the blob spore bursts."))
+ infested = null
+ return ..()
+
+/mob/living/simple_mob/blob/spore/death(gibbed, deathmessage = "bursts!")
+ if(overmind)
+ overmind.blob_type.on_spore_death(src)
+ ..(gibbed, deathmessage)
+ qdel(src)
+
+/mob/living/simple_mob/blob/spore/update_icons()
+ ..() // This will cut our overlays.
+
+ if(overmind)
+ color = overmind.blob_type.complementary_color
+ glow_color = color
+ glow_toggle = TRUE
+ else
+ color = null
+ glow_color = null
+ glow_toggle = FALSE
+
+ if(is_infesting)
+ icon = infested.icon
+ copy_overlays(infested)
+ // overlays = infested.overlays
+ var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head")
+ if(overmind)
+ blob_head_overlay.color = overmind.blob_type.complementary_color
+ color = initial(color)//looks better.
+ // overlays += blob_head_overlay
+ add_overlay(blob_head_overlay, TRUE)
+
+/mob/living/simple_mob/blob/spore/handle_special()
+ ..()
+ if(can_infest && !is_infesting && isturf(loc))
+ for(var/mob/living/carbon/human/H in view(src,1))
+ if(H.stat != DEAD) // We want zombies.
+ continue
+ if(H.isSynthetic()) // Not philosophical zombies.
+ continue
+ infest(H)
+ break
+
+ if(factory && z != factory.z) // This is to prevent spores getting lost in space and making the factory useless.
+ qdel(src)
+
+/mob/living/simple_mob/blob/spore/proc/infest(mob/living/carbon/human/H)
+ is_infesting = TRUE
+ if(H.wear_suit)
+ var/obj/item/clothing/suit/A = H.wear_suit
+ if(A.armor && A.armor["melee"])
+ maxHealth += A.armor["melee"] //That zombie's got armor, I want armor!
+
+ maxHealth += 40
+ health = maxHealth
+ name = "Infested [H.real_name]" // Not using the Z word.
+ desc = "A parasitic organism attached to a deceased body, controlling it directly as if it were a puppet."
+ melee_damage_lower += 8 // 10 total.
+ melee_damage_upper += 11 // 15 total.
+ attacktext = list("claws")
+
+ H.forceMove(src)
+ infested = H
+
+ say_list = new /datum/say_list/infested()
+
+ update_icons()
+ visible_message(span("warning", "The corpse of [H.name] suddenly rises!"))
+
+/mob/living/simple_mob/blob/spore/GetIdCard()
+ if(infested) // If we've infested someone, use their ID.
+ return infested.GetIdCard()
+
+/mob/living/simple_mob/blob/spore/apply_bonus_melee_damage(A, damage_to_do)
+ var/helpers = 0
+ for(var/mob/living/simple_mob/blob/spore/S in view(1, src))
+ if(S == src) // Don't count ourselves.
+ continue
+ if(!IIsAlly(S)) // Only friendly spores make us stronger.
+ continue
+ // Friendly spores contribute 1/4th of their averaged attack power to our attack.
+ damage_to_do += ((S.melee_damage_lower + S.melee_damage_upper) / 2) / 4
+ helpers++
+
+ if(helpers)
+ to_chat(src, span("notice", "Your attack is assisted by [helpers] other spore\s."))
+ return damage_to_do
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm
new file mode 100644
index 0000000000..b6f9520698
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/clown.dm
@@ -0,0 +1,29 @@
+/mob/living/simple_mob/humanoid/clown
+ clown
+ name = "clown"
+ desc = "A denizen of clown planet"
+ tt_desc = "E Homo sapiens corydon" //this is an actual clown, as opposed to someone dressed up as one
+ icon_state = "clown"
+ icon_living = "clown"
+ icon_dead = "clown_dead"
+ icon_gib = "clown_gib"
+
+ faction = "clown"
+
+ loot_list = list(/obj/item/weapon/bikehorn = 100)
+
+ response_help = "pokes"
+ response_disarm = "gently pushes aside"
+ response_harm = "hits"
+
+ harm_intent_damage = 8
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ attacktext = list("attacked")
+ attack_sound = 'sound/items/bikehorn.ogg'
+
+ say_list_type = /datum/say_list/clown
+
+/datum/say_list/clown
+ speak = list("HONK", "Honk!", "Welcome to clown planet!")
+ emote_see = list("honks")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm
new file mode 100644
index 0000000000..6e17e2e1a0
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm
@@ -0,0 +1,26 @@
+/mob/living/simple_mob/humanoid
+ mob_class = MOB_CLASS_HUMANOID
+
+ // Generic humanoid mob tolerances
+ min_oxy = 5
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 1
+ min_co2 = 0
+ max_co2 = 5
+ min_n2 = 0
+ max_n2 = 0
+ unsuitable_atoms_damage = 15
+
+ health = 150 // Point of human crit, as of commenting
+ maxHealth = 150
+
+ // Most humans leave a corpse
+ var/corpse = null
+
+/mob/living/simple_mob/humanoid/death()
+ ..()
+ if(corpse)
+ new corpse (src.loc)
+ qdel(src)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
new file mode 100644
index 0000000000..57d5986e80
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs.dm
@@ -0,0 +1,278 @@
+///////////////////////////////
+// Merc Mobs Go Here
+///////////////////////////////
+
+// Probably shouldn't use this directly, there are a bunch of sub-classes that are more complete.
+/mob/living/simple_mob/humanoid/merc
+ name = "mercenary"
+ desc = "A tough looking heavily-armed individual."
+ tt_desc = "E Homo sapiens"
+ icon_state = "syndicate"
+ icon_living = "syndicate"
+ icon_dead = "syndicate_dead"
+ icon_gib = "syndicate_gib"
+
+ faction = "syndicate"
+ movement_cooldown = 4
+
+ status_flags = 0
+
+ response_help = "pokes"
+ response_disarm = "shoves"
+ response_harm = "hits"
+
+ harm_intent_damage = 5
+ melee_damage_lower = 15 //Tac Knife damage
+ melee_damage_upper = 15
+ attack_sharp = 1
+ attack_edge = 1
+ attacktext = list("slashed", "stabbed")
+ armor = list(melee = 40, bullet = 30, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 100) // Same armor values as the vest they drop, plus simple mob immunities
+
+ corpse = /obj/effect/landmark/mobcorpse/syndicatesoldier
+ loot_list = list(/obj/item/weapon/material/knife/tacknife = 100) // Might as well give it the knife
+
+ ai_holder_type = /datum/ai_holder/simple_mob/merc
+ say_list_type = /datum/say_list/merc
+
+ // Grenade special attack vars
+ var/grenade_type = /obj/item/weapon/grenade/concussion
+ special_attack_cooldown = 45 SECONDS
+ special_attack_min_range = 2
+ special_attack_max_range = 7
+
+////////////////////////////////
+// Grenade Attack
+////////////////////////////////
+
+// Any merc can use this, just set special_attack_charges to a positive value
+
+// Check if we should bother with the grenade
+/mob/living/simple_mob/humanoid/merc/should_special_attack(atom/A)
+ var/mob_count = 0 // Are there enough mobs to consider grenading?
+ var/turf/T = get_turf(A)
+ for(var/mob/M in range(T, 2))
+ if(M.faction == faction) // Don't grenade our friends
+ return FALSE
+ if(M in oview(src, special_attack_max_range)) // And lets check if we can actually see at least two people before we throw a grenade
+ if(!M.stat) // Dead things don't warrant a grenade
+ mob_count ++
+ if(mob_count < 2)
+ return FALSE
+ else
+ return TRUE
+
+// Yes? Throw the grenade
+/mob/living/simple_mob/humanoid/merc/do_special_attack(atom/A)
+ set waitfor = FALSE
+ set_AI_busy(TRUE)
+
+ var/obj/item/weapon/grenade/G = new grenade_type(get_turf(src))
+ if(istype(G))
+ G.throw_at(A, G.throw_range, G.throw_speed, src)
+ G.attack_self(src)
+ special_attack_charges = max(special_attack_charges-1, 0)
+
+ set_AI_busy(FALSE)
+
+
+////////////////////////////////
+// Merc AI Types
+////////////////////////////////
+/datum/ai_holder/simple_mob/merc
+ threaten = TRUE
+ returns_home = TRUE // Stay close to the base...
+ wander = TRUE // ... but "patrol" a little.
+
+/datum/ai_holder/simple_mob/merc/ranged
+ pointblank = TRUE // They get close? Just shoot 'em!
+ firing_lanes = TRUE // But not your buddies!
+ conserve_ammo = TRUE // And don't go wasting bullets!
+
+
+////////////////////////////////
+// Melee
+////////////////////////////////
+/mob/living/simple_mob/humanoid/merc/melee // Defined in case we add non-sword-and-board mercs
+ loot_list = list(/obj/item/weapon/material/knife/tacknife = 100)
+
+// Sword and Shield Merc
+/mob/living/simple_mob/humanoid/merc/melee/sword
+ icon_state = "syndicatemelee"
+ icon_living = "syndicatemelee"
+
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ attack_armor_pen = 50
+ attack_sharp = 1
+ attack_edge = 1
+ attacktext = list("slashed")
+
+ loot_list = list(/obj/item/weapon/melee/energy/sword/red = 100, /obj/item/weapon/shield/energy = 100)
+
+// They have a shield, so they try to block
+/mob/living/simple_mob/humanoid/merc/melee/sword/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(O.force)
+ if(prob(20))
+ visible_message("\The [src] blocks \the [O] with its shield!")
+ if(user)
+ ai_holder.react_to_attack(user)
+ return
+ else
+ ..()
+ else
+ to_chat(user, "This weapon is ineffective, it does no damage.")
+ visible_message("\The [user] gently taps [src] with \the [O].")
+
+/mob/living/simple_mob/humanoid/merc/melee/sword/bullet_act(var/obj/item/projectile/Proj)
+ if(!Proj) return
+ if(prob(35))
+ visible_message("[src] blocks [Proj] with its shield!")
+ if(Proj.firer)
+ ai_holder.react_to_attack(Proj.firer)
+ return
+ else
+ ..()
+
+
+////////////////////////////////
+// Ranged
+////////////////////////////////
+
+// Base Ranged Merc, so we don't have to redefine a million vars for every subtype. Uses a pistol.
+/mob/living/simple_mob/humanoid/merc/ranged
+ icon_state = "syndicateranged"
+ icon_living = "syndicateranged"
+ projectiletype = /obj/item/projectile/bullet/pistol/medium
+// casingtype = /obj/item/ammo_casing/spent //Makes infinite stacks of bullets when put in PoIs.
+ projectilesound = 'sound/weapons/Gunshot_light.ogg'
+ loot_list = list(/obj/item/weapon/gun/projectile/colt = 100)
+
+ needs_reload = TRUE
+ reload_max = 7 // Not the best default, but it fits the pistol
+ ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged
+
+// C20r SMG
+/mob/living/simple_mob/humanoid/merc/ranged/smg
+ icon_state = "syndicateranged_smg"
+ icon_living = "syndicateranged_smg"
+
+ loot_list = list(/obj/item/weapon/gun/projectile/automatic/c20r = 100)
+
+ base_attack_cooldown = 5 // Two attacks a second or so.
+ reload_max = 20
+
+// Laser Rifle
+/mob/living/simple_mob/humanoid/merc/ranged/laser
+ icon_state = "syndicateranged_laser"
+ icon_living = "syndicateranged_laser"
+ projectiletype = /obj/item/projectile/beam/midlaser
+ projectilesound = 'sound/weapons/Laser.ogg'
+
+ loot_list = list(/obj/item/weapon/gun/energy/laser = 100)
+
+ reload_max = 10
+
+// Ion Rifle
+/mob/living/simple_mob/humanoid/merc/ranged/ionrifle
+ icon_state = "syndicateranged_ionrifle"
+ icon_living = "syndicateranged_ionrifle"
+ projectiletype = /obj/item/projectile/ion
+ projectilesound = 'sound/weapons/Laser.ogg'
+
+ loot_list = list(/obj/item/weapon/gun/energy/ionrifle = 100)
+
+ reload_max = 10
+
+// Grenadier, Basically a miniboss
+/mob/living/simple_mob/humanoid/merc/ranged/grenadier
+ icon_state = "syndicateranged_shotgun"
+ icon_living = "syndicateranged_shotgun"
+ projectiletype = /obj/item/projectile/bullet/pellet/shotgun // Buckshot
+ projectilesound = 'sound/weapons/gunshot/shotgun.ogg'
+
+ loot_list = list(/obj/item/weapon/gun/projectile/shotgun/pump = 100)
+
+ reload_max = 4
+ reload_time = 1.5 SECONDS // It's a shotgun, it takes a moment
+
+ special_attack_charges = 5
+
+
+////////////////////////////////
+// Space Mercs
+////////////////////////////////
+
+// Sword Space Merc
+/mob/living/simple_mob/humanoid/merc/melee/sword/space
+ name = "syndicate commando"
+ icon_state = "syndicatemeleespace"
+ icon_living = "syndicatemeleespace"
+
+ movement_cooldown = 0
+
+ armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 100) // Same armor as their voidsuit
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+ corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
+
+/mob/living/simple_mob/humanoid/merc/melee/sword/space/Process_Spacemove(var/check_drift = 0)
+ return
+
+// Ranged Space Merc
+/mob/living/simple_mob/humanoid/merc/ranged/space
+ name = "syndicate sommando"
+ icon_state = "syndicaterangedpsace"
+ icon_living = "syndicaterangedpsace"
+
+ movement_cooldown = 0
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+ corpse = /obj/effect/landmark/mobcorpse/syndicatecommando
+
+/mob/living/simple_mob/humanoid/merc/ranged/space/Process_Spacemove(var/check_drift = 0)
+ return
+
+////////////////////////////////
+// PoI Mercs
+////////////////////////////////
+
+// None of these drop weapons, until we have a better way to balance them
+/mob/living/simple_mob/humanoid/merc/melee/poi
+ loot_list = list()
+
+/mob/living/simple_mob/humanoid/merc/melee/sword/poi
+ loot_list = list()
+
+/mob/living/simple_mob/humanoid/merc/ranged/poi
+ loot_list = list()
+
+/mob/living/simple_mob/humanoid/merc/ranged/smg/poi
+ loot_list = list()
+
+/mob/living/simple_mob/humanoid/merc/ranged/laser/poi
+ loot_list = list()
+
+/mob/living/simple_mob/humanoid/merc/ranged/ionrifle
+ loot_list = list()
+
+/mob/living/simple_mob/humanoid/merc/ranged/grenadier/poi
+ loot_list = list()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates.dm
new file mode 100644
index 0000000000..cc16cebedc
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/pirates.dm
@@ -0,0 +1,40 @@
+/mob/living/simple_mob/humanoid/pirate
+ name = "Pirate"
+ desc = "Does what he wants cause a pirate is free."
+ tt_desc = "E Homo sapiens"
+ icon_state = "piratemelee"
+ icon_living = "piratemelee"
+ icon_dead = "piratemelee_dead"
+
+ faction = "pirate"
+
+ response_help = "pushes"
+ response_disarm = "shoves"
+ response_harm = "hits"
+
+ harm_intent_damage = 5
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ attack_armor_pen = 50
+ attack_sharp = 1
+ attack_edge = 1
+
+ attacktext = list("slashed")
+ attack_sound = 'sound/weapons/bladeslice.ogg'
+
+ loot_list = list(/obj/item/weapon/melee/energy/sword/pirate = 100)
+
+ corpse = /obj/effect/landmark/mobcorpse/pirate
+
+/mob/living/simple_mob/humanoid/pirate/ranged
+ name = "Pirate Gunner"
+ icon_state = "pirateranged"
+ icon_living = "pirateranged"
+ icon_dead = "piratemelee_dead"
+
+ projectiletype = /obj/item/projectile/beam
+ projectilesound = 'sound/weapons/laser.ogg'
+
+ loot_list = list(/obj/item/weapon/gun/energy/laser = 100)
+
+ corpse = /obj/effect/landmark/mobcorpse/pirate/ranged
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm
new file mode 100644
index 0000000000..4a0bd00261
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/russian.dm
@@ -0,0 +1,35 @@
+/mob/living/simple_mob/humanoid/russian
+ name = "russian"
+ desc = "For the Motherland!"
+ tt_desc = "E Homo sapiens"
+ icon_state = "russianmelee"
+ icon_living = "russianmelee"
+ icon_dead = "russianmelee_dead"
+ icon_gib = "syndicate_gib"
+
+ faction = "russian"
+
+ response_help = "pokes"
+ response_disarm = "shoves"
+ response_harm = "hits"
+
+ harm_intent_damage = 5
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ attacktext = list("punched")
+
+ loot_list = list(/obj/item/weapon/material/knife = 100)
+
+ corpse = /obj/effect/landmark/mobcorpse/russian
+
+/mob/living/simple_mob/humanoid/russian/ranged
+ icon_state = "russianranged"
+ icon_living = "russianranged"
+
+ projectiletype = /obj/item/projectile/bullet
+ casingtype = /obj/item/ammo_casing/spent
+ projectilesound = 'sound/weapons/Gunshot.ogg'
+
+ loot_list = list(/obj/item/weapon/gun/projectile/revolver/mateba = 100)
+
+ corpse = /obj/effect/landmark/mobcorpse/russian/ranged
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm b/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm
new file mode 100644
index 0000000000..60cc13fb2b
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/illusion/illusion.dm
@@ -0,0 +1,101 @@
+// Illusion type mobs pretend to be other things visually, and generally cannot be harmed as they're not 'real'.
+
+/mob/living/simple_mob/illusion
+ name = "illusion"
+ desc = "If you can read me, the game broke. Please report this to a coder."
+
+ resistance = 1000 // Holograms are tough.
+ heat_resist = 1
+ cold_resist = 1
+ shock_resist = 1
+ poison_resist = 1
+
+ movement_cooldown = 0
+ mob_bump_flag = 0 // If the illusion can't be swapped it will be obvious.
+
+ response_help = "pushes a hand through"
+ response_disarm = "tried to disarm"
+ response_harm = "tried to punch"
+
+ mob_class = MOB_CLASS_ILLUSION
+
+ ai_holder_type = /datum/ai_holder/simple_mob/inert/astar // Gets controlled manually by technomancers/admins, with AI pathfinding assistance.
+
+ var/atom/movable/copying = null // The thing we're trying to look like.
+ var/realistic = FALSE // If true, things like bullets and weapons will hit it, to be a bit more convincing from a distance.
+
+/mob/living/simple_mob/illusion/update_icon() // We don't want the appearance changing AT ALL unless by copy_appearance().
+ return
+
+/mob/living/simple_mob/illusion/proc/copy_appearance(atom/movable/thing_to_copy)
+ if(!thing_to_copy)
+ return FALSE
+ appearance = thing_to_copy.appearance
+ copying = thing_to_copy
+ density = thing_to_copy.density // So you can't bump into objects that aren't supposed to be dense.
+ return TRUE
+
+// Because we can't perfectly duplicate some examine() output, we directly examine the AM it is copying. It's messy but
+// this is to prevent easy checks from the opposing force.
+/mob/living/simple_mob/illusion/examine(mob/user)
+ if(copying)
+ copying.examine(user)
+ return
+ ..()
+
+/mob/living/simple_mob/illusion/bullet_act(obj/item/projectile/P)
+ if(!P)
+ return
+
+ if(realistic)
+ return ..()
+
+ return PROJECTILE_FORCE_MISS
+
+/mob/living/simple_mob/illusion/attack_hand(mob/living/carbon/human/M)
+ if(!realistic)
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ visible_message(span("warning", "\The [M]'s hand goes through \the [src]!"))
+ return
+ else
+ switch(M.a_intent)
+ if(I_HELP)
+ var/datum/gender/T = gender_datums[src.get_visible_gender()]
+ M.visible_message(
+ span("notice", "\The [M] hugs [src] to make [T.him] feel better!"), \
+ span("notice", "You hug [src] to make [T.him] feel better!")
+ ) // slightly redundant as at the moment most mobs still use the normal gender var, but it works and future-proofs it
+ playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+
+ if(I_DISARM)
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ visible_message(span("danger", "\The [M] attempted to disarm [src]!"))
+ M.do_attack_animation(src)
+
+ if(I_GRAB)
+ ..()
+
+ if(I_HURT)
+ adjustBruteLoss(harm_intent_damage)
+ M.visible_message(span("danger", "\The [M] [response_harm] \the [src]"))
+ M.do_attack_animation(src)
+
+/mob/living/simple_mob/illusion/hit_with_weapon(obj/item/I, mob/living/user, effective_force, hit_zone)
+ if(realistic)
+ return ..()
+
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+ visible_message(span("warning", "\The [user]'s [I] goes through \the [src]!"))
+ return FALSE
+
+/mob/living/simple_mob/illusion/ex_act()
+ return
+
+// Try to have the same tooltip, or else it becomes really obvious which one is fake.
+/mob/living/simple_mob/illusion/get_nametag_name(mob/user)
+ if(copying)
+ return copying.get_nametag_name(user)
+
+/mob/living/simple_mob/illusion/get_nametag_desc(mob/user)
+ if(copying)
+ return copying.get_nametag_desc(user)
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm
new file mode 100644
index 0000000000..8731a06764
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/combat_drone.dm
@@ -0,0 +1,77 @@
+/*
+ Combat drones have a rapid ranged attack, and have a projectile shield.
+ They are rather slow, but attempt to 'kite' its target.
+ A solid hit with an EMP grenade will kill the shield instantly.
+*/
+
+/mob/living/simple_mob/mechanical/combat_drone
+ name = "combat drone"
+ desc = "An automated combat drone armed with state of the art weaponry and shielding."
+ icon_state = "drone"
+ icon_living = "drone"
+ icon_dead = "drone_dead"
+ has_eye_glow = TRUE
+
+ faction = "malf_drone"
+
+ maxHealth = 50 // Shield has 150 for total of 200.
+ health = 50
+ movement_cooldown = 5
+ hovering = TRUE
+
+ base_attack_cooldown = 5
+ projectiletype = /obj/item/projectile/beam/drone
+ projectilesound = 'sound/weapons/laser3.ogg'
+
+ response_help = "pokes"
+ response_disarm = "gently pushes aside"
+ response_harm = "hits"
+
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening
+ say_list_type = /datum/say_list/malf_drone
+
+ var/datum/effect/effect/system/ion_trail_follow/ion_trail = null
+ var/obj/item/shield_projector/shields = null
+
+/mob/living/simple_mob/mechanical/combat_drone/initialize()
+ ion_trail = new
+ ion_trail.set_up(src)
+ ion_trail.start()
+
+ shields = new /obj/item/shield_projector/rectangle/automatic/drone(src)
+ return ..()
+
+/mob/living/simple_mob/mechanical/combat_drone/Destroy()
+ QDEL_NULL(ion_trail)
+ QDEL_NULL(shields)
+ return ..()
+
+/mob/living/simple_mob/mechanical/combat_drone/death()
+ ..(null,"suddenly breaks apart.")
+ qdel(src)
+
+/mob/living/simple_mob/mechanical/combat_drone/Process_Spacemove(var/check_drift = 0)
+ return TRUE
+
+/obj/item/projectile/beam/drone
+ damage = 10
+
+/obj/item/shield_projector/rectangle/automatic/drone
+ shield_health = 150
+ max_shield_health = 150
+ shield_regen_delay = 10 SECONDS
+ shield_regen_amount = 10
+ size_x = 1
+ size_y = 1
+
+// A slightly easier drone, for POIs.
+// Difference is that it should not be faster than you.
+/mob/living/simple_mob/mechanical/combat_drone/lesser
+ desc = "An automated combat drone with an aged apperance."
+ movement_cooldown = 10
+
+
+// This one is the type spawned by the random event.
+// It won't wander away from its spawn point
+/mob/living/simple_mob/mechanical/combat_drone/event
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/threatening/event
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm
new file mode 100644
index 0000000000..cffa9cb134
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/golem.dm
@@ -0,0 +1,152 @@
+// The GOLEM is a spell-flinging synthetic.
+
+/mob/living/simple_mob/mechanical/technomancer_golem
+ name = "unknown synthetic"
+ desc = "A rather unusual looking synthetic."
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "golem"
+ health = 300
+ maxHealth = 300
+
+ faction = "golem"
+
+ response_help = "pets"
+ response_disarm = "pushes away"
+ response_harm = "punches"
+ harm_intent_damage = 3
+ friendly = "hugs"
+
+ melee_damage_lower = 30 // It has a built in esword.
+ melee_damage_upper = 30
+ attack_sound = 'sound/weapons/blade1.ogg'
+ attacktext = list("slashed")
+ melee_attack_delay = 0.5 SECONDS // Even has custom attack animations.
+ ranged_attack_delay = 0.5 SECONDS
+ special_attack_delay = 1 SECOND
+
+ special_attack_min_range = 0
+ special_attack_max_range = 7
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+
+ var/obj/item/weapon/technomancer_core/golem/core = null
+ var/obj/item/weapon/spell/active_spell = null // Shield and ranged spells
+ var/mob/living/master = null
+ var/casting = FALSE // Used to ensure the correct animation is played. Testing if a spell exists won't always work as some spells delete themselves upon use.
+
+ var/list/known_spells = list(
+ "beam" = /obj/item/weapon/spell/projectile/beam,
+ "chain lightning" = /obj/item/weapon/spell/projectile/chain_lightning,
+ "force missile" = /obj/item/weapon/spell/projectile/force_missile,
+ "ionic bolt" = /obj/item/weapon/spell/projectile/ionic_bolt,
+ "lightning" = /obj/item/weapon/spell/projectile/lightning,
+ "blink" = /obj/item/weapon/spell/blink,
+ "dispel" = /obj/item/weapon/spell/dispel,
+ "oxygenate" = /obj/item/weapon/spell/oxygenate,
+ "mend life" = /obj/item/weapon/spell/modifier/mend_life,
+ "mend synthetic" = /obj/item/weapon/spell/modifier/mend_synthetic,
+ "mend organs" = /obj/item/weapon/spell/mend_organs,
+ "purify" = /obj/item/weapon/spell/modifier/purify,
+ "resurrect" = /obj/item/weapon/spell/resurrect,
+ "passwall" = /obj/item/weapon/spell/passwall,
+ "repel missiles" = /obj/item/weapon/spell/modifier/repel_missiles,
+ "corona" = /obj/item/weapon/spell/modifier/corona,
+ "haste" = /obj/item/weapon/spell/modifier/haste
+ )
+
+/mob/living/simple_mob/mechanical/technomancer_golem/initialize()
+ core = new(src)
+ return ..()
+
+/mob/living/simple_mob/mechanical/technomancer_golem/Destroy()
+ qdel(core)
+ return ..()
+
+/mob/living/simple_mob/mechanical/technomancer_golem/unref_spell()
+ active_spell = null
+ return ..()
+
+/mob/living/simple_mob/mechanical/technomancer_golem/death()
+ ..()
+ visible_message("\The [src] disintegrates!")
+ new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ qdel(src)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/place_spell_in_hand(var/path)
+ if(!path || !ispath(path))
+ return FALSE
+ if(active_spell)
+ qdel(active_spell)
+
+ active_spell = new path(src)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/verb/test_giving_spells()
+ var/choice = input(usr, "What spell?", "Give spell") as null|anything in known_spells
+ if(choice)
+ place_spell_in_hand(known_spells[choice])
+ else
+ qdel(active_spell)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/get_technomancer_core()
+ return core
+
+/mob/living/simple_mob/mechanical/technomancer_golem/can_special_attack(atom/A)
+ if(active_spell) // Don't bother checking everything else if no spell is ready.
+ return ..()
+ return FALSE
+
+/mob/living/simple_mob/mechanical/technomancer_golem/should_special_attack(atom/A)
+ return instability < 50 // Don't kill ourselves by casting everything.
+
+
+/mob/living/simple_mob/mechanical/technomancer_golem/do_special_attack(atom/A)
+ var/proximity = Adjacent(A)
+ if(active_spell)
+ if(proximity && active_spell.cast_methods & CAST_MELEE) // Use melee method if available and close enough.
+ return active_spell.on_melee_cast(A, src)
+ else if(active_spell.cast_methods & CAST_RANGED) // Otherwise use ranged if possible. Will also work for point-blank range.
+ return active_spell.on_ranged_cast(A, src)
+ return ..()
+
+/mob/living/simple_mob/mechanical/technomancer_golem/melee_pre_animation(atom/A)
+ if(active_spell && active_spell.cast_methods & CAST_MELEE|CAST_RANGED) // If they're trying to melee-cast a spell, use the special animation instead.
+ special_pre_animation(A)
+ return
+
+ flick("golem_pre_melee", src) // To force the animation to restart.
+ icon_living = "golem_pre_melee" // The animation will hold after this point until melee_post_animation() gets called.
+ icon_state = "golem_pre_melee"
+ setClickCooldown(2)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/melee_post_animation(atom/A)
+ if(casting) // Some spells delete themselves when used, so we use a different variable set earlier instead.
+ special_post_animation(A)
+ return
+
+ flick("golem_post_melee", src)
+ icon_living = "golem"
+ icon_state = "golem"
+ setClickCooldown(6)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/ranged_pre_animation(atom/A)
+ flick("golem_pre_ranged", src)
+ icon_living = "golem_pre_ranged"
+ icon_state = "golem_pre_ranged"
+ setClickCooldown(5)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/ranged_post_animation(atom/A)
+ flick("golem_post_ranged", src)
+ icon_living = "golem"
+ icon_state = "golem"
+ setClickCooldown(5)
+
+/mob/living/simple_mob/mechanical/technomancer_golem/special_pre_animation(atom/A)
+ casting = TRUE
+ ranged_pre_animation(A) // Both have the same animation.
+
+/mob/living/simple_mob/mechanical/technomancer_golem/special_post_animation(atom/A)
+ casting = FALSE
+ ranged_post_animation(A)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm
new file mode 100644
index 0000000000..fe43c856f9
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm
@@ -0,0 +1,54 @@
+// Hivebots are tuned towards how many default lasers are needed to kill them.
+// As such, if laser damage is ever changed, you should change this define.
+#define LASERS_TO_KILL * 40
+
+/mob/living/simple_mob/mechanical/hivebot
+ name = "hivebot"
+ desc = "A robot. It appears to be somewhat resilient, but lacks a true weapon."
+ icon = 'icons/mob/hivebot.dmi'
+ icon_state = "basic"
+ icon_living = "basic"
+
+ faction = "hivebot"
+
+ maxHealth = 3 LASERS_TO_KILL
+ health = 3 LASERS_TO_KILL
+ water_resist = 0.5
+ movement_sound = 'sound/effects/servostep.ogg'
+
+ attacktext = list("clawed")
+ projectilesound = 'sound/weapons/Gunshot.ogg'
+
+ ai_holder_type = /datum/ai_holder/simple_mob/hivebot
+ say_list_type = /datum/say_list/hivebot
+
+
+/mob/living/simple_mob/mechanical/hivebot/death()
+ ..()
+ visible_message(span("warning","\The [src] blows apart!"))
+ new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ qdel(src)
+
+// The hivebot's default projectile.
+/obj/item/projectile/bullet/hivebot
+ damage = 10
+ damage_type = BRUTE
+ sharp = FALSE
+ edge = FALSE
+
+/mob/living/simple_mob/mechanical/hivebot/swarm
+ name = "swarm hivebot"
+ desc = "A robot. It looks fragile and weak."
+ maxHealth = 1 LASERS_TO_KILL
+ health = 1 LASERS_TO_KILL
+ melee_damage_lower = 8
+ melee_damage_upper = 8
+
+/datum/ai_holder/simple_mob/hivebot
+ pointblank = TRUE
+ conserve_ammo = TRUE
+ firing_lanes = TRUE
+ can_flee = FALSE // Fearless dumb machines.
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm
new file mode 100644
index 0000000000..5e4d877751
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/ranged_damage.dm
@@ -0,0 +1,147 @@
+// These hivebots are intended for general damage causing, at range.
+
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage
+ maxHealth = 2 LASERS_TO_KILL // 60 health
+ health = 2 LASERS_TO_KILL
+ projectiletype = /obj/item/projectile/bullet/hivebot
+
+// The regular ranged hivebot, that fires somewhat weak projectiles.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/basic
+ name = "ranged hivebot"
+ desc = "A robot with a makeshift integrated ballistic weapon."
+
+
+// This one shoots quickly, and is considerably more dangerous.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/rapid
+ name = "rapid hivebot"
+ desc = "A robot with a crude but deadly integrated rifle."
+ base_attack_cooldown = 5 // Two attacks a second or so.
+ player_msg = "You have a rapid fire attack."
+
+
+// Shoots deadly lasers.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/laser
+ name = "laser hivebot"
+ desc = "A robot with a photonic weapon integrated into itself."
+ projectiletype = /obj/item/projectile/beam/blue
+ projectilesound = 'sound/weapons/Laser.ogg'
+ player_msg = "You have a laser attack."
+
+
+// Shoots EMPs, to screw over other robots.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/ion
+ name = "ionic hivebot"
+ desc = "A robot with an electromagnetic pulse projector."
+ icon_state = "yellow"
+ icon_living = "yellow"
+
+ projectiletype = /obj/item/projectile/ion
+ projectilesound = 'sound/weapons/Laser.ogg'
+ player_msg = "You have a ranged ion attack, which is very strong against other synthetics.
\
+ Be careful to not hit yourself or your team, as it will affect you as well."
+
+// Beefy and ranged.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong
+ name = "strong hivebot"
+ desc = "A robot with a crude ballistic weapon and strong armor."
+ maxHealth = 4 LASERS_TO_KILL // 120 health.
+ health = 4 LASERS_TO_KILL
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+
+// Also beefy, but tries to stay at their 'home', ideal for base defense.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard
+ name = "guard hivebot"
+ desc = "A robot that seems to be guarding something."
+// ai_holder_type = todo
+
+
+// Inflicts a damage-over-time modifier on things it hits.
+// It is able to stack with repeated attacks.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/dot
+ name = "ember hivebot"
+ desc = "A robot that appears to utilize fire to cook their enemies."
+ icon_state = "red"
+ icon_living = "red"
+
+ projectiletype = /obj/item/projectile/fire
+ heat_resist = 1
+ player_msg = "Your attacks inflict a damage over time effect, that will \
+ harm your target slowly. The effect stacks with further attacks.
\
+ You are also immune to fire."
+
+/obj/item/projectile/fire
+ name = "ember"
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "explosion_particle"
+ modifier_type_to_apply = /datum/modifier/fire
+ modifier_duration = 6 SECONDS // About 15 damage per stack, as Life() ticks every two seconds.
+ damage = 0
+ nodamage = TRUE
+
+
+// Close to mid-ranged shooter that arcs over other things, ideal if allies are in front of it.
+// Difference from siege hivebots is that siege hivebots have limited charges for their attacks, are very long range, and \
+// the projectiles have an AoE component, where as backline hivebots do not.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/backline
+ name = "backline hivebot"
+ desc = "A robot that can fire short-ranged projectiles over their allies."
+ projectiletype = /obj/item/projectile/arc/blue_energy
+ projectilesound = 'sound/weapons/Laser.ogg'
+ player_msg = "Your attacks are short-ranged, but can arc over obstructions such as allies \
+ or barriers."
+
+/obj/item/projectile/arc/blue_energy
+ name = "energy missile"
+ icon_state = "force_missile"
+ damage = 15 // A bit stronger since arcing projectiles are much easier to avoid than traditional ones.
+ damage_type = BURN
+
+// Very long ranged hivebot that rains down hell.
+// Their projectiles arc, meaning they go over everything until it hits the ground.
+// This means they're somewhat easier to avoid, but go over most defenses (like allies, or barriers),
+// and tend to do more harm than a regular projectile, due to being AoE.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege
+ name = "siege engine hivebot"
+ desc = "A large robot capable of delivering long range bombardment."
+ projectiletype = /obj/item/projectile/arc/test
+ icon_scale = 2
+ icon_state = "red"
+ icon_living = "red"
+
+ player_msg = "You are capable of firing very long range bombardment attacks.
\
+ To use, click on a tile or enemy at a long range. Note that the projectile arcs in the air, \
+ so it will fly over everything inbetween you and the target.
\
+ The bombardment is most effective when attacking a static structure, as it cannot avoid your fire."
+
+// Fires EMP blasts.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/emp
+ name = "ionic artillery hivebot"
+ desc = "A large robot capable of annihilating electronics from a long distance."
+ projectiletype = /obj/item/projectile/arc/emp_blast
+
+/obj/item/projectile/arc/emp_blast
+ name = "emp blast"
+ icon_state = "bluespace"
+
+/obj/item/projectile/arc/emp_blast/on_impact(turf/T)
+ empulse(T, 2, 4, 7, 10) // Normal EMP grenade.
+ return ..()
+
+/obj/item/projectile/arc/emp_blast/weak/on_impact(turf/T)
+ empulse(T, 1, 2, 3, 4) // Sec EMP grenade.
+ return ..()
+
+
+// Fires shots that irradiate the tile hit.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/radiation
+ name = "desolator hivebot"
+ desc = "A large robot capable of irradiating a large area from afar."
+ projectiletype = /obj/item/projectile/arc/radioactive
+
+
+// Essentially a long ranged frag grenade.
+/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege/fragmentation
+ name = "anti-personnel artillery hivebot"
+ desc = "A large robot capable of delivering fragmentation shells to rip apart their fleshy enemies."
+ projectiletype = /obj/item/projectile/arc/fragmentation
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm
new file mode 100644
index 0000000000..360686d591
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/support.dm
@@ -0,0 +1,87 @@
+// These hivebots help their team in various ways, and can be very powerful with allies, but are otherwise very weak when alone.
+
+/mob/living/simple_mob/mechanical/hivebot/support
+ icon_state = "white"
+ icon_living = "white"
+ attacktext = list("prodded")
+ movement_cooldown = 5
+ melee_damage_lower = 2
+ melee_damage_upper = 2
+
+
+// This hivebot supplies a general buff to nearby hivebots that improve their performance.
+// Note that the commander itself does not receive the buff.
+/mob/living/simple_mob/mechanical/hivebot/support/commander
+ name = "commander hivebot"
+ desc = "A robot that appears to be directing the others."
+ maxHealth = 5 LASERS_TO_KILL // 150 health
+ health = 5 LASERS_TO_KILL
+ player_msg = "You increase the performance of other hivebots near you passively.
\
+ You are otherwise very weak offensively."
+
+/mob/living/simple_mob/mechanical/hivebot/support/commander/handle_special()
+ for(var/mob/living/L in range(4, src))
+ if(L == src)
+ continue // Don't buff ourselves.
+ if(IIsAlly(L) && L.isSynthetic()) // Don't buff enemies.
+ L.add_modifier(/datum/modifier/aura/hivebot_commander_buff, null, src)
+
+// Modifier added to friendly hivebots nearby.
+// Boosts most stats by 30%.
+// The boost is lost if the commander is too far away or dies.
+/datum/modifier/aura/hivebot_commander_buff
+ name = "Strategicals"
+ on_created_text = "Signal established with commander. Optimizating combat performance..."
+ on_expired_text = "Lost signal to commander. Optimization halting."
+ stacks = MODIFIER_STACK_FORBID
+ aura_max_distance = 4
+ mob_overlay_state = "signal_blue"
+
+ disable_duration_percent = 0.7
+ outgoing_melee_damage_percent = 1.3
+ attack_speed_percent = 1.3
+ accuracy = 30
+ slowdown = -1
+ evasion = 30
+
+// Variant that automatically commands nearby allies to follow it when created.
+// Useful to avoid having to manually set follow to a lot of hivebots that are gonna die in the next minute anyways.
+/mob/living/simple_mob/mechanical/hivebot/support/commander/autofollow/initialize()
+ for(var/mob/living/L in hearers(7, src))
+ if(!L.ai_holder)
+ continue
+ if(L.faction != src.faction)
+ continue
+ var/datum/ai_holder/AI = L.ai_holder
+ AI.set_follow(src)
+ return ..()
+
+
+// This hivebot adds charges to nearby allied hivebots that use the charge system for their special attacks.
+// A charge is given to a nearby ally every so often.
+// Charges cannot exceed the initial starting amount.
+/mob/living/simple_mob/mechanical/hivebot/support/logistics
+ name = "logistics hivebot"
+ desc = "A robot that resupplies their allies."
+ maxHealth = 3 LASERS_TO_KILL // 90 health
+ health = 3 LASERS_TO_KILL
+ player_msg = "You passively restore 'charges' to allies with special abilities who are \
+ limited to using them a specific number of times."
+ var/resupply_range = 5
+ var/resupply_cooldown = 4 SECONDS
+ var/last_resupply = null
+
+/mob/living/simple_mob/mechanical/hivebot/support/logistics/handle_special()
+ if(last_resupply + resupply_cooldown > world.time)
+ return // On cooldown.
+
+ for(var/mob/living/simple_mob/SM in hearers(resupply_range, src))
+ if(SM == src)
+ continue // We don't use charges buuuuut in case that changes in the future...
+ if(IIsAlly(SM)) // Don't resupply enemies.
+ if(!isnull(SM.special_attack_charges) && SM.special_attack_charges < initial(SM.special_attack_charges))
+ SM.special_attack_charges += 1
+ to_chat(SM, span("notice", "\The [src] has resupplied you, and you can use your special ability one additional time."))
+ to_chat(src, span("notice", "You have resupplied \the [SM]."))
+ last_resupply = world.time
+ break // Only one resupply per pulse.
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm
new file mode 100644
index 0000000000..007f190c04
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/tank.dm
@@ -0,0 +1,166 @@
+// These hivebots are harder to kill than normal, and are meant to protect their squad by
+// distracting their enemies. This is done by being seen as very threatening.
+// Their melee attacks weaken whatever they hit.
+
+/mob/living/simple_mob/mechanical/hivebot/tank
+ attacktext = list("prodded")
+ projectiletype = null // To force the AI to melee.
+ movement_cooldown = 10
+ melee_damage_lower = 3
+ melee_damage_upper = 3
+ attack_sound = 'sound/weapons/Egloves.ogg'
+
+// All tank hivebots apply a modifier to their target, and force them to attack them if they're AI controlled.
+/mob/living/simple_mob/mechanical/hivebot/tank/apply_melee_effects(atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ L.taunt(src, TRUE)
+ L.add_modifier(/datum/modifier/hivebot_weaken, 3 SECONDS)
+
+// Modifier applied to whatever a tank hivebot hits, intended to make the target do even less damage.
+/datum/modifier/hivebot_weaken
+ name = "Shocked"
+ desc = "You feel less able to exert yourself after being prodded."
+ on_created_text = "You feel weak..."
+ on_expired_text = "You feel better."
+ stacks = MODIFIER_STACK_EXTEND
+ mob_overlay_state = "electricity"
+
+ attack_speed_percent = 0.6
+ outgoing_melee_damage_percent = 0.7
+ accuracy = -40
+ accuracy_dispersion = 1
+ slowdown = 1
+ evasion = -20
+
+// This one is tanky by having a massive amount of health.
+/mob/living/simple_mob/mechanical/hivebot/tank/meatshield
+ name = "bulky hivebot"
+ desc = "A large robot."
+ maxHealth = 10 LASERS_TO_KILL // 300 health
+ health = 10 LASERS_TO_KILL
+ icon_scale = 2
+ player_msg = "You have a very large amount of health."
+
+
+// This one is tanky by having armor.
+/mob/living/simple_mob/mechanical/hivebot/tank/armored
+ name = "armored hivebot"
+ desc = "A robot clad in heavy armor."
+ maxHealth = 5 LASERS_TO_KILL // 150 health.
+ health = 5 LASERS_TO_KILL
+ icon_scale = 1.5
+ player_msg = "You are heavily armored."
+ // Note that armor effectively makes lasers do about 9 damage instead of 30,
+ // so it has an effective health of ~16.6 LASERS_TO_KILL if regular lasers are used.
+ // Xrays will do much better against this.
+ armor = list(
+ "melee" = 40,
+ "bullet" = 40,
+ "laser" = 40,
+ "energy" = 30,
+ "bomb" = 30,
+ "bio" = 100,
+ "rad" = 100
+ )
+ armor_soak = list(
+ "melee" = 15,
+ "bullet" = 10,
+ "laser" = 15,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+
+/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_melee
+ name = "riot hivebot"
+ desc = "A robot specialized in close quarters combat."
+ player_msg = "You are heavily armored against close quarters combat."
+ armor = list(
+ "melee" = 70,
+ "bullet" = 0,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 100,
+ "rad" = 100
+ )
+ armor_soak = list(
+ "melee" = 20,
+ "bullet" = 0,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+
+/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_bullet
+ name = "bulletproof hivebot"
+ desc = "A robot specialized in ballistic defense."
+ player_msg = "You are heavily armored against ballistic weapons."
+ armor = list(
+ "melee" = 0,
+ "bullet" = 70,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 100,
+ "rad" = 100
+ )
+ armor_soak = list(
+ "melee" = 0,
+ "bullet" = 20,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+
+/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser
+ name = "ablative hivebot"
+ desc = "A robot specialized in photonic defense."
+ player_msg = "You are heavily armored against laser weapons."
+ armor = list(
+ "melee" = 0,
+ "bullet" = 0,
+ "laser" = 70,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 100,
+ "rad" = 100
+ )
+ armor_soak = list(
+ "melee" = 0,
+ "bullet" = 0,
+ "laser" = 20,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+ var/reflect_chance = 40 // Same as regular ablative.
+
+// Ablative Hivebots can reflect lasers just like humans.
+/mob/living/simple_mob/mechanical/hivebot/tank/armored/anti_laser/bullet_act(obj/item/projectile/P)
+ if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
+ var/reflect_prob = reflect_chance - round(P.damage/3)
+ if(prob(reflect_prob))
+ visible_message(span("danger", "The [P.name] gets reflected by [src]'s armor!"), \
+ span("userdanger", "The [P.name] gets reflected by [src]'s armor!"))
+
+ // Find a turf near or on the original location to bounce to
+ if(P.starting)
+ var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
+ var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
+ var/turf/curloc = get_turf(src)
+
+ // redirect the projectile
+ P.redirect(new_x, new_y, curloc, src)
+ P.reflected = 1
+
+ return -1 // complete projectile permutation
+
+ return (..(P))
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm
new file mode 100644
index 0000000000..246b0fa1c6
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm
@@ -0,0 +1,261 @@
+// Stronger than a regular Dark Gygax, this one has three special attacks, based on intents.
+// First special attack launches three arcing rockets at the current target.
+// Second special attack fires a projectile that creates a short-lived microsingularity that pulls in everything nearby. Magboots can protect from this.
+// Third special attack creates a dangerous electric field that causes escalating electric damage, before emitting a tesla shock and blinding anyone looking at the mecha.
+// The AI will choose one every ten seconds.
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced
+ name = "advanced dark gygax"
+ desc = "An experimental exosuit that utilizes advanced materials to allow for greater protection while still being lightweight and fast. \
+ It also is armed with an array of next-generation weaponry."
+ icon_state = "darkgygax_adv"
+ wreckage = /obj/structure/loot_pile/mecha/gygax/dark/adv
+ icon_scale = 1.5
+ movement_shake_radius = 14
+
+ maxHealth = 450
+ deflect_chance = 25
+ has_repair_droid = TRUE
+ armor = list(
+ "melee" = 50,
+ "bullet" = 50,
+ "laser" = 50,
+ "energy" = 30,
+ "bomb" = 30,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+ special_attack_min_range = 1
+ special_attack_max_range = 7
+ special_attack_cooldown = 10 SECONDS
+ projectiletype = /obj/item/projectile/force_missile
+ projectilesound = 'sound/weapons/wave.ogg'
+ var/obj/effect/overlay/energy_ball/energy_ball = null
+
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/Destroy()
+ if(energy_ball)
+ energy_ball.stop_orbit()
+ qdel(energy_ball)
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/do_special_attack(atom/A)
+ . = TRUE // So we don't fire a laser as well.
+ switch(a_intent)
+ if(I_DISARM) // Side gun
+ electric_defense(A)
+ if(I_HURT) // Rockets
+ launch_rockets(A)
+ if(I_GRAB) // Micro-singulo
+ launch_microsingularity(A)
+
+#define ELECTRIC_ZAP_POWER 20000
+
+// Charges a tesla shot, while emitting a dangerous electric field. The exosuit is immune to electric damage while this is ongoing.
+// It also briefly blinds anyone looking directly at the mech without flash protection.
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/electric_defense(atom/target)
+ set waitfor = FALSE
+
+ // Temporary immunity to shock to avoid killing themselves with their own attack.
+ var/old_shock_resist = shock_resist
+ shock_resist = 1
+
+ // Make the energy ball. This is purely visual since the tesla ball is hyper-deadly.
+ energy_ball = new(loc)
+ energy_ball.adjust_scale(0.5)
+ energy_ball.orbit(src, 32, TRUE, 1 SECOND)
+
+ visible_message(span("warning", "\The [src] creates \an [energy_ball] around itself!"))
+
+ playsound(src.loc, 'sound/effects/lightning_chargeup.ogg', 100, 1, extrarange = 30)
+
+ // Shock nearby things that aren't ourselves.
+ for(var/i = 1 to 10)
+ energy_ball.adjust_scale(0.5 + (i/10))
+ energy_ball.set_light(i/2, i/2, "#0000FF")
+ for(var/thing in range(3, src))
+ // This is stupid because mechs are stupid and not mobs.
+ if(isliving(thing))
+ var/mob/living/L = thing
+
+ if(L == src)
+ continue
+ if(L.stat)
+ continue // Otherwise it can get pretty laggy if there's loads of corpses around.
+ L.inflict_shock_damage(i * 2)
+ if(L && L.has_AI()) // Some mobs delete themselves when dying.
+ L.ai_holder.react_to_attack(src)
+
+ else if(istype(thing, /obj/mecha))
+ var/obj/mecha/M = thing
+ M.take_damage(i * 2, "energy") // Mechs don't have a concept for siemens so energy armor check is the best alternative.
+
+ sleep(1 SECOND)
+
+ // Shoot a tesla bolt, and flashes people who are looking at the mecha without sufficent eye protection.
+ visible_message(span("warning", "\The [energy_ball] explodes in a flash of light, sending a shock everywhere!"))
+ playsound(src.loc, 'sound/effects/lightningbolt.ogg', 100, 1, extrarange = 30)
+ tesla_zap(src.loc, 5, ELECTRIC_ZAP_POWER, FALSE)
+ for(var/mob/living/L in viewers(src))
+ if(L == src)
+ continue
+ var/dir_towards_us = get_dir(L, src)
+ if(L.dir && L.dir & dir_towards_us)
+ to_chat(L, span("danger", "The flash of light blinds you briefly."))
+ L.flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = TRUE)
+
+ // Get rid of our energy ball.
+ energy_ball.stop_orbit()
+ qdel(energy_ball)
+
+ sleep(1 SECOND)
+ // Resist resistance to old value.
+ shock_resist = old_shock_resist // Not using initial() in case the value gets modified by an admin or something.
+
+#undef ELECTRIC_ZAP_POWER
+
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_rockets(atom/target)
+ set waitfor = FALSE
+
+ // Telegraph our next move.
+ Beam(target, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
+ visible_message(span("warning", "\The [src] deploys a missile rack!"))
+ playsound(src, 'sound/effects/turret/move1.wav', 50, 1)
+ sleep(0.5 SECONDS)
+
+ for(var/i = 1 to 3)
+ if(target) // Might get deleted in the meantime.
+ var/turf/T = get_turf(target)
+ if(T)
+ visible_message(span("warning", "\The [src] fires a rocket into the air!"))
+ playsound(src, 'sound/weapons/rpg.ogg', 70, 1)
+ face_atom(T)
+ var/obj/item/projectile/arc/explosive_rocket/rocket = new(loc)
+ rocket.launch(T)
+ sleep(1 SECOND)
+
+ visible_message(span("warning", "\The [src] retracts the missile rack."))
+ playsound(src, 'sound/effects/turret/move2.wav', 50, 1)
+
+// Arcing rocket projectile that produces a weak explosion when it lands.
+// Shouldn't punch holes in the floor, but will still hurt.
+/obj/item/projectile/arc/explosive_rocket
+ name = "rocket"
+ icon_state = "mortar"
+
+/obj/item/projectile/arc/explosive_rocket/on_impact(turf/T)
+ new /obj/effect/explosion(T) // Weak explosions don't produce this on their own, apparently.
+ explosion(T, 0, 0, 2, adminlog = FALSE)
+
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced/proc/launch_microsingularity(atom/target)
+ var/turf/T = get_turf(target)
+ visible_message(span("warning", "\The [src] fires an energetic sphere into the air!"))
+ playsound(src, 'sound/weapons/Laser.ogg', 50, 1)
+ face_atom(T)
+ var/obj/item/projectile/arc/microsingulo/sphere = new(loc)
+ sphere.launch(T)
+
+/obj/item/projectile/arc/microsingulo
+ name = "micro singularity"
+ icon_state = "bluespace"
+
+/obj/item/projectile/arc/microsingulo/on_impact(turf/T)
+ new /obj/effect/temporary_effect/pulse/microsingulo(T)
+
+
+/obj/effect/temporary_effect/pulse/microsingulo
+ name = "micro singularity"
+ desc = "It's sucking everything in!"
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "bhole3"
+ light_range = 4
+ light_power = 5
+ light_color = "#2ECCFA"
+ pulses_remaining = 10
+ pulse_delay = 0.5 SECONDS
+ var/pull_radius = 3
+ var/pull_strength = STAGE_THREE
+
+/obj/effect/temporary_effect/pulse/microsingulo/on_pulse()
+ for(var/atom/A in range(pull_radius, src))
+ A.singularity_pull(src, pull_strength)
+
+
+// The Advanced Dark Gygax's AI.
+// The mob has three special attacks, based on the current intent.
+// This AI choose the appropiate intent for the situation, and tries to ensure it doesn't kill itself by firing missiles at its feet.
+/datum/ai_holder/simple_mob/intentional/adv_dark_gygax
+ conserve_ammo = TRUE // Might help avoid 'I shoot the wall forever' cheese.
+ var/closest_desired_distance = 1 // Otherwise run up to them to be able to potentially shock or punch them.
+
+ var/electric_defense_radius = 3 // How big to assume electric defense's area is.
+ var/microsingulo_radius = 3 // Same but for microsingulo pull.
+ var/rocket_explosive_radius = 2 // Explosion radius for the rockets.
+
+ var/electric_defense_threshold = 2 // How many non-targeted people are needed in close proximity before electric defense is viable.
+ var/microsingulo_threshold = 2 // Similar to above, but uses an area around the target.
+
+// Used to control the mob's positioning based on which special attack it has done.
+// Note that the intent will not change again until the next special attack is about to happen.
+/datum/ai_holder/simple_mob/intentional/adv_dark_gygax/on_engagement(atom/A)
+ // Make the AI backpeddle if using an AoE special attack.
+ var/list/risky_intents = list(I_GRAB, I_HURT) // Mini-singulo and missiles.
+ if(holder.a_intent in risky_intents)
+ var/closest_distance = 1
+ switch(holder.a_intent) // Plus one just in case.
+ if(I_HURT)
+ closest_distance = rocket_explosive_radius + 1
+ if(I_GRAB)
+ closest_distance = microsingulo_radius + 1
+
+ if(get_dist(holder, A) <= closest_distance)
+ holder.IMove(get_step_away(holder, A, closest_distance))
+
+ // Otherwise get up close and personal.
+ else if(get_dist(holder, A) > closest_desired_distance)
+ holder.IMove(get_step_towards(holder, A))
+
+// Changes the mob's intent, which controls which special attack is used.
+// I_DISARM causes Electric Defense, I_GRAB causes Micro-Singularity, and I_HURT causes Missile Barrage.
+/datum/ai_holder/simple_mob/intentional/adv_dark_gygax/pre_special_attack(atom/A)
+ if(isliving(A))
+ var/mob/living/target = A
+
+ // If we're surrounded, Electric Defense will quickly fix that.
+ var/tally = 0
+ var/list/potential_targets = list_targets() // Returns list of mobs and certain objects like mechs and turrets.
+ for(var/atom/movable/AM in potential_targets)
+ if(get_dist(holder, AM) > electric_defense_radius)
+ continue
+ if(!can_attack(AM))
+ continue
+ tally++
+
+ // Should we shock them?
+ if(tally >= electric_defense_threshold || get_dist(target, holder) <= electric_defense_radius)
+ holder.a_intent = I_DISARM
+ return
+
+ // Otherwise they're a fair distance away and we're not getting mobbed up close.
+ // See if we should use missiles or microsingulo.
+ tally = 0 // Let's recycle the var.
+ for(var/atom/movable/AM in potential_targets)
+ if(get_dist(target, AM) > microsingulo_radius) // Deliberately tests distance between target and nearby targets and not the holder.
+ continue
+ if(!can_attack(AM))
+ continue
+ if(AM.anchored) // Microsingulo doesn't do anything to anchored things.
+ tally--
+ else
+ tally++
+
+ // Lots of people means minisingulo would be more useful.
+ if(tally >= microsingulo_threshold)
+ holder.a_intent = I_GRAB
+ else // Otherwise use rockets.
+ holder.a_intent = I_HURT
+
+ else
+ if(get_dist(holder, A) >= rocket_explosive_radius + 1)
+ holder.a_intent = I_HURT // Fire rockets if it's an obj/turf.
+ else
+ holder.a_intent = I_DISARM // Electricity might not work but it's safe up close.
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat_mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat_mecha.dm
new file mode 100644
index 0000000000..7a2d8abb19
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/combat_mecha.dm
@@ -0,0 +1,38 @@
+// Base type for the 'combat' mechas like gygax/durand/maulers/etc.
+// They generally are walking tanks, and their melee attack knocks back and stuns, like the real deal.
+
+/mob/living/simple_mob/mechanical/mecha/combat
+ name = "combat mecha"
+ desc = "An even bigger stompy mech!!"
+
+ movement_cooldown = 10
+ melee_damage_lower = 30
+ melee_damage_upper = 30
+ melee_attack_delay = 1 SECOND
+ attacktext = list("punched", "slammed", "uppercutted", "pummeled")
+
+ armor = list(
+ "melee" = 30,
+ "bullet" = 30,
+ "laser" = 15,
+ "energy" = 0,
+ "bomb" = 20,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+ var/weaken_amount = 2 // Be careful with this number. High values can equal a permastun.
+
+// Melee hits knock back by one tile (or more if already stunned to help prevent permastuns).
+/mob/living/simple_mob/mechanical/mecha/combat/apply_melee_effects(atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(L.mob_size <= MOB_MEDIUM)
+ visible_message(span("danger", "\The [src] sends \the [L] flying with their mechanized fist!"))
+ playsound(src, "punch", 50, 1)
+ L.Weaken(weaken_amount)
+ var/throw_dir = get_dir(src, L)
+ var/throw_dist = L.incapacitated(INCAPACITATION_DISABLED) ? 4 : 1
+ L.throw_at(get_edge_target_turf(L, throw_dir), throw_dist, 1, src)
+ else
+ to_chat(L, span("warning", "\The [src] punches you with incredible force, but you remain in place."))
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
new file mode 100644
index 0000000000..c20d623c53
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/durand.dm
@@ -0,0 +1,53 @@
+// Durands are slow, tanky, beefy, and hit really hard.
+// They can also root themselves to become even tankier.
+// The AI doesn't do this currently.
+
+/mob/living/simple_mob/mechanical/mecha/combat/durand
+ name = "durand"
+ desc = "An aging combat exosuit utilized by many corporations. It was originally developed to fight in the First Contact War."
+ icon_state = "durand"
+ movement_cooldown = 10
+ wreckage = /obj/structure/loot_pile/mecha/durand
+
+ maxHealth = 400
+ deflect_chance = 20
+ armor = list(
+ "melee" = 50,
+ "bullet" = 35,
+ "laser" = 15,
+ "energy" = 10,
+ "bomb" = 20,
+ "bio" = 100,
+ "rad" = 100
+ )
+ melee_damage_lower = 40
+ melee_damage_upper = 40
+ base_attack_cooldown = 2 SECONDS
+ projectiletype = /obj/item/projectile/beam/heavylaser
+
+ var/defense_mode = FALSE
+ var/defense_deflect = 35
+
+/mob/living/simple_mob/mechanical/mecha/combat/durand/proc/set_defense_mode(new_mode)
+ defense_mode = new_mode
+ deflect_chance = defense_mode ? defense_deflect : initial(deflect_chance)
+ to_chat(src, span("notice", "You [defense_mode ? "en" : "dis"]able defense mode."))
+
+/mob/living/simple_mob/mechanical/mecha/combat/durand/SelfMove(turf/n, direct)
+ if(defense_mode)
+ to_chat(src, span("warning", "You are in defense mode, you cannot move."))
+ return FALSE
+ return ..()
+
+// So players can toggle it too.
+/mob/living/simple_mob/mechanical/mecha/combat/durand/verb/toggle_defense_mode()
+ set name = "Toggle Defense Mode"
+ set desc = "Toggles a special mode which makes you immobile and much more resilient."
+ set category = "Abilities"
+
+ set_defense_mode(!defense_mode)
+
+// Variant that starts in defense mode, perhaps for PoIs.
+/mob/living/simple_mob/mechanical/mecha/combat/durand/defensive/initialize()
+ set_defense_mode(TRUE)
+ return ..()
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/gygax.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/gygax.dm
new file mode 100644
index 0000000000..4e0cc0cb3d
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/gygax.dm
@@ -0,0 +1,57 @@
+// Gygaxes are tough but also fast.
+// Their AI, unlike most, will advance towards their target instead of remaining in place.
+
+/mob/living/simple_mob/mechanical/mecha/combat/gygax
+ name = "gygax"
+ desc = "A lightweight, security exosuit. Popular among private and corporate security."
+ icon_state = "gygax"
+ movement_cooldown = 0
+ wreckage = /obj/structure/loot_pile/mecha/gygax
+
+ maxHealth = 300
+ armor = list(
+ "melee" = 25,
+ "bullet" = 20,
+ "laser" = 30,
+ "energy" = 15,
+ "bomb" = 0,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+ projectiletype = /obj/item/projectile/beam/midlaser
+
+ ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
+
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/manned
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol.
+
+
+// A stronger variant.
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark
+ name = "dark gygax"
+ desc = "A significantly upgraded Gygax security mech, often utilized by corporate asset protection teams and \
+ PMCs."
+ icon_state = "darkgygax"
+ wreckage = /obj/structure/loot_pile/mecha/gygax/dark
+
+ maxHealth = 400
+ deflect_chance = 25
+ has_repair_droid = TRUE
+ armor = list(
+ "melee" = 40,
+ "bullet" = 40,
+ "laser" = 50,
+ "energy" = 35,
+ "bomb" = 20,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+/mob/living/simple_mob/mechanical/mecha/combat/gygax/medgax
+ name = "medgax"
+ desc = "An unorthodox fusion of the Gygax and Odysseus exosuits, this one is fast, sturdy, and carries a wide array of \
+ potent chemicals and delivery mechanisms. The doctor is in!"
+ icon_state = "medgax"
+ wreckage = /obj/structure/loot_pile/mecha/gygax/medgax
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm
new file mode 100644
index 0000000000..29f102b9b9
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/hoverpod.dm
@@ -0,0 +1,27 @@
+// Ranged, and capable of flight.
+/mob/living/simple_mob/mechanical/mecha/hoverpod
+ name = "hover pod"
+ desc = "Stubby and round, this space-capable craft is an ancient favorite. It has a jury-rigged welder-laser."
+ icon_state = "engineering_pod"
+ movement_sound = 'sound/machines/hiss.ogg'
+ wreckage = /obj/structure/loot_pile/mecha/hoverpod
+
+ maxHealth = 150
+ hovering = TRUE // Can fly.
+
+ projectiletype = /obj/item/projectile/beam
+ base_attack_cooldown = 2 SECONDS
+
+ var/datum/effect/effect/system/ion_trail_follow/ion_trail
+
+/mob/living/simple_mob/mechanical/mecha/hoverpod/manned
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged
+
+/mob/living/simple_mob/mechanical/mecha/hoverpod/initialize()
+ ion_trail = new /datum/effect/effect/system/ion_trail_follow()
+ ion_trail.set_up(src)
+ ion_trail.start()
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/hoverpod/Process_Spacemove(var/check_drift = 0)
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/marauder.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/marauder.dm
new file mode 100644
index 0000000000..b4fa89c005
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/marauder.dm
@@ -0,0 +1,44 @@
+// Marauders are even tougher than Durands.
+
+/mob/living/simple_mob/mechanical/mecha/combat/marauder
+ name = "marauder"
+ desc = "A heavy-duty, combat exosuit, developed after the Durand model. This is rarely found among civilian populations."
+ icon_state = "marauder"
+ movement_cooldown = 5
+ wreckage = /obj/structure/loot_pile/mecha/marauder
+
+ maxHealth = 500
+ deflect_chance = 25
+ sight = SEE_SELF | SEE_MOBS
+ armor = list(
+ "melee" = 50,
+ "bullet" = 55,
+ "laser" = 40,
+ "energy" = 30,
+ "bomb" = 30,
+ "bio" = 100,
+ "rad" = 100
+ )
+ melee_damage_lower = 45
+ melee_damage_upper = 45
+ base_attack_cooldown = 2 SECONDS
+ projectiletype = /obj/item/projectile/beam/heavylaser
+
+
+// Slightly stronger, used to allow comdoms to frontline without dying instantly, I guess.
+/mob/living/simple_mob/mechanical/mecha/combat/marauder/seraph
+ name = "seraph"
+ desc = "A heavy-duty, combat/command exosuit. This one is specialized towards housing important commanders such as high-ranking \
+ military personnel. It's stronger than the regular Marauder model, but not by much."
+ icon_state = "seraph"
+ wreckage = /obj/structure/loot_pile/mecha/marauder/seraph
+ health = 550
+ melee_damage_lower = 55 // The real version hits this hard apparently. Ouch.
+ melee_damage_upper = 55
+
+
+/mob/living/simple_mob/mechanical/mecha/combat/marauder/mauler
+ name = "mauler"
+ desc = "A heavy duty, combat exosuit that is based off of the Marauder model."
+ icon_state = "mauler"
+ wreckage = /obj/structure/loot_pile/mecha/marauder/mauler
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm
new file mode 100644
index 0000000000..7aa24bdf74
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/mecha.dm
@@ -0,0 +1,141 @@
+// Mecha simple_mobs are essentially fake mechs. Generally tough and scary to fight.
+// By default, they're automatically piloted by some kind of drone AI. They can be set to be "piloted" instead with a var.
+// Tries to be as similar to the real deal as possible.
+
+/mob/living/simple_mob/mechanical/mecha
+ name = "mecha"
+ desc = "A big stompy mech!"
+ icon = 'icons/mecha/mecha.dmi'
+
+ faction = "syndicate"
+ movement_cooldown = 5
+ movement_sound = "mechstep" // This gets fed into playsound(), which can also take strings as a 'group' of sound files.
+ turn_sound = 'sound/mecha/mechturn.ogg'
+ maxHealth = 300
+ mob_size = MOB_LARGE
+
+ // Very close to the base 'damage_absorption' var on the base mecha class.
+ armor = list(
+ "melee" = 20,
+ "bullet" = 10,
+ "laser" = 0,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+ response_help = "taps on"
+ response_disarm = "knocks on"
+ response_harm = "uselessly hits"
+ harm_intent_damage = 0
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+ say_list_type = /datum/say_list/malf_drone
+
+ var/datum/effect/effect/system/spark_spread/sparks
+ var/wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
+ var/pilot_type = null // Set to spawn a pilot when destroyed. Setting this also makes the mecha vulnerable to things that affect sentient minds.
+ var/deflect_chance = 10 // Chance to outright stop an attack, just like a normal exosuit.
+ var/has_repair_droid = FALSE // If true, heals 2 damage every tick and gets a repair droid overlay.
+
+
+/mob/living/simple_mob/mechanical/mecha/initialize()
+ sparks = new (src)
+ sparks.set_up(3, 1, src)
+ sparks.attach(src)
+
+ if(!pilot_type)
+ name = "autonomous [initial(name)]"
+ desc = "[initial(desc)] It appears to be piloted by a drone intelligence."
+ else
+ say_list_type = /datum/say_list/merc
+
+ if(has_repair_droid)
+ update_icon()
+
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/Destroy()
+ qdel(sparks)
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/death()
+ ..(0,"explodes!") // Do everything else first.
+
+ // Make the exploding more convincing with an actual explosion and some sparks.
+ sparks.start()
+ explosion(get_turf(src), 0, 0, 1, 3)
+
+ // 'Eject' our pilot, if one exists.
+ if(pilot_type)
+ var/mob/living/L = new pilot_type(loc)
+ L.faction = src.faction
+
+ new wreckage(loc) // Leave some wreckage.
+
+ qdel(src) // Then delete us since we don't actually have a body.
+
+/mob/living/simple_mob/mechanical/mecha/handle_special()
+ if(has_repair_droid)
+ adjustBruteLoss(-2)
+ adjustFireLoss(-2)
+ adjustToxLoss(-2)
+ adjustOxyLoss(-2)
+ adjustCloneLoss(-2)
+ ..()
+
+/mob/living/simple_mob/mechanical/mecha/update_icon()
+ ..() // Cuts everything else, so do that first.
+ if(has_repair_droid)
+ add_overlay(image(icon = 'icons/mecha/mecha_equipment.dmi', icon_state = "repair_droid"))
+
+/mob/living/simple_mob/mechanical/mecha/bullet_act()
+ . = ..()
+ sparks.start()
+
+/mob/living/simple_mob/mechanical/mecha/speech_bubble_appearance()
+ return pilot_type ? "" : ..()
+
+// Piloted mechs are controlled by (presumably) something humanoid so they are vulnerable to certain things.
+/mob/living/simple_mob/mechanical/mecha/is_sentient()
+ return pilot_type ? TRUE : FALSE
+
+/*
+// Real mechs can't turn and run at the same time. This tries to simulate that.
+// Commented out because the AI can't handle it sadly.
+/mob/living/simple_mob/mechanical/mecha/SelfMove(turf/n, direct)
+ if(direct != dir)
+ set_dir(direct)
+ return FALSE // We didn't actually move, and returning FALSE means the mob can try to actually move almost immediately and not have to wait the full movement cooldown.
+ return ..()
+*/
+
+/mob/living/simple_mob/mechanical/mecha/bullet_act(obj/item/projectile/P)
+ if(prob(deflect_chance))
+ visible_message(span("warning", "\The [P] is deflected by \the [src]'s armor!"))
+ deflect_sprite()
+ return 0
+ return ..()
+
+/mob/living/simple_mob/mechanical/mecha/proc/deflect_sprite()
+ var/image/deflect_image = image('icons/effects/effects.dmi', "deflect_static")
+ add_overlay(deflect_image)
+ sleep(1 SECOND)
+ cut_overlay(deflect_image)
+ qdel(deflect_image)
+// flick_overlay_view(deflect_image, src, duration = 1 SECOND, gc_after = TRUE)
+
+/mob/living/simple_mob/mechanical/mecha/attackby(obj/item/I, mob/user)
+ if(prob(deflect_chance))
+ visible_message(span("warning", "\The [user]'s [I] bounces off \the [src]'s armor!"))
+ deflect_sprite()
+ user.setClickCooldown(user.get_attack_speed(I))
+ return
+ ..()
+
+/mob/living/simple_mob/mechanical/mecha/ex_act(severity)
+ if(prob(deflect_chance))
+ severity++ // This somewhat misleadingly makes it less severe.
+ deflect_sprite()
+ ..(severity)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/odysseus.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/odysseus.dm
new file mode 100644
index 0000000000..245bd54193
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/odysseus.dm
@@ -0,0 +1,71 @@
+// Shoots syringe-darts at enemies, which applies a stacking poison modifier that hurts over time.
+// They also do this in melee.
+// Fortunately they're quite fragile and don't fire that fast.
+
+/mob/living/simple_mob/mechanical/mecha/odysseus
+ name = "odysseus"
+ desc = "These exosuits are developed and produced by Vey-Med. This one has a syringe gun."
+ icon_state = "odysseus"
+ wreckage = /obj/structure/loot_pile/mecha/odysseus
+
+ maxHealth = 120
+ movement_cooldown = 0
+ turn_sound = 'sound/mecha/mechmove01.ogg'
+
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ base_attack_cooldown = 2 SECONDS
+ attacktext = list("injected")
+ projectiletype = /obj/item/projectile/fake_syringe/poison
+ projectilesound = 'sound/weapons/empty.ogg' // Just like the syringe gun.
+
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/no_moonwalk
+
+/mob/living/simple_mob/mechanical/mecha/odysseus/manned
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol.
+
+
+// Resprite of the regular one, perhaps for merc PoIs.
+/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus
+ icon_state = "murdysseus"
+ wreckage = /obj/structure/loot_pile/mecha/odysseus/murdysseus
+
+/mob/living/simple_mob/mechanical/mecha/odysseus/murdysseus/manned
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged
+
+
+/mob/living/simple_mob/mechanical/mecha/odysseus/apply_melee_effects(atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+
+ var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
+ if(L.can_inject(src, null, target_zone))
+ to_chat(L, span("warning", "You feel a tiny prick."))
+ if(L.get_poison_protection() < 1)
+ L.add_modifier(/datum/modifier/poisoned, 30 SECONDS)
+ L.inflict_poison_damage(5)
+
+
+// Fake syringe that tests if target can be injected before applying damage/modifiers/etc.
+/obj/item/projectile/fake_syringe
+ name = "syringe"
+ icon_state = "syringe"
+ damage = 5 // Getting hit with a launched syringe probably hurts, and makes it at least slightly relevant against synthetics.
+ var/piercing = FALSE // If true, ignores thick material.
+
+/obj/item/projectile/fake_syringe/on_hit(atom/target, blocked = 0, def_zone = null)
+ if(isliving(target))
+ var/mob/living/L = target
+ if(!L.can_inject(null, null, def_zone, piercing))
+ return FALSE
+ to_chat(L, span("warning", "You feel a tiny prick."))
+ return ..() // This will add the modifier and return the correct value.
+
+
+// Fake syringe, which inflicts a long lasting modifier that slowly kills them.
+/obj/item/projectile/fake_syringe/poison
+ modifier_type_to_apply = /datum/modifier/poisoned
+ modifier_duration = 1 MINUTE // About 30 damage per stack over a minute.
+
+
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm
new file mode 100644
index 0000000000..ebbe80ecf4
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dm
@@ -0,0 +1,22 @@
+// Phazons are weird.
+
+/mob/living/simple_mob/mechanical/mecha/combat/phazon
+ name = "phazon"
+ desc = "An extremly enigmatic exosuit."
+ icon_state = "phazon"
+ movement_cooldown = 5
+ wreckage = /obj/structure/loot_pile/mecha/phazon
+
+ maxHealth = 200
+ deflect_chance = 30
+ armor = list(
+ "melee" = 30,
+ "bullet" = 30,
+ "laser" = 30,
+ "energy" = 30,
+ "bomb" = 30,
+ "bio" = 100,
+ "rad" = 100
+ )
+ projectiletype = /obj/item/projectile/energy/declone
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/ripley.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/ripley.dm
new file mode 100644
index 0000000000..8372363ea0
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/ripley.dm
@@ -0,0 +1,64 @@
+// Beefy, but somewhat slow.
+// Melee attack is to bore you with its big drill, which has a lot of armor penetration and strikes rapidly.
+
+/mob/living/simple_mob/mechanical/mecha/ripley
+ name = "\improper APLU ripley"
+ desc = "Autonomous Power Loader Unit. The workhorse of the exosuit world. This one has big drill."
+ icon_state = "ripley"
+ wreckage = /obj/structure/loot_pile/mecha/ripley
+
+ maxHealth = 200
+
+ melee_damage_lower = 10
+ melee_damage_upper = 10
+ base_attack_cooldown = 5 // About 20 DPS.
+ attack_armor_pen = 50
+ attack_sharp = TRUE
+ attack_sound = 'sound/mecha/mechdrill.ogg'
+ attacktext = list("drilled", "bored", "pierced")
+
+/mob/living/simple_mob/mechanical/mecha/ripley/manned
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged // Carries a pistol.
+
+/mob/living/simple_mob/mechanical/mecha/ripley/red_flames
+ icon_state = "ripley_flames_red"
+
+/mob/living/simple_mob/mechanical/mecha/ripley/blue_flames
+ icon_state = "ripley_flames_blue"
+
+
+// Immune to heat damage, resistant to lasers, and somewhat beefier. Still tries to melee you.
+/mob/living/simple_mob/mechanical/mecha/ripley/firefighter
+ name = "\improper APLU firefighter"
+ desc = "A standard APLU chassis, refitted with additional thermal protection and cistern. This one has a big drill."
+ icon_state = "firefighter"
+ wreckage = /obj/structure/loot_pile/mecha/ripley/firefighter
+
+ maxHealth = 250
+ heat_resist = 1
+ armor = list(
+ "melee" = 0,
+ "bullet" = 20,
+ "laser" = 50,
+ "energy" = 0,
+ "bomb" = 50,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+/mob/living/simple_mob/mechanical/mecha/ripley/firefighter/manned
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged
+
+// Mostly a joke mob, like the real DEATH-RIPLEY.
+/mob/living/simple_mob/mechanical/mecha/ripley/deathripley
+ name = "\improper DEATH-RIPLEY"
+ desc = "OH SHIT RUN!!! IT HAS A KILL CLAMP!"
+ icon_state = "deathripley"
+ wreckage = /obj/structure/loot_pile/mecha/deathripley
+
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+ friendly = list("utterly obliterates", "furiously destroys", "permanently removes", "unflichingly decimates", "brutally murders", "absolutely demolishes", "completely annihilates")
+
+/mob/living/simple_mob/mechanical/mecha/ripley/deathripley/manned
+ pilot_type = /mob/living/simple_mob/humanoid/merc/ranged
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mechanical.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mechanical.dm
new file mode 100644
index 0000000000..f61212ba75
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mechanical.dm
@@ -0,0 +1,25 @@
+// Mechanical mobs don't care about the atmosphere and cannot be hurt by tasers.
+// They're also immune to poisons as they're entirely metal, however this also makes most of them vulnerable to shocks.
+// They can also be hurt by EMP.
+
+/mob/living/simple_mob/mechanical
+ mob_class = MOB_CLASS_SYNTHETIC
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+ taser_kill = FALSE
+ poison_resist = 1.0
+ shock_resist = -0.5
+
+/mob/living/simple_mob/mechanical/isSynthetic()
+ return TRUE
+
+/mob/living/simple_mob/mechanical/speech_bubble_appearance()
+ return faction != "neutral" ? "synthetic_evil" : "machine"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm
new file mode 100644
index 0000000000..09d778547b
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/viscerator.dm
@@ -0,0 +1,51 @@
+/*
+ Viscerators are fragile and don't hit very hard, but fast, evasive, and rarely come alone.
+ They also tend to dodge while in melee range.
+ A weapon that can cleave is very effective against them.
+*/
+
+/mob/living/simple_mob/mechanical/viscerator
+ name = "viscerator"
+ desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations."
+ icon = 'icons/mob/critter.dmi'
+ icon_state = "viscerator_attack"
+ icon_living = "viscerator_attack"
+ hovering = TRUE // Won't trigger landmines.
+
+ faction = "syndicate"
+ maxHealth = 15
+ health = 15
+ movement_cooldown = 0
+
+ pass_flags = PASSTABLE
+ mob_swap_flags = 0
+ mob_push_flags = 0
+
+ melee_damage_lower = 4 // Approx 8 DPS.
+ melee_damage_upper = 4
+ base_attack_cooldown = 5 // Two attacks a second or so.
+ attack_sharp = 1
+ attack_edge = 1
+ attack_sound = 'sound/weapons/bladeslice.ogg'
+ attacktext = list("cut", "sliced")
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
+
+/mob/living/simple_mob/mechanical/viscerator/death()
+ ..(null,"is smashed into pieces!")
+ qdel(src)
+
+// Variant that is always loyal to mercenary antagonists.
+// Used for a special grenade, to ensure they don't attack the wrong thing.
+/mob/living/simple_mob/mechanical/viscerator/mercenary/IIsAlly(mob/living/L)
+ . = ..()
+ if(!.) // Not friendly, see if they're a baddie first.
+ if(L.mind && mercs.is_antagonist(L.mind))
+ return TRUE
+
+// Similar to above but for raiders.
+/mob/living/simple_mob/mechanical/viscerator/raider/IIsAlly(mob/living/L)
+ . = ..()
+ if(!.) // Not friendly, see if they're a baddie first.
+ if(L.mind && raiders.is_antagonist(L.mind))
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/monitor_ward.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/monitor_ward.dm
new file mode 100644
index 0000000000..153bc9c478
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/monitor_ward.dm
@@ -0,0 +1,106 @@
+/*
+ 'Monitor' wards are drones that yell at their creator if they see someone besides them that they are hostile to.
+ They can also force an invisible entity to uncloak if the invisible mob is hostile to the ward.
+ If AI controlled, they will also warn their faction if they see a hostile entity, acting as floating cameras.
+*/
+
+/mob/living/simple_mob/mechanical/ward/monitor
+ desc = "It's a little flying drone. This one seems to be watching you..."
+ icon_state = "ward"
+ glow_color = "#00FF00"
+ see_invisible = SEE_INVISIBLE_LEVEL_TWO
+
+ has_eye_glow = TRUE
+ glow_range = 3
+ glow_intensity = 3
+ glow_toggle = TRUE
+
+ player_msg = "You will automatically alert your owner (if one exists) of enemies you see nearby.
\
+ You can also see invisible entities, and will automatically uncloak nearby invisible or hidden enemies."
+
+ ai_holder_type = /datum/ai_holder/simple_mob/monitor
+
+ var/list/seen_mobs = list()
+ var/view_range = 5
+
+// For PoIs.
+/mob/living/simple_mob/mechanical/ward/monitor/syndicate
+ faction = "syndicate"
+
+/mob/living/simple_mob/mechanical/ward/monitor/crew
+ faction = "neutral"
+
+/mob/living/simple_mob/mechanical/ward/monitor/death()
+ if(owner)
+ to_chat(owner, span("warning", "Your [src.name] inside [get_area(src)] was destroyed!"))
+ ..()
+
+/mob/living/simple_mob/mechanical/ward/monitor/handle_special()
+ detect_mobs()
+
+/mob/living/simple_mob/mechanical/ward/monitor/update_icon()
+ if(seen_mobs.len)
+ icon_living = "ward_spotted"
+ glow_color = "#FF0000"
+ else
+ icon_living = "ward"
+ glow_color = "#00FF00"
+ handle_light() // Update the light immediately.
+ ..()
+
+/mob/living/simple_mob/mechanical/ward/monitor/proc/detect_mobs()
+ var/last_seen_mobs_len = seen_mobs.len
+ var/list/mobs_nearby = hearers(view_range, src)
+ var/list/newly_seen_mobs = list()
+ for(var/mob/living/L in mobs_nearby)
+ if(L == src) // Don't detect ourselves.
+ continue
+
+ if(L.stat) // Dead mobs aren't concerning.
+ continue
+
+ if(src.IIsAlly(L))
+ continue
+
+ // Decloak them .
+ if(L.is_cloaked())
+ Beam(L, icon_state = "solar_beam", time = 5)
+ playsound(L, 'sound/effects/EMPulse.ogg', 75, 1)
+ L.break_cloak()
+
+ to_chat(L, span("danger", "\The [src] disrupts your cloak!"))
+ if(owner)
+ to_chat(owner, span("notice", "Your [src.name] at [get_area(src)] uncloaked \the [L]."))
+
+ // Warn the owner when it sees a new mob.
+ if(!(L in seen_mobs))
+ seen_mobs += L
+ newly_seen_mobs += L
+
+ if(newly_seen_mobs.len && owner) // Yell at our owner if someone new shows up.
+ to_chat(owner, span("notice", "Your [src.name] at [get_area(src)] detected [english_list(newly_seen_mobs)]."))
+
+ // Now get rid of old mobs that left vision.
+ for(var/thing in seen_mobs)
+ if(!(thing in mobs_nearby))
+ seen_mobs -= thing
+
+ // Check if we need to update icon.
+ if(seen_mobs.len != last_seen_mobs_len)
+ update_icon()
+
+
+// Can't attack but calls for help. Used by the monitor and spotter wards.
+// Special attacks are not blocked since they might be used for things besides attacking, and can be conditional.
+/datum/ai_holder/simple_mob/monitor
+ hostile = TRUE // Required to call for help.
+ cooperative = TRUE
+ stand_ground = TRUE // So it doesn't run up to the thing it sees.
+ wander = FALSE
+ can_flee = FALSE
+
+/datum/ai_holder/simple_mob/monitor/melee_attack(atom/A)
+ return FALSE
+
+/datum/ai_holder/simple_mob/monitor/ranged_attack(atom/A)
+ return FALSE
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm
new file mode 100644
index 0000000000..0e897599ac
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/ward/ward.dm
@@ -0,0 +1,42 @@
+/*
+ Wards are a specific type of mechanical simplemob that generally fill a support role for their faction or for a specific mob.
+ Generally they are helpless by themselves and are fragile, but can do very useful things if protected. This makes them a high priority target.
+*/
+
+/mob/living/simple_mob/mechanical/ward
+ name = "ward"
+ desc = "A small floating machine. This one seems rather useless..."
+ icon = 'icons/mob/critter.dmi'
+ icon_state = "ward"
+ icon_living = "ward"
+ hovering = TRUE // Won't trigger landmines.
+ response_help = "pets"
+ response_disarm = "swats away"
+ response_harm = "punches"
+ faction = "wards" // Needed as most human mobs are in neutral faction. The owner is generally except from any ward hostility regardless.
+
+ maxHealth = 15
+ health = 15
+ movement_cooldown = 0
+ hovering = TRUE
+
+ mob_bump_flag = 0
+
+ melee_damage_lower = 0
+ melee_damage_upper = 0
+
+ ai_holder_type = null
+ var/mob/living/owner = null // The mob that made the ward, if any. Used to ensure the ward does not interfere with its creator.
+
+/mob/living/simple_mob/mechanical/ward/death()
+ ..(null,"is smashed into pieces!")
+ qdel(src)
+
+/mob/living/simple_mob/mechanical/ward/Destroy()
+ owner = null
+ return ..()
+
+/mob/living/simple_mob/mechanical/ward/IIsAlly(mob/living/L)
+ if(owner == L)
+ return TRUE
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm
new file mode 100644
index 0000000000..cd3b074a40
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/_construct.dm
@@ -0,0 +1,163 @@
+////////////////////////////
+// Base Construct
+////////////////////////////
+
+/mob/living/simple_mob/construct
+ name = "Construct"
+ real_name = "Construct"
+ desc = ""
+ tt_desc = "Error"
+
+ icon_living = "shade"
+ icon_dead = "shade_dead"
+
+ mob_class = MOB_CLASS_DEMONIC
+
+ ui_icons = 'icons/mob/screen1_construct.dmi'
+ has_hands = 1
+ hand_form = "stone manipulators"
+
+ response_help = "thinks better of touching"
+ response_disarm = "flailed at"
+ response_harm = "punched"
+
+ hovering = TRUE
+ softfall = TRUE //Beings made of Hellmarble and powered by the tears of the damned are not concerned with mortal things such as 'gravity'.
+ parachuting = TRUE
+
+ has_langs = list(LANGUAGE_GALCOM, LANGUAGE_CULT, LANGUAGE_OCCULT)
+
+ has_eye_glow = TRUE
+
+ taser_kill = FALSE
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+ shock_resist = 0.1 //Electricity isn't very effective on stone, especially that from hell.
+ poison_resist = 1.0
+
+ armor = list(
+ "melee" = 10,
+ "bullet" = 10,
+ "laser" = 10,
+ "energy" = 10,
+ "bomb" = 10,
+ "bio" = 100,
+ "rad" = 100)
+
+ can_be_antagged = TRUE
+ faction = "cult"
+
+ supernatural = TRUE
+
+ var/construct_type = "shade"
+ var/list/construct_spells = list()
+// var/do_glow = TRUE
+
+/mob/living/simple_mob/construct/place_spell_in_hand(var/path)
+ if(!path || !ispath(path))
+ return 0
+
+ //var/obj/item/weapon/spell/S = new path(src)
+ var/obj/item/weapon/spell/construct/S = new path(src)
+
+ //No hands needed for innate casts.
+ if(S.cast_methods & CAST_INNATE)
+ if(S.run_checks())
+ S.on_innate_cast(src)
+
+ if(l_hand && r_hand) //Make sure our hands aren't full.
+ if(istype(r_hand, /obj/item/weapon/spell)) //If they are full, perhaps we can still be useful.
+ var/obj/item/weapon/spell/r_spell = r_hand
+ if(r_spell.aspect == ASPECT_CHROMATIC) //Check if we can combine the new spell with one in our hands.
+ r_spell.on_combine_cast(S, src)
+ else if(istype(l_hand, /obj/item/weapon/spell))
+ var/obj/item/weapon/spell/l_spell = l_hand
+ if(l_spell.aspect == ASPECT_CHROMATIC) //Check the other hand too.
+ l_spell.on_combine_cast(S, src)
+ else //Welp
+ to_chat(src, "You require a free manipulator to use this power.")
+ return 0
+
+ if(S.run_checks())
+ put_in_hands(S)
+ return 1
+ else
+ qdel(S)
+ return 0
+
+/mob/living/simple_mob/construct/cultify()
+ return
+
+/mob/living/simple_mob/construct/New()
+ ..()
+ name = text("[initial(name)] ([rand(1, 1000)])")
+ real_name = name
+ for(var/spell in construct_spells)
+ src.add_spell(new spell, "const_spell_ready")
+ updateicon()
+
+/*
+/mob/living/simple_mob/construct/update_icon()
+ ..()
+ if(do_glow)
+ add_glow()
+*/
+
+/mob/living/simple_mob/construct/death()
+ new /obj/item/weapon/ectoplasm (src.loc)
+ ..(null,"collapses in a shattered heap.")
+ ghostize()
+ qdel(src)
+
+/mob/living/simple_mob/construct/attack_generic(var/mob/user)
+ if(istype(user, /mob/living/simple_mob/construct/artificer))
+ var/mob/living/simple_mob/construct/artificer/A = user
+ if(health < getMaxHealth())
+ var/repair_lower_bound = A.melee_damage_lower * -1
+ var/repair_upper_bound = A.melee_damage_upper * -1
+ adjustBruteLoss(rand(repair_lower_bound, repair_upper_bound))
+ adjustFireLoss(rand(repair_lower_bound, repair_upper_bound))
+ user.visible_message("\The [user] mends some of \the [src]'s wounds.")
+ else
+ to_chat(user, "\The [src] is undamaged.")
+ return
+ return ..()
+
+/mob/living/simple_mob/construct/examine(mob/user)
+ ..(user)
+ var/msg = "*---------*\nThis is \icon[src] \a [src]!\n"
+ if (src.health < src.getMaxHealth())
+ msg += ""
+ if (src.health >= src.getMaxHealth()/2)
+ msg += "It looks slightly dented.\n"
+ else
+ msg += "It looks severely dented!\n"
+ msg += ""
+ msg += "*---------*"
+
+ user << msg
+
+//Constructs levitate, can fall from a shuttle with no harm, and are piloted by either damned spirits or some otherworldly entity. Let 'em float in space.
+/mob/living/simple_mob/construct/Process_Spacemove()
+ return 1
+
+/*
+// Glowing Procs
+/mob/living/simple_mob/construct/proc/add_glow()
+ var/image/eye_glow = image(icon,"glow-[icon_state]")
+ eye_glow.plane = PLANE_LIGHTING_ABOVE
+ overlays += eye_glow
+ set_light(2, -2, l_color = "#FFFFFF")
+
+/mob/living/simple_mob/construct/proc/remove_glow()
+ overlays.Cut()
+*/
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/artificer.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/artificer.dm
new file mode 100644
index 0000000000..69d0da0251
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/artificer.dm
@@ -0,0 +1,30 @@
+////////////////////////////
+// Artificer
+////////////////////////////
+
+/mob/living/simple_mob/construct/artificer
+ name = "Artificer"
+ real_name = "Artificer"
+ construct_type = "artificer"
+ desc = "A bulbous construct dedicated to building and maintaining temples to their otherworldly lords."
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "artificer"
+ icon_living = "artificer"
+ maxHealth = 150
+ health = 150
+ response_harm = "viciously beaten"
+ harm_intent_damage = 5
+ melee_damage_lower = 15 //It's not the strongest of the bunch, but that doesn't mean it can't hurt you.
+ melee_damage_upper = 20
+ attacktext = list("rammed")
+ attack_sound = 'sound/weapons/rapidslice.ogg'
+ construct_spells = list(/spell/aoe_turf/conjure/construct/lesser,
+ /spell/aoe_turf/conjure/wall,
+ /spell/aoe_turf/conjure/floor,
+ /spell/aoe_turf/conjure/soulstone,
+ /spell/aoe_turf/conjure/pylon,
+ /spell/aoe_turf/conjure/door,
+ /spell/aoe_turf/conjure/grille,
+ /spell/targeted/occult_repair_aura,
+ /spell/targeted/construct_advanced/mend_acolyte
+ )
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm
new file mode 100644
index 0000000000..9328d9cffd
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/harvester.dm
@@ -0,0 +1,40 @@
+////////////////////////////
+// Harvester
+////////////////////////////
+
+/mob/living/simple_mob/construct/harvester
+ name = "Harvester"
+ real_name = "Harvester"
+ construct_type = "harvester"
+ desc = "A tendril-laden construct piloted by a chained mind."
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "harvester"
+ icon_living = "harvester"
+ maxHealth = 150
+ health = 150
+ melee_damage_lower = 20
+ melee_damage_upper = 25
+ attack_sharp = 1
+ attacktext = list("violently stabbed")
+ friendly = list("caresses")
+ movement_cooldown = 0
+
+ // environment_smash = 1 // Whatever this gets renamed to, Harvesters need to break things
+
+ attack_sound = 'sound/weapons/pierce.ogg'
+
+ armor = list(
+ "melee" = 10,
+ "bullet" = 20,
+ "laser" = 20,
+ "energy" = 20,
+ "bomb" = 20,
+ "bio" = 100,
+ "rad" = 100)
+
+ construct_spells = list(
+ /spell/aoe_turf/knock/harvester,
+ /spell/targeted/construct_advanced/inversion_beam,
+ /spell/targeted/construct_advanced/agonizing_sphere,
+ /spell/rune_write
+ )
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm
new file mode 100644
index 0000000000..31dfa4d34a
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/juggernaut.dm
@@ -0,0 +1,143 @@
+////////////////////////////
+// Juggernaut
+////////////////////////////
+
+/mob/living/simple_mob/construct/juggernaut
+ name = "Juggernaut"
+ real_name = "Juggernaut"
+ construct_type = "juggernaut"
+ desc = "A possessed suit of armour driven by the will of the restless dead"
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "behemoth"
+ icon_living = "behemoth"
+ maxHealth = 300
+ health = 300
+ response_harm = "harmlessly punches"
+ harm_intent_damage = 0
+ melee_damage_lower = 30
+ melee_damage_upper = 40
+ attack_armor_pen = 60 //Being punched by a living, floating statue.
+ attacktext = list("smashed their armoured gauntlet into")
+ friendly = list("pats")
+ mob_size = MOB_HUGE
+
+
+ movement_cooldown = 6 //Not super fast, but it might catch up to someone in armor who got punched once or twice.
+
+// environment_smash = 2 // Whatever this gets renamed to, Juggernauts need to break things
+
+
+ attack_sound = 'sound/weapons/heavysmash.ogg'
+ status_flags = 0
+ resistance = 10
+ construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser,
+ /spell/targeted/fortify,
+ /spell/targeted/construct_advanced/slam
+ )
+
+ armor = list(
+ "melee" = 70,
+ "bullet" = 30,
+ "laser" = 30,
+ "energy" = 30,
+ "bomb" = 10,
+ "bio" = 100,
+ "rad" = 100)
+
+/mob/living/simple_mob/construct/juggernaut/Life()
+ weakened = 0
+ ..()
+
+/mob/living/simple_mob/construct/juggernaut/bullet_act(var/obj/item/projectile/P)
+ var/reflectchance = 80 - round(P.damage/3)
+ if(prob(reflectchance))
+ var/damage_mod = rand(2,4)
+ var/projectile_dam_type = P.damage_type
+ var/incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3)))
+ var/armorcheck = run_armor_check(null, P.check_armour)
+ var/soakedcheck = get_armor_soak(null, P.check_armour)
+ if(!(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)))
+ visible_message("The [P.name] bounces off of [src]'s shell!", \
+ "The [P.name] bounces off of [src]'s shell!")
+ new /obj/item/weapon/material/shard/shrapnel(src.loc)
+ if(!(P.damage_type == BRUTE || P.damage_type == BURN))
+ projectile_dam_type = BRUTE
+ incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to brute for physical projectiles, though severely decreased.
+ apply_damage(incoming_damage, projectile_dam_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
+ return -1 //Doesn't reflect non-beams or non-energy projectiles. They just smack and drop with little to no effect.
+ else
+ visible_message("The [P.name] gets reflected by [src]'s shell!", \
+ "The [P.name] gets reflected by [src]'s shell!")
+ damage_mod = rand(3,5)
+ incoming_damage = (round(P.damage / damage_mod) - (round((P.damage / damage_mod) * 0.3)))
+ if(!(P.damage_type == BRUTE || P.damage_type == BURN))
+ projectile_dam_type = BURN
+ incoming_damage = round(incoming_damage / 4) //Damage from strange sources is converted to burn for energy-type projectiles, though severely decreased.
+ apply_damage(incoming_damage, P.damage_type, null, armorcheck, soakedcheck, is_sharp(P), has_edge(P), P)
+
+ // Find a turf near or on the original location to bounce to
+ if(P.starting)
+ var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
+ var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
+ var/turf/curloc = get_turf(src)
+
+ // redirect the projectile
+ P.redirect(new_x, new_y, curloc, src)
+ P.reflected = 1
+
+ return -1 // complete projectile permutation
+
+ return (..(P))
+
+/*
+ * The Behemoth. Admin-allowance only, still try to keep it in some guideline of 'Balanced', even if it means Security has to be fully geared to be so.
+ */
+
+/mob/living/simple_mob/construct/juggernaut/behemoth
+ name = "Behemoth"
+ real_name = "Behemoth"
+ desc = "The pinnacle of occult technology, Behemoths are nothing shy of both an Immovable Object, and Unstoppable Force."
+ maxHealth = 750
+ health = 750
+ speak_emote = list("rumbles")
+ melee_damage_lower = 50
+ melee_damage_upper = 50
+ attacktext = list("brutally crushed")
+ friendly = list("pokes") //Anything nice the Behemoth would do would still Kill the Human. Leave it at poke.
+ attack_sound = 'sound/weapons/heavysmash.ogg'
+ resistance = 10
+ icon_scale = 2
+ var/energy = 0
+ var/max_energy = 1000
+ armor = list(
+ "melee" = 60,
+ "bullet" = 60,
+ "laser" = 60,
+ "energy" = 30,
+ "bomb" = 10,
+ "bio" = 100,
+ "rad" = 100)
+ construct_spells = list(/spell/aoe_turf/conjure/forcewall/lesser,
+ /spell/targeted/fortify,
+ /spell/targeted/construct_advanced/slam
+ )
+
+/mob/living/simple_mob/construct/juggernaut/behemoth/bullet_act(var/obj/item/projectile/P)
+ var/reflectchance = 80 - round(P.damage/3)
+ if(prob(reflectchance))
+ visible_message("The [P.name] gets reflected by [src]'s shell!", \
+ "The [P.name] gets reflected by [src]'s shell!")
+
+ // Find a turf near or on the original location to bounce to
+ if(P.starting)
+ var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
+ var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
+ var/turf/curloc = get_turf(src)
+
+ // redirect the projectile
+ P.redirect(new_x, new_y, curloc, src)
+ P.reflected = 1
+
+ return -1 // complete projectile permutation
+
+ return (..(P))
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm
new file mode 100644
index 0000000000..1a56abcdcd
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/shade.dm
@@ -0,0 +1,48 @@
+////////////////////////////
+// Shade
+////////////////////////////
+
+/mob/living/simple_mob/construct/shade
+ name = "Shade"
+ real_name = "Shade"
+ desc = "A bound spirit"
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "shade"
+ icon_living = "shade"
+ icon_dead = "shade_dead"
+
+ response_help = "puts their hand through"
+ response_disarm = "flails at"
+ response_harm = "punches"
+
+ melee_damage_lower = 5
+ melee_damage_upper = 15
+ attack_armor_pen = 100 //It's a ghost/horror from beyond, I ain't gotta explain 100 AP
+ attacktext = list("drained the life from")
+
+ minbodytemp = 0
+ maxbodytemp = 4000
+ min_oxy = 0
+ max_co2 = 0
+ max_tox = 0
+
+ universal_speak = 1
+
+ loot_list = list(/obj/item/weapon/ectoplasm = 100)
+
+/mob/living/simple_mob/construct/shade/attackby(var/obj/item/O as obj, var/mob/user as mob)
+ if(istype(O, /obj/item/device/soulstone))
+ var/obj/item/device/soulstone/S = O;
+ S.transfer_soul("SHADE", src, user)
+ return
+ ..()
+
+/mob/living/simple_mob/construct/shade/death()
+ ..()
+ for(var/mob/M in viewers(src, null))
+ if((M.client && !( M.blinded )))
+ M.show_message("[src] lets out a contented sigh as their form unwinds.")
+
+ ghostize()
+ qdel(src)
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm
new file mode 100644
index 0000000000..13580bc845
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/constructs/wraith.dm
@@ -0,0 +1,33 @@
+////////////////////////////
+// Wraith
+////////////////////////////
+
+/mob/living/simple_mob/construct/wraith
+ name = "Wraith"
+ real_name = "Wraith"
+ construct_type = "wraith"
+ desc = "A wicked bladed shell contraption piloted by a bound spirit."
+ icon = 'icons/mob/mob.dmi'
+ icon_state = "floating"
+ icon_living = "floating"
+ maxHealth = 200
+ health = 200
+ melee_damage_lower = 25
+ melee_damage_upper = 30
+ attack_armor_pen = 15
+ attack_sharp = 1
+ attack_edge = 1
+ attacktext = list("slashed")
+ friendly = list("pinches")
+ movement_cooldown = 0
+ attack_sound = 'sound/weapons/rapidslice.ogg'
+ construct_spells = list(/spell/targeted/ethereal_jaunt/shift,
+ /spell/targeted/ambush_mode
+ )
+
+// environment_smash = 1 // Whatever this gets renamed to, Wraiths need to break things
+
+/mob/living/simple_mob/construct/wraith/apply_melee_effects(var/atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ L.add_modifier(/datum/modifier/deep_wounds, 30 SECONDS)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm
new file mode 100644
index 0000000000..3cc9df4fa3
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/creature.dm
@@ -0,0 +1,68 @@
+/mob/living/simple_mob/creature
+ name = "creature"
+ desc = "A sanity-destroying otherthing."
+ icon = 'icons/mob/critter.dmi'
+ icon_state = "otherthing"
+ icon_living = "otherthing"
+ icon_dead = "otherthing-dead"
+
+ mob_class = MOB_CLASS_ABERRATION
+
+ faction = "creature"
+
+ maxHealth = 40
+ health = 40
+
+ harm_intent_damage = 8
+
+ melee_damage_lower = 8
+ melee_damage_upper = 15
+ attack_armor_pen = 5 //It's a horror from beyond, I ain't gotta explain 5 AP
+ attack_sharp = 1
+ attack_edge = 1
+
+ attacktext = list("chomped")
+ attack_sound = 'sound/weapons/bite.ogg'
+
+ speak_emote = list("gibbers")
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+
+// Strong Variant
+/mob/living/simple_mob/creature/strong
+ maxHealth = 160
+ health = 160
+
+ harm_intent_damage = 5
+ melee_damage_lower = 13
+ melee_damage_upper = 25
+
+// Cult Variant
+/mob/living/simple_mob/creature/cult
+ mob_class = MOB_CLASS_DEMONIC
+
+ faction = "cult"
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+ supernatural = TRUE
+
+/mob/living/simple_mob/creature/cult/cultify()
+ return
+
+// Strong Cult Variant
+/mob/living/simple_mob/creature/cult/strong
+ maxHealth = 160
+ health = 160
+
+ harm_intent_damage = 5
+ melee_damage_lower = 13
+ melee_damage_upper = 25
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm
new file mode 100644
index 0000000000..1c4ac8876c
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/occult/faithless.dm
@@ -0,0 +1,77 @@
+/mob/living/simple_mob/faithless
+ name = "Faithless"
+ desc = "The Wish Granter's faith in humanity, incarnate"
+ icon_state = "faithless"
+ icon_living = "faithless"
+ icon_dead = "faithless_dead"
+
+ faction = "faithless"
+
+ mob_class = MOB_CLASS_DEMONIC
+
+ maxHealth = 50
+ health = 50
+
+ response_help = "passes through"
+ response_disarm = "shoves"
+ response_harm = "hits"
+
+ harm_intent_damage = 10
+
+ melee_damage_lower = 10
+ melee_damage_upper = 18
+ attack_armor_pen = 5 //It's a horror from beyond, I ain't gotta explain 5 AP
+
+ attacktext = list("gripped")
+ attack_sound = 'sound/hallucinations/growl1.ogg'
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+
+
+ taser_kill = FALSE
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ minbodytemp = 0
+
+/mob/living/simple_mob/faithless/Process_Spacemove(var/check_drift = 0)
+ return 1
+
+/mob/living/simple_mob/faithless/apply_melee_effects(var/atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(prob(12))
+ L.Weaken(3)
+ L.visible_message("\the [src] knocks down \the [L]!")
+
+// Strong Variant
+/mob/living/simple_mob/faithless/strong
+ maxHealth = 100
+ health = 100
+
+ harm_intent_damage = 5
+ melee_damage_lower = 13
+ melee_damage_upper = 28
+
+// Cult Variant
+/mob/living/simple_mob/faithless/cult
+ faction = "cult"
+ supernatural = TRUE
+
+/mob/living/simple_mob/faithless/cult/cultify()
+ return
+
+// Strong Cult Variant
+/mob/living/simple_mob/faithless/cult/strong
+ maxHealth = 100
+ health = 100
+
+ harm_intent_damage = 5
+ melee_damage_lower = 13
+ melee_damage_upper = 28
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm b/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm
new file mode 100644
index 0000000000..79e5c4d349
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/plant/tomato.dm
@@ -0,0 +1,27 @@
+/mob/living/simple_mob/tomato
+ name = "tomato"
+ desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!"
+ tt_desc = "X Solanum abominable"
+ icon_state = "tomato"
+ icon_living = "tomato"
+ icon_dead = "tomato_dead"
+
+ mob_class = MOB_CLASS_PLANT
+
+ faction = "plants"
+ maxHealth = 15
+ health = 15
+ poison_resist = 1.0
+
+ response_help = "prods"
+ response_disarm = "pushes aside"
+ response_harm = "smacks"
+
+ harm_intent_damage = 5
+ melee_damage_upper = 15
+ melee_damage_lower = 10
+ attacktext = list("mauled")
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/tomatomeat
diff --git a/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm b/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm
new file mode 100644
index 0000000000..30c891088c
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/plant/tree.dm
@@ -0,0 +1,43 @@
+/mob/living/simple_mob/animal/space/tree
+ name = "pine tree"
+ desc = "A pissed off tree-like alien. It seems annoyed with the festivities..."
+ tt_desc = "X Festivus tyrannus"
+ icon = 'icons/obj/flora/pinetrees.dmi'
+ icon_state = "pine_1"
+ icon_living = "pine_1"
+ icon_dead = "pine_1"
+ icon_gib = "pine_1"
+
+ mob_class = MOB_CLASS_PLANT
+
+ faction = "plants"
+ maxHealth = 250
+ health = 250
+ poison_resist = 1.0
+
+ response_help = "brushes"
+ response_disarm = "pushes"
+ response_harm = "hits"
+
+ harm_intent_damage = 5
+ melee_damage_lower = 8
+ melee_damage_upper = 12
+ attacktext = list("bitten")
+ attack_sound = 'sound/weapons/bite.ogg'
+
+ meat_type = /obj/item/weapon/reagent_containers/food/snacks/xenomeat
+
+ pixel_x = -16
+
+/mob/living/simple_mob/animal/space/tree/apply_melee_effects(var/atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(prob(15))
+ L.Weaken(3)
+ L.visible_message(span("danger", "\The [src] knocks down \the [L]!"))
+
+/mob/living/simple_mob/animal/space/tree/death()
+ ..(null,"is hacked into pieces!")
+ playsound(loc, 'sound/effects/woodcutting.ogg', 100, 1)
+ new /obj/item/stack/material/wood(loc)
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/feral/feral.dm b/code/modules/mob/living/simple_mob/subtypes/slime/feral/feral.dm
new file mode 100644
index 0000000000..8986cbcbe3
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/feral/feral.dm
@@ -0,0 +1,94 @@
+// These slimes lack certain xenobio features but get more combat-oriented goodies. Generally these are more oriented towards Explorers than Xenobiologists.
+
+/mob/living/simple_mob/slime/feral
+ name = "feral slime"
+ desc = "The result of slimes escaping containment from some xenobiology lab. \
+ Having the means to successfully escape their lab, as well as having to survive on a harsh, cold world has made these \
+ creatures rival the ferocity of other apex predators in this region of Sif. It is considered to be a very invasive species."
+ description_info = "Note that processing this large slime will give six cores."
+
+ cores = 6 // Xenobio will love getting their hands on these.
+
+ icon_state = "slime adult"
+ icon_living = "slime adult"
+ icon_dead = "slime adult dead"
+ glow_range = 5
+ glow_intensity = 4
+ icon_scale = 2 // Twice as big as the xenobio variant.
+ pixel_y = -10 // Since the base sprite isn't centered properly, the pixel auto-adjustment needs some help.
+ default_pixel_y = -10 // To prevent resetting above var.
+
+ maxHealth = 300
+ movement_cooldown = 10
+ melee_attack_delay = 0.5 SECONDS
+
+ ai_holder_type = /datum/ai_holder/simple_mob/ranged/pointblank
+
+
+// Slimebatoning/xenotasing it just makes it mad at you (which can be good if you're heavily armored and your friends aren't).
+/mob/living/simple_mob/slime/feral/slimebatoned(mob/living/user, amount)
+ taunt(user, TRUE)
+
+
+// ***********
+// *Dark Blue*
+// ***********
+
+// Dark Blue feral slimes can fire a strong icicle projectile every few seconds. The icicle hits hard and has some armor penetration.
+// They also have a similar aura as their xenobio counterparts, which inflicts cold damage. It also chills non-resistant mobs.
+
+/mob/living/simple_mob/slime/feral/dark_blue
+ name = "dark blue feral slime"
+ color = "#2398FF"
+ glow_toggle = TRUE
+ slime_color = "dark blue"
+ coretype = /obj/item/slime_extract/dark_blue
+ cold_resist = 1 // Complete immunity.
+ minbodytemp = 0
+ cold_damage_per_tick = 0
+
+ projectiletype = /obj/item/projectile/icicle
+ base_attack_cooldown = 2 SECONDS
+ ranged_attack_delay = 1 SECOND
+
+ player_msg = "You can fire an icicle projectile every two seconds. It hits hard, and armor has a hard time resisting it.
\
+ You are also immune to the cold, and you cause enemies around you to suffer periodic harm from the cold, if unprotected.
\
+ Unprotected enemies are also Chilled, making them slower and less evasive, and disabling effects last longer."
+
+/obj/item/projectile/icicle
+ name = "icicle"
+ icon_state = "ice_2"
+ damage = 40
+ damage_type = BRUTE
+ check_armour = "melee"
+ armor_penetration = 30
+ step_delay = 2 // Make it a bit easier to dodge since its not a bullet.
+ icon_scale = 2 // It hits like a truck.
+ sharp = TRUE
+
+/obj/item/projectile/icicle/on_impact(atom/A)
+ playsound(get_turf(A), "shatter", 70, 1)
+ return ..()
+
+/obj/item/projectile/icicle/get_structure_damage()
+ return damage / 2 // They're really deadly against mobs, but less effective against solid things.
+
+/mob/living/simple_mob/slime/feral/dark_blue/handle_special()
+ if(stat != DEAD)
+ cold_aura()
+ ..()
+
+/mob/living/simple_mob/slime/feral/dark_blue/proc/cold_aura()
+ for(var/mob/living/L in view(3, src))
+ if(L == src)
+ continue
+ chill(L)
+
+/mob/living/simple_mob/slime/feral/dark_blue/proc/chill(mob/living/L)
+ L.inflict_cold_damage(10)
+ if(L.get_cold_protection() < 1)
+ L.add_modifier(/datum/modifier/chilled, 5 SECONDS, src)
+
+ if(L.has_AI()) // Other AIs should react to hostile auras.
+ L.ai_holder.react_to_attack(src)
+
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
new file mode 100644
index 0000000000..dd756d267f
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/slime.dm
@@ -0,0 +1,216 @@
+// The top-level slime defines. Xenobio slimes and feral slimes will inherit from this.
+
+/mob/living/simple_mob/slime
+ name = "slime"
+ desc = "It's a slime."
+ tt_desc = "A Macrolimbus vulgaris"
+ icon = 'icons/mob/slime2.dmi'
+ icon_state = "slime baby"
+ icon_living = "slime baby"
+ icon_dead = "slime baby dead"
+ var/shiny = FALSE // If true, will add a 'shiny' overlay.
+ var/icon_state_override = null // Used for special slime appearances like the rainbow slime.
+ color = "#CACACA"
+ glow_range = 3
+ glow_intensity = 2
+ gender = NEUTER
+
+ faction = "slime" // Note that slimes are hostile to other slimes of different color regardless of faction (unless Unified).
+ maxHealth = 150
+ movement_cooldown = 0
+ pass_flags = PASSTABLE
+ makes_dirt = FALSE // Goop
+ mob_class = MOB_CLASS_SLIME
+
+ response_help = "pets"
+
+ // Atmos stuff.
+ minbodytemp = T0C-30
+ heat_damage_per_tick = 0
+ cold_damage_per_tick = 40
+
+ min_oxy = 0
+ max_oxy = 0
+ min_tox = 0
+ max_tox = 0
+ min_co2 = 0
+ max_co2 = 0
+ min_n2 = 0
+ max_n2 = 0
+ unsuitable_atoms_damage = 0
+ shock_resist = 0.5 // Slimes are resistant to electricity, and it actually charges them.
+ taser_kill = FALSE
+ water_resist = 0 // Slimes are very weak to water.
+
+ melee_damage_lower = 10
+ melee_damage_upper = 15
+ base_attack_cooldown = 10 // One attack a second.
+ attack_sound = 'sound/weapons/bite.ogg'
+ attacktext = list("glomped")
+ speak_emote = list("chirps")
+ friendly = list("pokes")
+
+ ai_holder_type = /datum/ai_holder/simple_mob/melee
+ say_list_type = /datum/say_list/slime
+
+ var/cores = 1 // How many cores you get when placed in a Processor.
+ var/obj/item/clothing/head/hat = null // The hat the slime may be wearing.
+ var/slime_color = "grey" // Used for updating the name and for slime color-ism.
+ var/unity = FALSE // If true, slimes will consider other colors as their own. Other slimes will see this slime as the same color as well.
+ var/coretype = /obj/item/slime_extract/grey // What core is inside the slime, and what you get from the processor.
+ var/reagent_injected = null // Some slimes inject reagents on attack. This tells the game what reagent to use.
+ var/injection_amount = 5 // This determines how much.
+ var/mood = ":3" // Icon to use to display 'mood', as an overlay.
+
+ can_enter_vent_with = list(/obj/item/clothing/head)
+
+/datum/say_list/slime
+ speak = list("Blorp...", "Blop...")
+ emote_see = list("bounces", "jiggles", "sways")
+ emote_hear = list("squishes")
+
+/mob/living/simple_mob/slime/initialize()
+ verbs += /mob/living/proc/ventcrawl
+ update_mood()
+ glow_color = color
+ handle_light()
+ update_icon()
+ return ..()
+
+/mob/living/simple_mob/slime/Destroy()
+ if(hat)
+ drop_hat()
+ return ..()
+
+/mob/living/simple_mob/slime/death()
+ // Make dead slimes stop glowing.
+ glow_toggle = FALSE
+ handle_light()
+ ..()
+
+/mob/living/simple_mob/slime/revive()
+ // Make revived slimes resume glowing.
+ glow_toggle = initial(glow_toggle)
+ handle_light()
+ ..()
+
+/mob/living/simple_mob/slime/update_icon()
+ ..() // Do the regular stuff first.
+
+ if(stat != DEAD)
+ // General slime shine.
+ var/image/I = image(icon, src, "slime light")
+ I.appearance_flags = RESET_COLOR
+ add_overlay(I)
+
+ // 'Shiny' overlay, for gemstone-slimes.
+ if(shiny)
+ I = image(icon, src, "slime shiny")
+ I.appearance_flags = RESET_COLOR
+ add_overlay(I)
+
+ // Mood overlay.
+ I = image(icon, src, "aslime-[mood]")
+ I.appearance_flags = RESET_COLOR
+ add_overlay(I)
+
+ // Hat simulator.
+ if(hat)
+ var/hat_state = hat.item_state ? hat.item_state : hat.icon_state
+ var/image/I = image('icons/mob/head.dmi', src, hat_state)
+ I.pixel_y = -7 // Slimes are small.
+ I.appearance_flags = RESET_COLOR
+ add_overlay(I)
+
+// Controls the 'mood' overlay. Overrided in subtypes for specific behaviour.
+/mob/living/simple_mob/slime/proc/update_mood()
+ mood = "feral" // This is to avoid another override in the /feral subtype.
+
+/mob/living/simple_mob/slime/proc/unify()
+ unity = TRUE
+
+// Interface override, because slimes are supposed to attack other slimes of different color regardless of faction
+// (unless Unified, of course).
+/mob/living/simple_mob/slime/IIsAlly(mob/living/L)
+ . = ..()
+ if(.) // Need to do an additional check if its another slime.
+ if(istype(L, /mob/living/simple_mob/slime))
+ var/mob/living/simple_mob/slime/S = L
+ if(S.slime_color != src.slime_color)
+ if(S.unity || src.unity)
+ return TRUE
+ return FALSE
+ // The other stuff was already checked in parent proc, and the . variable will implicitly return the correct value.
+
+// Slimes regenerate passively.
+/mob/living/simple_mob/slime/handle_special()
+ adjustOxyLoss(-1)
+ adjustToxLoss(-1)
+ adjustFireLoss(-1)
+ adjustCloneLoss(-1)
+ adjustBruteLoss(-1)
+
+// Clicked on by empty hand.
+/mob/living/simple_mob/slime/attack_hand(mob/living/L)
+ if(L.a_intent == I_GRAB && hat)
+ remove_hat(L)
+ else
+ ..()
+
+// Clicked on while holding an object.
+/mob/living/simple_mob/slime/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/clothing/head)) // Handle hat simulator.
+ give_hat(I, user)
+ return
+
+ // Otherwise they're probably fighting the slime.
+ if(prob(25))
+ visible_message(span("warning", "\The [user]'s [I] passes right through \the [src]!"))
+ user.setClickCooldown(user.get_attack_speed(I))
+ return
+ ..()
+
+// Called when hit with an active slimebaton (or xeno taser).
+// Subtypes react differently.
+/mob/living/simple_mob/slime/proc/slimebatoned(mob/living/user, amount)
+ return
+
+// Hat simulator
+/mob/living/simple_mob/slime/proc/give_hat(var/obj/item/clothing/head/new_hat, var/mob/living/user)
+ if(!istype(new_hat))
+ to_chat(user, span("warning", "\The [new_hat] isn't a hat."))
+ return
+ if(hat)
+ to_chat(user, span("warning", "\The [src] is already wearing \a [hat]."))
+ return
+ else
+ user.drop_item(new_hat)
+ hat = new_hat
+ new_hat.forceMove(src)
+ to_chat(user, span("notice", "You place \a [new_hat] on \the [src]. How adorable!"))
+ update_icon()
+ return
+
+/mob/living/simple_mob/slime/proc/remove_hat(var/mob/living/user)
+ if(!hat)
+ to_chat(user, "\The [src] doesn't have a hat to remove.")
+ else
+ hat.forceMove(get_turf(src))
+ user.put_in_hands(hat)
+ to_chat(user, "You take away \the [src]'s [hat.name]. How mean.")
+ hat = null
+ update_icon()
+
+/mob/living/simple_mob/slime/proc/drop_hat()
+ if(!hat)
+ return
+ hat.forceMove(get_turf(src))
+ hat = null
+ update_icon()
+
+/mob/living/simple_mob/slime/speech_bubble_appearance()
+ return "slime"
+
+/mob/living/simple_mob/slime/proc/squish()
+ playsound(src.loc, 'sound/effects/slime_squish.ogg', 50, 0)
+ visible_message("\The [src] squishes!")
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/combat.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/combat.dm
new file mode 100644
index 0000000000..2cda9bfc7e
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/combat.dm
@@ -0,0 +1,76 @@
+// Code for slimes attacking other things.
+
+// Slime attacks change based on intent.
+/mob/living/simple_mob/slime/xenobio/apply_attack(mob/living/L, damage_to_do)
+ if(istype(L))
+ switch(a_intent)
+ if(I_HELP) // This shouldn't happen but just in case.
+ return FALSE
+
+ if(I_DISARM)
+ var/stun_power = between(0, power_charge + rand(0, 3), 10)
+
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ stun_power *= max(H.species.siemens_coefficient, 0)
+
+ if(prob(stun_power * 10)) // Try an electric shock.
+ power_charge = max(0, power_charge - 3)
+ L.visible_message(
+ span("danger", "\The [src] has shocked \the [L]!"),
+ span("danger", "\The [src] has shocked you!")
+ )
+ playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
+ L.Weaken(4)
+ L.Stun(4)
+ do_attack_animation(L)
+ if(L.buckled)
+ L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents slimes from jumping on you.
+ L.stuttering = max(L.stuttering, stun_power)
+
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, L)
+ s.start()
+
+ if(prob(stun_power * 10) && stun_power >= 8)
+ L.adjustFireLoss(power_charge * rand(1, 2))
+ return FALSE
+
+ else if(prob(20)) // Try to do a regular disarm attack.
+ L.visible_message(
+ span("danger", "\The [src] has pounced at \the [L]!"),
+ span("danger", "\The [src] has pounced at you!")
+ )
+ playsound(src, 'sound/weapons/thudswoosh.ogg', 75, 1)
+ L.Weaken(2)
+ do_attack_animation(L)
+ if(L.buckled)
+ L.buckled.unbuckle_mob() // To prevent an exploit where being buckled prevents slimes from jumping on you.
+ return FALSE
+
+ else // Failed to do anything this time.
+ L.visible_message(
+ span("warning", "\The [src] has tried to pounce at \the [L]!"),
+ span("warning", "\The [src] has tried to pounce at you!")
+ )
+ playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1)
+ do_attack_animation(L)
+ return FALSE
+
+ if(I_GRAB)
+ start_consuming(L)
+ return FALSE
+
+ if(I_HURT)
+ return ..() // Regular stuff.
+ else
+ return ..() // Do the regular stuff if we're hitting a window/mech/etc.
+
+/mob/living/simple_mob/slime/xenobio/apply_melee_effects(mob/living/L)
+ if(istype(L) && a_intent == I_HURT)
+ // Pump them full of toxins, if able.
+ if(L.reagents && L.can_inject() && reagent_injected)
+ L.reagents.add_reagent(reagent_injected, injection_amount)
+
+ // Feed off of their flesh, if able.
+ consume(L, 5)
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/consumption.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/consumption.dm
new file mode 100644
index 0000000000..b997dde35d
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/consumption.dm
@@ -0,0 +1,169 @@
+// Handles hunger, starvation, growth, and eatting humans.
+
+// Might be best to make this a /mob/living proc and override.
+/mob/living/simple_mob/slime/xenobio/proc/adjust_nutrition(input)
+ nutrition = between(0, nutrition + input, get_max_nutrition())
+
+ if(input > 0)
+ // Gain around one level per 50 nutrition.
+ if(prob(input * 2))
+ power_charge = min(power_charge++, 10)
+ if(power_charge == 10)
+ adjustToxLoss(-10)
+
+ // Heal 1 point of damage per 5 nutrition coming in.
+ adjustBruteLoss(-input * 0.2)
+ adjustFireLoss(-input * 0.2)
+ adjustToxLoss(-input * 0.2)
+ adjustOxyLoss(-input * 0.2)
+ adjustCloneLoss(-input * 0.2)
+
+
+/mob/living/simple_mob/slime/xenobio/proc/get_max_nutrition() // Can't go above it
+ return is_adult ? 1200 : 1000
+
+/mob/living/simple_mob/slime/xenobio/proc/get_grow_nutrition() // Above it we grow, below it we can eat
+ return is_adult ? 1000 : 800
+
+/mob/living/simple_mob/slime/xenobio/proc/get_hunger_nutrition() // Below it we will always eat
+ return is_adult ? 600 : 500
+
+/mob/living/simple_mob/slime/xenobio/proc/get_starve_nutrition() // Below it we will eat before everything else
+ return is_adult ? 300 : 200
+
+// Called by Life().
+/mob/living/simple_mob/slime/xenobio/proc/handle_nutrition()
+ if(harmless)
+ return
+
+ if(prob(15))
+ adjust_nutrition(is_adult ? -2 : -1) // Adult slimes get hungry faster.
+
+ if(nutrition <= get_starve_nutrition())
+ handle_starvation()
+
+ else if(nutrition >= get_grow_nutrition() && amount_grown < 10)
+ adjust_nutrition(-20)
+ amount_grown = between(0, amount_grown + 1, 10)
+
+// Called if above proc happens while below a nutrition threshold.
+/mob/living/simple_mob/slime/xenobio/proc/handle_starvation()
+ if(nutrition < get_starve_nutrition() && !client) // if a slime is starving, it starts losing its friends
+ if(friends.len && prob(1))
+ var/mob/nofriend = pick(friends)
+ if(nofriend)
+ friends -= nofriend
+ say("[nofriend]... food now...")
+
+ if(nutrition <= 0)
+ adjustToxLoss(rand(1,3))
+ if(client && prob(5))
+ to_chat(src, span("danger", "You are starving!"))
+
+
+/mob/living/simple_mob/slime/xenobio/proc/handle_consumption()
+ if(victim && !stat)
+ if(istype(victim) && consume(victim, 20))
+ if(prob(25))
+ to_chat(src, span("notice", "You continue absorbing \the [victim]."))
+
+ else
+ var/list/feedback = list(
+ "This subject is incompatable",
+ "This subject does not have a life energy",
+ "This subject is empty",
+ "I am not satisfied",
+ "I can not feed from this subject",
+ "I do not feel nourished",
+ "This subject is not food"
+ )
+ to_chat(src, span("warning", "[pick(feedback)]..."))
+ stop_consumption()
+
+ if(victim)
+ victim.updatehealth()
+
+ else
+ stop_consumption()
+
+/mob/living/simple_mob/slime/xenobio/proc/start_consuming(mob/living/L)
+ if(!can_consume(L))
+ return
+ if(!Adjacent(L))
+ return
+
+ step_towards(src, L) // Get on top of them to feed.
+ if(loc != L.loc)
+ return
+
+ if(L.buckle_mob(src, forced = TRUE))
+ victim = L
+ update_icon()
+ set_AI_busy(TRUE) // Don't want the AI to interfere with eatting.
+ victim.visible_message(
+ span("danger", "\The [src] latches onto \the [victim]!"),
+ span("critical", "\The [src] latches onto you!")
+ )
+
+/mob/living/simple_mob/slime/xenobio/proc/stop_consumption(mob/living/L)
+ if(!victim)
+ return
+ victim.unbuckle_mob()
+ victim.visible_message(
+ span("notice", "\The [src] slides off of [victim]!"),
+ span("notice", "\The [src] slides off of you!")
+ )
+ victim = null
+ update_icon()
+ set_AI_busy(FALSE) // Resume normal operations.
+
+/mob/living/simple_mob/slime/xenobio/proc/can_consume(mob/living/L)
+ if(!L || !istype(L))
+ to_chat(src, "This subject is incomparable...")
+ return FALSE
+ if(harmless)
+ to_chat(src, "I am pacified... I cannot eat...")
+ return FALSE
+ if(L.mob_class & MOB_CLASS_SLIME)
+ to_chat(src, "I cannot feed on other slimes...")
+ return FALSE
+ if(L.isSynthetic())
+ to_chat(src, "This subject is not biological...")
+ return FALSE
+ if(L.getarmor(null, "bio") >= 75)
+ to_chat(src, "I cannot reach this subject's biological matter...")
+ return FALSE
+ if(!Adjacent(L))
+ to_chat(src, "This subject is too far away...")
+ return FALSE
+ if(L.getCloneLoss() >= L.getMaxHealth() * 1.5)
+ to_chat(src, "This subject does not have an edible life energy...")
+ return FALSE
+ if(L.has_buckled_mobs())
+ for(var/A in L.buckled_mobs)
+ if(istype(A, /mob/living/simple_mob/slime/xenobio))
+ if(A != src)
+ to_chat(src, "\The [A] is already feeding on this subject...")
+ return FALSE
+ return TRUE
+
+// This does the actual damage, as well as give nutrition and heals.
+// Assuming no bio armor, calling consume(10) will result in;
+// 6 clone damage to victim
+// 4 tox damage to victim.
+// 25 nutrition for the slime.
+// 2 points of damage healed on the slime (as a result of the nutrition).
+// 50% of giving +1 charge to the slime (same as above).
+/mob/living/simple_mob/slime/xenobio/proc/consume(mob/living/victim, amount)
+ if(can_consume(victim))
+ var/armor_modifier = abs((victim.getarmor(null, "bio") / 100) - 1)
+ var/damage_done = amount * armor_modifier
+ if(damage_done > 0)
+ victim.adjustCloneLoss(damage_done * 0.6)
+ victim.adjustToxLoss(damage_done * 0.4)
+ adjust_nutrition(damage_done * 5)
+ Beam(victim, icon_state = "slime_consume", time = 8)
+ to_chat(src, span("notice", "You absorb some biomaterial from \the [victim]."))
+ to_chat(victim, span("danger", "\The [src] consumes some of your flesh!"))
+ return TRUE
+ return FALSE
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/defense.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/defense.dm
new file mode 100644
index 0000000000..084f4633b2
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/defense.dm
@@ -0,0 +1,54 @@
+// Contains code for slimes getting attacked, beat, touched, etc, and reacting to that.
+
+// Clicked on by empty hand.
+// Handles trying to wrestle a slime off of someone being eatten.
+/mob/living/simple_mob/slime/xenobio/attack_hand(mob/living/L)
+ if(victim) // Are we eating someone?
+ var/fail_odds = 30
+ if(victim == L) // Harder to get the slime off if it's you that is being eatten.
+ fail_odds = 60
+
+ if(prob(fail_odds))
+ visible_message(span("warning", "\The [L] attempts to wrestle \the [name] off!"))
+ playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
+
+ else
+ visible_message(span("warning", "\The [L] manages to wrestle \the [name] off!"))
+ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+
+ if(prob(40))
+ adjust_discipline(1) // Do this here so that it will be justified discipline.
+ stop_consumption()
+ step_away(src, L)
+
+ else
+ ..()
+
+// Handles the actual harming by a melee weapon.
+/mob/living/simple_mob/slime/xenobio/hit_with_weapon(obj/item/I, mob/living/user, effective_force, hit_zone)
+ ..() // Apply damage and etc.
+ if(!stat && effective_force > 0)
+ if(!is_justified_to_discipline()) // Wow, buddy, why am I getting attacked??
+ adjust_discipline(1) // This builds resentment due to being unjustified.
+
+ if(user in friends) // Friend attacking us for no reason.
+ if(prob(25))
+ friends -= user
+ say("[user]... not friend...")
+
+ else // We're actually being bad.
+ var/prob_to_back_down = round(effective_force)
+ if(is_adult)
+ prob_to_back_down /= 2
+ if(prob(prob_to_back_down))
+ adjust_discipline(2) // Justified.
+
+// Shocked grilles don't hurt slimes, and in fact give them charge.
+/mob/living/simple_mob/slime/xenobio/electrocute_act(shock_damage, obj/source, siemens_coeff = 1.0, def_zone = null)
+ power_charge = between(0, power_charge + round(shock_damage / 10), 10)
+ to_chat(src, span("notice", "\The [source] shocks you, and it charges you."))
+
+// Getting slimebatoned/xenotased.
+/mob/living/simple_mob/slime/xenobio/slimebatoned(mob/living/user, amount)
+ Weaken(amount)
+ adjust_discipline(round(amount/2))
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/discipline.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/discipline.dm
new file mode 100644
index 0000000000..5360dab7b3
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/discipline.dm
@@ -0,0 +1,23 @@
+// Handles the subjugation of slimes by force.
+// Mostly a way for things to talk to the AI indirectly.
+
+/mob/living/simple_mob/slime/xenobio/proc/adjust_discipline(amount, silent)
+ if(amount > 0)
+ to_chat(src, span("warning", "You've been disciplined!"))
+ if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ AI.adjust_discipline(amount, silent)
+
+
+/mob/living/simple_mob/slime/xenobio/proc/is_justified_to_discipline()
+ if(victim) // Punish if eating someone that isn't a monkey.
+ if(ishuman(victim))
+ var/mob/living/carbon/human/H = victim
+ if(istype(H.species, /datum/species/monkey))
+ return FALSE
+ return TRUE
+
+ else if(has_AI()) // Now for thoughtcrimes.
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ return AI.is_justified_to_discipline() // Will return true if targeting a non-monkey.
+ return FALSE
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm
new file mode 100644
index 0000000000..03cd14eb3a
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/subtypes.dm
@@ -0,0 +1,784 @@
+// Here are where all the other colors of slime live.
+// They will generally fight each other if not Unified, meaning the xenobiologist has to seperate them.
+
+// Tier 1.
+
+/mob/living/simple_mob/slime/xenobio/purple
+ desc = "This slime is rather toxic to handle, as it is poisonous."
+ color = "#CC23FF"
+ slime_color = "purple"
+ coretype = /obj/item/slime_extract/purple
+ reagent_injected = "toxin"
+
+ description_info = "This slime spreads a toxin when it attacks. A biosuit or other thick armor can protect from the toxic attack."
+ player_msg = "You inject a harmful toxin when attacking."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_purple,
+ /mob/living/simple_mob/slime/xenobio/dark_blue,
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio
+ )
+
+/mob/living/simple_mob/slime/xenobio/orange
+ desc = "This slime is known to be flammable and can ignite enemies."
+ color = "#FFA723"
+ slime_color = "orange"
+ coretype = /obj/item/slime_extract/orange
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ heat_resist = 1
+
+ description_info = "The slime is immune to burning attacks, and attacks from this slime will burn you, and can ignite you. \
+ A firesuit can protect from the burning attacks of this slime."
+ player_msg = "You inflict burning attacks, which causes additional damage, makes the target more flammable, and has a chance to ignite them.
\
+ You are also immune to burning attacks."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_purple,
+ /mob/living/simple_mob/slime/xenobio/yellow,
+ /mob/living/simple_mob/slime/xenobio/red,
+ /mob/living/simple_mob/slime/xenobio
+ )
+
+/mob/living/simple_mob/slime/xenobio/orange/apply_melee_effects(atom/A)
+ ..()
+ if(isliving(A))
+ var/mob/living/L = A
+ L.inflict_heat_damage(is_adult ? 10 : 5)
+ to_chat(src, span("span", "You burn \the [L]."))
+ to_chat(L, span("danger", "You've been burned by \the [src]!"))
+ L.adjust_fire_stacks(1)
+ if(prob(12))
+ L.IgniteMob()
+
+/mob/living/simple_mob/slime/xenobio/blue
+ desc = "This slime produces 'cryotoxin' and uses it against their foes. Very deadly to other slimes."
+ color = "#19FFFF"
+ slime_color = "blue"
+ coretype = /obj/item/slime_extract/blue
+ reagent_injected = "cryotoxin"
+ cold_resist = 0.50 // Not as strong as dark blue, which has immunity.
+
+ description_info = "The slime is resistant to the cold, and attacks from this slime can inject cryotoxin into you. \
+ A biosuit or other thick armor can protect from the injection."
+ player_msg = "You inject cryotoxin on attack, which causes them to get very cold, slowing them down and harming them over time.
\
+ You are also resistant to cold attacks."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_blue,
+ /mob/living/simple_mob/slime/xenobio/silver,
+ /mob/living/simple_mob/slime/xenobio/pink,
+ /mob/living/simple_mob/slime/xenobio
+ )
+
+
+/mob/living/simple_mob/slime/xenobio/metal
+ desc = "This slime is a lot more resilient than the others, due to having a metamorphic metallic and sloped surface."
+ color = "#5F5F5F"
+ slime_color = "metal"
+ shiny = TRUE
+ coretype = /obj/item/slime_extract/metal
+
+ description_info = "This slime is a lot more durable and tough to damage than the others. It also seems to provoke others to attack it over others."
+ player_msg = "You are more resilient and armored than more slimes. Your attacks will also encourage less intelligent enemies to focus on you."
+
+ maxHealth = 250
+ maxHealth_adult = 350
+
+ // The sloped armor.
+ // It's resistant to most weapons (but a spraybottle still kills it rather fast).
+ armor = list(
+ "melee" = 25,
+ "bullet" = 25,
+ "laser" = 25,
+ "energy" = 50,
+ "bomb" = 80,
+ "bio" = 100,
+ "rad" = 100
+ )
+
+ armor_soak = list(
+ "melee" = 5,
+ "bullet" = 5,
+ "laser" = 5,
+ "energy" = 0,
+ "bomb" = 0,
+ "bio" = 0,
+ "rad" = 0
+ )
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/silver,
+ /mob/living/simple_mob/slime/xenobio/yellow,
+ /mob/living/simple_mob/slime/xenobio/gold,
+ /mob/living/simple_mob/slime/xenobio
+ )
+
+/mob/living/simple_mob/slime/xenobio/metal/apply_melee_effects(atom/A)
+ ..()
+ if(isliving(A))
+ var/mob/living/L = A
+ L.taunt(src, TRUE) // We're the party tank now.
+
+// Tier 2
+
+/mob/living/simple_mob/slime/xenobio/yellow
+ desc = "This slime is very conductive, and is known to use electricity as a means of defense moreso than usual for slimes."
+ color = "#FFF423"
+ slime_color = "yellow"
+ coretype = /obj/item/slime_extract/yellow
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ shock_resist = 1
+
+ projectiletype = /obj/item/projectile/beam/lightning/slime
+ projectilesound = 'sound/effects/lightningbolt.ogg'
+ glow_toggle = TRUE
+
+ description_info = "In addition to being immune to electrical shocks, this slime will fire ranged lightning attacks at \
+ enemies if they are at range, inflict shocks upon entities they attack, and generate electricity for their stun \
+ attack faster than usual. Insulative or reflective armor can protect from these attacks."
+ player_msg = "You have a ranged electric attack. You also shock enemies you attack, and your electric stun attack charges passively.
\
+ You are also immune to shocking attacks."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/metal,
+ /mob/living/simple_mob/slime/xenobio/orange
+ )
+
+/mob/living/simple_mob/slime/xenobio/yellow/apply_melee_effects(atom/A)
+ ..()
+ if(isliving(A))
+ var/mob/living/L = A
+ L.inflict_shock_damage(is_adult ? 10 : 5)
+ to_chat(src, span("span", "You shock \the [L]."))
+ to_chat(L, span("danger", "You've been shocked by \the [src]!"))
+
+/mob/living/simple_mob/slime/xenobio/yellow/handle_special()
+ if(stat == CONSCIOUS)
+ if(prob(25))
+ power_charge = between(0, power_charge + 1, 10)
+ ..()
+
+/obj/item/projectile/beam/lightning/slime
+ power = 10
+ fire_sound = 'sound/effects/lightningbolt.ogg'
+
+
+/mob/living/simple_mob/slime/xenobio/dark_purple
+ desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it."
+ color = "#660088"
+ slime_color = "dark purple"
+ coretype = /obj/item/slime_extract/dark_purple
+ reagent_injected = "phoron"
+
+ description_info = "This slime applies phoron to enemies it attacks. A biosuit or other thick armor can protect from the toxic attack. \
+ If hit with a burning attack, it will erupt in flames."
+ player_msg = "You inject phoron into enemies you attack.
\
+ You will erupt into flames if harmed by fire!"
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/purple,
+ /mob/living/simple_mob/slime/xenobio/orange,
+ /mob/living/simple_mob/slime/xenobio/ruby,
+ /mob/living/simple_mob/slime/xenobio/ruby
+ )
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/proc/ignite()
+ visible_message(span("critical", "\The [src] erupts in an inferno!"))
+ for(var/turf/simulated/target_turf in view(2, src))
+ target_turf.assume_gas("phoron", 30, 1500+T0C)
+ spawn(0)
+ target_turf.hotspot_expose(1500+T0C, 400)
+ qdel(src)
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/ex_act(severity)
+ log_and_message_admins("[src] ignited due to a chain reaction with an explosion.")
+ ignite()
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/fire_act(datum/gas_mixture/air, temperature, volume)
+ log_and_message_admins("[src] ignited due to exposure to fire.")
+ ignite()
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/bullet_act(var/obj/item/projectile/P, var/def_zone)
+ if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
+ log_and_message_admins("[src] ignited due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
+ ignite()
+ else
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/dark_purple/attackby(var/obj/item/weapon/W, var/mob/user)
+ if(istype(W) && W.force && W.damtype == BURN)
+ log_and_message_admins("[src] ignited due to being hit with a burning weapon ([W]) by [key_name(user)].")
+ ignite()
+ else
+ ..()
+
+
+
+/mob/living/simple_mob/slime/xenobio/dark_blue
+ desc = "This slime makes other entities near it feel much colder, and is more resilient to the cold. It tends to kill other slimes rather quickly."
+ color = "#2398FF"
+ glow_toggle = TRUE
+ slime_color = "dark blue"
+ coretype = /obj/item/slime_extract/dark_blue
+ melee_damage_lower = 5
+ melee_damage_upper = 5
+ cold_resist = 1
+
+ description_info = "This slime is immune to the cold, however water will still kill it. Its presense, as well as its attacks, will \
+ also cause you additional harm from the cold. A winter coat or other cold-resistant clothing can protect from this."
+ player_msg = "You are immune to the cold, inflict additional cold damage on attack, and cause nearby entities to suffer from coldness."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/purple,
+ /mob/living/simple_mob/slime/xenobio/blue,
+ /mob/living/simple_mob/slime/xenobio/cerulean,
+ /mob/living/simple_mob/slime/xenobio/cerulean
+ )
+
+ minbodytemp = 0
+ cold_damage_per_tick = 0
+
+/mob/living/simple_mob/slime/xenobio/dark_blue/handle_special()
+ if(stat != DEAD)
+ cold_aura()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/dark_blue/proc/cold_aura()
+ for(var/mob/living/L in view(2, src))
+ if(L == src)
+ continue
+ chill(L)
+
+ var/turf/T = get_turf(src)
+ var/datum/gas_mixture/env = T.return_air()
+ if(env)
+ env.add_thermal_energy(-10 * 1000)
+
+/mob/living/simple_mob/slime/xenobio/dark_blue/apply_melee_effects(atom/A)
+ ..()
+ if(isliving(A))
+ var/mob/living/L = A
+ chill(L)
+ to_chat(src, span("span", "You chill \the [L]."))
+ to_chat(L, span("danger", "You've been chilled by \the [src]!"))
+
+
+/mob/living/simple_mob/slime/xenobio/dark_blue/proc/chill(mob/living/L)
+ L.inflict_cold_damage(is_adult ? 10 : 5)
+ if(L.get_cold_protection() < 1 && L.has_AI()) // Harmful auras will make the AI react to its bearer.
+ L.ai_holder.react_to_attack(src)
+
+
+/mob/living/simple_mob/slime/xenobio/silver
+ desc = "This slime is shiny, and can deflect lasers or other energy weapons directed at it."
+ color = "#AAAAAA"
+ slime_color = "silver"
+ coretype = /obj/item/slime_extract/silver
+ shiny = TRUE
+
+ description_info = "Tasers, including the slime version, are ineffective against this slime. The slimebation still works."
+ player_msg = "You automatically reflect lasers, beams, and tasers that hit you."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/metal,
+ /mob/living/simple_mob/slime/xenobio/blue,
+ /mob/living/simple_mob/slime/xenobio/amber,
+ /mob/living/simple_mob/slime/xenobio/amber
+ )
+
+/mob/living/simple_mob/slime/xenobio/silver/bullet_act(var/obj/item/projectile/P, var/def_zone)
+ if(istype(P,/obj/item/projectile/beam) || istype(P, /obj/item/projectile/energy))
+ visible_message(span("danger", "\The [src] reflects \the [P]!"))
+
+ // Find a turf near or on the original location to bounce to
+ var/new_x = P.starting.x + pick(0, 0, 0, -1, 1, -2, 2)
+ var/new_y = P.starting.y + pick(0, 0, 0, -1, 1, -2, 2)
+ var/turf/curloc = get_turf(src)
+
+ // redirect the projectile
+ P.redirect(new_x, new_y, curloc, src)
+ P.reflected = TRUE
+ return PROJECTILE_CONTINUE // complete projectile permutation
+ else
+ ..()
+
+
+// Tier 3
+
+/mob/living/simple_mob/slime/xenobio/bluespace
+ desc = "Trapping this slime in a cell is generally futile, as it can teleport at will."
+ color = null
+ slime_color = "bluespace"
+ icon_state_override = "bluespace"
+ coretype = /obj/item/slime_extract/bluespace
+
+ description_info = "This slime will teleport to attack something if it is within a range of seven tiles. The teleport has a cooldown of five seconds."
+ player_msg = "You can teleport at will to a specific tile by clicking on it at range. This has a five second cooldown."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/bluespace,
+ /mob/living/simple_mob/slime/xenobio/yellow,
+ /mob/living/simple_mob/slime/xenobio/yellow
+ )
+
+ special_attack_min_range = 3
+ special_attack_max_range = 7
+ special_attack_cooldown = 5 SECONDS
+
+/mob/living/simple_mob/slime/xenobio/bluespace/do_special_attack(atom/A)
+ // Teleport attack.
+ if(!A)
+ to_chat(src, span("warning", "There's nothing to teleport to."))
+ return FALSE
+
+ var/list/nearby_things = range(1, A)
+ var/list/valid_turfs = list()
+
+ // All this work to just go to a non-dense tile.
+ for(var/turf/potential_turf in nearby_things)
+ var/valid_turf = TRUE
+ if(potential_turf.density)
+ continue
+ for(var/atom/movable/AM in potential_turf)
+ if(AM.density)
+ valid_turf = FALSE
+ if(valid_turf)
+ valid_turfs.Add(potential_turf)
+
+ var/turf/T = get_turf(src)
+ var/turf/target_turf = pick(valid_turfs)
+
+ if(!target_turf)
+ to_chat(src, span("warning", "There wasn't an unoccupied spot to teleport to."))
+ return FALSE
+
+ var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/spark_spread
+ s1.set_up(5, 1, T)
+ var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/spark_spread
+ s2.set_up(5, 1, target_turf)
+
+
+ T.visible_message(span("notice", "\The [src] vanishes!"))
+ s1.start()
+
+ forceMove(target_turf)
+ playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1)
+ to_chat(src, span("notice", "You teleport to \the [target_turf]."))
+
+ target_turf.visible_message(span("warning", "\The [src] appears!"))
+ s2.start()
+
+ if(Adjacent(A))
+ attack_target(A)
+
+
+/mob/living/simple_mob/slime/xenobio/ruby
+ desc = "This slime has great physical strength."
+ color = "#FF3333"
+ slime_color = "ruby"
+ shiny = TRUE
+ glow_toggle = TRUE
+ coretype = /obj/item/slime_extract/ruby
+
+ description_info = "This slime is unnaturally stronger, allowing it to hit much harder, take less damage, and be stunned for less time. \
+ Their glomp attacks also send the victim flying."
+ player_msg = "Your attacks knock back the target a fair distance.
\
+ You also hit harder, take less damage, and stuns affect you for less time."
+
+ melee_attack_delay = 1 SECOND
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_purple,
+ /mob/living/simple_mob/slime/xenobio/dark_purple,
+ /mob/living/simple_mob/slime/xenobio/ruby,
+ /mob/living/simple_mob/slime/xenobio/ruby
+ )
+
+/mob/living/simple_mob/slime/xenobio/ruby/initialize()
+ add_modifier(/datum/modifier/slime_strength, null, src) // Slime is always swole.
+ return ..()
+
+/mob/living/simple_mob/slime/xenobio/ruby/apply_melee_effects(atom/A)
+ ..()
+
+ if(isliving(A) && a_intent == I_HURT)
+ var/mob/living/L = A
+ if(L.mob_size <= MOB_MEDIUM)
+ visible_message(span("danger", "\The [src] sends \the [L] flying with the impact!"))
+ playsound(src, "punch", 50, 1)
+ L.Weaken(1)
+ var/throwdir = get_dir(src, L)
+ L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
+ else
+ to_chat(L, span("warning", "\The [src] hits you with incredible force, but you remain in place."))
+
+
+/mob/living/simple_mob/slime/xenobio/amber
+ desc = "This slime seems to be an expert in the culinary arts, as they create their own food to share with others. \
+ They would probably be very important to other slimes, if the other colors didn't try to kill them."
+ color = "#FFBB00"
+ slime_color = "amber"
+ shiny = TRUE
+ glow_toggle = TRUE
+ coretype = /obj/item/slime_extract/amber
+
+ description_info = "This slime feeds nearby entities passively while it is alive. This can cause uncontrollable \
+ slime growth and reproduction if not kept in check. The amber slime cannot feed itself, but can be fed by other amber slimes."
+ player_msg = "You passively provide nutrition to nearby entities."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/silver,
+ /mob/living/simple_mob/slime/xenobio/silver,
+ /mob/living/simple_mob/slime/xenobio/amber,
+ /mob/living/simple_mob/slime/xenobio/amber
+ )
+
+/mob/living/simple_mob/slime/xenobio/amber/handle_special()
+ if(stat != DEAD)
+ feed_aura()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/amber/proc/feed_aura()
+ for(var/mob/living/L in view(2, src))
+ if(L == src) // Don't feed themselves, or it is impossible to stop infinite slimes without killing all of the ambers.
+ continue
+ if(istype(L, /mob/living/simple_mob/slime/xenobio))
+ var/mob/living/simple_mob/slime/xenobio/X = L
+ X.adjust_nutrition(rand(15, 25))
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(H.isSynthetic())
+ continue
+ H.nutrition = between(0, H.nutrition + rand(15, 25), 800)
+
+/mob/living/simple_mob/slime/xenobio/cerulean
+ desc = "This slime is generally superior in a wide range of attributes, compared to the common slime. The jack of all trades, but master of none."
+ color = "#4F7EAA"
+ slime_color = "cerulean"
+ coretype = /obj/item/slime_extract/cerulean
+
+ // Less than the specialized slimes, but higher than the rest.
+ maxHealth = 200
+ maxHealth_adult = 250
+
+ melee_damage_lower = 10
+ melee_damage_upper = 30
+
+ movement_cooldown = 0 // This actually isn't any faster due to AI limitations that hopefully the timer subsystem can fix in the future.
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/dark_blue,
+ /mob/living/simple_mob/slime/xenobio/dark_blue,
+ /mob/living/simple_mob/slime/xenobio/cerulean,
+ /mob/living/simple_mob/slime/xenobio/cerulean
+ )
+
+// Tier 4
+
+/mob/living/simple_mob/slime/xenobio/red
+ desc = "This slime is full of energy, and very aggressive. 'The red ones go faster.' seems to apply here."
+ color = "#FF3333"
+ slime_color = "red"
+ coretype = /obj/item/slime_extract/red
+ movement_cooldown = 0 // See above.
+
+ description_info = "This slime is faster than the others. Attempting to discipline this slime will always cause it to go rabid and berserk."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/red,
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/orange
+ )
+
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/red // Will enrage if disciplined.
+
+
+/mob/living/simple_mob/slime/xenobio/green
+ desc = "This slime is radioactive."
+ color = "#14FF20"
+ slime_color = "green"
+ coretype = /obj/item/slime_extract/green
+ glow_toggle = TRUE
+ reagent_injected = "radium"
+ var/rads = 25
+
+ description_info = "This slime will irradiate anything nearby passively, and will inject radium on attack. \
+ A radsuit or other thick and radiation-hardened armor can protect from this. It will only radiate while alive."
+ player_msg = "You passively irradiate your surroundings.
\
+ You also inject radium on attack."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/purple,
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio/emerald,
+ /mob/living/simple_mob/slime/xenobio/emerald
+ )
+
+/mob/living/simple_mob/slime/xenobio/green/handle_special()
+ if(stat != DEAD)
+ irradiate()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/green/proc/irradiate()
+ radiation_repository.radiate(src, rads)
+
+
+
+/mob/living/simple_mob/slime/xenobio/pink
+ desc = "This slime has regenerative properties."
+ color = "#FF0080"
+ slime_color = "pink"
+ coretype = /obj/item/slime_extract/pink
+ glow_toggle = TRUE
+
+ description_info = "This slime will passively heal nearby entities within two tiles, including itself. It will only do this while alive."
+ player_msg = "You passively heal yourself and nearby allies."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/blue,
+ /mob/living/simple_mob/slime/xenobio/light_pink,
+ /mob/living/simple_mob/slime/xenobio/light_pink,
+ /mob/living/simple_mob/slime/xenobio/pink
+ )
+
+/mob/living/simple_mob/slime/xenobio/pink/handle_special()
+ if(stat != DEAD)
+ heal_aura()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/pink/proc/heal_aura()
+ for(var/mob/living/L in view(src, 2))
+ if(L.stat == DEAD || !IIsAlly(L))
+ continue
+ L.add_modifier(/datum/modifier/aura/slime_heal, null, src)
+
+/datum/modifier/aura/slime_heal
+ name = "slime mending"
+ desc = "You feel somewhat gooy."
+ mob_overlay_state = "pink_sparkles"
+ stacks = MODIFIER_STACK_FORBID
+ aura_max_distance = 2
+
+ on_created_text = "Twinkling spores of goo surround you. It makes you feel healthier."
+ on_expired_text = "The spores of goo have faded, although you feel much healthier than before."
+
+/datum/modifier/aura/slime_heal/tick()
+ if(holder.stat == DEAD)
+ expire()
+
+ if(ishuman(holder)) // Robolimbs need this code sadly.
+ var/mob/living/carbon/human/H = holder
+ for(var/obj/item/organ/external/E in H.organs)
+ var/obj/item/organ/external/O = E
+ O.heal_damage(2, 2, 0, 1)
+ else
+ holder.adjustBruteLoss(-2)
+ holder.adjustFireLoss(-2)
+
+ holder.adjustToxLoss(-2)
+ holder.adjustOxyLoss(-2)
+ holder.adjustCloneLoss(-1)
+
+
+/mob/living/simple_mob/slime/xenobio/gold
+ desc = "This slime absorbs energy, and cannot be stunned by normal means."
+ color = "#EEAA00"
+ shiny = TRUE
+ slime_color = "gold"
+ coretype = /obj/item/slime_extract/gold
+ description_info = "This slime is immune to the slimebaton and taser, and will actually charge the slime, however it will still discipline the slime."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/metal,
+ /mob/living/simple_mob/slime/xenobio/gold,
+ /mob/living/simple_mob/slime/xenobio/sapphire,
+ /mob/living/simple_mob/slime/xenobio/sapphire
+ )
+
+/mob/living/simple_mob/slime/xenobio/gold/slimebatoned(mob/living/user, amount)
+ power_charge = between(0, power_charge + amount, 10)
+
+/mob/living/simple_mob/slime/xenobio/gold/get_description_interaction() // So it doesn't say to use a baton on them.
+ return list()
+
+
+// Tier 5
+
+/mob/living/simple_mob/slime/xenobio/oil
+ desc = "This slime is explosive and volatile. Smoking near it is probably a bad idea."
+ color = "#333333"
+ slime_color = "oil"
+ shiny = TRUE
+ coretype = /obj/item/slime_extract/oil
+
+ description_info = "If this slime suffers damage from a fire or heat based source, or if it is caught inside \
+ an explosion, it will explode. Oil slimes will also suicide-bomb themselves when fighting something that is not a monkey or slime."
+ player_msg = "You will explode if struck by a burning attack, or if you hit an enemy with a melee attack that is not a monkey or another slime."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/oil,
+ /mob/living/simple_mob/slime/xenobio/red,
+ /mob/living/simple_mob/slime/xenobio/red
+ )
+
+/mob/living/simple_mob/slime/xenobio/oil/proc/explode()
+ if(stat != DEAD)
+ explosion(src.loc, 0, 2, 4) // A bit weaker since the suicide charger tended to gib the poor sod being targeted.
+ if(src) // Delete ourselves if the explosion didn't do it.
+ qdel(src)
+
+/mob/living/simple_mob/slime/xenobio/oil/apply_melee_effects(atom/A)
+ if(isliving(A))
+ var/mob/living/L = A
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = A
+ if(istype(H.species, /datum/species/monkey))
+ return ..()// Don't blow up when just eatting monkeys.
+
+ else if(isslime(L))
+ return ..()
+
+ // Otherwise blow ourselves up.
+ say(pick("Sacrifice...!", "Sssss...", "Boom...!"))
+ set_AI_busy(TRUE)
+ sleep(2 SECONDS)
+ log_and_message_admins("[src] has suicide-bombed themselves while trying to kill \the [L].")
+ explode()
+
+ return ..()
+
+/mob/living/simple_mob/slime/xenobio/oil/ex_act(severity)
+ log_and_message_admins("[src] exploded due to a chain reaction with another explosion.")
+ explode()
+
+/mob/living/simple_mob/slime/xenobio/oil/fire_act(datum/gas_mixture/air, temperature, volume)
+ log_and_message_admins("[src] exploded due to exposure to fire.")
+ explode()
+
+/mob/living/simple_mob/slime/xenobio/oil/bullet_act(obj/item/projectile/P, def_zone)
+ if(P.damage_type && P.damage_type == BURN && P.damage) // Most bullets won't trigger the explosion, as a mercy towards Security.
+ log_and_message_admins("[src] exploded due to bring hit by a burning projectile[P.firer ? " by [key_name(P.firer)]" : ""].")
+ explode()
+ else
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/oil/attackby(obj/item/weapon/W, mob/living/user)
+ if(istype(W) && W.force && W.damtype == BURN)
+ log_and_message_admins("[src] exploded due to being hit with a burning weapon ([W]) by [key_name(user)].")
+ explode()
+ else
+ ..()
+
+
+/mob/living/simple_mob/slime/xenobio/sapphire
+ desc = "This slime seems a bit brighter than the rest, both figuratively and literally."
+ color = "#2398FF"
+ slime_color = "sapphire"
+ shiny = TRUE
+ glow_toggle = TRUE
+ coretype = /obj/item/slime_extract/sapphire
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/sapphire
+
+ description_info = "This slime uses more robust tactics when fighting and won't hold back, so it is dangerous to be alone \
+ with one if hostile, and especially dangerous if they outnumber you."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/sapphire,
+ /mob/living/simple_mob/slime/xenobio/sapphire,
+ /mob/living/simple_mob/slime/xenobio/gold,
+ /mob/living/simple_mob/slime/xenobio/gold
+ )
+
+
+/mob/living/simple_mob/slime/xenobio/emerald
+ desc = "This slime is faster than usual, even more so than the red slimes."
+ color = "#22FF22"
+ shiny = TRUE
+ glow_toggle = TRUE
+ slime_color = "emerald"
+ coretype = /obj/item/slime_extract/emerald
+
+ description_info = "This slime will make everything around it, and itself, faster for a few seconds, if close by."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio/green,
+ /mob/living/simple_mob/slime/xenobio/emerald,
+ /mob/living/simple_mob/slime/xenobio/emerald
+ )
+
+/mob/living/simple_mob/slime/xenobio/emerald/handle_special()
+ if(stat != DEAD)
+ zoom_aura()
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/emerald/proc/zoom_aura()
+ for(var/mob/living/L in view(src, 2))
+ if(L.stat == DEAD || !IIsAlly(L))
+ continue
+ L.add_modifier(/datum/modifier/technomancer/haste, 5 SECONDS, src)
+
+
+/mob/living/simple_mob/slime/xenobio/light_pink
+ desc = "This slime seems a lot more peaceful than the others."
+ color = "#FF8888"
+ slime_color = "light pink"
+ coretype = /obj/item/slime_extract/light_pink
+
+ description_info = "This slime is effectively always disciplined initially."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/pink,
+ /mob/living/simple_mob/slime/xenobio/pink,
+ /mob/living/simple_mob/slime/xenobio/light_pink,
+ /mob/living/simple_mob/slime/xenobio/light_pink
+ )
+
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/light_pink
+
+// Special
+/mob/living/simple_mob/slime/xenobio/rainbow
+ desc = "This slime changes colors constantly."
+ color = null // Uses a special icon_state.
+ slime_color = "rainbow"
+ coretype = /obj/item/slime_extract/rainbow
+ icon_state_override = "rainbow"
+ unity = TRUE
+
+ description_info = "This slime is considered to be the same color as all other slime colors at the same time for the purposes of \
+ other slimes being friendly to them, and therefore will never be harmed by another slime. \
+ Attacking this slime will provoke the wrath of all slimes within range."
+ player_msg = "You are considered to be the same color as every slime, \
+ meaning that you are considered an ally to all slimes."
+
+ slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/rainbow,
+ /mob/living/simple_mob/slime/xenobio/rainbow,
+ /mob/living/simple_mob/slime/xenobio/rainbow,
+ /mob/living/simple_mob/slime/xenobio/rainbow
+ )
+
+/mob/living/simple_mob/slime/xenobio/rainbow/initialize()
+ unify()
+ return ..()
+
+// The RD's pet slime.
+/mob/living/simple_mob/slime/xenobio/rainbow/kendrick
+ name = "Kendrick"
+ desc = "The Research Director's pet slime. It shifts colors constantly."
+ rainbow_core_candidate = FALSE
+ // Doing pacify() in initialize() won't actually pacify the AI due to the ai_holder not existing due to parent initialize() not being called yet.
+ // Instead lets just give them an ai_holder that does that for us.
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime/passive
+
+/mob/living/simple_mob/slime/xenobio/rainbow/kendrick/initialize()
+ pacify() // So the physical mob also gets made harmless.
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm
new file mode 100644
index 0000000000..f7f594f139
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/slime/xenobio/xenobio.dm
@@ -0,0 +1,284 @@
+// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
+
+/mob/living/simple_mob/slime/xenobio
+ desc = "The most basic of slimes. The grey slime has no remarkable qualities, however it remains one of the most useful colors for scientists."
+ layer = MOB_LAYER + 1 // Need them on top of other mobs or it looks weird when consuming something.
+ ai_holder_type = /datum/ai_holder/simple_mob/xenobio_slime // This should never be changed for xenobio slimes.
+ var/is_adult = FALSE // Slimes turn into adults when fed enough. Adult slimes are somewhat stronger, and can reproduce if fed enough.
+ var/maxHealth_adult = 200
+ var/power_charge = 0 // Disarm attacks can shock someone if high/lucky enough.
+ var/mob/living/victim = null // the person the slime is currently feeding on
+ var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
+ var/mutation_chance = 25 // Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
+ var/list/slime_mutation = list(
+ /mob/living/simple_mob/slime/xenobio/orange,
+ /mob/living/simple_mob/slime/xenobio/metal,
+ /mob/living/simple_mob/slime/xenobio/blue,
+ /mob/living/simple_mob/slime/xenobio/purple
+ )
+ var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces
+ var/number = 0 // This is used to make the slime semi-unique for indentification.
+ var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce.
+
+/mob/living/simple_mob/slime/xenobio/initialize()
+ ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime))
+ number = rand(1, 1000)
+ update_name()
+ return ..()
+
+/mob/living/simple_mob/slime/xenobio/Destroy()
+ if(victim)
+ stop_consumption() // Unbuckle us from our victim.
+ return ..()
+
+/mob/living/simple_mob/slime/xenobio/update_icon()
+ icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
+ icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
+ icon_rest = icon_dead
+ ..() // This will apply the correct icon_state and do the other overlay-related things.
+
+
+/mob/living/simple_mob/slime/xenobio/handle_special()
+ if(stat != DEAD)
+ handle_nutrition()
+
+ if(victim)
+ handle_consumption()
+
+ handle_stuttering() // ??
+
+ ..()
+
+/mob/living/simple_mob/slime/xenobio/examine(mob/user)
+ ..()
+ if(hat)
+ to_chat(user, "It is wearing \a [hat].")
+
+ if(stat == DEAD)
+ to_chat(user, "It appears to be dead.")
+ else if(incapacitated(INCAPACITATION_DISABLED))
+ to_chat(user, "It appears to be incapacitated.")
+ else if(harmless)
+ to_chat(user, "It appears to have been pacified.")
+ else
+ if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ if(AI.rabid)
+ to_chat(user, "It seems very, very angry and upset.")
+ else if(AI.obedience >= 5)
+ to_chat(user, "It looks rather obedient.")
+ else if(AI.discipline)
+ to_chat(user, "It has been subjugated by force, at least for now.")
+
+/mob/living/simple_mob/slime/xenobio/proc/make_adult()
+ if(is_adult)
+ return
+
+ is_adult = TRUE
+ melee_damage_lower = round(melee_damage_lower * 2) // 20
+ melee_damage_upper = round(melee_damage_upper * 2) // 30
+ maxHealth = maxHealth_adult
+ amount_grown = 0
+ update_icon()
+ update_name()
+
+/mob/living/simple_mob/slime/xenobio/proc/update_name()
+ if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
+ return
+ name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])"
+ real_name = name
+
+/mob/living/simple_mob/slime/xenobio/update_mood()
+ var/old_mood = mood
+ if(incapacitated(INCAPACITATION_DISABLED))
+ mood = "sad"
+ else if(harmless)
+ mood = ":33"
+ else if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ if(AI.rabid)
+ mood = "angry"
+ else if(AI.target)
+ mood = "mischevous"
+ else if(AI.discipline)
+ mood = "pout"
+ else
+ mood = ":3"
+ else
+ mood = ":3"
+
+ if(old_mood != mood)
+ update_icon()
+
+/mob/living/simple_mob/slime/xenobio/proc/enrage()
+ if(harmless)
+ return
+ if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ AI.enrage()
+
+/mob/living/simple_mob/slime/xenobio/proc/pacify()
+ harmless = TRUE
+ if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ AI.pacify()
+
+ faction = "neutral"
+
+ // If for whatever reason the mob AI (or player) decides to try to attack something anyways.
+ melee_damage_upper = 0
+ melee_damage_lower = 0
+
+ update_mood()
+
+
+// These are verbs so that player slimes can evolve/split.
+/mob/living/simple_mob/slime/xenobio/verb/evolve()
+ set category = "Slime"
+ set desc = "This will let you evolve from baby to adult slime."
+
+ if(stat)
+ to_chat(src, span("warning", "I must be conscious to do this..."))
+ return
+
+ if(harmless)
+ to_chat(src, span("warning", "I have been pacified. I cannot evolve..."))
+ return
+
+ if(!is_adult)
+ if(amount_grown >= 10)
+ make_adult()
+ else
+ to_chat(src, span("warning", "I am not ready to evolve yet..."))
+ else
+ to_chat(src, span("warning", "I have already evolved..."))
+
+
+/mob/living/simple_mob/slime/xenobio/verb/reproduce()
+ set category = "Slime"
+ set desc = "This will make you split into four new slimes."
+
+ if(stat)
+ to_chat(src, span("warning", "I must be conscious to do this..."))
+ return
+
+ if(harmless)
+ to_chat(src, span("warning", "I have been pacified. I cannot reproduce..."))
+ return
+
+ if(is_adult)
+ if(amount_grown >= 10)
+ // Check if there's enough 'room' to split.
+ var/list/nearby_things = orange(1, src)
+ var/free_tiles = 0
+ for(var/turf/T in nearby_things)
+ var/free = TRUE
+ if(T.density) // No walls.
+ continue
+ for(var/atom/movable/AM in T)
+ if(AM.density)
+ free = FALSE
+ break
+
+ if(free)
+ free_tiles++
+
+ if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
+ to_chat(src, span("warning", "It is too cramped here to reproduce..."))
+ return
+
+ var/list/babies = list()
+ for(var/i = 1 to 4)
+ babies.Add(make_new_slime())
+
+ var/mob/living/simple_mob/slime/new_slime = pick(babies)
+ new_slime.universal_speak = universal_speak
+ if(src.mind)
+ src.mind.transfer_to(new_slime)
+ else
+ new_slime.key = src.key
+ qdel(src)
+ else
+ to_chat(src, span("warning", "I am not ready to reproduce yet..."))
+ else
+ to_chat(src, span("warning", "I have not evolved enough to reproduce yet..."))
+
+// Used when reproducing or dying.
+/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type)
+ var/t = src.type
+ if(desired_type)
+ t = desired_type
+ if(prob(mutation_chance / 10))
+ t = /mob/living/simple_mob/slime/xenobio/rainbow
+ else if(prob(mutation_chance) && slime_mutation.len)
+ t = slime_mutation[rand(1, slime_mutation.len)]
+ var/mob/living/simple_mob/slime/xenobio/baby = new t(loc)
+
+ // Handle 'inheriting' from parent slime.
+ baby.mutation_chance = mutation_chance
+ baby.power_charge = round(power_charge / 4)
+
+ pass_on_data(baby) // Transfer the AI stuff slowly, sadly.
+
+ if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
+ baby.unity = unity
+ baby.faction = faction
+ baby.friends = friends.Copy()
+
+ step_away(baby, src)
+ return baby
+
+/mob/living/simple_mob/slime/xenobio/proc/pass_on_data(mob/living/simple_mob/slime/xenobio/baby)
+ // This is superdumb but the AI datum won't exist until the new slime's initialize() finishes.
+ var/new_discipline = 0
+ var/new_obedience = 0
+ var/new_resentment = 0
+ var/new_rabid = FALSE
+
+ // First, get this slime's AI values since they are likely to be deleted in a moment.
+ if(src && src.has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/our_AI = ai_holder
+ new_discipline = max(our_AI.discipline - 1, 0)
+ new_obedience = max(our_AI.obedience - 1, 0)
+ new_resentment = max(our_AI.resentment - 1, 0)
+ new_rabid = our_AI.rabid
+
+ spawn(2) // Race conditions are fun, but with the first two letters capitalized.
+ if(istype(baby) && baby.has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/their_AI = baby.ai_holder
+
+ if(!istype(baby, /mob/living/simple_mob/slime/xenobio/light_pink))
+ their_AI.discipline = new_discipline
+ their_AI.obedience = new_obedience
+
+ their_AI.resentment = new_resentment
+
+ their_AI.rabid = new_rabid
+
+/mob/living/simple_mob/slime/xenobio/get_description_interaction()
+ var/list/results = list()
+
+ if(!stat)
+ results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad."
+
+ results += ..()
+
+ return results
+
+/mob/living/simple_mob/slime/xenobio/get_description_info()
+ var/list/lines = list()
+ var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \
+ They can be extremely dangerous if not handled properly."
+ lines.Add(intro_line)
+ lines.Add(null) // To pad the line breaks.
+
+ var/list/rewards = list()
+ for(var/potential_color in slime_mutation)
+ var/mob/living/simple_mob/slime/S = potential_color
+ rewards.Add(initial(S.slime_color))
+ var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough."
+ lines.Add(reward_line)
+ lines.Add(null)
+
+ lines.Add(description_info)
+ return lines.Join("\n")
\ No newline at end of file
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index c7c0c9a253..d41314a69b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -743,13 +743,12 @@
/mob/proc/facedir(var/ndir)
- if(!canface() || (client && (client.moving || (world.time < client.move_delay))))
+ if(!canface() || (client && (client.moving || (world.time < move_delay))))
return 0
set_dir(ndir)
if(buckled && buckled.buckle_movable)
buckled.set_dir(ndir)
- if(client)
- client.move_delay += movement_delay()
+ move_delay += movement_delay()
return 1
@@ -1002,7 +1001,7 @@ mob/proc/yank_out_object()
/mob/proc/has_brain_worms()
for(var/I in contents)
- if(istype(I,/mob/living/simple_animal/borer))
+ if(istype(I,/mob/living/simple_mob/animal/borer))
return I
return 0
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 32902d7d48..9852c3f723 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -7,6 +7,8 @@
var/datum/mind/mind
var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak
+ var/move_delay = null // For movement speed delays.
+ var/next_move = null // For click delay, despite the misleading name.
//Not in use yet
var/obj/effect/organstructure/organStructure = null
@@ -62,7 +64,6 @@
var/sdisabilities = 0 //Carbon
var/disabilities = 0 //Carbon
var/atom/movable/pulling = null
- var/next_move = null
var/transforming = null //Carbon
var/other = 0.0
var/eye_blind = null //Carbon
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 186487d0b9..6c31f54f8e 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -54,6 +54,9 @@ proc/isdeaf(A)
/mob/proc/break_cloak()
return
+/mob/proc/is_cloaked()
+ return FALSE
+
proc/hasorgans(A) // Fucking really??
return ishuman(A)
@@ -534,19 +537,17 @@ proc/is_blind(A)
return threatcount
-/mob/living/simple_animal/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest)
+/mob/living/simple_mob/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest)
var/threatcount = ..()
if(. == SAFE_PERP)
return SAFE_PERP
- if(!istype(src, /mob/living/simple_animal/retaliate/goat))
- if(hostile)
- if(faction != "neutral") // Otherwise Runtime gets killed.
- threatcount += 4
+ if(has_AI() && ai_holder.hostile && faction != "neutral") // Otherwise Runtime gets killed.
+ threatcount += 4
return threatcount
// Beepsky will (try to) only beat 'bad' slimes.
-/mob/living/simple_animal/slime/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest)
+/mob/living/simple_mob/slime/xenobio/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest)
var/threatcount = 0
if(stat == DEAD)
@@ -565,8 +566,10 @@ proc/is_blind(A)
if(victim)
threatcount += 4
*/
- if(rabid)
- threatcount = 10
+ if(has_AI())
+ var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
+ if(AI.rabid)
+ threatcount = 10
return threatcount
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 6b65c81c84..8848ed4aec 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -11,8 +11,12 @@
return
/mob/proc/setMoveCooldown(var/timeout)
- if(client)
- client.move_delay = max(world.time + timeout, client.move_delay)
+ move_delay = max(world.time + timeout, move_delay)
+
+/mob/proc/check_move_cooldown()
+ if(world.time < src.move_delay)
+ return FALSE // Need to wait more.
+ return TRUE
/client/North()
..()
@@ -199,7 +203,8 @@
if(moving) return 0
- if(world.time < move_delay) return
+ if(!mob.check_move_cooldown())
+ return
if(locate(/obj/effect/stop/, mob.loc))
for(var/obj/effect/stop/S in mob.loc)
@@ -271,21 +276,21 @@
src << "You're pinned to a wall by [mob.pinned[1]]!"
return 0
- move_delay = world.time//set move delay
+ mob.move_delay = world.time//set move delay
switch(mob.m_intent)
if("run")
if(mob.drowsyness > 0)
- move_delay += 6
- move_delay += config.run_speed
+ mob.move_delay += 6
+ mob.move_delay += config.run_speed
if("walk")
- move_delay += config.walk_speed
- move_delay += mob.movement_delay()
+ mob.move_delay += config.walk_speed
+ mob.move_delay += mob.movement_delay()
if(istype(mob.buckled))// VOREStation Removal - , /obj/vehicle))
//manually set move_delay for vehicles so we don't inherit any mob movement penalties
//specific vehicle move delays are set in code\modules\vehicles\vehicle.dm
- move_delay = world.time
+ mob.move_delay = world.time
//drunk driving
if(mob.confused && prob(20)) //vehicles tend to keep moving in the same direction
direct = turn(direct, pick(90, -90))
@@ -314,14 +319,14 @@
if(prob(50)) direct = turn(direct, pick(90, -90))
if("walk")
if(prob(25)) direct = turn(direct, pick(90, -90))
- move_delay += 2
+ mob.move_delay += 2
return mob.buckled.relaymove(mob,direct)
//We are now going to move
moving = 1
//Something with pulling things
if(locate(/obj/item/weapon/grab, mob))
- move_delay = max(move_delay, world.time + 7)
+ mob.move_delay = max(mob.move_delay, world.time + 7)
var/list/L = mob.ret_grab()
if(istype(L, /list))
if(L.len == 2)
@@ -572,4 +577,4 @@
/client/verb/moveleft()
set name = ".moveleft"
set instant = 1
- Move(get_step(mob, WEST), WEST)
\ No newline at end of file
+ Move(get_step(mob, WEST), WEST)
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index dcd95c20de..3b3477b833 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -227,7 +227,7 @@
for(var/t in organs) //this really should not be necessary
qdel(t)
- var/mob/living/simple_animal/corgi/new_corgi = new /mob/living/simple_animal/corgi (loc)
+ var/mob/living/simple_mob/animal/passive/dog/corgi/new_corgi = new /mob/living/simple_mob/animal/passive/dog/corgi (loc)
new_corgi.a_intent = I_HURT
new_corgi.key = key
@@ -237,7 +237,7 @@
/mob/living/carbon/human/Animalize()
- var/list/mobtypes = typesof(/mob/living/simple_animal)
+ var/list/mobtypes = typesof(/mob/living/simple_mob)
var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes
if(!safe_animal(mobpath))
@@ -271,7 +271,7 @@
/mob/proc/Animalize()
- var/list/mobtypes = typesof(/mob/living/simple_animal)
+ var/list/mobtypes = typesof(/mob/living/simple_mob)
var/mobpath = input("Which type of mob should [src] turn into?", "Choose a type") in mobtypes
if(!safe_animal(mobpath))
@@ -297,39 +297,29 @@
if(!MP)
return 0 //Sanity, this should never happen.
+/*
if(ispath(MP, /mob/living/simple_animal/space_worm))
return 0 //Unfinished. Very buggy, they seem to just spawn additional space worms everywhere and eating your own tail results in new worms spawning.
-
- if(ispath(MP, /mob/living/simple_animal/construct/behemoth))
- return 0 //I think this may have been an unfinished WiP or something. These constructs should really have their own class simple_animal/construct/subtype
-
- if(ispath(MP, /mob/living/simple_animal/construct/armoured))
- return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype
-
- if(ispath(MP, /mob/living/simple_animal/construct/wraith))
- return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype
-
- if(ispath(MP, /mob/living/simple_animal/construct/builder))
- return 0 //Verbs do not appear for players. These constructs should really have their own class simple_animal/construct/subtype
+*/
//Good mobs!
- if(ispath(MP, /mob/living/simple_animal/cat))
+ if(ispath(MP, /mob/living/simple_mob/animal/passive/cat))
return 1
- if(ispath(MP, /mob/living/simple_animal/corgi))
+ if(ispath(MP, /mob/living/simple_mob/animal/passive/dog))
return 1
- if(ispath(MP, /mob/living/simple_animal/crab))
+ if(ispath(MP, /mob/living/simple_mob/animal/passive/crab))
return 1
- if(ispath(MP, /mob/living/simple_animal/hostile/carp))
+ if(ispath(MP, /mob/living/simple_mob/animal/space/carp))
return 1
- if(ispath(MP, /mob/living/simple_animal/shade))
+ if(ispath(MP, /mob/living/simple_mob/construct))
return 1
- if(ispath(MP, /mob/living/simple_animal/hostile/tomato))
+ if(ispath(MP, /mob/living/simple_mob/tomato))
return 1
- if(ispath(MP, /mob/living/simple_animal/mouse))
+ if(ispath(MP, /mob/living/simple_mob/animal/passive/mouse))
return 1 //It is impossible to pull up the player panel for mice (Fixed! - Nodrak)
- if(ispath(MP, /mob/living/simple_animal/hostile/bear))
+ if(ispath(MP, /mob/living/simple_mob/animal/space/bear))
return 1 //Bears will auto-attack mobs, even if they're player controlled (Fixed! - Nodrak)
- if(ispath(MP, /mob/living/simple_animal/parrot))
+ if(ispath(MP, /mob/living/simple_mob/animal/passive/bird/parrot))
return 1 //Parrots are no longer unfinished! -Nodrak
//Not in here? Must be untested!
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index 06840f65fe..6f3cbb9bc8 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -83,11 +83,13 @@
/mob/proc/can_overcome_gravity()
return FALSE
-/mob/living/carbon/human/can_overcome_gravity()
- return species && species.can_overcome_gravity(src)
+/mob/living/can_overcome_gravity()
+ return hovering
-/mob/living/simple_animal/construct/can_overcome_gravity()
- return 1 //They care not for standard physics.
+/mob/living/carbon/human/can_overcome_gravity()
+ . = ..()
+ if(!.)
+ return species && species.can_overcome_gravity(src)
/mob/observer/zMove(direction)
var/turf/destination = (direction == UP) ? GetAbove(src) : GetBelow(src)
@@ -117,36 +119,44 @@
return ..()
/mob/observer/can_ztravel()
- return 1
+ return TRUE
-/mob/living/simple_animal/construct/can_ztravel()
- return 1
+/mob/living/can_ztravel()
+ if(incapacitated())
+ return FALSE
+ return hovering
/mob/living/carbon/human/can_ztravel()
if(incapacitated())
- return 0
+ return FALSE
+
+ if(hovering)
+ return TRUE
if(flying) //VOREStation Edit. Allows movement up/down with wings.
return 1 //VOREStation Edit
if(Process_Spacemove())
- return 1
+ return TRUE
if(Check_Shoegrip()) //scaling hull with magboots
for(var/turf/simulated/T in trange(1,src))
if(T.density)
- return 1
+ return TRUE
/mob/living/silicon/robot/can_ztravel()
if(incapacitated() || is_dead())
- return 0
+ return FALSE
+
+ if(hovering)
+ return TRUE
if(Process_Spacemove()) //Checks for active jetpack
- return 1
+ return FALSE
for(var/turf/simulated/T in trange(1,src)) //Robots get "magboots"
if(T.density)
- return 1
+ return TRUE
// TODO - Leshana Experimental
@@ -262,19 +272,15 @@
if((locate(/obj/structure/disposalpipe/up) in below) || locate(/obj/machinery/atmospherics/pipe/zpipe/up in below))
return FALSE
+/mob/living/can_fall()
+ if(hovering)
+ return FALSE
+ return ..()
+
/mob/living/carbon/human/can_fall()
if(..())
return species.can_fall(src)
-/mob/living/simple_animal/parrot/can_fall() // Poly can fly.
- return FALSE
-
-/mob/living/simple_animal/hostile/carp/can_fall() // So can carp apparently.
- return FALSE
-
-/mob/living/simple_animal/construct/can_fall() //As do Constructs.
- return FALSE
-
// Check if this atom prevents things standing on it from falling. Return TRUE to allow the fall.
/obj/proc/CanFallThru(atom/movable/mover as mob|obj, turf/target as turf)
if(!isturf(mover.loc)) // VORESTATION EDIT. We clearly didn't have enough backup checks.
diff --git a/code/modules/multiz/turf.dm b/code/modules/multiz/turf.dm
index cbf7623267..18f8523907 100644
--- a/code/modules/multiz/turf.dm
+++ b/code/modules/multiz/turf.dm
@@ -149,3 +149,12 @@
/turf/simulated/open/is_space()
var/turf/below = GetBelow(src)
return !below || below.is_space()
+<<<<<<< HEAD
+=======
+
+/turf/simulated/open/is_safe_to_enter(mob/living/L)
+ if(L.can_fall())
+ if(!locate(/obj/structure/stairs) in GetBelow(src))
+ return FALSE
+ return ..()
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
diff --git a/code/modules/organs/internal/brain.dm b/code/modules/organs/internal/brain.dm
index 5f8a9dd0d7..2003abe04f 100644
--- a/code/modules/organs/internal/brain.dm
+++ b/code/modules/organs/internal/brain.dm
@@ -107,7 +107,7 @@ GLOBAL_LIST_BOILERPLATE(all_brain_organs, /obj/item/organ/internal/brain)
if(name == initial(name))
name = "\the [owner.real_name]'s [initial(name)]"
- var/mob/living/simple_animal/borer/borer = owner.has_brain_worms()
+ var/mob/living/simple_mob/animal/borer/borer = owner.has_brain_worms()
if(borer)
borer.detatch() //Should remove borer if the brain is removed - RR
diff --git a/code/modules/organs/misc.dm b/code/modules/organs/misc.dm
index 862c96a96f..30515e746b 100644
--- a/code/modules/organs/misc.dm
+++ b/code/modules/organs/misc.dm
@@ -34,7 +34,7 @@
..()
- var/mob/living/simple_animal/borer/B = owner.has_brain_worms()
+ var/mob/living/simple_mob/animal/borer/B = owner.has_brain_worms()
if(B)
B.leave_host()
B.ckey = owner.ckey
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 4a81179c72..4a24500fd3 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -19,7 +19,7 @@
/obj/item/weapon/paper_bin/MouseDrop(mob/user as mob)
if((user == usr && (!( usr.restrained() ) && (!( usr.stat ) && (usr.contents.Find(src) || in_range(src, usr))))))
- if(!istype(usr, /mob/living/simple_animal))
+ if(!istype(usr, /mob/living/simple_mob))
if( !usr.get_active_hand() ) //if active hand is empty
var/mob/living/carbon/human/H = user
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 535debad21..9e95e67a6d 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -33,7 +33,6 @@ var/global/photo_count = 0
var/icon/img //Big photo image
var/scribble //Scribble on the back.
var/icon/tiny
- var/cursed = 0
var/photo_size = 3
/obj/item/weapon/photo/New()
@@ -237,10 +236,6 @@ var/global/photo_count = 0
else
mob_detail += "You can also see [A] on the photo[A:health < 75 ? " - [A] looks hurt":""].[holding ? " [holding]":"."]."
- for(var/mob/living/simple_animal/hostile/statue/S in the_turf)
- if(S)
- mob_detail += "You can see \a [S] on the photo. Its stare makes you feel uneasy." //"That which holds the image of an angel, becomes itself an angel."
-
return mob_detail
/obj/item/device/camera/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
@@ -282,20 +277,7 @@ var/global/photo_count = 0
y_c--
x_c = x_c - size
-
-
-
var/obj/item/weapon/photo/p = createpicture(target, user, turfs, mobs, flag)
- if(findtext(mobs, "Its stare makes you feel uneasy"))
- p.cursed = 1
- user.visible_message("Something starts to slowly manifest from the picture!")
- spawn(150)
- var/turf/T = get_turf(p)
- var/mob/living/simple_animal/hostile/statue/S = new /mob/living/simple_animal/hostile/statue/(T)
- S.banishable = 1//At least you can get rid of those bastards
- T.visible_message("The photo turns into \a [S]!")
- qdel(p)
-
printpicture(user, p)
@@ -339,16 +321,6 @@ var/global/photo_count = 0
p.pixel_y = pixel_y
p.photo_size = photo_size
p.scribble = scribble
- p.cursed = cursed
- if(p.cursed)
- var/turf/T = get_turf(p)
- T.visible_message("Something starts to slowly manifest from the picture!")
- spawn(150)
- T = get_turf(p) //second time, because the photo could've moved
- var/mob/living/simple_animal/hostile/statue/S = new /mob/living/simple_animal/hostile/statue/(T)
- S.banishable = 1//At least you can get rid of those bastards
- T.visible_message("The photo turns into \a [S]!")
- qdel(p)
if(copy_id)
p.id = id
diff --git a/code/modules/planet/sif.dm b/code/modules/planet/sif.dm
index b8c99636f6..371130511a 100644
--- a/code/modules/planet/sif.dm
+++ b/code/modules/planet/sif.dm
@@ -446,4 +446,4 @@ var/datum/planet/sif/planet_sif = null
observed_message = "Everything is red. Something really wrong is going on."
transition_messages = list(
"The sky turns blood red!"
- )
\ No newline at end of file
+ )
diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm
index 5998906c66..a5d7dc3651 100644
--- a/code/modules/power/singularity/act.dm
+++ b/code/modules/power/singularity/act.dm
@@ -115,6 +115,15 @@
ChangeTurf(get_base_turf_by_area(src))
return 2
+/turf/simulated/floor/singularity_pull(S, current_size)
+ if(flooring && current_size >= STAGE_THREE)
+ if(prob(current_size / 2))
+ var/leave_tile = TRUE
+ if(broken || burnt || flooring.flags & TURF_IS_FRAGILE)
+ leave_tile = FALSE
+ playsound(src, 'sound/items/crowbar.ogg', 50, 1)
+ make_plating(leave_tile)
+
/turf/simulated/wall/singularity_pull(S, current_size)
if(!reinf_material)
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index 9274bb85a6..fd548bdb81 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -185,7 +185,6 @@
/obj/machinery/atmospherics,
/obj/machinery/power/emitter,
/obj/machinery/field_generator,
- /mob/living/simple_animal,
/obj/machinery/door/blast,
/obj/machinery/particle_accelerator/control_box,
/obj/structure/particle_accelerator/fuel_chamber,
@@ -290,7 +289,7 @@
else if(closest_mob)
var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5)
- closest_mob.electrocute_act(shock_damage, source, 1, ran_zone())
+ closest_mob.electrocute_act(shock_damage, source, 1 - closest_mob.get_shock_protection(), ran_zone())
log_game("TESLA([source.x],[source.y],[source.z]) Shocked [key_name(closest_mob)] for [shock_damage]dmg.")
message_admins("Tesla zapped [key_name_admin(closest_mob)]!")
if(issilicon(closest_mob))
diff --git a/code/modules/power/tesla/tesla_act.dm b/code/modules/power/tesla/tesla_act.dm
index 8e617fca86..01b58f8a80 100644
--- a/code/modules/power/tesla/tesla_act.dm
+++ b/code/modules/power/tesla/tesla_act.dm
@@ -60,6 +60,9 @@
..() //extend the zap
explode()
+/obj/mecha/tesla_act(power)
+ ..()
+ take_damage(power / 200, "energy") // A surface lightning strike will do 100 damage.
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 40dbaf0650..cb8ca6cdf2 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -173,7 +173,7 @@
if(!user.IsAdvancedToolUser())
return 0
if(isanimal(user))
- var/mob/living/simple_animal/S = user
+ var/mob/living/simple_mob/S = user
if(!S.IsHumanoidToolUser(src))
return 0
@@ -526,7 +526,8 @@
return 2
//just assume we can shoot through glass and stuff. No big deal, the player can just choose to not target someone
//on the other side of a window if it makes a difference. Or if they run behind a window, too bad.
- return check_trajectory(target, user)
+ if(check_trajectory(target, user))
+ return 1 // Magic numbers are fun.
//called if there was no projectile to shoot
/obj/item/weapon/gun/proc/handle_click_empty(mob/user)
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index f1e20b169b..7bd20cdcef 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -155,13 +155,13 @@
else
src.visible_message("*fizzle*")
playsound(src.loc, 'sound/effects/sparks1.ogg', 100, 1)
-
+/*
/obj/item/weapon/gun/energy/staff/animate
name = "staff of animation"
desc = "An artifact that spits bolts of life force, which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
projectile_type = /obj/item/projectile/animate
charge_cost = 240
-
+*/
obj/item/weapon/gun/energy/staff/focus
name = "mental focus"
desc = "An artifact that channels the will of the user into destructive bolts of force. If you aren't careful with it, you might poke someone's brain out."
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 4566577a94..8b113299b3 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -59,6 +59,8 @@
var/drowsy = 0
var/agony = 0
var/reflected = 0 // This should be set to 1 if reflected by any means, to prevent infinite reflections.
+ var/modifier_type_to_apply = null // If set, will apply a modifier to mobs that are hit by this projectile.
+ var/modifier_duration = null // How long the above modifier should last for. Leave null to be permanent.
embed_chance = 0 //Base chance for a projectile to embed
@@ -86,6 +88,8 @@
// if(isanimal(target)) return 0
var/mob/living/L = target
L.apply_effects(stun, weaken, paralyze, irradiate, stutter, eyeblur, drowsy, agony, blocked, incendiary, flammability) // add in AGONY!
+ if(modifier_type_to_apply)
+ L.add_modifier(modifier_type_to_apply, modifier_duration)
return 1
//called when the projectile stops flying because it collided with something
@@ -421,6 +425,7 @@
yo = null
xo = null
var/result = 0 //To pass the message back to the gun.
+ var/atom/movable/result_ref = null // The thing that got hit that made the check return true.
/obj/item/projectile/test/Bump(atom/A as mob|obj|turf|area)
if(A == firer)
@@ -439,6 +444,7 @@
if(!S.anchored)
return
if(istype(A, /mob/living) || istype(A, /obj/mecha) || istype(A, /obj/vehicle))
+ result_ref = A
result = 2 //We hit someone, return 1!
return
result = 1
@@ -459,7 +465,8 @@
/obj/item/projectile/test/process(var/turf/targloc)
while(src) //Loop on through!
if(result)
- return (result - 1)
+ return result_ref
+ // return (result - 1)
if((!( targloc ) || loc == targloc))
targloc = locate(min(max(x + xo, 1), world.maxx), min(max(y + yo, 1), world.maxy), z) //Finding the target turf at map edge
@@ -470,11 +477,13 @@
var/mob/living/M = locate() in get_turf(src)
if(istype(M)) //If there is someting living...
- return 1 //Return 1
+ result_ref = M
+ return result_ref //Return 1
else
M = locate() in get_step(src,targloc)
if(istype(M))
- return 1
+ result_ref = M
+ return result_ref
//Helper proc to check if you can hit them or not.
/proc/check_trajectory(atom/target as mob|obj, atom/firer as mob|obj, var/pass_flags=PASSTABLE|PASSGLASS|PASSGRILLE, flags=null)
diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm
index 0beffe46a3..df802f4bb5 100644
--- a/code/modules/projectiles/projectile/change.dm
+++ b/code/modules/projectiles/projectile/change.dm
@@ -54,7 +54,7 @@
Robot.mmi = new /obj/item/device/mmi(new_mob)
Robot.mmi.transfer_identity(M) //Does not transfer key/client.
if("slime")
- new_mob = new /mob/living/simple_animal/slime(M.loc)
+ new_mob = new /mob/living/simple_mob/slime/xenobio(M.loc)
new_mob.universal_speak = 1
else
var/mob/living/carbon/human/H
diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm
index da346d2eb7..c7afde1d7f 100644
--- a/code/modules/random_map/drop/droppod.dm
+++ b/code/modules/random_map/drop/droppod.dm
@@ -15,7 +15,7 @@
floor_type = /turf/simulated/floor/reinforced
var/list/supplied_drop_types = list()
var/door_type = /obj/structure/droppod_door
- var/drop_type = /mob/living/simple_animal/parrot
+ var/drop_type = /mob/living/simple_mob/animal/passive/bird/parrot
var/auto_open_doors
var/placement_explosion_dev = 1
diff --git a/code/modules/random_map/noise/desert.dm b/code/modules/random_map/noise/desert.dm
index 1c7ca229a4..0264d2a781 100644
--- a/code/modules/random_map/noise/desert.dm
+++ b/code/modules/random_map/noise/desert.dm
@@ -27,7 +27,7 @@
var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass)
new grass_path(T)
if(prob(5))
- var/mob_type = pick(list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse))
+ var/mob_type = pick(list(/mob/living/simple_mob/animal/passive/lizard, /mob/living/simple_mob/animal/passive/mouse))
new mob_type(T)
if(5 to 6)
if(prob(20))
diff --git a/code/modules/random_map/noise/tundra.dm b/code/modules/random_map/noise/tundra.dm
index 83b7435e40..6cb8114298 100644
--- a/code/modules/random_map/noise/tundra.dm
+++ b/code/modules/random_map/noise/tundra.dm
@@ -46,13 +46,13 @@
switch(val)
if(2)
if(prob(5))
- new /mob/living/simple_animal/crab(T)
+ new /mob/living/simple_mob/animal/passive/crab(T)
if(6)
if(prob(60))
var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass)
new grass_path(T)
if(prob(5))
- var/mob_type = pick(list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse))
+ var/mob_type = pick(list(/mob/living/simple_mob/animal/passive/lizard, /mob/living/simple_mob/animal/passive/mouse))
new mob_type(T)
if(7)
if(prob(60))
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index a32f83f794..cbe7dd9c5b 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -169,8 +169,8 @@
/datum/reagent/water/touch_mob(var/mob/living/L, var/amount)
if(istype(L))
// First, kill slimes.
- if(istype(L, /mob/living/simple_animal/slime))
- var/mob/living/simple_animal/slime/S = L
+ if(istype(L, /mob/living/simple_mob/slime))
+ var/mob/living/simple_mob/slime/S = L
S.adjustToxLoss(15 * amount)
S.visible_message("[S]'s flesh sizzles where the water touches it!", "Your flesh burns in the water!")
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index a7bcd87892..f66d91dd42 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -305,8 +305,6 @@
M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, 215)
if(prob(1))
M.emote("shiver")
- if(istype(M, /mob/living/simple_animal/slime))
- M.bodytemperature = max(M.bodytemperature - rand(10,20), 0)
holder.remove_reagent("capsaicin", 5)
/datum/reagent/frostoil/cryotoxin //A longer lasting version of frost oil.
@@ -346,8 +344,6 @@
M.apply_effect(2, AGONY, 0)
if(prob(5))
M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]", "You feel like your insides are burning!")
- if(istype(M, /mob/living/simple_animal/slime))
- M.bodytemperature += rand(10, 25)
holder.remove_reagent("frostoil", 5)
/datum/reagent/condensedcapsaicin
@@ -492,8 +488,6 @@
M.apply_effect(4, AGONY, 0)
if(prob(5))
M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]", "You feel like your insides are burning!")
- if(istype(M, /mob/living/simple_animal/slime))
- M.bodytemperature += rand(15, 30)
holder.remove_reagent("frostoil", 5)
/* Drinks */
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 6b705f4f54..9cf58bbfb8 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -106,6 +106,8 @@
M.drowsyness = max(0, M.drowsyness - 6 * removed * chem_effective)
M.hallucination = max(0, M.hallucination - 9 * removed * chem_effective)
M.adjustToxLoss(-4 * removed * chem_effective)
+ if(prob(10))
+ M.remove_a_modifier_of_type(/datum/modifier/poisoned)
/datum/reagent/carthatoline
name = "Carthatoline"
@@ -121,6 +123,8 @@
if(M.getToxLoss() && prob(10))
M.vomit(1)
M.adjustToxLoss(-8 * removed)
+ if(prob(30))
+ M.remove_a_modifier_of_type(/datum/modifier/poisoned)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/internal/liver/L = H.internal_organs_by_name[O_LIVER]
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
index 53ce37b3ef..ff753a5b37 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
@@ -360,7 +360,7 @@
S.dirt = 0
T.clean_blood()
- for(var/mob/living/simple_animal/slime/M in T)
+ for(var/mob/living/simple_mob/slime/M in T)
M.adjustToxLoss(rand(5, 10))
/datum/reagent/space_cleaner/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 737dbdcdad..1b70001c28 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -37,8 +37,8 @@
/obj/machinery/iv_drip,
/obj/machinery/disease2/incubator,
/obj/machinery/disposal,
- /mob/living/simple_animal/cow,
- /mob/living/simple_animal/retaliate/goat,
+ /mob/living/simple_mob/animal/passive/cow,
+ /mob/living/simple_mob/animal/goat,
/obj/machinery/computer/centrifuge,
/obj/machinery/sleeper,
/obj/machinery/smartfridge/,
diff --git a/code/modules/shieldgen/directional_shield.dm b/code/modules/shieldgen/directional_shield.dm
index 519edcea07..6a0aae0005 100644
--- a/code/modules/shieldgen/directional_shield.dm
+++ b/code/modules/shieldgen/directional_shield.dm
@@ -88,6 +88,8 @@
but allow those projectiles to leave the shield from the inside. Blocking too many damaging projectiles will cause the shield to fail."
icon = 'icons/obj/device.dmi'
icon_state = "signmaker_sec"
+ light_range = 4
+ light_power = 4
var/active = FALSE // If it's on.
var/shield_health = 400 // How much damage the shield blocks before breaking. This is a shared health pool for all shields attached to this projector.
var/max_shield_health = 400 // Ditto. This is fairly high, but shields are really big, you can't miss them, and laser carbines pump out so much hurt.
@@ -170,6 +172,8 @@
var/new_color = rgb(new_r, new_g, new_b)
+ set_light(light_range, light_power, new_color)
+
// Now deploy the new color to all the shields.
for(var/obj/effect/directional_shield/S in active_shields)
S.update_color(new_color)
diff --git a/code/modules/shieldgen/energy_field.dm b/code/modules/shieldgen/energy_field.dm
index 023d5fee95..1c5b8d2965 100644
--- a/code/modules/shieldgen/energy_field.dm
+++ b/code/modules/shieldgen/energy_field.dm
@@ -53,6 +53,12 @@
user.setClickCooldown(user.get_attack_speed(W))
..()
+/obj/effect/energy_field/attack_generic(mob/user, damage)
+ if(damage)
+ adjust_strength(-damage / 20)
+ user.do_attack_animation(src)
+ user.setClickCooldown(user.get_attack_speed())
+
/obj/effect/energy_field/attack_hand(var/mob/living/user)
impact_effect(3) // Harmless, but still produces the 'impact' effect.
..()
diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm
index 080f21a524..c8f74aff81 100644
--- a/code/modules/shuttles/shuttle.dm
+++ b/code/modules/shuttles/shuttle.dm
@@ -208,6 +208,7 @@
for(var/turf/T in dstturfs)
var/turf/D = locate(T.x, throwy - 1, T.z)
+<<<<<<< HEAD
for(var/I in T)
if(istype(I,/mob/living))
var/mob/living/L = I
@@ -215,6 +216,16 @@
else if(istype(I,/obj))
var/obj/O = I
O.forceMove(D)
+=======
+ for(var/atom/movable/AM as mob|obj in T)
+ AM.Move(D)
+
+ for(var/mob/living/carbon/bug in destination)
+ bug.gib()
+
+ for(var/mob/living/simple_mob/pest in destination)
+ pest.gib()
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
origin.move_contents_to(destination, direction=direction)
diff --git a/code/modules/spells/aoe_turf/summons.dm b/code/modules/spells/aoe_turf/summons.dm
index e8769d8537..94548a362f 100644
--- a/code/modules/spells/aoe_turf/summons.dm
+++ b/code/modules/spells/aoe_turf/summons.dm
@@ -20,7 +20,7 @@
invocation_type = SpI_SHOUT
range = 1
- summon_type = list(/mob/living/simple_animal/hostile/carp)
+ summon_type = list(/mob/living/simple_mob/animal/space/carp)
hud_state = "wiz_carp"
@@ -36,6 +36,10 @@
summon_amt = 10
range = 3
+<<<<<<< HEAD
summon_type = list(/mob/living/simple_animal/hostile/creature/vore) // Vorestation Edit
+=======
+ summon_type = list(/mob/living/simple_mob/creature)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
hud_state = "wiz_creature"
\ No newline at end of file
diff --git a/code/modules/spells/spell_code.dm b/code/modules/spells/spell_code.dm
index afd9bfdfa3..c1af923f72 100644
--- a/code/modules/spells/spell_code.dm
+++ b/code/modules/spells/spell_code.dm
@@ -198,10 +198,10 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
if(findNullRod(T))
return 0
- if(istype(user, /mob/living/simple_animal) && holder == user)
- var/mob/living/simple_animal/SA = user
- if(SA.purge)
- SA << "The nullrod's power interferes with your own!"
+ if(istype(user, /mob/living/simple_mob) && holder == user)
+ var/mob/living/simple_mob/SM = user
+ if(SM.purge)
+ SM << "The nullrod's power interferes with your own!"
return 0
if(!src.check_charge(skipcharge, user)) //sees if we can cast based on charges alone
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
index 515453f6a3..1f41ce9e3d 100644
--- a/code/modules/spells/spellbook.dm
+++ b/code/modules/spells/spellbook.dm
@@ -221,11 +221,6 @@
new /obj/item/clothing/head/helmet/space/void/wizard(get_turf(H))
temp = "You have purchased a suit of wizard armor."
max_uses--
- if("staffanimation")
- feedback_add_details("wizard_spell_learned","SA") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
- new /obj/item/weapon/gun/energy/staff/animate(get_turf(H))
- temp = "You have purchased a staff of animation."
- max_uses--
if("scrying")
feedback_add_details("wizard_spell_learned","SO") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells
new /obj/item/weapon/scrying(get_turf(H))
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index ae0e7610a7..58a322febd 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -207,8 +207,8 @@
BITSET(target.hud_updateflag, IMPLOYAL_HUD)
//Handle possessive brain borers.
- if(istype(obj,/mob/living/simple_animal/borer))
- var/mob/living/simple_animal/borer/worm = obj
+ if(istype(obj,/mob/living/simple_mob/animal/borer))
+ var/mob/living/simple_mob/animal/borer/worm = obj
if(worm.controlling)
target.release_control()
worm.detatch()
diff --git a/code/modules/tension/tension.dm b/code/modules/tension/tension.dm
index 913f1d2dff..82151a7e78 100644
--- a/code/modules/tension/tension.dm
+++ b/code/modules/tension/tension.dm
@@ -9,35 +9,42 @@
/atom/movable/proc/guess_threat_level(var/mob/living/threatened)
return 0
-/mob/living/simple_animal
+/mob/living/simple_mob
var/threat_level = null // Set this if you want an explicit danger rating.
-/mob/living/simple_animal/guess_threat_level(var/mob/living/threatened)
+/mob/living/simple_mob/guess_threat_level(var/mob/living/threatened)
if(threat_level) // If they have a predefined number, use it.
return threat_level
// Otherwise we need to guess how scary this thing is.
var/threat_guess = 0
// First lets consider their attack ability.
+ var/will_point_blank = FALSE
+ if(has_AI())
+ will_point_blank = ai_holder.pointblank
+
var/potential_damage = 0
- if(!ranged) //Melee damage.
+ if(!projectiletype || ( get_dist(src, threatened >= 1) && !will_point_blank ) ) // Melee damage.
potential_damage = (melee_damage_lower + melee_damage_upper) / 2
+
+ // Treat potential_damage as estimated DPS. If the enemy attacks twice as fast as usual, it will double the number.
+ potential_damage *= 1 SECOND / (base_attack_cooldown + melee_attack_delay)
else
- if(projectiletype)
- var/obj/item/projectile/P = new projectiletype(src)
- if(P.nodamage || P.taser_effect) // Tasers are somewhat less scary.
- potential_damage = P.agony / 2
- else
- potential_damage = P.damage
- if(P.damage_type == HALLOSS) // Not sure if any projectiles do this, but can't be too safe.
- potential_damage /= 2
- // Rubber bullets, I guess.
- potential_damage += P.agony / 2
+ var/obj/item/projectile/P = new projectiletype(src)
+ if(P.nodamage || P.taser_effect) // Tasers are somewhat less scary.
+ potential_damage = P.agony / 2
+ else
+ potential_damage = P.damage
+ if(P.damage_type == HALLOSS) // Not sure if any projectiles do this, but can't be too safe.
+ potential_damage /= 2
+ // Rubber bullets, I guess.
+ potential_damage += P.agony / 2
+ qdel(P)
- if(rapid) // This makes them shoot three times per cycle.
- potential_damage *= 3
+ potential_damage *= 1 SECOND / (base_attack_cooldown + ranged_attack_delay)
+
+ // Special attacks are ultra-specific to the mob so a generic threat assessment isn't really possible.
- qdel(P)
threat_guess += potential_damage
// Then consider their defense.
@@ -50,11 +57,12 @@
return 0
-/mob/living/simple_animal/get_threat(var/mob/living/threatened)
+/mob/living/simple_mob/get_threat(var/mob/living/threatened)
. = ..()
- if(!hostile)
- return 0 // Can't hurt anyone.
+ if(has_AI())
+ if(!ai_holder.hostile)
+ return 0 // Can't hurt anyone.
if(incapacitated(INCAPACITATION_DISABLED))
return 0 // Can't currently hurt you if it's stunned.
@@ -86,7 +94,7 @@
// Handle ability to harm.
// Being five tiles away from some spiders is a lot less scary than being in melee range of five spiders at once.
- if(!ranged)
+ if(!projectiletype)
threat /= max(get_dist(src, threatened), 1)
return threat
diff --git a/code/modules/ventcrawl/ventcrawl.dm b/code/modules/ventcrawl/ventcrawl.dm
index 1a4271050d..14d9a21dd7 100644
--- a/code/modules/ventcrawl/ventcrawl.dm
+++ b/code/modules/ventcrawl/ventcrawl.dm
@@ -9,8 +9,12 @@ var/list/ventcrawl_machinery = list(
/obj/item/device/radio/borg,
/obj/item/weapon/holder,
/obj/machinery/camera,
+<<<<<<< HEAD
/mob/living/simple_animal/borer,
/obj/belly, //VOREStation Edit,
+=======
+ /mob/living/simple_mob/animal/borer,
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
/obj/screen
)
@@ -38,7 +42,7 @@ var/list/ventcrawl_machinery = list(
add_ventcrawl(loc)
client.screen += global_hud.centermarker
-/mob/living/simple_animal/slime/can_ventcrawl()
+/mob/living/simple_mob/slime/xenobio/can_ventcrawl()
if(victim)
to_chat(src, "You cannot ventcrawl while feeding.")
return FALSE
@@ -70,11 +74,6 @@ var/list/ventcrawl_machinery = list(
return 1
return ..()
-/mob/living/simple_animal/spiderbot/is_allowed_vent_crawl_item(var/obj/item/carried_item)
- if(carried_item == held_item)
- return 1
- return ..()
-
/mob/living/proc/ventcrawl_carry()
for(var/atom/A in contents)
if(!is_allowed_vent_crawl_item(A))
diff --git a/code/modules/xenoarcheaology/artifacts/autocloner.dm b/code/modules/xenoarcheaology/artifacts/autocloner.dm
index 535eee1559..d0568b2080 100644
--- a/code/modules/xenoarcheaology/artifacts/autocloner.dm
+++ b/code/modules/xenoarcheaology/artifacts/autocloner.dm
@@ -21,6 +21,7 @@
//33% chance to spawn nasties
if(prob(33))
+<<<<<<< HEAD
spawn_type = pick(\
/mob/living/simple_animal/hostile/giant_spider/nurse,\
/mob/living/simple_animal/hostile/alien,\
@@ -28,18 +29,25 @@
/mob/living/simple_animal/hostile/carp,\
/mob/living/simple_animal/hostile/creature\
) // Vorestation Edits
+=======
+ spawn_type = pick(
+ /mob/living/simple_mob/animal/giant_spider/nurse,
+ /mob/living/simple_mob/animal/space/alien,
+ /mob/living/simple_mob/animal/space/bear,
+ /mob/living/simple_mob/creature,
+ /mob/living/simple_mob/slime/xenobio)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
else
spawn_type = pick(\
- /mob/living/simple_animal/cat,
- /mob/living/simple_animal/corgi,
- /mob/living/simple_animal/corgi/puppy,
- /mob/living/simple_animal/chicken,
- /mob/living/simple_animal/cow,
- /mob/living/simple_animal/parrot,
- /mob/living/simple_animal/slime,
- /mob/living/simple_animal/crab,
- /mob/living/simple_animal/mouse,
- /mob/living/simple_animal/retaliate/goat)
+ /mob/living/simple_mob/animal/passive/cat,
+ /mob/living/simple_mob/animal/passive/dog/corgi,
+ /mob/living/simple_mob/animal/passive/dog/corgi/puppy,
+ /mob/living/simple_mob/animal/passive/chicken,
+ /mob/living/simple_mob/animal/passive/cow,
+ /mob/living/simple_mob/animal/passive/bird/parrot,
+ /mob/living/simple_mob/animal/passive/crab,
+ /mob/living/simple_mob/animal/passive/mouse,
+ /mob/living/simple_mob/animal/goat)
//todo: how the hell is the asteroid permanently powered?
/obj/machinery/auto_cloner/process()
diff --git a/code/modules/xenoarcheaology/artifacts/replicator.dm b/code/modules/xenoarcheaology/artifacts/replicator.dm
index f5575721e5..7e27528aeb 100644
--- a/code/modules/xenoarcheaology/artifacts/replicator.dm
+++ b/code/modules/xenoarcheaology/artifacts/replicator.dm
@@ -26,9 +26,14 @@
/obj/item/roller,
/obj/structure/closet/crate,
/obj/structure/closet/acloset,
+<<<<<<< HEAD
/mob/living/simple_animal/hostile/mimic/crate,
/mob/living/simple_animal/hostile/viscerator,
/mob/living/simple_animal/hostile/hivebot,
+=======
+ /mob/living/simple_mob/mechanical/viscerator,
+ /mob/living/simple_mob/mechanical/hivebot,
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
/obj/item/device/analyzer,
/obj/item/device/camera,
/obj/item/device/flash,
diff --git a/code/modules/xenoarcheaology/finds/special.dm b/code/modules/xenoarcheaology/finds/special.dm
index 8f3d7e4a79..d467af7a4b 100644
--- a/code/modules/xenoarcheaology/finds/special.dm
+++ b/code/modules/xenoarcheaology/finds/special.dm
@@ -87,7 +87,11 @@
if(charges >= 3)
if(prob(5))
charges -= 1
+<<<<<<< HEAD
var/spawn_type = pick(/mob/living/simple_animal/hostile/creature/vore) // Vorestation Edit
+=======
+ var/spawn_type = pick(/mob/living/simple_mob/creature)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
new spawn_type(pick(view(1,src)))
playsound(src.loc, pick('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg'), 50, 1, -3)
diff --git a/code/modules/xenobio/items/extracts.dm b/code/modules/xenobio/items/extracts.dm
index 6d472b5a09..397ca52c33 100644
--- a/code/modules/xenobio/items/extracts.dm
+++ b/code/modules/xenobio/items/extracts.dm
@@ -77,7 +77,7 @@
/datum/chemical_reaction/slime/grey_new_slime/on_reaction(var/datum/reagents/holder)
holder.my_atom.visible_message("Infused with phoron, the core begins to quiver and grow, and soon a new baby slime emerges from it!")
- new /mob/living/simple_animal/slime(get_turf(holder.my_atom))
+ new /mob/living/simple_mob/slime/xenobio(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/grey_monkey
@@ -495,16 +495,16 @@
if(!(their_turf in Z.contents)) // Not in the same zone.
continue
- if(istype(L, /mob/living/simple_animal/slime))
- var/mob/living/simple_animal/slime/S = L
- if(S.cold_damage_per_tick <= 0) // Immune to cold.
+ if(istype(L, /mob/living/simple_mob/slime))
+ var/mob/living/simple_mob/slime/S = L
+ if(S.cold_resist >= 1) // Immune to cold.
to_chat(S, "A chill is felt around you, however it cannot harm you.")
continue
if(S.client) // Don't instantly kill player slimes.
to_chat(S, "You feel your body crystalize as an intense chill overwhelms you!")
- S.adjustToxLoss(S.cold_damage_per_tick * 2)
+ S.inflict_cold_damage(100)
else
- S.adjustToxLoss(S.cold_damage_per_tick * 5) // Metal slimes can survive this 'slime nuke'.
+ S.inflict_cold_damage(200) // Metal slimes can survive this 'slime nuke'.
continue
if(ishuman(L))
@@ -552,17 +552,21 @@
required = /obj/item/slime_extract/red
/datum/chemical_reaction/slime/red_enrage/on_reaction(var/datum/reagents/holder)
- for(var/mob/living/simple_animal/slime/S in view(get_turf(holder.my_atom)))
- if(S.stat || S.docile || S.rabid)
+ for(var/mob/living/simple_mob/slime/S in view(get_turf(holder.my_atom)))
+ if(S.stat)
continue
+ if(istype(S, /mob/living/simple_mob/slime/xenobio))
+ var/mob/living/simple_mob/slime/xenobio/X = S
+ if(X.harmless)
+ continue
+ if(!X.client)
+ X.enrage()
+
S.add_modifier(/datum/modifier/berserk, 30 SECONDS)
if(S.client) // Player slimes always have free will.
to_chat(S, "An intense wave of rage is felt from inside, but you remain in control of yourself.")
- continue
-
- S.enrage()
for(var/mob/living/carbon/human/H in view(get_turf(holder.my_atom)))
if(H.species.name == SPECIES_PROMETHEAN)
@@ -957,8 +961,8 @@
/datum/chemical_reaction/slime/rainbow_random_slime/on_reaction(var/datum/reagents/holder)
- var/mob/living/simple_animal/slime/S
- var/list/slime_types = typesof(/mob/living/simple_animal/slime)
+ var/mob/living/simple_mob/slime/xenobio/S
+ var/list/slime_types = typesof(/mob/living/simple_mob/slime/xenobio)
while(slime_types.len)
S = pick(slime_types)
diff --git a/code/modules/xenobio/items/slimepotions.dm b/code/modules/xenobio/items/slimepotions.dm
index df03fdab6f..944853bec7 100644
--- a/code/modules/xenobio/items/slimepotions.dm
+++ b/code/modules/xenobio/items/slimepotions.dm
@@ -21,7 +21,7 @@
icon_state = "potcyan"
description_info = "The slime needs to be alive for this to work. It will reduce the chances of mutation by 15%."
-/obj/item/slimepotion/stabilizer/attack(mob/living/simple_animal/slime/M, mob/user)
+/obj/item/slimepotion/stabilizer/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "The stabilizer only works on slimes!")
return ..()
@@ -45,7 +45,7 @@
description_info = "The slime needs to be alive for this to work. It will increase the chances of mutation by 12%."
icon_state = "potred"
-/obj/item/slimepotion/mutator/attack(mob/living/simple_animal/slime/M, mob/user)
+/obj/item/slimepotion/mutator/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "The mutator only works on slimes!")
return ..()
@@ -67,20 +67,25 @@
name = "docility agent"
desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame. It might also work on other creatures?"
icon_state = "potlightpink"
- description_info = "The target needs to be alive, not already passive, and have animal-like intelligence."
+ description_info = "The target needs to be alive, not already passive, and be an animal or slime type entity."
-/obj/item/slimepotion/docility/attack(mob/living/simple_animal/M, mob/user)
+/obj/item/slimepotion/docility/attack(mob/living/simple_mob/M, mob/user)
if(!istype(M))
to_chat(user, "The agent only works on creatures!")
return ..()
if(M.stat == DEAD)
to_chat(user, "\The [M] is dead!")
return ..()
+ if(!M.has_AI())
+ to_chat(user, span("warning", "\The [M] is too strongly willed for this to affect them.")) // Most likely player controlled.
+ return
+
+ var/datum/ai_holder/AI = M.ai_holder
// Slimes.
- if(istype(M, /mob/living/simple_animal/slime))
- var/mob/living/simple_animal/slime/S = M
- if(S.docile)
+ if(istype(M, /mob/living/simple_mob/slime/xenobio))
+ var/mob/living/simple_mob/slime/xenobio/S = M
+ if(S.harmless)
to_chat(user, "The slime is already docile!")
return ..()
@@ -89,22 +94,22 @@
to_chat(M, "You absorb the agent and feel your intense desire to feed melt away.")
to_chat(user, "You feed the slime the agent, removing its hunger and calming it.")
- // Simple Animals.
- else if(istype(M, /mob/living/simple_animal))
- var/mob/living/simple_animal/SA = M
- if(SA.intelligence_level > SA_ANIMAL) // So you can't use this on Russians/syndies/hivebots/etc.
- to_chat(user, "\The [SA] is too intellient for this to affect them.")
+ // Simple Mobs.
+ else if(istype(M, /mob/living/simple_mob))
+ var/mob/living/simple_mob/SM = M
+ if(!(SM.mob_class & MOB_CLASS_SLIME|MOB_CLASS_ANIMAL)) // So you can't use this on Russians/syndies/hivebots/etc.
+ to_chat(user, "\The [SM] only works on slimes and animals.")
return ..()
- if(!SA.hostile)
- to_chat(user, "\The [SA] is already passive!")
+ if(!AI.hostile)
+ to_chat(user, "\The [SM] is already passive!")
return ..()
- SA.hostile = FALSE
+ AI.hostile = FALSE
to_chat(M, "You consume the agent and feel a serene sense of peace.")
- to_chat(user, "You feed \the [SA] the agent, calming it.")
+ to_chat(user, "You feed \the [SM] the agent, calming it.")
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
- M.LoseTarget() // So hostile things stop attacking people even if not hostile anymore.
+ AI.lost_target() // So hostile things stop attacking people even if not hostile anymore.
var/newname = copytext(sanitize(input(user, "Would you like to give \the [M] a name?", "Name your new pet", M.name) as null|text),1,MAX_NAME_LEN)
if(newname)
@@ -121,7 +126,7 @@
Extra extracts are not passed down to offspring when reproducing."
icon_state = "potpurple"
-/obj/item/slimepotion/steroid/attack(mob/living/simple_animal/slime/M, mob/user)
+/obj/item/slimepotion/steroid/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
to_chat(user, "The steroid only works on slimes!")
return ..()
@@ -149,7 +154,7 @@
carry over to offspring when reproducing."
icon_state = "potpink"
-/obj/item/slimepotion/unity/attack(mob/living/simple_animal/slime/M, mob/user)
+/obj/item/slimepotion/unity/attack(mob/living/simple_mob/slime/M, mob/user)
if(!istype(M))
to_chat(user, "The agent only works on slimes!")
return ..()
@@ -175,12 +180,12 @@
the user's faction, which means the slime will attack things that are hostile to the user's faction, such as carp, spiders, and other slimes."
icon_state = "potred"
-/obj/item/slimepotion/loyalty/attack(mob/living/simple_animal/M, mob/user)
+/obj/item/slimepotion/loyalty/attack(mob/living/simple_mob/M, mob/user)
if(!istype(M))
- to_chat(user, "The agent only works on animals!")
+ to_chat(user, "The agent only works on creatures!")
return ..()
- if(M.intelligence_level > SA_ANIMAL) // So you can't use this on Russians/syndies/hivebots/etc.
- to_chat(user, "\The [M] is too intellient for this to affect them.")
+ if(!(M.mob_class & MOB_CLASS_SLIME|MOB_CLASS_ANIMAL)) // So you can't use this on Russians/syndies/hivebots/etc.
+ to_chat(user, "\The [M] only works on slimes and animals.")
return ..()
if(M.stat == DEAD)
to_chat(user, "The animal is dead!")
@@ -188,12 +193,16 @@
if(M.faction == user.faction)
to_chat(user, "\The [M] is already loyal to your species!")
return ..()
+ if(!M.has_AI())
+ to_chat(user, span("warning", "\The [M] is too strong-willed for this to affect them."))
+ return ..()
+
+ var/datum/ai_holder/AI = M.ai_holder
to_chat(user, "You feed \the [M] the agent. It will now try to murder things that want to murder you instead.")
to_chat(M, "\The [user] feeds you \the [src], and feel that the others will regard you as an outsider now.")
M.faction = user.faction
- M.attack_same = FALSE
- M.LoseTarget() // So hostile things stop attacking people even if not hostile anymore.
+ AI.lost_target() // So hostile things stop attacking people even if not hostile anymore.
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
@@ -206,28 +215,29 @@
their 'friend', and will never attack them. This might also work on other things besides slimes."
icon_state = "potlightpink"
-/obj/item/slimepotion/friendship/attack(mob/living/simple_animal/M, mob/user)
+/obj/item/slimepotion/friendship/attack(mob/living/simple_mob/M, mob/user)
if(!istype(M))
- to_chat(user, "The agent only works on animals!")
+ to_chat(user, "The agent only works on creatures!")
return ..()
- if(M.intelligence_level > SA_ANIMAL) // So you can't use this on Russians/syndies/hivebots/etc.
- to_chat(user, "\The [M] is too intellient for this to affect them.")
+ if(!(M.mob_class & MOB_CLASS_SLIME|MOB_CLASS_ANIMAL)) // So you can't use this on Russians/syndies/hivebots/etc.
+ to_chat(user, "\The [M] only works on slimes and animals.")
return ..()
if(M.stat == DEAD)
- to_chat(user, "The animal is dead!")
+ to_chat(user, "\The [M] is dead!")
return ..()
if(user in M.friends)
to_chat(user, "\The [M] is already loyal to you!")
return ..()
+ if(!M.has_AI())
+ to_chat(user, span("warning", "\The [M] is too strong-willed for this to affect them."))
+ return ..()
+
+ var/datum/ai_holder/AI = M.ai_holder
to_chat(user, "You feed \the [M] the agent. It will now be your best friend.")
to_chat(M, "\The [user] feeds you \the [src], and feel that \the [user] wants to be best friends with you.")
- if(isslime(M))
- var/mob/living/simple_animal/slime/S = M
- S.befriend(user)
- else
- M.friends.Add(user)
- M.LoseTarget() // So hostile things stop attacking people even if not hostile anymore.
+ M.friends.Add(user)
+ AI.lost_target() // So hostile things stop attacking people even if not hostile anymore.
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
qdel(src)
@@ -239,15 +249,16 @@
description_info = "The slime needs to be alive for this to work. It will instantly grow the slime enough to reproduce."
icon_state = "potyellow"
-/obj/item/slimepotion/feeding/attack(mob/living/simple_animal/slime/M, mob/user)
+/obj/item/slimepotion/feeding/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
if(!istype(M))
- to_chat(user, "The mutator only works on slimes!")
+ to_chat(user, "The feeding agent only works on slimes!")
return ..()
if(M.stat == DEAD)
to_chat(user, "The slime is dead!")
return ..()
to_chat(user, "You feed the slime the feeding agent. It will now instantly reproduce.")
+ M.amount_grown = 10
M.make_adult()
M.amount_grown = 10
M.reproduce()
diff --git a/code/modules/xenobio/items/weapons.dm b/code/modules/xenobio/items/weapons.dm
index 8fb5f9eea6..bb735c35f2 100644
--- a/code/modules/xenobio/items/weapons.dm
+++ b/code/modules/xenobio/items/weapons.dm
@@ -1,6 +1,6 @@
/obj/item/weapon/melee/baton/slime
name = "slimebaton"
- desc = "A modified stun baton designed to stun slimes and other lesser xeno lifeforms for handling."
+ desc = "A modified stun baton designed to stun slimes and other lesser slimy xeno lifeforms for handling."
icon_state = "slimebaton"
item_state = "slimebaton"
slot_flags = SLOT_BELT
@@ -9,31 +9,30 @@
origin_tech = list(TECH_COMBAT = 2, TECH_BIO = 2)
agonyforce = 10 //It's not supposed to be great at stunning human beings.
hitcost = 48 //Less zap for less cost
- description_info = "This baton will stun a slime or other lesser lifeform for about five seconds, if hit with it while on."
+ description_info = "This baton will stun a slime or other slime-based lifeform for about five seconds, if hit with it while on."
-/obj/item/weapon/melee/baton/slime/attack(mob/M, mob/user, hit_zone)
- // Simple Animals.
- if(istype(M, /mob/living/simple_animal/slime) && status)
- var/mob/living/simple_animal/SA = M
- if(SA.intelligence_level <= SA_ANIMAL) // So it doesn't stun hivebots or syndies.
- SA.Weaken(5)
- if(isslime(SA))
- var/mob/living/simple_animal/slime/S = SA
- S.adjust_discipline(3)
+/obj/item/weapon/melee/baton/slime/attack(mob/living/L, mob/user, hit_zone)
+ if(istype(L) && status) // Is it on?
+ if(L.mob_class & MOB_CLASS_SLIME) // Are they some kind of slime? (Prommies might pass this check someday).
+ if(isslime(L))
+ var/mob/living/simple_mob/slime/S = L
+ S.slimebatoned(user, 5) // Feral and xenobio slimes will react differently to this.
+ else
+ L.Weaken(5)
+
+ // Now for prommies.
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(H.species && H.species.name == SPECIES_PROMETHEAN)
+ var/agony_to_apply = 60 - agonyforce
+ H.apply_damage(agony_to_apply, HALLOSS)
- // Prometheans.
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.species && H.species.name == SPECIES_PROMETHEAN && status)
- var/agony_to_apply = 60 - agonyforce
- H.apply_damage(agony_to_apply, HALLOSS)
..()
-/obj/item/weapon/melee/baton/slime/loaded/New()
- ..()
+/obj/item/weapon/melee/baton/slime/loaded/initialize()
bcell = new/obj/item/weapon/cell/device(src)
update_icon()
- return
+ return ..()
// Research borg's version
@@ -61,9 +60,9 @@
charge_cost = 120 // Twice as many shots.
projectile_type = /obj/item/projectile/beam/stun/xeno
accuracy = 30 // Make it a bit easier to hit the slimes.
- description_info = "This gun will stun a slime or other lesser lifeform for about two seconds, if hit with the projectile it fires."
+ description_info = "This gun will stun a slime or other lesser slimy lifeform for about two seconds, if hit with the projectile it fires."
description_fluff = "An easy to use weapon designed by NanoTrasen, for NanoTrasen. This weapon is designed to subdue lesser \
- xeno lifeforms at a distance. It is ineffective at stunning larger lifeforms such as humanoids."
+ slime-based xeno lifeforms at a distance. It is ineffective at stunning non-slimy lifeforms such as humanoids."
/obj/item/weapon/gun/energy/taser/xeno/robot // Borg version
self_recharge = 1
@@ -71,7 +70,7 @@
recharge_time = 3
/obj/item/weapon/gun/energy/taser/xeno/sec //NT's corner-cutting option for their on-station security.
- desc = "An NT Mk30 NL retrofitted to fire beams for subduing non-humanoid xeno life forms."
+ desc = "An NT Mk30 NL retrofitted to fire beams for subduing non-humanoid slimy xeno life forms."
icon_state = "taserblue"
item_state = "taser"
projectile_type = /obj/item/projectile/beam/stun/xeno/weak
@@ -102,20 +101,17 @@
/obj/item/projectile/beam/stun/xeno/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null)
if(istype(target, /mob/living))
var/mob/living/L = target
+ if(L.mob_class & MOB_CLASS_SLIME)
+ if(isslime(L))
+ var/mob/living/simple_mob/slime/S = L
+ S.slimebatoned(firer, round(agony/2))
+ else
+ L.Weaken(round(agony/2))
- // Simple Animals.
- if(istype(L, /mob/living/simple_animal/slime))
- var/mob/living/simple_animal/SA = L
- if(SA.intelligence_level <= SA_ANIMAL) // So it doesn't stun hivebots or syndies.
- SA.Weaken(round(agony/2)) // Less powerful since its ranged, and therefore safer.
- if(isslime(SA))
- var/mob/living/simple_animal/slime/S = SA
- S.adjust_discipline(round(agony/2))
-
- // Prometheans.
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.species && H.species.name == SPECIES_PROMETHEAN)
- if(agony == initial(agony))
+ if(agony == initial(agony)) // ??????
agony = round((14 * agony) - agony) //60-4 = 56, 56 / 4 = 14. Prior was flat 60 - agony of the beam to equate to 60.
+
..()
diff --git a/code/modules/xenobio/machinery/processor.dm b/code/modules/xenobio/machinery/processor.dm
index 56b7cee3bf..6d888adb26 100644
--- a/code/modules/xenobio/machinery/processor.dm
+++ b/code/modules/xenobio/machinery/processor.dm
@@ -79,8 +79,8 @@
playsound(src.loc, 'sound/machines/ding.ogg', 50, 1)
/obj/machinery/processor/proc/extract(var/atom/movable/AM)
- if(istype(AM, /mob/living/simple_animal/slime))
- var/mob/living/simple_animal/slime/S = AM
+ if(istype(AM, /mob/living/simple_mob/slime))
+ var/mob/living/simple_mob/slime/S = AM
while(S.cores)
new S.coretype(get_turf(src))
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
@@ -98,8 +98,8 @@
sleep(1 SECOND)
/obj/machinery/processor/proc/can_insert(var/atom/movable/AM)
- if(istype(AM, /mob/living/simple_animal/slime))
- var/mob/living/simple_animal/slime/S = AM
+ if(istype(AM, /mob/living/simple_mob/slime))
+ var/mob/living/simple_mob/slime/S = AM
if(S.stat != DEAD)
return FALSE
return TRUE
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index 7c595b923f..dd992a62bf 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -110,4 +110,11 @@ h1.alert, h2.alert {color: #000000;}
BIG IMG.icon {width: 32px; height: 32px;}
+/* Debug Logs */
+.debug_error {color:#FF0000; font-weight:bold}
+.debug_warning {color:#FF0000;}
+.debug_info {}
+.debug_debug {color:#0000FF;}
+.debug_trace {color:#888888;}
+
"}
diff --git a/html/changelog.html b/html/changelog.html
index 91fdd23b30..6c8289bb04 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -85,7 +85,7 @@
Mechoid updated:
- - Hallucinations are no longer only Pun Pun.
+ - Hallucinations are no longer only Pun Pun.
Neerti updated:
Mechoid updated:
- - Promethean limbs store more damage.
- - Promethean limbs, in addition to normal severing rules, have a higher chance to be splattered or ashed once they reach maximum damage.
+ - Promethean limbs store more damage.
+ - Promethean limbs, in addition to normal severing rules, have a higher chance to be splattered or ashed once they reach maximum damage.
- Limbs can now spread their damage to neighbors with the spread_dam var, when reaching max damage.
PrismaticGynoid updated:
@@ -322,7 +322,7 @@
- Broken APCs can be bashed open with slightly smaller objects now. This means wrenches are acceptable, no need to hunt down a fire extinguisher.
- EVA rigsuit/hardsuit no longer holds toolboxes in suit storage since those have been a volume inventory for some time now. RIP ghetto satchel.
- - CE's rigsuit/hardsuit no longer holds pickaxes and ore satchels, but can now hold inflateables.
+ - CE's rigsuit/hardsuit no longer holds pickaxes and ore satchels, but can now hold inflateables.
- Retracting rigsuit/hardsuit helmets with no valid mask equipped now disables internals.
- Offline rigsuits/hardsuits are no longer considered valid air supplies by the internals button. Before, your internals would instantly shut off before you could get a breath out of the rigsuit. Now, the internals button will look for a different tank instead.
- Tajaran now get to keep their tails when they wear the EVA, RD, or Industrial rigsuits/hardsuits. Unathi sprites to come soon!
diff --git a/html/changelogs/Neerti-AI.yml b/html/changelogs/Neerti-AI.yml
new file mode 100644
index 0000000000..9b9f13674d
--- /dev/null
+++ b/html/changelogs/Neerti-AI.yml
@@ -0,0 +1,37 @@
+################################
+# 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
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Neerti
+
+# 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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - experiment: "Rewrites the AI system for mobs. It should be more responsive and robust. Some mobs have special AIs which can do certain things like kiting, following you on a lark, or telling you to go away before shooting you."
+ - tweak: "Rewrites literally every 'simple_animal' mob into new, shinier, and hopefully more interesting 'simple_mob' mobs, some with new mechanics, like spiders, fake mechas, and hivebots. There are so many changes that it wouldn't be possible to list them here."
diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi
index 4b7e714731..6c631498f6 100644
Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index b735173878..e45ddcbb0d 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi
index 5c3bb92b76..ca5c8b87a5 100644
Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ
diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi
index c294178f91..dc8de0b6d0 100644
Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ
diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi
index e503b0d1b9..f3836ae2c1 100644
Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ
diff --git a/icons/mob/critter.dmi b/icons/mob/critter.dmi
index f83c836427..4f249e2e8a 100644
Binary files a/icons/mob/critter.dmi and b/icons/mob/critter.dmi differ
diff --git a/icons/mob/hivebot.dmi b/icons/mob/hivebot.dmi
index ecaa519822..e18209733d 100644
Binary files a/icons/mob/hivebot.dmi and b/icons/mob/hivebot.dmi differ
diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi
index 1b0e592001..4bfb8bf479 100644
Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ
diff --git a/icons/mob/modifier_effects.dmi b/icons/mob/modifier_effects.dmi
index 262e45e717..abd78dcd31 100644
Binary files a/icons/mob/modifier_effects.dmi and b/icons/mob/modifier_effects.dmi differ
diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi
index 0798bbc4d3..842909d3ec 100644
Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ
diff --git a/icons/mob/slime2.dmi b/icons/mob/slime2.dmi
index a0b6051665..9391c1acd3 100644
Binary files a/icons/mob/slime2.dmi and b/icons/mob/slime2.dmi differ
diff --git a/maps/RandomZLevels/wildwest.dm b/maps/RandomZLevels/wildwest.dm
index 70914f043f..da7377e0b9 100644
--- a/maps/RandomZLevels/wildwest.dm
+++ b/maps/RandomZLevels/wildwest.dm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
/* Code for the Wild West map by Brotemis
* Contains:
* Wish Granter
@@ -171,3 +172,178 @@
C.visible_message("[usr] appears to wake from the dead, having healed all wounds.")
C.update_canmove()
return 1
+=======
+/* Code for the Wild West map by Brotemis
+ * Contains:
+ * Wish Granter
+ * Meat Grinder
+ */
+
+/*
+ * Wish Granter
+ */
+/obj/machinery/wish_granter_dark
+ name = "Wish Granter"
+ desc = "You're not so sure about this, anymore..."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "syndbeacon"
+
+ anchored = 1
+ density = 1
+ use_power = 0
+
+ var/chargesa = 1
+ var/insistinga = 0
+
+/obj/machinery/wish_granter_dark/attack_hand(var/mob/living/carbon/human/user as mob)
+ usr.set_machine(src)
+
+ if(chargesa <= 0)
+ user << "The Wish Granter lies silent."
+ return
+
+ else if(!istype(user, /mob/living/carbon/human))
+ user << "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's."
+ return
+
+ else if(is_special_character(user))
+ user << "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away."
+
+ else if (!insistinga)
+ user << "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?"
+ insistinga++
+
+ else
+ chargesa--
+ insistinga = 0
+ var/wish = input("You want...","Wish") as null|anything in list("Power","Wealth","Immortality","To Kill","Peace")
+ switch(wish)
+ if("Power")
+ user << "Your wish is granted, but at a terrible cost..."
+ user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
+ if (!(LASER in user.mutations))
+ user.mutations.Add(LASER)
+ user << "You feel pressure building behind your eyes."
+ if (!(COLD_RESISTANCE in user.mutations))
+ user.mutations.Add(COLD_RESISTANCE)
+ user << "Your body feels warm."
+ if (!(XRAY in user.mutations))
+ user.mutations.Add(XRAY)
+ user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
+ user.see_in_dark = 8
+ user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
+ user << "The walls suddenly disappear."
+ user.dna.mutantrace = "shadow"
+ user.update_mutantrace()
+ if("Wealth")
+ user << "Your wish is granted, but at a terrible cost..."
+ user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
+ new /obj/structure/closet/syndicate/resources/everything(loc)
+ user.dna.mutantrace = "shadow"
+ user.update_mutantrace()
+ if("Immortality")
+ user << "Your wish is granted, but at a terrible cost..."
+ user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
+ user.verbs += /mob/living/carbon/proc/immortality
+ user.dna.mutantrace = "shadow"
+ user.update_mutantrace()
+ if("To Kill")
+ user << "Your wish is granted, but at a terrible cost..."
+ user << "The Wish Granter punishes you for your wickedness, claiming your soul and warping your body to match the darkness in your heart."
+ ticker.mode.traitors += user.mind
+ user.mind.special_role = "traitor"
+ var/datum/objective/hijack/hijack = new
+ hijack.owner = user.mind
+ user.mind.objectives += hijack
+ user << "Your inhibitions are swept away, the bonds of loyalty broken, you are free to murder as you please!"
+ var/obj_count = 1
+ for(var/datum/objective/OBJ in user.mind.objectives)
+ user << "Objective #[obj_count]: [OBJ.explanation_text]"
+ obj_count++
+ user.dna.mutantrace = "shadow"
+ user.update_mutantrace()
+ if("Peace")
+ user << "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence."
+ user << "You feel as if you just narrowly avoided a terrible fate..."
+ for(var/mob/living/simple_mob/faithless/F in living_mob_list)
+ F.health = -10
+ F.stat = 2
+ F.icon_state = "faithless_dead"
+
+
+///////////////Meatgrinder//////////////
+
+
+/obj/effect/meatgrinder
+ name = "Meat Grinder"
+ desc = "What is that thing?"
+ density = 1
+ anchored = 1
+ icon = 'icons/mob/critter.dmi'
+ icon_state = "blob"
+ var/triggerproc = "explode" //name of the proc thats called when the mine is triggered
+ var/triggered = 0
+
+/obj/effect/meatgrinder/New()
+ icon_state = "blob"
+
+/obj/effect/meatgrinder/HasEntered(AM as mob|obj)
+ Bumped(AM)
+
+/obj/effect/meatgrinder/Bumped(mob/M as mob|obj)
+
+ if(triggered) return
+
+ if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))
+ for(var/mob/O in viewers(world.view, src.loc))
+ O << "[M] triggered the \icon[src] [src]"
+ triggered = 1
+ call(src,triggerproc)(M)
+
+/obj/effect/meatgrinder/proc/triggerrad1(mob)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ for(var/mob/O in viewers(world.view, src.loc))
+ s.set_up(3, 1, src)
+ s.start()
+ explosion(mob, 1, 0, 0, 0)
+ spawn(0)
+ qdel(src)
+
+/obj/effect/meatgrinder
+ name = "Meat Grinder"
+ icon_state = "blob"
+ triggerproc = "triggerrad1"
+
+
+/////For the Wishgranter///////////
+
+/mob/living/carbon/proc/immortality()
+ set category = "Immortality"
+ set name = "Resurrection"
+
+ var/mob/living/carbon/C = usr
+ if(!C.stat)
+ C << "You're not dead yet!"
+ return
+ C << "Death is not your end!"
+
+ spawn(rand(800,1200))
+ if(C.stat == DEAD)
+ dead_mob_list -= C
+ living_mob_list += C
+ C.stat = CONSCIOUS
+ C.tod = null
+ C.setToxLoss(0)
+ C.setOxyLoss(0)
+ C.setCloneLoss(0)
+ C.SetParalysis(0)
+ C.SetStunned(0)
+ C.SetWeakened(0)
+ C.radiation = 0
+ C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss())
+ C.reagents.clear_reagents()
+ C << "You have regenerated."
+ C.visible_message("[usr] appears to wake from the dead, having healed all wounds.")
+ C.update_canmove()
+ return 1
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm
index 1021cbbcaa..8643d1d88d 100644
--- a/maps/northern_star/polaris-1.dmm
+++ b/maps/northern_star/polaris-1.dmm
@@ -131,7 +131,7 @@
"acA" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/library)
"acB" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/locker)
"acC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/library)
-"acD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/mob/living/simple_animal/mouse,/turf/simulated/floor,/area/maintenance/library)
+"acD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor,/area/maintenance/library)
"acE" = (/obj/structure/table/woodentable,/obj/machinery/recharger{pixel_y = 0},/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/library_conference_room)
"acF" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/library_conference_room)
"acG" = (/turf/simulated/floor/wood,/area/library_conference_room)
@@ -206,7 +206,7 @@
"adX" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor,/area/maintenance/library)
"adY" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor,/area/maintenance/library)
"adZ" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/civilian_hallway_fore)
-"aea" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/locker)
+"aea" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor/plating,/area/maintenance/locker)
"aeb" = (/obj/machinery/camera/network/civilian{c_tag = "CIV - Chapel Morgue"; dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"aec" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"aed" = (/obj/machinery/door/window{dir = 8; name = "Mass Driver"; req_access = list(22)},/obj/machinery/mass_driver{dir = 4; id = "chapelgun"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/airlock_sensor{pixel_y = 25},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/plating,/area/chapel/chapel_morgue)
@@ -305,7 +305,7 @@
"afS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/locker)
"afT" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"afU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
-"afV" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_animal/mouse,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
+"afV" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"afW" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/dark,/area/chapel/chapel_morgue)
"afX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/chapel/chapel_morgue)
"afY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/security/detectives_office)
@@ -1004,7 +1004,7 @@
"atp" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor,/area/security/riot_control)
"atq" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor,/area/security/riot_control)
"atr" = (/turf/simulated/wall/r_wall,/area/security/riot_control)
-"ats" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ats" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"att" = (/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/security_starboard)
"atu" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/maintenance/security_starboard)
"atv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor,/area/maintenance/security_starboard)
@@ -2752,7 +2752,7 @@
"baV" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/boots/combat,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/cargo,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/mine/unexplored/upper_level)
"baW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Pump Station"; req_one_access = list(11,24)},/turf/simulated/floor,/area/maintenance/medbay_fore)
"baX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
-"baY" = (/mob/living/simple_animal/mouse,/turf/simulated/floor,/area/maintenance/research_shuttle)
+"baY" = (/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor,/area/maintenance/research_shuttle)
"baZ" = (/turf/simulated/wall/r_wall,/area/rnd/research_storage)
"bba" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bbb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/rnd/research)
@@ -3776,7 +3776,7 @@
"buF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
"buG" = (/obj/structure/flora/pottedplant{icon_state = "plant-01"},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"buH" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
-"buI" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/mob/living/simple_animal/cat/fluff/Runtime,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
+"buI" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/mob/living/simple_mob/animal/passive/cat/runtime,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"buJ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"buK" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"buL" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
@@ -4187,7 +4187,7 @@
"bCA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/central)
"bCB" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/simulated/floor,/area/maintenance/central)
"bCC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/central)
-"bCD" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_animal/mouse,/turf/simulated/floor,/area/maintenance/central)
+"bCD" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor,/area/maintenance/central)
"bCE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/maintenance/central)
"bCF" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/maintenance/central)
"bCG" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/maintenance/central)
@@ -4270,7 +4270,7 @@
"bEf" = (/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/obj/random/drinkbottle,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/central)
"bEg" = (/turf/simulated/floor/tiled,/area/maintenance/central)
"bEh" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/maintenance/central)
-"bEi" = (/obj/machinery/light/small,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/central)
+"bEi" = (/obj/machinery/light/small,/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor/plating,/area/maintenance/central)
"bEj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/central)
"bEk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/maintenance/central)
"bEl" = (/obj/structure/closet,/obj/item/weapon/storage/backpack,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/central)
@@ -4570,7 +4570,7 @@
"bJT" = (/turf/simulated/wall/r_wall,/area/quartermaster/miningdock)
"bJU" = (/obj/structure/lattice,/obj/machinery/light{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/quartermaster/miningdock)
"bJV" = (/obj/structure/lattice,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/mineral/floor/ignore_mapgen,/area/quartermaster/miningdock)
-"bJW" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/research)
+"bJW" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor/plating,/area/maintenance/research)
"bJX" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/obj/random/maintenance/research,/obj/random/maintenance/research,/turf/simulated/floor/plating,/area/maintenance/research)
"bJY" = (/obj/structure/table/standard,/obj/item/device/assembly/igniter,/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
"bJZ" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light,/turf/simulated/floor/reinforced,/area/rnd/misc_lab)
@@ -4590,7 +4590,7 @@
"bKn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_four)
"bKo" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable/green,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 8; id = "hop_office"},/obj/structure/window/reinforced/polarized{dir = 2; id = "hop_office"},/obj/structure/window/reinforced/polarized{dir = 4; id = "hop_office"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
"bKp" = (/obj/structure/closet/secure_closet/hop,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop)
-"bKq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
+"bKq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/mob/living/simple_mob/animal/passive/dog/corgi/Ian,/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
"bKr" = (/obj/structure/bed/chair/office/dark,/obj/effect/landmark/start{name = "Head of Personnel"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
"bKs" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
"bKt" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
@@ -4886,7 +4886,7 @@
"bPX" = (/obj/machinery/computer/aifixer,/obj/effect/floor_decal/corner/purple/full,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bPY" = (/obj/machinery/computer/robotics,/obj/effect/floor_decal/corner/purple{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bPZ" = (/obj/machinery/computer/mecha,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/ai_status_display{pixel_y = -32},/obj/machinery/camera/network/research{c_tag = "SCI - RD's Office"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
-"bQa" = (/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/mob/living/simple_animal/slime/rainbow/kendrick,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
+"bQa" = (/obj/effect/floor_decal/corner/purple/full{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/mob/living/simple_mob/slime/xenobio/rainbow/kendrick,/turf/simulated/floor/tiled/white,/area/rnd/rdoffice)
"bQb" = (/obj/structure/table/rack,/obj/item/weapon/rig/hazmat/equipped,/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/rnd/rdoffice)
"bQc" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled,/area/assembly/robotics)
"bQd" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/corner/pink{dir = 4},/turf/simulated/floor/tiled,/area/assembly/robotics)
@@ -5366,7 +5366,7 @@
"bZj" = (/turf/simulated/wall,/area/maintenance/medbay_aft)
"bZk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/medbay_aft)
"bZl" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
-"bZm" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{dir = 8},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
+"bZm" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{dir = 8},/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
"bZn" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
"bZo" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "large_escape_pod_1_berth"; pixel_x = -26; pixel_y = 0; tag_door = "large_escape_pod_1_berth_hatch"},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway)
"bZp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/medical_escape_pod_hallway)
@@ -6184,7 +6184,7 @@
"coV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central_three)
"coW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"coX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"coY" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/mouse/brown/Tom,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"coY" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_mob/animal/passive/mouse/brown/Tom,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"coZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"cpa" = (/obj/machinery/camera/network/command{c_tag = "COM - Vault"; dir = 9},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"cpb" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/maintenance/medbay_aft)
@@ -9152,7 +9152,7 @@
"dtZ" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor,/area/engineering/storage)
"dua" = (/obj/effect/decal/cleanable/dirt,/obj/structure/dispenser{oxygentanks = 0},/turf/simulated/floor,/area/engineering/storage)
"dub" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/engineering)
-"duc" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_animal/mouse,/turf/simulated/floor,/area/maintenance/engineering)
+"duc" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_mob/animal/passive/mouse,/turf/simulated/floor,/area/maintenance/engineering)
"dud" = (/obj/machinery/newscaster{pixel_x = -30},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"due" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/hologram/holopad,/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Dock 1 Mid"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"duf" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/machinery/hologram/holopad,/obj/machinery/camera/network/northern_star{c_tag = "DOCK - Dock 2 Mid"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
@@ -9872,7 +9872,7 @@
"dHR" = (/obj/item/weapon/rig/breacher,/obj/item/clothing/mask/breath,/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
"dHS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"dHT" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/item/clothing/mask/breath,/obj/item/weapon/rig/breacher,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10175,3 +10175,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
+
diff --git a/maps/northern_star/polaris-2.dmm b/maps/northern_star/polaris-2.dmm
index cbdb8d3e61..9780679b04 100644
--- a/maps/northern_star/polaris-2.dmm
+++ b/maps/northern_star/polaris-2.dmm
@@ -19,7 +19,7 @@
"as" = (/obj/structure/table/rack/holorack,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/head/pin/flower,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_theatre)
"at" = (/obj/effect/landmark/costume,/obj/structure/table/rack/holorack,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_theatre)
"au" = (/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom)
-"av" = (/obj/structure/window/reinforced/holowindow{dir = 4},/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom)
+"av" = (/obj/structure/window/reinforced/holowindow{dir = 4},/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom)
"aw" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
"ax" = (/turf/simulated/floor/holofloor/reinforced,/area/holodeck/source_wildlife)
"ay" = (/turf/simulated/floor/holofloor/reinforced,/area/holodeck/source_plating)
@@ -54,7 +54,7 @@
"bb" = (/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
"bc" = (/obj/effect/decal/cleanable/dirt,/obj/structure/holostool,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
"bd" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
-"be" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"be" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
"bf" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre)
"bg" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
"bh" = (/obj/structure/window/reinforced/holowindow,/obj/machinery/door/window/holowindoor{dir = 1; name = "Court Reporter's Box"},/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
@@ -91,7 +91,7 @@
"bM" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
"bN" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
"bO" = (/turf/space/transit/east,/area/shuttle/large_escape_pod1/transit)
-"bP" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"bP" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
"bQ" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
"bR" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
"bS" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
@@ -114,7 +114,7 @@
"cj" = (/obj/structure/bed/chair/holochair{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
"ck" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space/transit/east,/area/space)
"cl" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; stopper = 0; tiles = 0},/turf/space/transit/east,/area/space)
-"cm" = (/obj/structure/flora/pottedplant{ icon_state = "plant-06"},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre)
+"cm" = (/obj/structure/flora/pottedplant{icon_state = "plant-06"},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre)
"cn" = (/obj/effect/floor_decal/carpet{dir = 5},/obj/effect/floor_decal/carpet{dir = 6},/obj/effect/floor_decal/carpet{dir = 10},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
"co" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
"cp" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
@@ -127,7 +127,7 @@
"cw" = (/turf/simulated/floor/holofloor/space,/area/holodeck/source_space)
"cx" = (/turf/simulated/floor/holofloor/snow,/area/holodeck/source_snowfield)
"cy" = (/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall)
-"cz" = (/obj/structure/flora/pottedplant{ icon_state = "plant-06"},/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall)
+"cz" = (/obj/structure/flora/pottedplant{icon_state = "plant-06"},/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall)
"cA" = (/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_basketball)
"cB" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
"cC" = (/obj/structure/holostool,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
@@ -213,7 +213,7 @@
"ee" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet{dir = 8},/area/holodeck/source_meetinghall)
"ef" = (/obj/machinery/door/window/holowindoor{base_state = "right"; icon_state = "right"; name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_basketball)
"eg" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
-"eh" = (/turf/unsimulated/beach/sand{ icon_state = "beach"},/area/holodeck/source_beach)
+"eh" = (/turf/unsimulated/beach/sand{icon_state = "beach"},/area/holodeck/source_beach)
"ei" = (/obj/machinery/door/window/holowindoor{base_state = "right"; icon_state = "right"; name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_thunderdomecourt)
"ej" = (/obj/structure/window/reinforced/holowindow{dir = 1},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
"ek" = (/obj/machinery/door/window/holowindoor{dir = 1; name = "Green Corner"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
@@ -256,19 +256,19 @@
"eV" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/syndicate_mothership)
"eW" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 4; req_access = list(160)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Trader Base"})
"eX" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Trader Base"})
-"eY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "arrivals_shuttle"; pixel_x = 0; pixel_y = 25; req_one_access = list(13); tag_door = "arrivals_shuttle_hatch"},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
-"eZ" = (/obj/structure/showcase{desc = "So that's how the shuttle moves on its own."; icon = 'icons/mob/AI.dmi'; icon_state = "ai-red"; name = "Arrivals Announcement Computer"},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
-"fa" = (/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"eY" = (/obj/structure/showcase{desc = "So that's how the shuttle moves on its own."; icon = 'icons/mob/AI.dmi'; icon_state = "ai-red"; name = "Arrivals Announcement Computer"},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"eZ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "arrivals_shuttle"; pixel_x = 0; pixel_y = 25; req_one_access = list(13); tag_door = "arrivals_shuttle_hatch"},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"fa" = (/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
"fb" = (/turf/simulated/shuttle/wall/dark,/area/shuttle/syndicate_elite/mothership)
"fc" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/syndicate_elite/mothership)
"fd" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/syndicate_elite/mothership)
"fe" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/syndicate_elite/mothership)
"ff" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Trader Base"})
"fg" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Trader Base"})
-"fh" = (/obj/machinery/computer/shuttle_control/arrivals,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
-"fi" = (/obj/machinery/light,/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
-"fj" = (/obj/machinery/light,/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
-"fk" = (/obj/structure/table/steel,/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Dave"; pixel_y = 15},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"fh" = (/obj/machinery/computer/shuttle_control/arrivals,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"fi" = (/obj/machinery/light,/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"fj" = (/obj/structure/table/steel,/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Dave"; pixel_y = 15},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"fk" = (/obj/machinery/light,/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
"fl" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 1},/turf/simulated/floor/airless,/area/shuttle/syndicate_elite/mothership)
"fm" = (/obj/structure/table/standard,/obj/item/weapon/soap/deluxe,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Trader Base"})
"fn" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Trader Base"})
@@ -284,12 +284,12 @@
"fx" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north,/area/space)
"fy" = (/turf/space/transit/north,/area/syndicate_station/transit)
"fz" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/arrival/pre_game)
-"fA" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"fB" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"fA" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"fB" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"fC" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
"fD" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
"fE" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/machinery/requests_console{department = "Arrival shuttle"; pixel_y = 26},/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
-"fF" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/arcade/orion_trail,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"fF" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/arcade/orion_trail,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"fG" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
"fH" = (/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
"fI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
@@ -307,14 +307,14 @@
"fU" = (/obj/mecha/combat/marauder/mauler,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"fV" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"fW" = (/turf/space/transit/north,/area/skipjack_station/transit)
-"fX" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"fY" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"fZ" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced{dir = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"fX" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"fY" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"fZ" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced{dir = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"ga" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership/elite_squad)
"gb" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "trade_shuttle_bay_door"; locked = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/syndicate_mothership{name = "\improper Trader Base"})
-"gc" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"gd" = (/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"ge" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"gc" = (/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"gd" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"ge" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"gf" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock"; req_access = list(150)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "syndicate_elite"; name = "Side Hull Door"; opacity = 0},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/syndicate_elite/mothership)
"gg" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership/elite_squad)
"gh" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
@@ -322,7 +322,7 @@
"gj" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "trade_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"gk" = (/turf/simulated/shuttle/wall/dark,/area/shuttle/trade/centcom)
"gl" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/pre_game)
-"gm" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"gm" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"gn" = (/obj/machinery/door/airlock/glass_security{name = "Airlock"; req_access = list(150)},/obj/machinery/door/blast/regular{id = "syndicate_elite_mech_room"; name = "Mech Room Door"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
"go" = (/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradestarshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
"gp" = (/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradestarshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
@@ -333,9 +333,9 @@
"gu" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/trade/centcom)
"gv" = (/turf/space/transit/north,/area/shuttle/escape_pod2/transit)
"gw" = (/turf/space/transit/north,/area/shuttle/escape_pod1/transit)
-"gx" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"gx" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"gy" = (/obj/machinery/hologram/holopad,/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
-"gz" = (/obj/structure/table/standard,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"gz" = (/obj/structure/table/standard,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"gA" = (/obj/machinery/computer/pod{id = "syndicate_elite"; name = "Hull Door Control"},/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
"gB" = (/obj/machinery/computer/syndicate_elite_shuttle,/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
"gC" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
@@ -348,7 +348,7 @@
"gJ" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"gK" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"gL" = (/turf/space,/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/trade/centcom)
-"gM" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"gM" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"gN" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/shuttle/syndicate_elite/mothership)
"gO" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock"; req_access = list(150)},/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "syndicate_elite"; name = "Front Hull Door"; opacity = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate_elite/mothership)
"gP" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradestarshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
@@ -384,9 +384,9 @@
"ht" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Bay"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"hu" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"hv" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/trade/centcom)
-"hw" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"hx" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"hy" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"hw" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"hx" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"hy" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "JoinLate"},/obj/structure/window/reinforced,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"hz" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = -32},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"hA" = (/obj/machinery/button/remote/blast_door{id = "tradestarshutters"; name = "remote shutter control"; pixel_x = 30; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"hB" = (/obj/structure/table/steel_reinforced,/obj/random/firstaid,/obj/random/firstaid,/obj/random/firstaid,/obj/random/firstaid,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
@@ -407,8 +407,8 @@
"hQ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
"hR" = (/obj/structure/table/standard,/obj/item/clothing/gloves/sterile/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/circular_saw,/obj/item/stack/nanopaste,/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"hS" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
-"hT" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"hU" = (/obj/machinery/vending/cigarette,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"hT" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"hU" = (/obj/machinery/vending/cigarette,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"hV" = (/turf/unsimulated/wall,/area/syndicate_mothership)
"hW" = (/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
"hX" = (/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
@@ -417,9 +417,9 @@
"ia" = (/obj/machinery/door/airlock/multi_tile/glass,/turf/simulated/shuttle/floor/darkred,/area/shuttle/trade/centcom)
"ib" = (/obj/structure/closet/crate/secure/weapon,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"ic" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/airless,/area/shuttle/arrival/pre_game)
-"id" = (/obj/machinery/vending/cola,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"ie" = (/obj/machinery/light,/obj/structure/table/standard,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
-"if" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"id" = (/obj/machinery/vending/cola,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"ie" = (/obj/machinery/light,/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
+"if" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"ig" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/shuttle/arrival/pre_game)
"ih" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
"ii" = (/obj/structure/flora/grass/brown,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
@@ -438,7 +438,7 @@
"iv" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/shuttle/arrival/pre_game)
"iw" = (/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
"ix" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
-"iy" = (/obj/machinery/light{dir = 4},/obj/structure/sign/kiddieplaque{desc = "A plaque commemorating the construction of the cargo ship Beruang."; name = "Beruang"; pixel_x = 32},/mob/living/simple_animal/corgi/tamaskan/spice,/turf/simulated/shuttle/floor/darkred,/area/shuttle/trade/centcom)
+"iy" = (/obj/machinery/light{dir = 4},/obj/structure/sign/kiddieplaque{desc = "A plaque commemorating the construction of the cargo ship Beruang."; name = "Beruang"; pixel_x = 32},/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice,/turf/simulated/shuttle/floor/darkred,/area/shuttle/trade/centcom)
"iz" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/simulated/shuttle/floor/white,/area/shuttle/trade/centcom)
"iA" = (/obj/machinery/door/airlock/silver{name = "Restroom"},/turf/simulated/shuttle/floor/white,/area/shuttle/trade/centcom)
"iB" = (/obj/structure/undies_wardrobe,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
@@ -534,9 +534,9 @@
"kn" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
"ko" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
"kp" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/trade/centcom)
-"kq" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/machinery/atm{pixel_x = -32},/obj/machinery/meter,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
+"kq" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/machinery/atm{pixel_x = -32},/obj/machinery/meter,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"kr" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "trade2_control"; pixel_x = -22; pixel_y = -32; req_one_access = list(150)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
-"ks" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 10},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
+"ks" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 10},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"kt" = (/obj/structure/table/standard,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"ku" = (/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"kv" = (/obj/structure/table/standard,/obj/item/stack/material/steel{amount = 2},/obj/item/stack/material/steel{amount = 2},/obj/item/stack/material/glass{amount = 15},/obj/item/stack/material/glass{amount = 15},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
@@ -551,7 +551,7 @@
"kE" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"kF" = (/obj/machinery/light,/turf/simulated/floor/carpet,/area/shuttle/trade/centcom)
"kG" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet,/area/shuttle/trade/centcom)
-"kH" = (/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/turf/simulated/floor/carpet,/area/shuttle/trade/centcom)
+"kH" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/carpet,/area/shuttle/trade/centcom)
"kI" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_inner"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"kJ" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_inner"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"kK" = (/obj/machinery/vending/engivend,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
@@ -598,14 +598,14 @@
"lz" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "diagonalWall3"},/area/syndicate_mothership{name = "\improper Ninja Base"})
"lA" = (/obj/item/weapon/paper{info = "Some stuff is missing..."; name = "Insert alien artifacts here."},/turf/unsimulated/floor{icon_state = "dark"},/area/alien)
"lB" = (/obj/machinery/door/airlock/hatch,/turf/unsimulated/floor{icon_state = "dark"},/area/alien)
-"lC" = (/obj/structure/table/steel_reinforced,/obj/structure/mirror,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lD" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lE" = (/obj/structure/undies_wardrobe,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lC" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lD" = (/obj/structure/table/steel_reinforced,/obj/structure/mirror,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lE" = (/obj/structure/undies_wardrobe,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
"lF" = (/obj/structure/closet/acloset,/turf/unsimulated/floor{icon_state = "dark"},/area/alien)
"lG" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/bush,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership)
"lH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lI" = (/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lJ" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "ninjastart"},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lI" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark{name = "ninjastart"},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lJ" = (/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
"lK" = (/turf/space,/area/shuttle/alien/base)
"lL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
"lM" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/syndicate_mothership)
@@ -614,9 +614,9 @@
"lP" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_mothership)
"lQ" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_mothership)
"lR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lS" = (/obj/machinery/computer/teleporter,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lT" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
-"lU" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lS" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lT" = (/obj/machinery/computer/teleporter,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
+"lU" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/syndicate_mothership{name = "\improper Ninja Base"})
"lV" = (/turf/unsimulated/wall,/area)
"lW" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/syndicate_mothership{name = "\improper Ninja Base"})
"lX" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space,/area/space)
@@ -820,10 +820,10 @@
"pN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"pO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"pP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership)
-"pQ" = (/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"pR" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"pS" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"pT" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"pQ" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"pR" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"pS" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"pT" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"pU" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"pV" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"pW" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
@@ -848,7 +848,7 @@
"qp" = (/obj/machinery/computer/shuttle_control/multi/syndicate,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"qq" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"qr" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"qs" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"qs" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"qt" = (/obj/machinery/door/airlock/centcom{name = "Kitchen"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"qu" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"qv" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
@@ -869,10 +869,10 @@
"qK" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -1; pixel_y = 2},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"qL" = (/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"qM" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"qN" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"qO" = (/obj/item/weapon/folder{pixel_y = 2},/obj/structure/table/glass,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"qP" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_y = 4},/obj/structure/table/glass,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"qQ" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"qN" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"qO" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_y = 4},/obj/structure/table/glass,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"qP" = (/obj/item/weapon/folder{pixel_y = 2},/obj/structure/table/glass,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"qQ" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"qR" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"qS" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"qT" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
@@ -884,20 +884,20 @@
"qZ" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/nanopaste,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/mask/surgical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"ra" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/specops/centcom)
"rb" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating/airless,/area/shuttle/specops/centcom)
-"rc" = (/obj/machinery/computer/security/telescreen{desc = ""; name = "Spec. Ops. Monitor"; network = list("NETWORK_ERT"); pixel_y = 30},/obj/machinery/computer/shuttle_control/specops,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"rd" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"re" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_port"; name = "port docking hatch controller"; pixel_x = 0; pixel_y = 25; tag_door = "specops_shuttle_port_hatch"},/obj/structure/bed/chair,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"rf" = (/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"rg" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"rh" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rc" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rd" = (/obj/machinery/computer/security/telescreen{desc = ""; name = "Spec. Ops. Monitor"; network = list("NETWORK_ERT"); pixel_y = 30},/obj/machinery/computer/shuttle_control/specops,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"re" = (/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rf" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_port"; name = "port docking hatch controller"; pixel_x = 0; pixel_y = 25; tag_door = "specops_shuttle_port_hatch"},/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rg" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rh" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
"ri" = (/turf/simulated/shuttle/wall/dark{hard_corner = 1; join_group = "shuttle_ert"},/area/shuttle/specops/centcom)
"rj" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"rk" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/red/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"rl" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"rm" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"rn" = (/obj/structure/frame/computer,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"ro" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"rp" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"ro" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"rp" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"rq" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"rr" = (/obj/structure/reagent_dispensers/beerkeg/fakenuke,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"rs" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
@@ -906,20 +906,20 @@
"rv" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"rw" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"rx" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/airless,/area/shuttle/specops/centcom)
-"ry" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"rz" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_fore"; name = "forward docking hatch controller"; pixel_x = 0; pixel_y = -25; tag_door = "specops_shuttle_fore_hatch"},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"ry" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rz" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_shuttle_fore"; name = "forward docking hatch controller"; pixel_x = 0; pixel_y = -25; tag_door = "specops_shuttle_fore_hatch"},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
"rA" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_shuttle_fore_hatch"; locked = 1; name = "Forward Docking Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom)
-"rB" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/mob/living/simple_animal/corgi/puppy{name = "Bockscar"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
+"rB" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/mob/living/simple_mob/animal/passive/dog/corgi/puppy{name = "Bockscar"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"rC" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"rD" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"rE" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"rF" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"rF" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"rG" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"rH" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"rI" = (/obj/machinery/computer/communications,/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1443; listening = 1; name = "Spec Ops Intercom"; pixel_y = -28},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"rJ" = (/obj/machinery/computer/prisoner{name = "Implant Management"},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"rK" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
-"rL" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rI" = (/obj/machinery/computer/prisoner{name = "Implant Management"},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rJ" = (/obj/machinery/computer/communications,/obj/item/device/radio/intercom{broadcasting = 0; dir = 1; frequency = 1443; listening = 1; name = "Spec Ops Intercom"; pixel_y = -28},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rK" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
+"rL" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/shuttle/specops/centcom)
"rM" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"rN" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/material/kitchen/rollingpin,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
"rO" = (/turf/unsimulated/wall,/area/centcom/command)
@@ -1038,8 +1038,8 @@
"tX" = (/turf/simulated/shuttle/floor/black,/area/syndicate_station/start)
"tY" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor/black,/area/syndicate_station/start)
"tZ" = (/obj/machinery/door/window{dir = 2; name = "Seating"; req_access = list(150)},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"ua" = (/obj/machinery/door/window{ name = "Seating"; icon_state = "right"; dir = 2; req_access = list(150)},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"ub" = (/obj/structure/flora/pottedplant{ icon_state = "plant-10"},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
+"ua" = (/obj/machinery/door/window{name = "Seating"; icon_state = "right"; dir = 2; req_access = list(150)},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
+"ub" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uc" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"ud" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"ue" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
@@ -1072,17 +1072,17 @@
"uF" = (/obj/structure/table/rack,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"uG" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"uH" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"uI" = (/turf/space,/obj/structure/shuttle/engine/propulsion{ icon_state = "propulsion_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/administration/centcom)
+"uI" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/administration/centcom)
"uJ" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"uK" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"uL" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/card/id/centcom,/obj/item/weapon/card/id/syndicate,/obj/item/weapon/card/id,/obj/item/weapon/card/id/gold,/obj/item/weapon/card/id/silver,/obj/item/device/pda/captain,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"uM" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uN" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/button/flasher{id = "syndieflash"; name = "Flasher"; pixel_x = 27; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uO" = (/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"uP" = (/mob/living/simple_animal/cat/kitten{name = "Enola"},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
+"uP" = (/mob/living/simple_mob/animal/passive/cat/kitten{name = "Enola"},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uQ" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4; start_pressure = 740.5},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uR" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"uS" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
+"uS" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uT" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uU" = (/obj/machinery/door/airlock/centcom{name = "Hardsuit Storage"; opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"uV" = (/obj/machinery/light,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
@@ -1267,9 +1267,9 @@
"ys" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
"yt" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1441; name = "Spec Ops Intercom"; pixel_y = 28},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
"yu" = (/obj/machinery/door/airlock/centcom{name = "Courthouse"; opacity = 1},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/command)
-"yv" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/simulated/shuttle/plating/airless/carry{ icon_state = "platform"; dir = 1},/area/supply/dock)
-"yw" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry{ icon_state = "platform"; dir = 1},/area/supply/dock)
-"yx" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/shuttle/plating/airless/carry{ icon_state = "platform"; dir = 1},/area/supply/dock)
+"yv" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/simulated/shuttle/plating/airless/carry{icon_state = "platform"; dir = 1},/area/supply/dock)
+"yw" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry{icon_state = "platform"; dir = 1},/area/supply/dock)
+"yx" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/shuttle/plating/airless/carry{icon_state = "platform"; dir = 1},/area/supply/dock)
"yy" = (/obj/structure/table/reinforced,/obj/item/clothing/head/greenbandana,/obj/effect/floor_decal/corner/orange{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yz" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"yA" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/command)
@@ -1355,7 +1355,7 @@
"Ac" = (/obj/effect/floor_decal/corner/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Ad" = (/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Ae" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/restaurant)
-"Af" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cash_register/civilian{ icon_state = "register_idle"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
+"Af" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cash_register/civilian{icon_state = "register_idle"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"Ag" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/white/diagonal,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"Ah" = (/obj/machinery/computer/supplycomp/control,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"Ai" = (/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_thunderdome"; name = "Thunderdome Access"; pixel_x = 6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_vip_shuttle"; name = "VIP Shuttle Access"; pixel_x = 6; pixel_y = -34; req_access = list(101)},/obj/machinery/turretid{pixel_x = 28; pixel_y = -28; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
@@ -1401,7 +1401,7 @@
"AW" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"AX" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"AY" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/tram)
-"AZ" = (/turf/space,/obj/structure/shuttle/engine/propulsion{ icon_state = "burst_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/transport1/centcom)
+"AZ" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/transport1/centcom)
"Ba" = (/obj/machinery/computer/security,/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Bb" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"Bc" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
@@ -1441,7 +1441,7 @@
"BK" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/tram)
"BL" = (/obj/machinery/door/unpowered/shuttle,/turf/unsimulated/floor{icon = 'icons/turf/flooring/shuttle.dmi'; icon_state = "floor"},/area/centcom/tram)
"BM" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/tram)
-"BN" = (/obj/effect/floor_decal/corner/white/full{ icon_state = "corner_white_full"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BN" = (/obj/effect/floor_decal/corner/white/full{icon_state = "corner_white_full"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"BO" = (/obj/effect/floor_decal/corner/white,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"BP" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"BQ" = (/obj/effect/floor_decal/corner/white{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
@@ -1453,7 +1453,7 @@
"BW" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 26},/turf/simulated/shuttle/floor,/area/centcom/tram)
"BX" = (/obj/effect/floor_decal/spline/plain,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/tram)
"BY" = (/obj/effect/floor_decal/corner/white{dir = 6; icon_state = "corner_white"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
-"BZ" = (/obj/effect/floor_decal/corner/white/diagonal{ icon_state = "corner_white_diagonal"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BZ" = (/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"Ca" = (/obj/effect/floor_decal/corner/white{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"Cb" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/red{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Cc" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
@@ -1462,12 +1462,12 @@
"Cf" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/centcom/tram)
"Cg" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/centcom/tram)
"Ch" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/tram)
-"Ci" = (/obj/effect/floor_decal/corner/white{ icon_state = "corner_white"; dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Ci" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"Cj" = (/obj/machinery/computer/card,/obj/effect/floor_decal/corner/red{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Ck" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/red{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"Cl" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/restaurant)
"Cm" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
-"Cn" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
+"Cn" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"Co" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 4},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"Cp" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
"Cq" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 8},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
@@ -1489,10 +1489,10 @@
"CG" = (/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CH" = (/obj/structure/flora/bush,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CI" = (/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/ppflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"CJ" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
+"CJ" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CK" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CL" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
-"CM" = (/obj/structure/flora/ausbushes/fernybush,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
+"CM" = (/obj/structure/flora/ausbushes/fernybush,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CN" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CO" = (/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/brflowers,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CP" = (/obj/machinery/turretid{pixel_x = -28; pixel_y = 0; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
@@ -1503,9 +1503,9 @@
"CU" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"CV" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/red/full,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"CW" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing"; req_access = list(101)},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
-"CX" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
+"CX" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"CY" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"CZ" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
+"CZ" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"Da" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"Db" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPortEast"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"Dc" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
@@ -1520,9 +1520,9 @@
"Dl" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"Dm" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "CentComPortWest"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"Dn" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood/cee,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"Do" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
-"Dp" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
-"Dq" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
+"Do" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
+"Dp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
+"Dq" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
"Dr" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/machinery/computer/skills,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"Ds" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing"; req_access = list(101)},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"Dt" = (/obj/machinery/door/airlock/external,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
@@ -1533,7 +1533,7 @@
"Dy" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"Dz" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"DA" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
-"DB" = (/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
+"DB" = (/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
"DC" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
"DD" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "CentComPortEast"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/tram)
"DE" = (/obj/machinery/door/blast/regular{id = "CentComPortEast"; name = "Security Doors"},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/tram)
@@ -1542,14 +1542,14 @@
"DH" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
"DI" = (/obj/machinery/door/window/westright,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"DJ" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
-"DK" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
-"DL" = (/obj/effect/floor_decal/spline/plain{ icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
-"DM" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
+"DK" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
+"DL" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"DM" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
"DN" = (/obj/structure/bed/chair/office/light,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"DO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"DP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
-"DQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
-"DR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
+"DQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
+"DR" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
"DS" = (/obj/machinery/door/window/southleft,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"DT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/machinery/computer/skills,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"DU" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/spline/plain{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
@@ -1561,16 +1561,16 @@
"Ea" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/machinery/computer/skills,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"Eb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
"Ec" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 1},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"Ed" = (/obj/structure/window/reinforced,/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
-"Ee" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/beach/sand{ icon_state = "seashallow"},/area/centcom/main_hall)
+"Ed" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
+"Ee" = (/obj/structure/window/reinforced,/turf/unsimulated/beach/sand{icon_state = "seashallow"},/area/centcom/main_hall)
"Ef" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/cee{dir = 1},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"Eg" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
"Eh" = (/turf/unsimulated/wall,/area/centcom/medical)
"Ei" = (/obj/machinery/door/airlock/glass_medical{name = "Arrivals Medbay"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ej" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/medical)
-"Ek" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
+"Ek" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"El" = (/obj/structure/flora/grass/brown,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"Em" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
+"Em" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"En" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"Eo" = (/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
"Ep" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/tram)
@@ -1589,7 +1589,7 @@
"EC" = (/obj/effect/floor_decal/corner/beige{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"ED" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/beige/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"EE" = (/obj/structure/flora/ausbushes,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
-"EF" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{ icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
+"EF" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EG" = (/obj/structure/flora/ausbushes/ppflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EH" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
"EI" = (/obj/structure/flora/bush,/obj/structure/flora/ausbushes/sparsegrass,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/centcom/main_hall)
@@ -1600,7 +1600,7 @@
"EN" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/floor_decal/corner/beige{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"EO" = (/turf/unsimulated/wall,/area/centcom/bar)
"EP" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
-"EQ" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
+"EQ" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
"ER" = (/obj/effect/floor_decal/spline/plain,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
"ES" = (/turf/unsimulated/wall,/area/centcom/bathroom)
"ET" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
@@ -1610,8 +1610,8 @@
"EX" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"EY" = (/obj/structure/closet/secure_closet/chemical,/obj/effect/floor_decal/corner/beige{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"EZ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/floor_decal/corner/beige{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Fa" = (/obj/structure/table/woodentable{dir = 5},/obj/structure/flora/pottedplant{pixel_y = 8},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"Fb" = (/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
+"Fa" = (/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"Fb" = (/obj/structure/table/woodentable{dir = 5},/obj/structure/flora/pottedplant{pixel_y = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
"Fc" = (/obj/structure/table/steel,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
"Fd" = (/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
"Fe" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
@@ -1634,22 +1634,22 @@
"Fv" = (/obj/effect/floor_decal/corner/beige{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Fw" = (/obj/effect/floor_decal/corner/beige,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Fx" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/beige/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Fy" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"Fz" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"FA" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"FB" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"FC" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake/filled,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"FD" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
+"Fy" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"Fz" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"FA" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"FB" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"FC" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake/filled,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"FD" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
"FE" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bathroom)
"FF" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_shuttle"; pixel_x = 0; pixel_y = -25; req_one_access = list(13); tag_door = "escape_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"FG" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"FH" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"FI" = (/obj/effect/floor_decal/corner/beige{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"FJ" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"},/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/inaprovaline,/turf/unsimulated/wall,/area/centcom/medical)
-"FK" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/boiledrice,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"FL" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"FM" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"FN" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
+"FK" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/boiledrice,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"FL" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"FM" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"FN" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
"FO" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"FP" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"FQ" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
@@ -1672,10 +1672,10 @@
"Gh" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Gi" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Gj" = (/obj/structure/closet/secure_closet/medical3,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Gk" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bloodsoup,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"Gl" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/tofukabob,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"Gm" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/poppypretzel,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"Gn" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake/filled,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
+"Gk" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bloodsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"Gl" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/tofukabob,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"Gm" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/poppypretzel,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"Gn" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake/filled,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
"Go" = (/obj/machinery/atm{pixel_x = -30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"Gp" = (/obj/machinery/atm{pixel_x = 30},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
"Gq" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom)
@@ -1685,10 +1685,10 @@
"Gu" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Gv" = (/obj/machinery/computer/med_data,/obj/effect/floor_decal/corner/green{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Gw" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/green{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Gx" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/spesslaw,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"Gy" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"Gz" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"GA" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/meatsteak,/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
+"Gx" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/spesslaw,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"Gy" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"Gz" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"GA" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/meatsteak,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
"GB" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"GC" = (/obj/structure/sink{pixel_y = 16},/obj/structure/mirror{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"GD" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
@@ -1712,9 +1712,9 @@
"GV" = (/obj/machinery/door/airlock{name = "Unit 6"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bathroom)
"GW" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/tool/crowbar,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
"GX" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom)
-"GY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar East"; dir = 4},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"GZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/unsimulated/floor{ icon_state = "wood"},/area/centcom/bar)
-"Ha" = (/turf/unsimulated/floor{ icon_state = "wood"},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"GY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"GZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar East"; dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"Ha" = (/turf/unsimulated/floor{icon_state = "wood"},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
"Hb" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/glass2/square,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
"Hc" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/cash_register/civilian,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
"Hd" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
@@ -1777,7 +1777,7 @@
"Ii" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ij" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ik" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Il" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Il" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Im" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"In" = (/obj/structure/bed/roller,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = -32},/obj/effect/floor_decal/corner/green{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Io" = (/obj/machinery/bodyscanner{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
@@ -1788,7 +1788,7 @@
"It" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Iu" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Iv" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
-"Iw" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Iw" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ix" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"Iy" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
"Iz" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 26},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
@@ -1860,8 +1860,8 @@
"JN" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"JO" = (/obj/structure/bed/chair,/obj/structure/disposalpipe/segment,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
"JP" = (/turf/simulated/shuttle/floor/yellow,/area/shuttle/escape/centcom)
-"JQ" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Medical"; dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
-"JR" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"JQ" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"JR" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Medical"; dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
"JS" = (/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
"JT" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access = list(45)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"JU" = (/obj/machinery/disease2/incubator,/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
@@ -1937,9 +1937,9 @@
"Lm" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/green/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"Ln" = (/obj/machinery/atmospherics/pipe/vent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"Lo" = (/obj/machinery/camera/network/thunder{c_tag = "Thunderdome Arena"; invisibility = 101},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
-"Lp" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"Lp" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"Lq" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
-"Lr" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"Lr" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"Ls" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"Lt" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration"; req_access = list(102)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"Lu" = (/obj/machinery/door/blast/regular{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
@@ -2008,9 +2008,9 @@
"MF" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/shuttle/cryo/centcom)
"MG" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{icon = 'icons/turf/flooring/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"MH" = (/turf/simulated/shuttle/floor/white,/area/centcom/evac)
-"MI" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 5},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"MI" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
"MJ" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
-"MK" = (/obj/machinery/atmospherics/pipe/simple/visible{ icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"MK" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
"ML" = (/obj/machinery/computer/operating,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
"MM" = (/turf/space,/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/centcom/evac)
"MN" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
@@ -2028,10 +2028,10 @@
"MZ" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
"Na" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
"Nb" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
-"Nc" = (/obj/structure/morgue{ icon_state = "morgue1"; dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"Nc" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
"Nd" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/obj/item/toy/plushie/mouse{desc = "A plushie of a small fuzzy rodent."; name = "Woodrat"},/turf/unsimulated/beach/sand,/area/beach)
"Ne" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
-"Nf" = (/mob/living/simple_animal/crab/Coffee,/turf/unsimulated/beach/sand,/area/beach)
+"Nf" = (/mob/living/simple_mob/animal/passive/crab/Coffee,/turf/unsimulated/beach/sand,/area/beach)
"Ng" = (/turf/space,/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "propulsion_r"},/turf/simulated/shuttle/plating/airless/carry,/area/centcom/evac)
"Nh" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_2_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 02"; req_access = list(13)},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
"Ni" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -30; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
@@ -2055,7 +2055,7 @@
"NA" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
"NB" = (/obj/machinery/vending/cola,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
"NC" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/centcom/evac)
-"ND" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/centcom/evac)
+"ND" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/centcom/evac)
"NE" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
"NF" = (/turf/simulated/shuttle/floor/black,/area/centcom/evac)
"NG" = (/obj/structure/table/standard,/obj/item/device/radio/off,/obj/item/weapon/paper_bin,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
@@ -2070,8 +2070,8 @@
"NP" = (/turf/unsimulated/beach/water,/area/beach)
"NQ" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor,/area/centcom/evac)
"NR" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor,/area/centcom/evac)
-"NS" = (/obj/machinery/door/airlock/hatch{name = "Cockpit"; req_access = list(109)},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/centcom/evac)
-"NT" = (/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/centcom/evac)
+"NS" = (/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/centcom/evac)
+"NT" = (/obj/machinery/door/airlock/hatch{name = "Cockpit"; req_access = list(109)},/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/centcom/evac)
"NU" = (/obj/structure/table/standard,/obj/item/weapon/storage/lockbox,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
"NV" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/centcom/evac)
"NW" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
@@ -2090,11 +2090,11 @@
"Oj" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 3"; req_access = list(13)},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
"Ok" = (/obj/machinery/door/airlock/maintenance_hatch{req_access = list(101)},/turf/unsimulated/floor{icon = 'icons/turf/flooring/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
"Ol" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "large_escape_pod_1_recovery"; pixel_x = -25; pixel_y = -25; req_one_access = list(13); tag_door = "large_escape_pod_1_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
-"Om" = (/obj/machinery/computer/card,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
-"On" = (/obj/structure/table/rack,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
-"Oo" = (/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
-"Op" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
-"Oq" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
+"Om" = (/obj/structure/table/rack,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"On" = (/obj/machinery/computer/card,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"Oo" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"Op" = (/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"Oq" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
"Or" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/turf/simulated/shuttle/floor,/area/centcom/evac)
"Os" = (/turf/simulated/mineral,/area/syndicate_mothership{name = "\improper Raider Base"})
"Ot" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
@@ -2106,19 +2106,19 @@
"Oz" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod4/centcom)
"OA" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod3/centcom)
"OB" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_1_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 01"; req_access = list(13)},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
-"OC" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
+"OC" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
"OD" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/shuttle/floor,/area/centcom/evac)
"OE" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/turf/simulated/shuttle/floor,/area/centcom/evac)
"OF" = (/obj/item/weapon/bedsheet/orange,/obj/structure/bed/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"OG" = (/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod1/centcom)
-"OH" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
-"OI" = (/obj/structure/closet/secure_closet/security,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
+"OH" = (/obj/structure/closet/secure_closet/security,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"OI" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
"OJ" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"OK" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
-"OL" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
-"OM" = (/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"OL" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"OM" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"ON" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
-"OO" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/simulated/shuttle/floor{ icon_state = "floor_red"},/area/centcom/evac)
+"OO" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
"OP" = (/obj/item/weapon/tray{pixel_y = 5},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"OQ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"OR" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/shuttle/plating,/area/centcom/evac)
@@ -2130,7 +2130,7 @@
"OX" = (/obj/structure/grille,/obj/structure/window/shuttle{icon_state = "window8"},/turf/simulated/shuttle/plating,/area/centcom/evac)
"OY" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"OZ" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pa" = (/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1"},/obj/structure/bed/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pa" = (/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/obj/structure/bed/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pb" = (/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pc" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pd" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
@@ -2142,31 +2142,31 @@
"Pj" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pk" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pl" = (/obj/structure/kitchenspike,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pm" = (/obj/item/clothing/head/xenos,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pm" = (/obj/item/clothing/head/xenos,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Pn" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 4; pixel_x = -28; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Po" = (/obj/item/clothing/mask/gas/swat{desc = "A close-fitting mask clearly not made for a human face."; name = "\improper alien mask"},/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pp" = (/obj/item/xenos_claw,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pq" = (/obj/structure/table/rack,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pr" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Po" = (/obj/item/clothing/mask/gas/swat{desc = "A close-fitting mask clearly not made for a human face."; name = "\improper alien mask"},/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pp" = (/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pq" = (/obj/item/xenos_claw,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pr" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Ps" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pt" = (/obj/item/pizzabox/meat,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pu" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pv" = (/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pw" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Px" = (/obj/structure/table/rack,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Py" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Pz" = (/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"PA" = (/obj/item/organ/internal/stack,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"PB" = (/obj/structure/bed/chair,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pt" = (/obj/item/pizzabox/meat,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pu" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pv" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pw" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Px" = (/obj/structure/table/rack,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Py" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Pz" = (/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"PA" = (/obj/item/organ/internal/stack,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"PB" = (/obj/structure/bed/chair,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
"PC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"PD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"PE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"PF" = (/obj/machinery/computer/station_alert,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"PG" = (/obj/machinery/computer/shuttle_control/multi/skipjack,/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"PH" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{ name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"PF" = (/obj/machinery/computer/shuttle_control/multi/skipjack,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"PG" = (/obj/machinery/computer/station_alert,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"PH" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
"PI" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space,/area/space)
-"PJ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"PK" = (/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{ icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"PJ" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"PK" = (/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"PL" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/syndicate_mothership{name = "\improper Raider Base"})
"PM" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"PN" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/syndicate_mothership{name = "\improper Raider Base"})
@@ -2254,8 +2254,8 @@
"Rr" = (/obj/machinery/media/jukebox,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Rs" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
"Rt" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"Ru" = (/mob/living/simple_animal/mouse/gray{desc = "He looks kingly."; name = "Arthur"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
-"Rv" = (/obj/structure/flora/pottedplant{ icon_state = "plant-24"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Ru" = (/mob/living/simple_mob/animal/passive/mouse/gray{desc = "He looks kingly."; name = "Arthur"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Rv" = (/obj/structure/flora/pottedplant{icon_state = "plant-24"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Rw" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"Rx" = (/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"Ry" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
@@ -2264,7 +2264,7 @@
"RB" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"RC" = (/obj/machinery/photocopier,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"RD" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
-"RE" = (/obj/structure/flora/pottedplant{ icon_state = "plant-08"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"RE" = (/obj/structure/flora/pottedplant{icon_state = "plant-08"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"RF" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"RG" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"RH" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
@@ -2294,7 +2294,7 @@
"Sf" = (/obj/structure/table/steel_reinforced,/obj/item/stack/telecrystal,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Sg" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"Sh" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
-"Si" = (/obj/structure/flora/pottedplant{ icon_state = "plant-04"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Si" = (/obj/structure/flora/pottedplant{icon_state = "plant-04"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"Sj" = (/obj/structure/sign/electricshock,/turf/simulated/shuttle/wall/dark/hard_corner,/area/wizard_station)
"Sk" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
"Sl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
@@ -2323,7 +2323,7 @@
"SI" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/computer/station_alert/all,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"SJ" = (/obj/structure/table/steel_reinforced,/obj/item/device/mmi/radio_enabled,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"SK" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
-"SL" = (/obj/structure/flora/pottedplant{ icon_state = "plant-03"},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"SL" = (/obj/structure/flora/pottedplant{icon_state = "plant-03"},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"SM" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
"SN" = (/obj/machinery/power/port_gen/pacman,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
"SO" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating/airless,/area/skipjack_station/start)
@@ -2353,7 +2353,7 @@
"Tm" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/book/manual/engineering_hacking,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"Tn" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"To" = (/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
-"Tp" = (/obj/effect/floor_decal/industrial/warning/corner{ icon_state = "warningcorner"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Tp" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"Tq" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/obj/item/target,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"Tr" = (/obj/item/weapon/bedsheet/rainbow,/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
"Ts" = (/obj/item/weapon/bedsheet/hos,/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
@@ -2399,7 +2399,7 @@
"Ug" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Uh" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Ui" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagagagagagagagagagagagagagafafafafafafafafafafafafafafafafafafafafahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiah
aaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacadacaeacacacacacacacacacacacacacacacacacacacacacacacaeacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagakalagakalagakalagakalagafafafafafafafafafafafafafafafafafafafafamanananaoananananananapaqaraqaraqaqaraqaraqapasatatatatatatatatatapauavawawawawawawawawapaxaxaxaxaxaxaxaxaxaxapayayayayayayayayayayapazaAaBaCaDaDaDaDaDaEaF
@@ -2433,20 +2433,20 @@ aaajajajajajajajbpbDbDbDbDbDbDbDbDbDbDbDbDbDbqajajajajajajajaaajaaajajajajajajaj
aaajajajajajajajbpbDbDbDbDbDbDbDbDbDbDbDbDbDbqajajajajajajajaaajaaajajajajajajajajajajajajajajajajajajajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajajajajajajajajajajajajajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexexexeFeMeFeFeFeFeHePePeHeFeQeHeHeHeHeHeHexafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajbpbDbDbDbDbDbDbDbDbDbDbDbDbDbqajajajajajajajaaajaaajajajajajajajajajajajajajajajajajajajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajajajaaaaaaaaaaaaaaajajajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexeReSeFeFeFeFeFeFeHePePeHeFeQeHeHeHeHeHeHexafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajbqbqbqbqbqbDbDbDbDbDbqbqbqbqbqajajajajajajajaaajaaajajajajajajajajajajajajajajajajajajajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajajaaaaeTeTeTeTeTaaaaajajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeUeVeVeVeVeVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexexexeWeXexexexeFeHePePeKeFexeHeHeHeHeHeHexafafafafafafafafafafafafafafafafafafafafafaf
-aaajajajajajajajajajajajbqbqbqbqbqbqbqajajajajajajajajajajajaaajaaajajajajajajajajajajajajajajajajajajajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajajaaeTeTeYeZfaeTeTaaajajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfcfdfefbeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexffeXeXeXeXfgexeFeHeHeHeKeFexeLeHeGeHeLeHexafafafafafafafafafafafafafafafafafafafafafaf
-aaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajajajajajajajajajajajajajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajaaaaeTfhfifafjfkeTaaaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbflflflfbeUeUeUeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexffeXfmfneXfgexeFeFeFeFeFeFexeGeHeGeHeGeHexafafafafafafafafafafafafafafafafafafafafafaf
+aaajajajajajajajajajajajbqbqbqbqbqbqbqajajajajajajajajajajajaaajaaajajajajajajajajajajajajajajajajajajajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajajaaeTeTeZeYfaeTeTaaajajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfcfdfefbeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexffeXeXeXeXfgexeFeHeHeHeKeFexeLeHeGeHeLeHexafafafafafafafafafafafafafafafafafafafafafaf
+aaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajajajajajajajajajajajajajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajaaaaeTfhfifafkfjeTaaaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbflflflfbeUeUeUeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexffeXfmfneXfgexeFeFeFeFeFeFexeGeHeGeHeGeHexafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajajfofofofofofofofofoajajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajaaeTeTfpfqfreTfseTeTaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbftftftfbeUfufveUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexexexexexexexexexexeFeFexexexexexexexexexexafafafafafafafafafafafafafafafafafafafafafaf
-aaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajfwfxfyfyfyfyfyfyfyfofwajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajaafzfAfBfCfDfEfFfAfzaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfGfHfIfbeUeUeUeUeUeUeUeUeUeUeUeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexeFfJexafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+aaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajfwfxfyfyfyfyfyfyfyfofwajajajajajajajaaajajajaaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajaafzfBfAfCfDfEfFfBfzaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfGfHfIfbeUeUeUeUeUeUeUeUeUeUeUeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexeFfJexafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaajaaajajajajajajajfwfyfyfyfyfyfyfyfyfyfwajajajajajajajaaajajajaaajajajajajajfwfwfwfwfwfwajfwfwfwajajajfwfwfwajfwfwfwfwfwfwajajajajajajajaaajaaajajajajajajajaafKfLfLfLfLfLfLfLfMaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfGfHfIfbfNfOfPfQfRfSfOfTfUfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexeFeFexafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabajaaajajajajajajajfwfyfyfyfyfyfyfyfyfyfwajajajajajajajaaajajajaaajajajajajajfwfWfwfwfWfwajfwfWfwfwfwfwfwfWfwajfwfWfwfwfWfwajajajajajajajaaajaaajajajajajajajaafzfXfYfYfLfYfYfZfzaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfGfHfIfbgafOfSfSfRfSfOfSfVfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexgbgbexafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-aaajajajajajajajajajajajajajajajajajajajajajajajajajajaaafafafajaaajajajajajajajfwfyfyfyfyfyfyfyfyfyfwajajajajajajajaaajajajaaajajajajajajfwfWfWfWfWfwfwfwfWfWfWfWfWfWfWfwfwfwfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaaeTgcgdgdfLgdgdgeeTaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfHfHfHgfggghfSfSfRfSfOfTfUfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafgigjgjgiafafafafgkgkgkgkgkafafafafafafafafafafafafafafafafafafafafafaf
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabajaaajajajajajajajfwfyfyfyfyfyfyfyfyfyfwajajajajajajajaaajajajaaajajajajajajfwfWfwfwfWfwajfwfWfwfwfwfwfwfWfwajfwfWfwfwfWfwajajajajajajajaaajaaajajajajajajajaafzfYfXfXfLfXfXfZfzaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfGfHfIfbgafOfSfSfRfSfOfSfVfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafexgbgbexafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+aaajajajajajajajajajajajajajajajajajajajajajajajajajajaaafafafajaaajajajajajajajfwfyfyfyfyfyfyfyfyfyfwajajajajajajajaaajajajaaajajajajajajfwfWfWfWfWfwfwfwfWfWfWfWfWfWfWfwfwfwfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaaeTgdgcgcfLgcgcgeeTaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfHfHfHgfggghfSfSfRfSfOfTfUfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafgigjgjgiafafafafgkgkgkgkgkafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajbqfxfxfobqajbqfxfxfobqajajajajajajajajaaafafafajaaajajajajajajajfwfyfyfyfyfyfyfyfyfyfwajajajajajajajaaajajajaaajajajajajajfwfWfWfWfWfwfwfWfWfWfWfWfWfWfWfWfwfwfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaaglgmgmgmfLgmgmgmglaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbfHfHfHgfggghfSfSfSfSgnfSfVfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafgkgkgkgkgkgkgogpgqgkafafafafafgkgkgrgsgkgkafafgkgkgkgkgtguafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajbqgvgvgvbqajbqgwgwgwbqajajajajajajajajaaafafafajaaajajajajajajajfwfyfyfyfyfyfyfyfyfyfwajajajajajajajaaajajajaaajajajajajajfwfWfWfWfWfwfwfWfWfWfWfWfWfWfWfWfwfwfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaaglgxgxgxgygzgxgxglaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbgAfHgBfbgafOfSfSfRfSfOfTfUfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafgkgigCgDgkgEgFgGgHgIgkgkafafafgkgkgigjgjgigkgogqgigJgKgkgtgLafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajbqgvgvgvbqajbqgwgwgwbqajajajajajajajajaaafafafajaaajajajajajajajfwfofyfyfyfyfyfyfyfofwajajajajajajajaaajajajaaajajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaaglgMgMgMfLgMgMgMglaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVfbgNgOgNfbfNfOfSfSfRfSfOfSfVfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafgPgQgRgRgSgRgRgTgUgVgkgkgogpgqgkgkgWgRgRgXgkgYgZhagRhbgkgtgLafafafafafafafafafafafafafafafafafafafafafaf
-aaajajajajajajajbqgvgvgvbqajbqgwgwgwbqajajajajajajajajaaafafafajaaajajajajajajajfofofyfyfyfyfyfyfyfofwajajajajajajajaaajajajaaajajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaaeTgcgdgdfLgdgdgeeTaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVhcfbhdfbhcfNfOfSfSfRfSfOfTfUfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafhehfhghhgkgRgRhihjhkgkhlhmhnhohphqhrhshsgRhtgRgRgRgRhugkgthvafafafafafafafafafafafafafafafafafafafafafaf
-aaajajajajajajajbqgvgvgvbqajbqgwgwgwbqajajajajajajajajaaafafafajaaajajajajfofofofofyfyfyfyfyfyfyfyfyfofofwfoajajajajaaajajajaaajajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaafzhwhxhxfLhxhxhyfzaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeUeUeUeUeUeUeUeUeUeUeUeUeUeUeUeUeUeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafgkgkgkgkgkgkhzgRgRhAgkhBhChDhEhFhGhHhshsgRhtgRhIhJgRgRgkgkgkafafafafafafafafafafafafafafafafafafafafafaf
+aaajajajajajajajbqgvgvgvbqajbqgwgwgwbqajajajajajajajajaaafafafajaaajajajajajajajfofofyfyfyfyfyfyfyfofwajajajajajajajaaajajajaaajajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaaeTgdgcgcfLgcgcgeeTaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeVhcfbhdfbhcfNfOfSfSfRfSfOfTfUfVfVeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafhehfhghhgkgRgRhihjhkgkhlhmhnhohphqhrhshsgRhtgRgRgRgRhugkgthvafafafafafafafafafafafafafafafafafafafafafaf
+aaajajajajajajajbqgvgvgvbqajbqgwgwgwbqajajajajajajajajaaafafafajaaajajajajfofofofofyfyfyfyfyfyfyfyfyfofofwfoajajajajaaajajajaaajajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaafzhxhwhwfLhwhwhyfzaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafeUeUeUeUeUeUeUeUeUeUeUeUeUeUeUeUeUeUafafafafafafafafafafafafafafafafafafafafafafafafafafafafafgkgkgkgkgkgkhzgRgRhAgkhBhChDhEhFhGhHhshsgRhtgRhIhJgRgRgkgkgkafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajbqgvgvgvbqajbqgwgwgwbqajajajajajajajajaaafafafajaaajajajajfwfyfyfyfyfyfyfyfyfyfyfyfyfyfyfyfoajajajajaaajajajaaajajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaafKfLfLfLfLfLfLfLfMaaajajajajajajajaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafgkgkgkhKgRgkgihLhMhNhOhPhQhHhsgRhzgigkgkgihRhSgkgkafafafafafafafafafafafafafafafafafafafafafafaf
-aaajajajajajajajbqbqbqbqbqajbqbqbqbqbqajajajajajajajajaaafafafajaaajajajajfwfyfyfyfyfyfyfyfyfyfyfyfyfyfyfyfoajajajajaaajajajaaajajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaafzhTgdfLfLfLgdhUfzaaajajajajajajajaaafafafafafafafafafafafafafafafafhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVafafafafafafafafafafafafafafafafafafafafafafafafgkhWhXgkgkgkgkgkgkgkgkhYgRgRgRgRhZgRgRgRgRgkgkiagRgigkibibgkgkgkgkafafafafafafafafafafafafafafafafafafafafafafafaf
+aaajajajajajajajbqbqbqbqbqajbqbqbqbqbqajajajajajajajajaaafafafajaaajajajajfwfyfyfyfyfyfyfyfyfyfyfyfyfyfyfyfoajajajajaaajajajaaajajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajajaaajaaajajajajajajajaafzhTgcfLfLfLgchUfzaaajajajajajajajaaafafafafafafafafafafafafafafafafhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVafafafafafafafafafafafafafafafafafafafafafafafafgkhWhXgkgkgkgkgkgkgkgkhYgRgRgRgRhZgRgRgRgRgkgkiagRgigkibibgkgkgkgkafafafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajajajajajajajajajajajajajajajajajajajajaaafafafajaaajajajajfwfyfyfyfyfyfyfyfyfyfyfyfyfyfyfyfoajajajajaaajajajaaajajajajajfwfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwfwajajajajajajaaajaaajajajajajajajaaeTicidgziegxifigeTaaajajajajajajajaaafafafafafafafafafafafafafafafafhVihihihihihihihihihiiihihihijikihihihijihihihihihihijihihhVafafafafafafafafafafafafafafafafafafafafafafafgkgkilimgkingkioipiqgigkirgRhshshshshshshshshsgRhsgRisithshsgRgkgtguafafafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajajajajajajajajajajajajajajajajajajajajaaafafafajaaajajajajfxfyfyfyfyfyfyfyfyfyfyfyfyfyfyfyfoajajajajaaajajajaaajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajaaajaaajajajajajajajaaaaiueTiviviveTiuaaaaajajajajajajajaaafafafafafafafafafafafafafafafafhVihihihihiiihihihihihihihihihihihijihihihihihijihihihihihhVafafafafafafafafafafafafafafafafafafafafafafafiwixhsiygkizgigkiAgkiBgkiChshsiDiEiFiGiHiIiJhshshshsiKiLhshsgRgkgtgLafafafafafafafafafafafafafafafafafafafafafafafaf
aaajajajajajajajajajajajajajajajajajajajajajajajajajajaaafafafajaaajajajajfofyfyfyfyfyfyfyfyfyfyfyfyfyfyfyfoajajajajaaajajajaaajajajajajfwfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfWfwajajajajajajaaajaaajajajajajajajajaaabeTiuiuiueTaaaaajajajajajajajajaaafafafafafafafafafafafafafafafafhVihihihihihihihiMihihihihihiiihihikijihihijihihijikihijihhVafafafafafafafafafafafafafafafafafafafafafafafiNiOiPhsiQgRgRgRgRiRgRgRgRhshsiSiTiUiViWiXiYhshshshsiZhshshsgRgkgtgLafafafafafafafafafafafafafafafafafafafafafafafaf
@@ -2469,12 +2469,12 @@ ajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaaaaaaaaaaaaaaa
ajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafhVihjyjyjyjyjyjyjyjKjKjKjyjyjyjyjyjyjykekTlolplphVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
ajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslslslslslslslsafafhVihjyltltltltltjyjKjKjKjyjKjKjKjKjKjyluhVlolplphVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
ajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslvlvlvlslvlvlsafafhVihjyltltltltltltjKjKjKjKjKjKjKjKjKjyluhVhVhVhVhVafafafafafafafafaflwlxlylxlzafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslvlAlvlBlvlvlsafafhVihjyltltltltltltjKjKjKjKjKjKjKjKjKjyjLihhVafafafafafafafafafafafaflxlClDlElxafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlFlFlslvlvlsafafhVihjyltltltltltjyltltltjyjKjyjKjyjyjylGihhVafafafafafafafafafafafaflHlIlJlIlHafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlslslslslslslvlvlsafafhVihjyltltltjyjyjyltltltjyjyjyjKjKjKjyjLihhVafafafafafafafafafafafaflLlIlIlIlLafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlBlvlBlvlvlvlvlvlsafafhVihjyltltltjyihjylMlMlMjyihjyjKjKjKjyjLihhVafafafafafafafafafafafaflLlIlIlIlLafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlslslslslvlvlvlNlsafafhVihjylMlMlMjyihjylOlPlQjyihjylMlMlMjyjLihhVafafafafafafafafafafafaflRlIlIlIlRafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlvlvlNlsafafhVihjylOlPlQjyihihihihihihihjylOlPlQjyihihhVafafafafafafafafafafafaflxlSlTlUlxafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslvlAlvlBlvlvlsafafhVihjyltltltltltltjKjKjKjKjKjKjKjKjKjyjLihhVafafafafafafafafafafafaflxlDlClElxafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlFlFlslvlvlsafafhVihjyltltltltltjyltltltjyjKjyjKjyjyjylGihhVafafafafafafafafafafafaflHlJlIlJlHafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlslslslslslslvlvlsafafhVihjyltltltjyjyjyltltltjyjyjyjKjKjKjyjLihhVafafafafafafafafafafafaflLlJlJlJlLafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlBlvlBlvlvlvlvlvlsafafhVihjyltltltjyihjylMlMlMjyihjyjKjKjKjyjLihhVafafafafafafafafafafafaflLlJlJlJlLafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflKlKlKlKlslslslslvlvlvlNlsafafhVihjylMlMlMjyihjylOlPlQjyihjylMlMlMjyjLihhVafafafafafafafafafafafaflRlJlJlJlRafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlvlvlNlsafafhVihjylOlPlQjyihihihihihihihjylOlPlQjyihihhVafafafafafafafafafafafaflxlTlSlUlxafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslFlvlvlNlsafafhVihihihihihihihihihihihihihihihihihihihihhVafafafafafafafafafafafaflxlWlWlWlxafafafafafafafafafafafaflXlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlY
lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflslslslslslsafafhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVhVafafafafafafafafafafafaflwlZmamblwafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
lVlVlVlVlVlVlVlVlVlVlVlVlVlVlVafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
@@ -2498,12 +2498,12 @@ afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafnwmTmTmTmToGmTmTmTmTmToGoHmTmTmTmTozmimioImimioImimimimimimimimioJmimioJmimimimioCoKmImIoFmimimimimimimimimQmQomomommQmdoLnCmdoMmdoNmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafmcmcafafafafafafafafmcmcmcafafafafafafafafafafafafafafhVhVorororhVhVmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmc
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafnfnfnfnfnfnfnfnfnfnfmdngoOmTmToPmdmDmDmdoQoQmdmDmDmdmDmDmDmDmDoRoSoSmdmdmimimioCoToUoVoFmimioWmwmimimimimdoXnOnOnOoYmdoLnCmdoZmdoZmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafmcmcmcmcmcafafafafafafmcmcafafafafafafafafafafafafafafafafhVpaorpbhVmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmcmc
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafnwmTmTmTmTpcmTmTmTmTmTpcpdmTmTmTpemdpfmimimimimipgphmdpipjpkplpmpnmimipomDppmimimimimimimimimipqmdmimimimimdmdmdmdmdmdmdmdmdmdmdmdmdmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafmcmcmcmcmcmcafafafafafafafafafafafafafafafafafafafprpspspthVhVpuhVhVhVhVhVhVhVmcmcmchVhVhVhVhVhVmcmcmcmcmc
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafnfnfnfnfnfnfnfnfnfnfmdmTmTmTmTpvmdpwmimimimimimipxmdmimimimipymimimipzmDpApBpCpDmimimipCpBpAppmdmimimimimDpEpFpFpGpHpImdpJnCpKmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafmcmcmcmcmcmcafafafafafafafafafafpLpMpNpNpNpOpLafafpPpQpRpSpQpQpQpThVpUpVpWpXhVmcmcmchVpYfVpZqahVmcmcmcmcmc
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafnfnfnfnfnfnfnfnfnfnfmdmTmTmTmTpvmdpwmimimimimimipxmdmimimimipymimimipzmDpApBpCpDmimimipCpBpAppmdmimimimimDpEpFpFpGpHpImdpJnCpKmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafmcmcmcmcmcmcafafafafafafafafafafpLpMpNpNpNpOpLafafpPpQpSpRpQpQpQpThVpUpVpWpXhVmcmcmchVpYfVpZqahVmcmcmcmcmc
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmTqbqcqdqemdqfmimiqgqhmimiqimdmimimimimimimimimdmdmdmDmDmdqjqjmdmdmdmdmdmdmimimimimDqkqkqkqkqkqkmdqlnCqmmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafmcmcmcmcmcafafafafafafafafafpLpLqnqoqpqqqrpLpLafpPpQqsqspQpQpQpQqtquququqvhVmcmcmchVhVhVhVhVhVmcmcmcmcmc
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmdmdmdmdmdmdqwmimiqxqymimiqzmdmimiqAqBqCmimiqDmdqEqFqFqFqFqGqGqFqFqFqFafmdmimimimimdqkqHqIqIqIqImdmdqJmdmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafmcmcmcmcafafafafafafafafafpLqKqLqLqMqLqLqqpLafpPqNqOqPqQpQpQpQhVquququqRhVmcmcmchVqSfVfVqThVmcmcmcmcmc
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmimimiqUqVmimimimdmimiqWqXqYmimiqZmdrarbrcrdrerfrfrfrgrhriqFmdmimimimirjqkrkrkrkrkrkqkqkqkqImdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafmcmcafafafafafafafafafafpLrlqLqLqLqLrmrnpLafpPpQroropQpQpQrphVrqrrrsrthVmcmcmchVrufVfVrvhVmcmcmcmcmc
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmimimimimimimimimdmimimimimimimirwmdrarxryrfrfrfrfrfrfrfrzrAmdmimimimirjqkqkqkrBqkqkqkqkqkqImdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafpLrCqLqLrDqLqLrEpLafpPpQpQpQpQpQpQrFhVhVhVhVhVhVmcmcmchVrGfVfVrHhVmcmcmcmcmc
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmimimimimimimimimdmimimimimimimimimdrarxrIrJrKrKrKrKrKrLriqFmdmimimimimdqkqkrMrMqkqkrNqkqkqImdafafafafafafafafafafafafafafafafafafafafafafafafrOrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrOafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafpLrQrRpLpLpLpLpLpLafrSpspsrThVqaqaqahVldldrUrVhVmcmcmchVrWfVfVrXhVmcmcmcmcmc
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmdmdmdmdmdmdqwmimiqxqymimiqzmdmimiqAqBqCmimiqDmdqEqFqFqFqFqGqGqFqFqFqFafmdmimimimimdqkqHqIqIqIqImdmdqJmdmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafmcmcmcmcafafafafafafafafafpLqKqLqLqMqLqLqqpLafpPqNqPqOqQpQpQpQhVquququqRhVmcmcmchVqSfVfVqThVmcmcmcmcmc
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmimimiqUqVmimimimdmimiqWqXqYmimiqZmdrarbrdrcrfrerererhrgriqFmdmimimimirjqkrkrkrkrkrkqkqkqkqImdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafmcmcafafafafafafafafafafpLrlqLqLqLqLrmrnpLafpPpQroropQpQpQrphVrqrrrsrthVmcmcmchVrufVfVrvhVmcmcmcmcmc
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmimimimimimimimimdmimimimimimimirwmdrarxryrerererererererzrAmdmimimimirjqkqkqkrBqkqkqkqkqkqImdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafpLrCqLqLrDqLqLrEpLafpPpQpQpQpQpQpQrFhVhVhVhVhVhVmcmcmchVrGfVfVrHhVmcmcmcmcmc
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmimimimimimimimimdmimimimimimimimimdrarxrJrIrKrKrKrKrKrLriqFmdmimimimimdqkqkrMrMqkqkrNqkqkqImdafafafafafafafafafafafafafafafafafafafafafafafafrOrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrPrOafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafpLrQrRpLpLpLpLpLpLafrSpspsrThVqaqaqahVldldrUrVhVmcmcmchVrWfVfVrXhVmcmcmcmcmc
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmimirYrZsasbscsdmdsesfsgshsisjskslmdsmqFqFqFqFqFqFqFqFqFqFafmdmimimimimdsnqksospqkqksqqkqksrmdafafafafafafafafafafafafafafafafafafafafafafafafrOssssssssssssssssssssssssssssssssssssssssssssrOafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafpLstsusvswsxpLafafafafafafsyqaqaqaszlelesAsAhVmcmcmchVrWfVfVsBhVmcmcmcmcmc
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdsCsDrYrZsasbscsdmdmdmdmdmdmdmdmdmdmdsEsEsEsEsEsEsEsEsEsEsEsEmdmdsFsFmdmdmdmdmdmdmdmdmdmdmdmdmdafafafafafafafafafafafafafafafafafafafafafafafafrOssssssssssssssssssssssssssssssssssssssssssssrOafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafpLsGsHrmqLsIpLafafafafafafsJqaqaqahVsKlehVhVhVhVhVhVhVsLsMsMsLhVhVhVhVmcmc
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmdmdmdmdmdmdmdmdmdmdafafafafafafafafafafafafafafafafafafafafafmdmdsNsNmdmdafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafrOsssssssssssOsOsOsOsOsPsPsOsOsOsOsOssssssssssrOrOrOrOrOrOrOafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafpLpLsQsurmqLsRpLpLafafnEnvsShVqaqaqahVhVhVhVsTsUsVsWsXsYfVfVfVfVsZsZtahVhVmc
@@ -2544,27 +2544,27 @@ afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYBYvYvYvXvEvE
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvDvYCavYvYvYvYvEvEvEvEvDvDvDvDvDvEvEvEvEvYvYvYCaBPCivYvYvYvEvEvEvEvDvDvDvDvDvEvEvEvEvYvYvYvYBPvYztxzxzzwwLAbxzCjwLAbzwwLCkxzxzBSyGyGClClClClyGCmCmyGClClClClyGyGAQAQAQAQCnCoCpCpCpCqCrAQAQAQAQAxAxAxAxAxAxAxAQAQAQAxAxAxAxAxrOvHvHCsAWAWAWAyBIAWAWAYCtCfBVBVBVBVBVBVBVBVBVBVBVBVCgCtBXBXBXBXBXBXBXBXBXAyafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafmcmcmcmcmcafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvYvYvYvYCuxwCvCuxwCwCxCyxwCvCuxwCvvYvYvYvYvYvYvYvYvYCuxwCvCuxwCwCxCyxwCvCuxwCvvYvYvYvYvYvYwLCzxzAqxbAbCACBxbAEAqwLCCBrBrCDwLCECFCGCFCGBcAQAQBcCFCHCFCFCIAxAQAQAQCJCKCLCLCLCLCLCMCNAQAQAQAxCFCGCFCECGBcAQAQAQBcCGCFCFCOrOvHvHAyCPAWCQAYBIAWAWAyBJBJCRCRCRCRCSBVBVCTCRCRCRCSBJBJChChChChChChChChChAyafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvYvYvYvYCuxwCvCuxwCwCUCyxwCvCuxwCvvYvYvYvYvYvYvYvYvYCuxwCvCuxwCwCUCyxwCvCuxwCvvYvYvYvYvYvYwLwLztztxbCVCWxbxbztztwLwLwLwLwLwLBcBcBcBcBcBcAQAQBcBcBcBcBcBcAxAQAQCXCYCLCLCLCLCLCLCLCZCrAQAQAxBcBcBcBcBcBcAQAQAQBcBcBcBcBcAxDaDaAyAWDbDcAYBIAWAWAyAyBJBJBKBJBKBJBLBLBJBKBJBKBJBJBMBMBMBMBMBMBMBMBMBMAyafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDDdDevDvYvYvYvYDfDgDhDfDgDiDjDkDgDhDfDgDhvYvYvDDlDdDevDvYvYDfDgDhDfDgDiDjDkDgDhDfDgDhvYvYvYvYvYvYvYvYvYvYAQAQAQAQDmAQAQDmAQAQAQCcAxCcAQAQAQAQAQAQAQAQAQAQAQAQCcAxAQAQDnCLCLCLDoDpDqCLCLCLDnAQAQAxCdAQAQAQAQAQAQAQAQAQAQAQAQCdAxAQAQAYDrDsAYAyAWAWAWBDAyAyAyAYAYAYAyDtDtAyAYAYAYAyAyAyAyAYAYAYAyAyAYAYAYAyafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDDuxwDvvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYDwDxDuxwDyvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYAQAQAQAQDmAQAQDmAQAQAQAQDzAQAQAQAQAQAQAQAQAQAQAQAQAQAQDzAQAQDACLCLDoDBDBDBDqCLCLDCAQAQDzAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDDAWAWAWDEAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYafafafafafafafafafafafafafafafafafafafafafafafafafafafDFlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYBhlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlY
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDDdDevDvYvYvYvYDfDgDhDfDgDiDjDkDgDhDfDgDhvYvYvDDlDdDevDvYvYDfDgDhDfDgDiDjDkDgDhDfDgDhvYvYvYvYvYvYvYvYvYvYAQAQAQAQDmAQAQDmAQAQAQCcAxCcAQAQAQAQAQAQAQAQAQAQAQAQCcAxAQAQDnCLCLCLDoDqDpCLCLCLDnAQAQAxCdAQAQAQAQAQAQAQAQAQAQAQAQCdAxAQAQAYDrDsAYAyAWAWAWBDAyAyAyAYAYAYAyDtDtAyAYAYAYAyAyAyAyAYAYAYAyAyAYAYAYAyafafafafafafafafafafafafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDDuxwDvvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYDwDxDuxwDyvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYAQAQAQAQDmAQAQDmAQAQAQAQDzAQAQAQAQAQAQAQAQAQAQAQAQAQAQDzAQAQDACLCLDoDBDBDBDpCLCLDCAQAQDzAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDDAWAWAWDEAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYafafafafafafafafafafafafafafafafafafafafafafafafafafafDFlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYBhlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlY
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDxwxwDGvYvYvYvYvYvYvYvYvYvYDHvYvYvYvYvYvYvYvYDIDJvExwDGvYvYvYvYvYvYvYvYDHvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYBcAQAQAQAxAQAQAxAQAQAQAQDzAQAQAQAQAQAQAQAQAQAQAQAQAQAQDzAQAQDACLCLDKDBDLDBDMCLCLDCAQAQDzAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAYAWAWAWAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDDNxwDOvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYDPxwDNxwDOvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYvYAQAQAQAQDmAQAQDmAQAQAQAQDzAQAQAQAQAQAQAQAQAQAQAQAQAQAQDzAQAQDACLCLDQDBDBDBDRCLCLDCAQAQDzAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQAQDDAWAWAWDEAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDDSDTvDvYvYvYvYDUDVDWDUDVDXDYDZDVDWDUDVDWvYvYvDEaDSEbvDvYvYDUDVDWDUDVDXDYDZDVDWDUDVDWvYvYvYvYvYvYvYvYvYvYAQAQAQAQDmAQAQDmAQAQAQCcAxCcAQAQAQAQAQAQAQAQAQAQAQAQCcAxAQAQEcCLCLCLDQEdEeCLCLCLEfAQAQAxCdAQAQAQAQAQAQAQAQAQAQAQAQCdAyEgEgAyAyAyAyAyAWAWAWBDAyAyAyAYAYAYAyBEBEAyAYAYAYAyAyAyAyAYAYAYAyAyAYAYAYAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDDSDTvDvYvYvYvYDUDVDWDUDVDXDYDZDVDWDUDVDWvYvYvDEaDSEbvDvYvYDUDVDWDUDVDXDYDZDVDWDUDVDWvYvYvYvYvYvYvYvYvYvYAQAQAQAQDmAQAQDmAQAQAQCcAxCcAQAQAQAQAQAQAQAQAQAQAQAQCcAxAQAQEcCLCLCLDQEeEdCLCLCLEfAQAQAxCdAQAQAQAQAQAQAQAQAQAQAQAQCdAyEgEgAyAyAyAyAyAWAWAWBDAyAyAyAYAYAYAyBEBEAyAYAYAYAyAyAyAyAYAYAYAyAyAYAYAYAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvYvYvYvYCuxwCvCuxwCwCUCyxwCvCuxwCvvYvYvYvYvYvYvYvYvYCuxwCvCuxwCwCUCyxwCvCuxwCvvYvYvYvYvYvYEhEhEiEiEhEjEjEjEhEiEiEhEhEjEjEhEhBcBcBcBcBcBcAQAQBcBcBcBcBcBcAxAQAQEkElCLCLCLCLCLCLCLEmEnAQAQAxBcBcBcBcBcBcAQAQBcBcBcBcBcBcAyEoEoEpEqErEsAYBIAWAWAyAyBJBJBKBJBKBJBLBLBJBKBJBKBJBJBMBMBMBMBMBMBMBMBMBMAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvYvYvYvYCuxwCvCuxwCwCxCyxwCvCuxwCvvYvYvYvYvYvYvYvYvYCuxwCvCuxwCwCxCyxwCvCuxwCvvYvYvYvYvYvYEhEtEuEuEvEwExExEyEuEzEhEAEBECEDEhCHCECFCGCGBcAQAQBcCOEECGCFCFAxAQAQAQEFEGCLCLCLCLCLEmCKAQAQAQAxEHCFCECFCGBcAQAQBcCFCGCFEIEEAyEoEoEoEoEoEoAYBIAWAWAyBJBJBTBTBTBTBUBVBVBWBTBTBTBUBJBJBXBXBXBXBXBXBXBXBXAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvDvYEJEJvYvYvYvEvEvEvEvDvDvDvDvDvEvEvEvEvYvYvYBYBPCivYvYvYvEvEvEvEvDvDvDvDvDvEvEvEvEvYvYvYBOBPvYEiEuEuEuEuEuEuEuEuEuEKEhELEuEMENEhEOEPEPEPEPEOEQEQEOEPEPEPEPEOEOAQAQAQAQEkCoERERERCqEnAQAQAQAQESESESESESESESETETESESESESESESAyEoEoEoEoEoEoAyBIAWAWAYCeCfBVBVBVBVBVBVBVBVBVBVBVBVCgCeChChChChChChChChChAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYBPEJvYvXvEvEafafafafafafafafafafafvEvEvXvYCaBPBQvYvXvEvEafafEUEVEVEVEVEVEUafafvEvEvXvYBYBPBQEiEuEuEWEXEuEuEWEXEuEKEhEYEuEuEZEhFaFbFbFbFbFbFbFbFbFbFbFbFbFaEOAxCcAQAQAQAQAQAQAQAQAQAQAQCcAxESFcFdFdFdFdFeFeFeFeFdFdFdFdFcAyEoEoFfFgEoFfAYBIAWAWAYCtCfBVBVBVBVBVBVBVBVBVBVBVBVCgCtBXBXBXBXBXBXBXBXBXAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYCivYvEvEmKafafafafafafafafafafafmKvEvEvYCaBPvYvYvEvEmKafEUFhFiFjFkFlFmFhEUafmKvEvEvYvYBPvYEhFnEuEWEXEuEuEWEXEuEKEhFoEuEMENEhFbFbFbFbFbFbFbFbFbFbFbFbFbFbEOAxAxAQAQAQAQAQAQAQAQAQAQAQAxAxESFeFeFeFeFeFeFeFeFeFeFeFeFeFeAyEoEoFfFgEoFfAYBIAWAWAyBJBJCRCRCRCRCSBVBVCTCRCRCRCSBJBJChChChChChChChChChAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEBFBFBFvEvEafmKafafafafafafafafafafafmKafvEvEBFBFBFvEvEafmKEUEUFpFqFrFqFrFqFsEUEUmKafvEvEBFBFBFEhFtEuEWEXEuEuEWEXEuEKEhFuFvFwFxEhFbFbFyFzFAFBFbFbFyFCFDFBFbFbEOafAxAxAxAxAxAQAxAQAxAxAxAxAxafESFeFEFEFEFEFeFeFeFeFEFEFEFEFeAyEoEoFfFgEoFfAyBIAWAWAyAyBJBJBKBJBKBJBLBLBJBKBJBKBJBJBMBMBMBMBMBMBMBMBMBMAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDafafmKafafafafafafafafafafafmKafafvDvYvYvYvDafafmKEVFrFrFrFFFGFHFrFrFrEVmKafafvDvYvYvYEhFtEuEuEuEuEuEuEuEuEKEhEhELFIFJEhFbFbFyFKFLFBFbFbFyFMFNFBFbFbEOafafAxFOFPAQAQCLAQAQFPFQAxafafESFeFeFeFeFeFeFeFeFeFeFeFeFeFeAyEoEoFfFgEoFfAYAWAWAWBDAyAyAyAYAYAYAyDtDtAyAYAYAYAyAyAyAyAYAYAYAyAyAYAYAYAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDafafmKafafafafafafafafafafafmKafafvDvYvYvYvDafafmKEUFRFSFTEUFUEUFVFWFXEUmKafafvDvYvYvYEhFtEuEuEzFYFYFYFYFYFZEhGaEyEvGbEhFbFbFbFbFbFbFbFbFbFbFbFbFbFbEOafafAxFOFPAQAQCLAQAQFPFQAxafafESFcFdFdFdFdFeFeFeFeFdFdFdFdFcAyEoEoFfFgEoFfAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDafafmKafafafafafafafafafafafmKafafvDvYvYvYvDafafmKEUGcEVEUEUEUEUEUEVGcEUmKafafvDvYvYvYEhEjGdEuEhGeGfGgGhGfGiEhFtEuEuGjEhFbFbFyGkGlFBFbFbFyGmGnFBFbFbEOafafAxGoAQAQAQCLAQAQAQGpAxafafESESESESESESESETETESESESESESESAyEoEoFfFgEoFfAyAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEmKmKmKafafafafafafafafafafafmKmKmKvEvYvYvYvEmKmKmKEUFrFWEUGqGrGsEUFSFrEUmKmKmKvEvYvYvYEhFtEuEuGtEyGuEuEuGuEvGvEyEuEuGwEhFbFbFyGxGyFBFbFbFyGzGAFBFbFbEOafafAxFOFPAQAQCLAQAQFPFQAxafafESGBGCGCGCGCGBGBGBGBGDGEGEGEGFAyEoEoFfFgEoFfAyAyAWAWAWAWAWAWGGGGGGAWAWAWAWGGGGGGAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafEVFrFWEVGHGIGJEVFSFrEVafafafvEvYvYvYEhFtEuEuEuEuEuEuEuEuEuEuEuEuEuGKEhFbFbFbFbFbFbFbFbFbFbFbFbFbFbEOafafAxFOFPAQAQCLAQAQFPFQAxafafESGBGBGBGBGBGBGBGBGBGBGBGBGBGBAyEoEoEoEoEoEoAyAyAyAYAYAYAyAYAYAYAyAYAYAYAyAYAYAYAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafafafafafafafafafafafafafafafvEvYvYvYvEafafEUFhFRFWEVGHGLGJEVFSFXFhEUafafvEvYvYvYEhFtEuEuEuEuEuEuEuEuEuEuEuEuEuGwEhFbFbFbFbFbFbGMGMGMGMGMGMGMGMEOafafGNGNGNGOGOGPGOGOGNGNGNafafESGQESGRESGSESGBGBESGTESGUESGVAyEoEoEoEoEoEoAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDvDvDafafafafafafafafafafafafafvDvDvDvYvYvYvDvDvDFhGWFrFWFhEVGXEVFhFSFrGWFhvDvDvDvYvYvYEhFtEuEzFYFYFYFnEzFYFYFnEuEuEuGKEhGYGZGZFbFbHaHbHbHbHcHbHbHbHbEOafafGNHdHeGOHeHeHeGOHeHdGNafafESHfESHfESHfESGBGBESHfESHfESHfAyEoEoHgHgHgHgAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYxvxwxxafafafafafafafafafafafafafxxxwxvvYvYvYHhxwHhHiFrFrFrHjHkFrFrHjFrFrFrHiHhxwHhvYvYvYEhEjEuEKEjEjEjFtEKHlFJFtEzHmHnHoEhHpHqHrFbFbHaHsHtHtHtHtHtHtHtEOafafGNHeHuHvHeHeHeHvHwHeGNafafESESESESESESESGBGBESESESESESESAyEoEoHxHxHxHxAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYxvxwxxafafafafafafafafafafafafafxxxwxvvYvYvYHhxwHhHiFrFrFrFrFrFrFrFrFrFrFrHiHhxwHhvYvYvYEhHyEuEvHzHAHBEyEvHCEhHDHEEhEhEhEhHFHGHHFbFbHaHtHtHtHtHtHtHtHtEOafafGNGOHeGOHeHeHeGOHeGOGNafafESHIGBHIGBHIGDGBGBHJHIGBHIGBHIAyEoEoEoEoEoEoAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDvDvDafafafafafafafafafafafafafvDvDvDvYvYvYvDvDvDFhHKFrFWEVFSFrFWEVFSFrHLFhvDvDvDvYvYvYEhHyEuEuEuEuEuEuEuHMEhHDHNHOHOHPEhHQHRHSFbFbHtHtHtHTHUHVHWHtHtEOafafGNHeHeHeHeHeHeHeHeHeGNafafESGBGBGBGBGBGBGBGBGBGBGBGBGBGBAyHXEoEoEoEoAYAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYBPEJvYvXvEvEafafafafafafafafafafafvEvEvXvYCaBPBQvYvXvEvEafafEUEVEVEVEVEVEUafafvEvEvXvYBYBPBQEiEuEuEWEXEuEuEWEXEuEKEhEYEuEuEZEhFbFaFaFaFaFaFaFaFaFaFaFaFaFbEOAxCcAQAQAQAQAQAQAQAQAQAQAQCcAxESFcFdFdFdFdFeFeFeFeFdFdFdFdFcAyEoEoFfFgEoFfAYBIAWAWAYCtCfBVBVBVBVBVBVBVBVBVBVBVBVCgCtBXBXBXBXBXBXBXBXBXAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYCivYvEvEmKafafafafafafafafafafafmKvEvEvYCaBPvYvYvEvEmKafEUFhFiFjFkFlFmFhEUafmKvEvEvYvYBPvYEhFnEuEWEXEuEuEWEXEuEKEhFoEuEMENEhFaFaFaFaFaFaFaFaFaFaFaFaFaFaEOAxAxAQAQAQAQAQAQAQAQAQAQAQAxAxESFeFeFeFeFeFeFeFeFeFeFeFeFeFeAyEoEoFfFgEoFfAYBIAWAWAyBJBJCRCRCRCRCSBVBVCTCRCRCRCSBJBJChChChChChChChChChAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEBFBFBFvEvEafmKafafafafafafafafafafafmKafvEvEBFBFBFvEvEafmKEUEUFpFqFrFqFrFqFsEUEUmKafvEvEBFBFBFEhFtEuEWEXEuEuEWEXEuEKEhFuFvFwFxEhFaFaFzFyFBFAFaFaFzFCFDFAFaFaEOafAxAxAxAxAxAQAxAQAxAxAxAxAxafESFeFEFEFEFEFeFeFeFeFEFEFEFEFeAyEoEoFfFgEoFfAyBIAWAWAyAyBJBJBKBJBKBJBLBLBJBKBJBKBJBJBMBMBMBMBMBMBMBMBMBMAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDafafmKafafafafafafafafafafafmKafafvDvYvYvYvDafafmKEVFrFrFrFFFGFHFrFrFrEVmKafafvDvYvYvYEhFtEuEuEuEuEuEuEuEuEKEhEhELFIFJEhFaFaFzFKFLFAFaFaFzFMFNFAFaFaEOafafAxFOFPAQAQCLAQAQFPFQAxafafESFeFeFeFeFeFeFeFeFeFeFeFeFeFeAyEoEoFfFgEoFfAYAWAWAWBDAyAyAyAYAYAYAyDtDtAyAYAYAYAyAyAyAyAYAYAYAyAyAYAYAYAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDafafmKafafafafafafafafafafafmKafafvDvYvYvYvDafafmKEUFRFSFTEUFUEUFVFWFXEUmKafafvDvYvYvYEhFtEuEuEzFYFYFYFYFYFZEhGaEyEvGbEhFaFaFaFaFaFaFaFaFaFaFaFaFaFaEOafafAxFOFPAQAQCLAQAQFPFQAxafafESFcFdFdFdFdFeFeFeFeFdFdFdFdFcAyEoEoFfFgEoFfAYAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDafafmKafafafafafafafafafafafmKafafvDvYvYvYvDafafmKEUGcEVEUEUEUEUEUEVGcEUmKafafvDvYvYvYEhEjGdEuEhGeGfGgGhGfGiEhFtEuEuGjEhFaFaFzGkGlFAFaFaFzGmGnFAFaFaEOafafAxGoAQAQAQCLAQAQAQGpAxafafESESESESESESESETETESESESESESESAyEoEoFfFgEoFfAyAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAWAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEmKmKmKafafafafafafafafafafafmKmKmKvEvYvYvYvEmKmKmKEUFrFWEUGqGrGsEUFSFrEUmKmKmKvEvYvYvYEhFtEuEuGtEyGuEuEuGuEvGvEyEuEuGwEhFaFaFzGxGyFAFaFaFzGzGAFAFaFaEOafafAxFOFPAQAQCLAQAQFPFQAxafafESGBGCGCGCGCGBGBGBGBGDGEGEGEGFAyEoEoFfFgEoFfAyAyAWAWAWAWAWAWGGGGGGAWAWAWAWGGGGGGAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafEVFrFWEVGHGIGJEVFSFrEVafafafvEvYvYvYEhFtEuEuEuEuEuEuEuEuEuEuEuEuEuGKEhFaFaFaFaFaFaFaFaFaFaFaFaFaFaEOafafAxFOFPAQAQCLAQAQFPFQAxafafESGBGBGBGBGBGBGBGBGBGBGBGBGBGBAyEoEoEoEoEoEoAyAyAyAYAYAYAyAYAYAYAyAYAYAYAyAYAYAYAyafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafafafafafafafafafafafafafafafvEvYvYvYvEafafEUFhFRFWEVGHGLGJEVFSFXFhEUafafvEvYvYvYEhFtEuEuEuEuEuEuEuEuEuEuEuEuEuGwEhFaFaFaFaFaFaGMGMGMGMGMGMGMGMEOafafGNGNGNGOGOGPGOGOGNGNGNafafESGQESGRESGSESGBGBESGTESGUESGVAyEoEoEoEoEoEoAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDvDvDafafafafafafafafafafafafafvDvDvDvYvYvYvDvDvDFhGWFrFWFhEVGXEVFhFSFrGWFhvDvDvDvYvYvYEhFtEuEzFYFYFYFnEzFYFYFnEuEuEuGKEhGZGYGYFaFaHaHbHbHbHcHbHbHbHbEOafafGNHdHeGOHeHeHeGOHeHdGNafafESHfESHfESHfESGBGBESHfESHfESHfAyEoEoHgHgHgHgAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYxvxwxxafafafafafafafafafafafafafxxxwxvvYvYvYHhxwHhHiFrFrFrHjHkFrFrHjFrFrFrHiHhxwHhvYvYvYEhEjEuEKEjEjEjFtEKHlFJFtEzHmHnHoEhHpHqHrFaFaHaHsHtHtHtHtHtHtHtEOafafGNHeHuHvHeHeHeHvHwHeGNafafESESESESESESESGBGBESESESESESESAyEoEoHxHxHxHxAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYxvxwxxafafafafafafafafafafafafafxxxwxvvYvYvYHhxwHhHiFrFrFrFrFrFrFrFrFrFrFrHiHhxwHhvYvYvYEhHyEuEvHzHAHBEyEvHCEhHDHEEhEhEhEhHFHGHHFaFaHaHtHtHtHtHtHtHtHtEOafafGNGOHeGOHeHeHeGOHeGOGNafafESHIGBHIGBHIGDGBGBHJHIGBHIGBHIAyEoEoEoEoEoEoAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDvDvDafafafafafafafafafafafafafvDvDvDvYvYvYvDvDvDFhHKFrFWEVFSFrFWEVFSFrHLFhvDvDvDvYvYvYEhHyEuEuEuEuEuEuEuHMEhHDHNHOHOHPEhHQHRHSFaFaHtHtHtHTHUHVHWHtHtEOafafGNHeHeHeHeHeHeHeHeHeGNafafESGBGBGBGBGBGBGBGBGBGBGBGBGBGBAyHXEoEoEoEoAYAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafafafafafafafafafafafafafafafvEvYvYvYvEafafEVFSFrFWEVFSFrFWEVFSFrFWEVafafvEvYvYvYEhHyEuEuEuHYHZEuEuIaEhHDEuIbIcIdEhEOEOEOEOEOEOEOEOEOEOEOEOEOEOEOGNGNGNHeHeHeHeHeHeHeHeHeGNGNGNESIeGBIeGBIeGDGBGBHJIeGBIeGBIeAyAYAYAYAYAYAYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEmKmKmKmKmKmKmKmKmKmKmKmKmKmKmKmKmKvEvYvYIfvEafafEVFSFrFWEVFSFGFWEVFSFrFWEVafafvEvYvYvYEhIgEuEuEuEuEuEuEuIhEhHDEuEuIiIdEhIjIkIkIkIlGNHeHeHeHeHeHeHeHeHeHeHeGNGNImGNGNHeGNGNImGNGNHeHeGNGNGNESESESESESESESESESESESESESafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafafafafafafafafafafafafafafafvEvYvYvYvEafafEVFSFrFWEVFSFrFWEVFSFrFWEVafafvEvYvYvYEhInEuEuEuIoIpEuEuIqEhIrIsEuItIuEhIvEuEuEuIwGNHeGNGNGNGNIxGNGNGNHeHeHeHeHeHeGNHeGNHeHeHeHeHeHeHeHeGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
@@ -2573,7 +2573,7 @@ afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYxvxwxxaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYxvxwxxafafafafafafafafafafafafafxxxwxvvYvYvYHhxwHhHiFrFrISFrFrFrFrFrISFrFrHiHhxwHhvYvYvYEhEhITEhHlEhEhIUEuIVEhHDEuEuEuEuIWEuEuIXEuIYGNHeGNIZIDIDIDIDJaGNIQJbJbJbJbJbIQIQIQJbJbJbJbJcJdGNHeGNGNGNGNGNGNGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvYvYvYvDvDvDafafafafafafafafafafafafafvDvDvDvYvYvYvDvDvDFhEVJeFhEVEVJfEVEVFhJeEVFhvDvDvDvYvYvYEhJgEuJhJiJjEhJkEuJlEhJmJnJoJpJqEhJrJsJsJsJtGNHeGNIZJuJvJvIDIDJwIQIQJxJyJxIQIQIQIQIQJxJyJxJzIQGNHeHeHeHeHeHeHeGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEafafafmKmKmKmKmKmKmKmKmKmKmKafafafvEvYvYvYvEafafEUJAJBEUJCJDJEJFJGEUJHJIEUafafvEvFvFvFEhJgEuJJJKJLEhJMEuJNEhEhEhEhEhEhEhEhEhEhEhGNGNHeGNGNGNGNGNGNGNGNIQJbJbJbJbJbIQIQIQJbJbJbJbJOIQGNGNGNGNGNGNGNHeGNGNGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEmKmKmKmKafafafafafafafafafmKmKmKmKvEvYvYvYvEmKmKEUJPJPEUJQJRJEJEJSEUJPJPEUmKmKvEvYvYvYEhEhJTEhEjEjEhEhIHEhEhJUJVJWEjJXJYHzJZJZKaGNHeHeGNGNKbKbKbKbKbGNKcKcKcKcKcKcKcKcKcKcKcKcKcKdKcGNKeKeKeKeKeGNHeHeHeGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvEvYvYvYvEmKmKmKmKafafafafafafafafafmKmKmKmKvEvYvYvYvEmKmKEUJPJPEUJRJQJEJEJSEUJPJPEUmKmKvEvYvYvYEhEhJTEhEjEjEhEhIHEhEhJUJVJWEjJXJYHzJZJZKaGNHeHeGNGNKbKbKbKbKbGNKcKcKcKcKcKcKcKcKcKcKcKcKcKdKcGNKeKeKeKeKeGNHeHeHeGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafwrvDvDvDwrafafafafafafafafafafafafafafafafafwrvDvDvDwrafafEUKfKgEUKhJEKiKjKkEUKlKmEUafafwrvYvYvYEhKnEuJhKoKpEhFtEuEvHzEyEuEvEjEyEuEuEuEuEKGNHeGNGNGNKqKqKqKqKqGNKrKsKsKsKsKsKsKsKsKsKsKsKsKtKrGNKqKqKqKqKqGNGNGNHeGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvVvWvVvDafafafafafafafafafafafafafafafafafvDvVvVvVvDafafEUKuKuEUKvKwJEKxKyEUKuKuEUafafvDvYvYvYEhKzEuEuEuKAEhFtEuEuEzFYEuEuKBEuEuEuEuEuEKGNHeGNKCKDKEKEKEKEKEKFKsKsKsKsKsKsKsKsKsKsKsKsKsKtKsKFKGKGKGKGKGKDKHGNHeGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafvDvDvDvDvDafafafafafafafafafafafafafafafafafvDvDvDvDvDafafEUKIKIEUEUKuKuKuEUEUKIKIEUafafvDvYvYvYEhKJEuEuIXKKEhKLEuEuEKKMEuKNEjFnEuEMEuEuEKGNHeGNKCKDKEKOKEKOKEKFKsKsKsKsKsKsKsKsKsKsKsKsKsKtKsKFKGKPKGKPKGKDKHGNHeGNafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
@@ -2603,26 +2603,26 @@ afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafMhMhMhMhNkMhMhMhNlMhMhMhNmMhMhMhMhMhMhMhNnMhMhMhMhMhMhNoMOMOMOMONpMOMOMOMOMOMNMhMOMSMSMOMhMXMYMHMHNqNqNrNsNsNtMhMhMhMhMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahLXNuNuNuNuNuNuNuNuNuNuNuNuNuNuNuNuNuNuNuLXah
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafNvMNMOMOMOMOMOMONwMOMOMONxMOMOMOMOMOMOMONyMOMONzNANBMhMOMSMSMSMSMSMSMSMSMSMSMOMhMOMSMSMOMlNCNCNDNDNCNCNCMhMhMhMhNENFNGNCafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNHNINININININININININININININININININININHah
afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafNvMOMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMONJMOMSNKNKNKNKNKNKNKNKMSMONJMOMSMSMONJMOMOMOMOMOMOMOMOMOMONCNLNMNNNCafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafNvMOMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSNQMSMSNRNRNRNRNRNRNRNRMSMSNQMSMSMSMSNQMSMSMSMSMSMSMSMSMSMONSNTNFNUNCafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafNvMOMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMONJMOMSNVNVNVNVNVNVNVNVMSNTNDMOMSMSMONJMOMOMOMOMOMOMOMOMOMONCNWNMNXNCafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-lYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYafafafafafafafafafafNvMNMOMOMOMOMOMONYMOMOMONZMOMOMOOaMOMOMOObMOMOMOMOMNMhMOMSMSMSMSMSMSMSMSMSMSNTMhMOMSMSMOMlNCNCOcNCNCMhNCNCNQNQMhOdNFOeNCafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-ahahahahahahahahahahahOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfahahahahahahahlYafafafafafafafafafafMhMhMhMhNkMhMhMhOgMhMhMhOhMhMhMhOiMhMhMhOjMhMhMhOkMhMhMOMOMOMOMOOlMOMOMOMOMOMNMhMOMSMSMOMhOmOnOoOpOqMhOrMSMSMSMhMhMhMhMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-ahmcmcmcmcmcmcmcmcmcmcOsOsOsOsOsOfOtOuOvOfOsOsOsOsOsOsOsOsOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMzMAMnMnMnMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhMSMSMSMhMhMhMhMhMhOBOBMhMhMhMhMhMhMOMSMSMOMhOCOoOoOoOCMhODMSMSMSMSOEMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-ahmcmcmcmcmcmcmcmcmcmcOsOsOsOsOsOfOFOuOuOfOsOsOsOsOsOsOsOsOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMMMAMnMnMnMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhMSMSMSMhOGOGOGOGOGOGOGOGOGOGOGMnMhMOMSMSMOMhOHOIOoOoOoMhOrMSMSOrMSOrMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafNvMOMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSNQMSMSNRNRNRNRNRNRNRNRMSMSNQMSMSMSMSNQMSMSMSMSMSMSMSMSMSMONTNSNFNUNCafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+afafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafNvMOMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMSMONJMOMSNVNVNVNVNVNVNVNVMSNSNDMOMSMSMONJMOMOMOMOMOMOMOMOMOMONCNWNMNXNCafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+lYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYlYafafafafafafafafafafNvMNMOMOMOMOMOMONYMOMOMONZMOMOMOOaMOMOMOObMOMOMOMOMNMhMOMSMSMSMSMSMSMSMSMSMSNSMhMOMSMSMOMlNCNCOcNCNCMhNCNCNQNQMhOdNFOeNCafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+ahahahahahahahahahahahOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfOfahahahahahahahlYafafafafafafafafafafMhMhMhMhNkMhMhMhOgMhMhMhOhMhMhMhOiMhMhMhOjMhMhMhOkMhMhMOMOMOMOMOOlMOMOMOMOMOMNMhMOMSMSMOMhOnOmOpOoOqMhOrMSMSMSMhMhMhMhMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+ahmcmcmcmcmcmcmcmcmcmcOsOsOsOsOsOfOtOuOvOfOsOsOsOsOsOsOsOsOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMzMAMnMnMnMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhMSMSMSMhMhMhMhMhMhOBOBMhMhMhMhMhMhMOMSMSMOMhOCOpOpOpOCMhODMSMSMSMSOEMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+ahmcmcmcmcmcmcmcmcmcmcOsOsOsOsOsOfOFOuOuOfOsOsOsOsOsOsOsOsOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMMMAMnMnMnMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhMSMSMSMhOGOGOGOGOGOGOGOGOGOGOGMnMhMOMSMSMOMhOIOHOpOpOpMhOrMSMSOrMSOrMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
ahmcmcmcmcmcmcOsOsOsOfOfOfOfOsOfOfOfOfOJOfOfOfOfOfOfOfOsOsOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMMMAMnMnMnMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhMSMSMSMhOGOGOGOGOGOGOGOGOGOGOGOGMhOKNKNKOKMhNCNCOLNCNCMhODMSOrMhMhMhMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-ahmcmcmcOsOsOsOsOMOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOfOsOsOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMMMAMnMnMnMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhMSMSMSMhOGOGOGOGOGOGOGOGOGOGOGOGMhONONONONMhOOOoOoOoOOMhOrMSODMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-ahmcmcmcOsOsOuOMOMOMOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOfOPOQOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafNgMAMnOROSMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhOTOUOVMhOGOGOGOGOGOGOGOGOGOGOGOGMhMhOWOXMhMhOoOoOoOoOoMhODMSOrMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
-ahmcmcmcOsOsOMOMOMOsOsOsOfOfOfOfOJOfOfOfOfOJOfOuOuOuOJOYOZOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMhMhMhMhMhMlMiMiMiMlMiMiMiMlMiMiMiMlMiMiMiMlMhMhMhMhOGOGOGOGOGOGOGOGOGOGOGMnMhafafafafMhOOOoOOOoOOMhOrMSMhMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+ahmcmcmcOsOsOsOsOMOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOfOsOsOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMMMAMnMnMnMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhMSMSMSMhOGOGOGOGOGOGOGOGOGOGOGOGMhONONONONMhOOOpOpOpOOMhOrMSODMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+ahmcmcmcOsOsOuOMOMOMOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOfOPOQOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafNgMAMnOROSMhOwOwOwOxOyOyOyOxOzOzOzOxOAOAOAMhOTOUOVMhOGOGOGOGOGOGOGOGOGOGOGOGMhMhOWOXMhMhOpOpOpOpOpMhODMSOrMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
+ahmcmcmcOsOsOMOMOMOsOsOsOfOfOfOfOJOfOfOfOfOJOfOuOuOuOJOYOZOsOsOsmcmcahmcmcmcmclYafafafafafafafafafafafMhMhMhMhMhMlMiMiMiMlMiMiMiMlMiMiMiMlMiMiMiMlMhMhMhMhOGOGOGOGOGOGOGOGOGOGOGMnMhafafafafMhOOOpOOOpOOMhOrMSMhMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
ahmcmcmcOsOMOMOsOsOsOsOsOsOsOsOfOuOuOFOfPaOuOfOuOuOuOJOYPbOsOsOfmcmcahmcmcmcmclYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafMhMiMiMiMiMiMiMiMiMiMiMiMiMhafafafafMhMhMhMhMhMhMhMhMhMhafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
ahmcmcmcOsOMOsOsOsmcmcOsOfOfOfOfPcOuOtOfPcOtOfOuOuOuOfOYOYOYPdOfmcmcahmcmcmcaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
ahmcmcmcOsOMOMOsmcmcmcOsPePfPfOfOfOfOfOfOfOfOfOuOuOuOfOYOYOYPgOfmcmcahmcmcmcaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNPNOah
ahmcOsOMOMOMOMOsOsmcmcOsPhPiPhOJOuOuOuOuOuOuOuOuOuOuOfPjPkPlOfOfmcmcahmcmcmcaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahNONONONONONONONONONONONONONONONONONONONONOah
ahmcPmOMOMOMOMOMOsmcmcOfPnPhPhOJOuOuOuOuOuOuOuOuOuOuOfOsOsOsOsOsmcmcahmcmcmcaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahahahahahahahahahahahahahahahahahahahahahahah
-ahmcPoPpPqOMPrOMOMmcmcOfPnPsOfOfOfOfOfOfOfOfOfOfOJOfOfOfOfOfOfOfOfOfOfmcmcafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-ahmcPtOMPqOMPqOMOMmcmcOsOsOsOfOuOuOuOuOuOuOfPuPvPvPvPwOfOuOuOuOuOuOuOfmcafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-ahmcOsOMPqOMPxOMOMmcmcafafmcOfOuOtOuOuOuOuOfPvPvPyPvPvOfOuOuOuOuOtOuOfmcafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+ahmcPoPqPpOMPrOMOMmcmcOfPnPsOfOfOfOfOfOfOfOfOfOfOJOfOfOfOfOfOfOfOfOfOfmcmcafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+ahmcPtOMPpOMPpOMOMmcmcOsOsOsOfOuOuOuOuOuOuOfPuPvPvPvPwOfOuOuOuOuOuOuOfmcafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+ahmcOsOMPpOMPxOMOMmcmcafafmcOfOuOtOuOuOuOuOfPvPvPyPvPvOfOuOuOuOuOtOuOfmcafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
ahmcOsPzOMOMOMPAOMmcmcafafmcOfOuOuOuOuOuOuOJPvPvPBPvPvOJOuOuOuOuOuOuOfmcafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
-ahmcOsOsOMOMOMOMOsmcmcmJafafOfOuOuOfPCPDPEOfPvPFPGPvPHOfPCPDPEOfOuOuOfafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
+ahmcOsOsOMOMOMOMOsmcmcmJafafOfOuOuOfPCPDPEOfPvPGPFPvPHOfPCPDPEOfOuOuOfafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIPIafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
ahmcOsOsOsOsPJPKOsmcmKmJafafOfOuOuOfafafafOfOfPCPDPEOfOfafafafOfOuOuOfafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafPIafafafafafafafafafafafafafafafafafafafafafafafafafafafPIafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
ahmcOsOsOsOsOsOsmcafafafafafPLPMPMPNafafafafafafafafafafafafafPLPMPMPNafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafPIafafafafafafafafafafafafafafafafafafafafafafafafafafafPIafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
ahmcmcmcmcmcmcmcmcmcafafafafPLPOPPPNafafafafafafafafafafafafafPLPOPPPNafafafaflYafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafPIafafafafafafafafafafPQPQPQPRPQPQPQafafafafafafafafafafPIafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaf
diff --git a/maps/northern_star/polaris-5.dmm b/maps/northern_star/polaris-5.dmm
index 184ffbd6c1..40c415c0a5 100644
--- a/maps/northern_star/polaris-5.dmm
+++ b/maps/northern_star/polaris-5.dmm
@@ -284,7 +284,7 @@
"fx" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/obj/machinery/light,/turf/simulated/floor/plating,/area/outpost/research/toxins_misc_lab)
"fy" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/plating,/area/outpost/research/toxins_misc_lab)
"fz" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/wall/r_wall,/area/outpost/research/toxins_misc_lab)
-"fA" = (/mob/living/simple_animal/slime,/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
+"fA" = (/mob/living/simple_mob/slime/xenobio,/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"fB" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/reinforced,/area/outpost/research/xenobiology)
"fC" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/outpost/research/hallway/toxins_hallway)
"fD" = (/obj/structure/closet/emcloset,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/outpost/research/hallway/toxins_hallway)
@@ -1912,7 +1912,7 @@
"KN" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space)
"KO" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
"KP" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index edc186256d..07f579d0a8 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -377,7 +377,7 @@
"ahm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/steeldecal/steel_decals5,/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fore)
"ahn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"aho" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
-"ahp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_animal/mouse/brown/Tom,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
+"ahp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/mob/living/simple_mob/animal/passive/mouse/brown/Tom,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"ahq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"ahr" = (/obj/machinery/camera/network/command{c_tag = "COM - Vault"; dir = 9},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage)
"ahs" = (/turf/simulated/wall/r_wall,/area/storage/emergency_storage/firstdeck/fs_emergency)
@@ -4265,7 +4265,7 @@
"bEa" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/research)
"bEb" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bEc" = (/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
-"bEd" = (/mob/living/simple_animal/slime/rainbow/kendrick,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
+"bEd" = (/mob/living/simple_mob/slime/xenobio/rainbow/kendrick,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bEe" = (/obj/structure/bed/chair/office/light,/obj/effect/landmark/start{name = "Research Director"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bEf" = (/obj/structure/table/reinforced,/obj/item/device/paicard{pixel_x = 4},/obj/item/device/tape,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/weapon/reagent_containers/food/drinks/jar,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bEg" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced/polarized{id = "rdoffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hor)
@@ -6364,7 +6364,7 @@
"cst" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "hop_office_desk"; name = "HoP Office Privacy Shutters"; opacity = 0},/obj/machinery/door/window/brigdoor/eastright{name = "Head of Personnel's Desk"; req_access = list(57)},/obj/machinery/door/window/northleft{dir = 8; icon_state = "left"; name = "Reception Window"},/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/sc/hop)
"csu" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Head of Personnel"},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/hop)
"csv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/hop)
-"csw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/hop)
+"csw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/mob/living/simple_mob/animal/passive/dog/corgi/Ian,/turf/simulated/floor/tiled,/area/crew_quarters/heads/sc/hop)
"csx" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hop)
"csy" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/computer/guestpass{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hop)
"csz" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
@@ -7397,7 +7397,7 @@
"cMm" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Medbay Subgrid"; name_tag = "Medbay Subgrid"},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/maintenance/substation/medical)
"cMn" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/substation/medical)
"cMo" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/structure/disposalpipe/trunk{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/blue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/cmo)
-"cMp" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 1},/mob/living/simple_animal/cat/fluff/Runtime,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/cmo)
+"cMp" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 1},/mob/living/simple_mob/animal/passive/cat/runtime,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/cmo)
"cMq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/cmo)
"cMr" = (/obj/machinery/camera/network/medbay{c_tag = "MED - CMO"; dir = 2},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/blue/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/cmo)
"cMs" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/vials{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/fancy/vials,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/blue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/cmo)
@@ -10789,7 +10789,7 @@
"dZy" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/window/brigdoor/westleft{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
"dZz" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
"dZA" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
-"dZB" = (/mob/living/simple_animal/slime,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dZB" = (/mob/living/simple_mob/slime/xenobio,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
"dZC" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"dZD" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"dZE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
@@ -10949,7 +10949,7 @@
"ecC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport)
"ecD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard)
"ecE" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge/meeting_room)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -11723,4 +11723,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
dUOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
-
diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm
index eabbfeedf6..c4bce1238d 100644
--- a/maps/southern_cross/southern_cross-3.dmm
+++ b/maps/southern_cross/southern_cross-3.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
"aa" = (/turf/unsimulated/wall/planetary/sif,/area/surface/outside/plains/mountains)
"ab" = (/turf/unsimulated/wall/planetary/sif{icon_state = "rock-dark"},/area/surface/outside/plains/mountains)
"ac" = (/turf/simulated/wall/dungeon,/area/surface/outside/path/plains)
@@ -1818,3 +1819,1826 @@ aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafDADADADADA
aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDVDMDWDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDJDJDKDKDJDJDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDVDMDWDQDQDQDQDQDQDQDQDQDQDQDQDQDQafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaa
aaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDYDYDYDQDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDZDZDZDZDZDZDQDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDYDYDYDQDXDXDXDXDXDXDXDXDXDXDXDXDXababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababab
"}
+=======
+"aa" = (/turf/unsimulated/wall/planetary/sif,/area/surface/outside/plains/mountains)
+"ab" = (/turf/unsimulated/wall/planetary/sif{icon_state = "rock-dark"},/area/surface/outside/plains/mountains)
+"ac" = (/turf/simulated/wall/dungeon,/area/surface/outside/path/plains)
+"ad" = (/obj/effect/step_trigger/teleporter/mine/to_mining,/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/path/plains)
+"ae" = (/obj/effect/step_trigger/teleporter/mine/to_mining,/turf/simulated/floor/water{outdoors = 0},/area/surface/outside/plains/mountains)
+"af" = (/turf/simulated/mineral/sif,/area/surface/outside/plains/mountains)
+"ag" = (/obj/effect/zone_divider,/turf/simulated/mineral/sif,/area/surface/outside/plains/mountains)
+"ah" = (/turf/simulated/mineral/ignore_mapgen/sif,/area/surface/outside/plains/mountains)
+"ai" = (/obj/structure/cable/ender{icon_state = "1-2"; id = "surface_cave"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains)
+"aj" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/path/plains)
+"ak" = (/turf/simulated/floor/water{outdoors = 0},/area/surface/outside/plains/mountains)
+"al" = (/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/surface/outside/plains/outpost)
+"am" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains)
+"an" = (/turf/simulated/wall,/area/surface/outpost/mining_main/exterior)
+"ao" = (/obj/machinery/conveyor{dir = 4; id = "mining_north"},/obj/machinery/mineral/input,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/mining_main/exterior)
+"ap" = (/obj/machinery/mineral/unloading_machine,/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/exterior)
+"aq" = (/obj/machinery/conveyor{dir = 2; id = "mining_north"},/obj/machinery/mineral/output,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/exterior)
+"ar" = (/obj/effect/overlay/snow/floor,/obj/machinery/light/small{dir = 4},/obj/machinery/conveyor_switch/oneway{id = "mining_north"; name = "mining conveyor"},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/mining_main/exterior)
+"as" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/exterior)
+"at" = (/obj/machinery/conveyor{dir = 2; id = "mining_north"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/exterior)
+"au" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{d2 = 2; icon_state = "0-2"},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains)
+"av" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains)
+"aw" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/mining_main/exterior)
+"ax" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/surface/outpost/mining_main/exterior)
+"ay" = (/obj/machinery/disposal/deliveryChute{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/exterior)
+"az" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains)
+"aA" = (/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/plains/mountains)
+"aB" = (/turf/simulated/floor/water,/area/surface/outside/plains/mountains)
+"aC" = (/turf/simulated/floor/water/shoreline/corner,/area/surface/outside/ocean)
+"aD" = (/turf/simulated/floor/water,/area/surface/outside/ocean)
+"aE" = (/turf/simulated/floor/water/shoreline/corner{icon_state = "shorelinecorner"; dir = 1},/area/surface/outside/ocean)
+"aF" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/surface/outside/plains/outpost)
+"aG" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 8},/area/surface/outside/ocean)
+"aH" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 4},/area/surface/outside/ocean)
+"aI" = (/obj/item/weapon/banner/nt,/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/surface/outside/plains/outpost)
+"aJ" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 6},/area/surface/outside/ocean)
+"aK" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 10},/area/surface/outside/ocean)
+"aL" = (/turf/simulated/floor/water/shoreline,/area/surface/outside/ocean)
+"aM" = (/turf/unsimulated/wall/planetary/sif,/area/surface/outside/ocean)
+"aN" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/storage)
+"aO" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/storage)
+"aP" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main)
+"aQ" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/mining_main)
+"aR" = (/obj/structure/closet/crate,/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"aS" = (/obj/structure/closet/crate,/obj/effect/floor_decal/corner/brown{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"aT" = (/obj/structure/table/steel,/obj/item/weapon/pickaxe,/obj/effect/floor_decal/corner/brown{dir = 5},/obj/machinery/camera/network/mining{c_tag = "OPM - Mining Storage Room"; dir = 2},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"aU" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/item/weapon/cell/high,/obj/effect/floor_decal/corner/brown{dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"aV" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/effect/floor_decal/corner/brown/full{dir = 1},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/item/clothing/head/hardhat/orange,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"aW" = (/obj/structure/table/steel,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/pickaxe,/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/item/device/gps/mining,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"aX" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/table/steel,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"aY" = (/obj/effect/floor_decal/corner/brown{dir = 5},/obj/structure/table/steel,/obj/item/stack/flag/green{pixel_x = -4; pixel_y = 0},/obj/item/stack/flag/red,/obj/item/stack/flag/yellow{pixel_x = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"aZ" = (/obj/structure/closet/secure_closet/miner,/obj/item/clothing/shoes/boots/winter/mining,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/effect/floor_decal/corner/brown{dir = 5},/obj/item/clothing/head/hardhat/orange,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"ba" = (/obj/structure/table/steel,/obj/item/weapon/mining_scanner,/obj/item/weapon/mining_scanner,/obj/item/weapon/mining_scanner,/obj/effect/floor_decal/corner/brown{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bb" = (/obj/effect/floor_decal/corner/brown/full{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bc" = (/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bd" = (/obj/effect/floor_decal/corner/brown{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"be" = (/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bf" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bg" = (/obj/effect/floor_decal/corner/brown{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bh" = (/obj/effect/floor_decal/corner/brown{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bi" = (/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bj" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/corner/brown{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bk" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/camera/network/mining{c_tag = "OPM - Mining Airlock 2"; dir = 2},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"bl" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"bm" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"bn" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/gateway)
+"bo" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/gateway)
+"bp" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/gateway)
+"bq" = (/obj/effect/floor_decal/corner/brown{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"br" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bv" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_mining{name = "Mining Storage"; req_access = list(48)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main/storage)
+"bw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"by" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bz" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "mining_airlock_control2"; name = "Mining Access Console"; pixel_x = 26; pixel_y = 26; tag_exterior_door = "mining_airlock_exterior2"; tag_interior_door = "mining_airlock_interior2"},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"bD" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_airlock_control2"; name = "Mining Access Button"; pixel_x = 6; pixel_y = 26; req_access = null; req_one_access = list(12,47,48)},/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_interior2"; locked = 1; name = "Mining Interior Outpost"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
+"bE" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"bF" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"bG" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_exterior2"; locked = 1; name = "Mining Exterior Outpost"},/obj/effect/decal/cleanable/dirt,/obj/machinery/access_button/airlock_exterior{master_tag = "mining_airlock_control2"; pixel_y = 24; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
+"bH" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/security)
+"bI" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/security)
+"bJ" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/security)
+"bK" = (/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"bL" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"bM" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - Gateway"},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"bN" = (/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"bO" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"bP" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/first_aid)
+"bQ" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/first_aid)
+"bR" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/first_aid)
+"bS" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown/full,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bT" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bU" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bV" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bW" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bX" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bY" = (/obj/effect/floor_decal/corner/brown{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"bZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"ca" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cb" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cc" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cd" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"ce" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"cf" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"cg" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"ch" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/closet/secure_closet/guncabinet/phase,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"ci" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/structure/closet/secure_closet/guncabinet/phase,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"cj" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/table/standard,/obj/item/weapon/book/codex/corp_regs,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"ck" = (/obj/machinery/status_display,/turf/simulated/wall,/area/surface/outpost/main/gateway)
+"cl" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"cm" = (/obj/machinery/gateway{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"cn" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"co" = (/obj/machinery/ai_status_display,/turf/simulated/wall,/area/surface/outpost/main/gateway)
+"cp" = (/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 0; pixel_y = 28},/obj/structure/table/glass,/obj/machinery/recharger,/obj/item/weapon/tool/screwdriver,/obj/item/device/defib_kit/loaded,/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/paleblue/border{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"cq" = (/obj/machinery/sleep_console{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"cr" = (/obj/machinery/sleeper{dir = 4},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"cs" = (/obj/structure/bed/roller,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"ct" = (/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/ninja_dojo/planet)
+"cu" = (/obj/structure/ore_box,/turf/simulated/floor/tiled/dark,/area/surface/outpost/mining_main/storage)
+"cv" = (/turf/simulated/wall,/area/surface/outpost/mining_main/storage)
+"cw" = (/obj/effect/floor_decal/corner/brown{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cy" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/corner/brown,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cz" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cA" = (/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/steel,/obj/machinery/light,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cB" = (/obj/machinery/mech_recharger,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cC" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"cD" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/refinery)
+"cE" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/plains/outpost)
+"cF" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
+"cG" = (/obj/structure/window/reinforced,/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"cH" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"cI" = (/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"cJ" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"cK" = (/turf/simulated/wall,/area/surface/outpost/main/gateway)
+"cL" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"cM" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"cN" = (/obj/machinery/cryopod/robot/door/gateway,/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"cO" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"cP" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"cQ" = (/obj/structure/table/glass,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"cR" = (/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"cS" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"cT" = (/obj/structure/window/reinforced,/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid/regular,/obj/random/medical/lite,/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 5},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"cU" = (/turf/simulated/floor/water/deep,/area/surface/outside/ocean)
+"cV" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/emergencystorage)
+"cW" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/emergencystorage)
+"cX" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/extinguisher,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/emergencystorage)
+"cY" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/emergencystorage)
+"cZ" = (/obj/effect/floor_decal/corner/brown{dir = 9},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"da" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/corner/brown{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"db" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"dc" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"dd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/refinery)
+"de" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning/dust,/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/plains/outpost)
+"df" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/plains/outpost)
+"dg" = (/obj/effect/floor_decal/industrial/warning/dust{dir = 6; icon_state = "warning_dust"},/obj/machinery/light/small{dir = 1},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room)
+"dh" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/table/standard,/obj/item/weapon/storage/box/donut,/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"di" = (/obj/structure/table/standard,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"dj" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/standard,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"dk" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"dl" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"dm" = (/obj/machinery/computer/cryopod/gateway{pixel_x = -30},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"dn" = (/obj/machinery/gateway{dir = 10},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"do" = (/obj/machinery/gateway,/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"dp" = (/obj/machinery/gateway{dir = 6},/obj/effect/landmark{name = "JoinLateGateway"},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
+"dq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atm{pixel_x = 30},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/gateway)
+"dr" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"ds" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/table/glass,/obj/item/weapon/tool/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"dt" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"du" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"dv" = (/obj/random/maintenance/clean,/obj/random/maintenance/security,/obj/random/contraband,/obj/random/drinkbottle,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/storage)
+"dw" = (/obj/random/maintenance/clean,/obj/random/contraband,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/storage)
+"dx" = (/obj/structure/closet/hydrant{pixel_x = -32; pixel_y = 0},/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/emergencystorage)
+"dy" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/emergencystorage)
+"dz" = (/obj/item/device/t_scanner,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/structure/table/steel,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/emergencystorage)
+"dA" = (/obj/effect/floor_decal/corner/brown{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"dB" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/mask/breath,/obj/machinery/door/window/westright{req_access = list(48)},/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/effect/floor_decal/corner/brown{dir = 6},/obj/random/multiple/voidsuit/mining,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"dC" = (/obj/machinery/mineral/input,/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/structure/sign/warning/moving_parts{pixel_y = 32},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"dD" = (/obj/machinery/mineral/unloading_machine,/turf/simulated/floor/tiled/dark,/area/surface/outpost/mining_main/refinery)
+"dE" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"dF" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"dG" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"dH" = (/obj/machinery/conveyor{dir = 9; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"dI" = (/obj/machinery/mineral/unloading_machine{icon_state = "unloader-corner"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"dJ" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/machinery/mineral/input,/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"dK" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/mining_main/gen_room)
+"dL" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/tiled/steel/sif/planetuse{icon_state = "dark"},/area/surface/outpost/mining_main/gen_room)
+"dM" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - Security Checkpoint"; dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"dN" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"dO" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"dP" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"dQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"dR" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"dS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"dT" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"dU" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"dV" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"dW" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"dX" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/machinery/camera/network/main_outpost{c_tag = "MO - FA Station"; dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"dY" = (/turf/simulated/wall,/area/surface/outpost/mining_main/emergencystorage)
+"dZ" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Emergency Storage"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/emergencystorage)
+"ea" = (/obj/effect/floor_decal/corner/brown{dir = 9},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"eb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"ec" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/mask/breath,/obj/machinery/door/window/westleft{req_access = list(48)},/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/effect/floor_decal/corner/brown{dir = 6},/obj/random/multiple/voidsuit/mining,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"ed" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/surface/outpost/mining_main/refinery)
+"ee" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"ef" = (/obj/machinery/conveyor_switch{id = "mining_external"},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room)
+"eg" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/effect/overlay/snow/floor,/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room)
+"eh" = (/obj/effect/floor_decal/industrial/warning/dust{dir = 5; icon_state = "warning_dust"},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/path/plains)
+"ei" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"ej" = (/obj/structure/bed/chair/office/dark,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"ek" = (/obj/machinery/door/window/brigdoor/eastright{name = "Security Checkpoint"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"el" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"em" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"en" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"eo" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_security{name = "Security Checkpoint"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/security)
+"ep" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"eq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"er" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"es" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"et" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid)
+"eu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"ev" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"ew" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"ex" = (/obj/machinery/door/window/westleft{name = "Medical Staff Only"; req_one_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"ey" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"ez" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"eA" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/computer/guestpass{pixel_y = 30},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"eB" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"eC" = (/obj/effect/floor_decal/corner/brown{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"eD" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"eE" = (/obj/effect/floor_decal/corner/brown{dir = 4},/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"eF" = (/obj/effect/floor_decal/corner/brown{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"eG" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"eH" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_mining{name = "Production Area"; req_access = list(48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main/refinery)
+"eI" = (/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"eJ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"eK" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"eL" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"eM" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/plains/outpost)
+"eN" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/path/plains)
+"eO" = (/obj/machinery/computer/secure_data,/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"eP" = (/obj/machinery/computer/security,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"eQ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/device/flash,/obj/item/weapon/pen,/obj/item/weapon/tool/crowbar,/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"eR" = (/obj/structure/closet/crate,/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/red/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"eS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"eT" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/red/bordercorner,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"eU" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/obj/structure/closet/l3closet/scientist,/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"eV" = (/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"eW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"eX" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"eY" = (/obj/structure/closet/emcloset,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/blue,/turf/simulated/floor/tiled,/area/surface/outpost/main/gateway)
+"eZ" = (/obj/structure/closet/l3closet/scientist,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"fa" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"fb" = (/obj/structure/table/glass,/obj/item/weapon/tool/crowbar,/obj/item/bodybag,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/obj/item/bodybag/cryobag,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"fc" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/o2{pixel_x = 0; pixel_y = 0},/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"fd" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
+"fe" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"ff" = (/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"fg" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_exterior"; locked = 1; name = "Mining Exterior Outpost"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = 0; pixel_y = -24; req_access = null; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
+"fh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"fi" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"fj" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_interior"; locked = 1; name = "Mining Interior Outpost"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = -6; pixel_y = -26; req_access = null; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
+"fk" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "mining1_airlock_control"; name = "Mining Access Console"; pixel_x = -26; pixel_y = -26; tag_exterior_door = "mining1_airlock_exterior"; tag_interior_door = "mining1_airlock_interior"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fl" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fm" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fn" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fo" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fp" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/mining{c_tag = "OPM - Mining Hallway 1"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fq" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"fr" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"fs" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/surface/outpost/mining_main/refinery)
+"ft" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"fu" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/network/mining{c_tag = "OPM - Mining Production Room"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"fv" = (/obj/machinery/mineral/processing_unit_console,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/refinery)
+"fw" = (/obj/machinery/mineral/processing_unit,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"fx" = (/turf/simulated/wall,/area/surface/outpost/main/security)
+"fy" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 10},/obj/structure/closet/crate/secure/gear{name = "explorer crate"; req_access = list(43)},/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fz" = (/obj/machinery/door/window/northright,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fA" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 1},/obj/structure/cable/blue,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 5},/obj/structure/closet/crate/secure/gear{name = "explorer crate"; req_access = list(43)},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fB" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Gateway Access"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/gateway)
+"fC" = (/turf/simulated/wall,/area/surface/outpost/main/first_aid)
+"fD" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/blue,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/white/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"fE" = (/obj/machinery/door/window/northleft,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"fF" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/white/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 5},/obj/machinery/vending/medical,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"fG" = (/obj/machinery/light/small{dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/mining_main/gen_room)
+"fH" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"fI" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/camera/network/mining{c_tag = "OPM - Mining Airlock 1"; dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
+"fJ" = (/obj/effect/floor_decal/corner/brown{dir = 10},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fK" = (/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fL" = (/obj/effect/floor_decal/corner/brown{dir = 10},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"fM" = (/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"fN" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"fO" = (/obj/machinery/conveyor_switch/oneway{id = "mining_internal"; name = "mining conveyor"},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"fP" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"fQ" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main/security)
+"fR" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/computer/guestpass{pixel_y = 30},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security)
+"fS" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security)
+"fT" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/structure/table/bench/steel,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/effect/landmark/start{name = "Explorer"},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fU" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 26},/obj/structure/table/bench/steel,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Explorer Prep"; dir = 2},/obj/effect/landmark/start{name = "Explorer"},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fV" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fW" = (/obj/effect/landmark/start{name = "Explorer"},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fX" = (/obj/machinery/light{dir = 1},/obj/effect/landmark/start{name = "Explorer"},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fY" = (/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"fZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ga" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - Hallway North 1"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"gb" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gc" = (/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"ge" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - SAR Prep"; dir = 2},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gf" = (/obj/structure/closet/secure_closet/medical_wall/pills{pixel_y = 32},/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gg" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/powercell,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gh" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main)
+"gi" = (/turf/simulated/wall,/area/surface/outpost/mining_main)
+"gj" = (/obj/effect/floor_decal/corner/brown/full,/obj/structure/closet,/obj/item/clothing/suit/storage/hooded/wintercoat/cargo,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/shoes/boots/winter,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"gk" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/brown{dir = 8},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"gl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"gm" = (/obj/effect/floor_decal/corner/brown,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/space_heater,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
+"gn" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/surface/outpost/mining_main/refinery)
+"go" = (/obj/machinery/mineral/stacking_unit_console,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/refinery)
+"gp" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/gen_room)
+"gq" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main5_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main5_airlock_control"; name = "Main Access Button"; pixel_x = 0; pixel_y = -24; req_access = null},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security)
+"gr" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security)
+"gs" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security)
+"gt" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "main5_airlock_control"; name = "Main Access Button"; pixel_x = -6; pixel_y = -26; req_access = null},/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main5_airlock_interior"; locked = 1; name = "Main Outpost Interior"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/security)
+"gu" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "main5_airlock_control"; name = "Main Access Console"; pixel_x = -26; pixel_y = -26; tag_exterior_door = "main5_airlock_exterior"; tag_interior_door = "main5_airlock_interior"},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"gv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"gw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"gx" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass{name = "Explorer Prep"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/security)
+"gy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"gz" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"gA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"gB" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass{name = "SAR Prep"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid)
+"gC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gF" = (/obj/effect/landmark/start{name = "Search and Rescue"},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gG" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gH" = (/obj/machinery/computer/crew,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"gI" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
+"gJ" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"gK" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"gL" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 50},/obj/item/stack/material/phoron{amount = 50},/obj/item/stack/material/phoron{amount = 50},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"gM" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"gN" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
+"gO" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"gP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Generator Room"; req_one_access = list(12,47)},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"gQ" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/obj/structure/sign/warning/moving_parts{pixel_y = -32},/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/refinery)
+"gR" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"gS" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"gT" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"gU" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"gV" = (/obj/machinery/conveyor{dir = 5; icon_state = "conveyor0"; id = "miningout_internal"},/obj/machinery/mineral/input,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
+"gW" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outside/plains/outpost)
+"gX" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
+"gY" = (/obj/effect/overlay/snow/floor,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main/security)
+"gZ" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security)
+"ha" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security)
+"hb" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/device/gps/explorer{pixel_x = -5; pixel_y = -5},/obj/item/device/gps/explorer{pixel_x = -3; pixel_y = -3},/obj/item/device/gps,/obj/item/device/gps{pixel_x = 3; pixel_y = 3},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"hc" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/machinery/light,/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/obj/item/device/paicard,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"hd" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/closet/secure_closet/explorer,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/item/device/binoculars,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"he" = (/obj/structure/closet/secure_closet/explorer,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"hf" = (/obj/structure/closet/secure_closet/explorer,/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"hg" = (/obj/structure/closet/secure_closet/explorer,/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/item/weapon/pickaxe,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"hh" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"hi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"hj" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/green/bordercorner,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"hk" = (/obj/machinery/mech_recharger,/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid)
+"hl" = (/obj/structure/table/steel,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid)
+"hm" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid)
+"hn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/white/bordercorner2,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = 0; pixel_y = -32},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/iv_drip,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"ho" = (/obj/structure/closet/secure_closet/sar,/obj/machinery/light,/obj/item/weapon/storage/box/bodybags,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/white/border,/obj/item/roller/adv,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"hp" = (/obj/structure/closet/secure_closet/sar,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/item/roller/adv{pixel_y = 5},/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"hq" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/white/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"hr" = (/obj/structure/table/steel,/obj/item/device/gps,/obj/item/device/gps{pixel_x = 3; pixel_y = 3},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"hs" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"ht" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hu" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hv" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hw" = (/obj/machinery/power/smes/buildable/outpost_substation{charge = 500000; input_attempt = 1; input_level = 150000; output_level = 150000; RCon_tag = "Outpost - Mining"},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hx" = (/obj/machinery/ai_status_display,/turf/simulated/wall,/area/surface/outpost/mining_main/gen_room)
+"hy" = (/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hA" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
+"hB" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/telecomms)
+"hC" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/teleporter)
+"hD" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"hE" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"hF" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/garage)
+"hG" = (/turf/simulated/wall,/area/surface/outpost/main/garage)
+"hH" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/camera/network/engineering_outpost{c_tag = "ENG - Mining Outpost Power West"; dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hI" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hK" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hN" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hP" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hQ" = (/obj/machinery/atmospherics/pipe/tank/nitrous_oxide,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hR" = (/obj/machinery/atmospherics/pipe/tank/carbon_dioxide,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hS" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hT" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"hU" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/telecomms/relay/preset/southerncross/cave,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms)
+"hV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/telecomms/relay/preset/southerncross/planet,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms)
+"hW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Telecomm"},/obj/machinery/telecomms/relay/preset/southerncross/wild,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms)
+"hX" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/teleporter)
+"hY" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/teleporter)
+"hZ" = (/obj/machinery/teleport/station,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/teleporter)
+"ia" = (/obj/machinery/teleport/hub,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/teleporter)
+"ib" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/main/teleporter)
+"ic" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"id" = (/obj/structure/table/steel,/obj/item/weapon/weldpack,/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"ie" = (/obj/machinery/space_heater,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"if" = (/obj/item/stack/tile/floor/steel_dirty,/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"ig" = (/obj/machinery/mech_recharger,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"ih" = (/obj/structure/closet/hydrant{pixel_y = 32},/obj/item/clothing/glasses/meson,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"ii" = (/obj/structure/ore_box,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"ij" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"ik" = (/obj/structure/table/steel,/obj/random/tool,/obj/random/tool,/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"il" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/pipedispenser/disposal,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"im" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/pipedispenser,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"in" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"io" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"ip" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iq" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"ir" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/machinery/atmospherics/binary/pump{dir = 2},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"is" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"it" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iu" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iv" = (/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/machinery/camera/network/engineering_outpost{c_tag = "ENG - Mining Outpost Power East"; dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iw" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/light/small,/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms)
+"ix" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms)
+"iy" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms)
+"iz" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter)
+"iA" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter)
+"iB" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter)
+"iC" = (/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"iD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"iE" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"iF" = (/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"iG" = (/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"iH" = (/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"iI" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"iJ" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iK" = (/obj/machinery/power/terminal,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/cable/yellow,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iL" = (/obj/machinery/power/terminal,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iM" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iO" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/engineering_outpost{c_tag = "ENG - Mining Outpost Power South"; dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iP" = (/obj/machinery/atmospherics/binary/pump/on{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled{pixel_x = 0},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iQ" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/meter,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iR" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 7; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iS" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 5; tag_south = 6; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iT" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iU" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{icon_state = "map"; dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iV" = (/obj/machinery/light/small{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iW" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/highsecurity{name = "Telecommunication Hub"; req_one_access = list(10,48,65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/techmaint,/area/surface/outpost/main/telecomms)
+"iX" = (/obj/structure/table/standard,/obj/item/weapon/tool/crowbar/red,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/item/weapon/tool/crowbar/red,/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter)
+"iY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light,/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter)
+"iZ" = (/obj/machinery/bluespace_beacon,/obj/item/device/radio/beacon,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter)
+"ja" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Teleporter"; dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/surface/outpost/main/teleporter)
+"jb" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"jc" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"jd" = (/obj/machinery/power/smes/buildable{charge = 1.5e+007; cur_coils = 3; input_attempt = 1; input_level = 750000; input_level_max = 750000; output_level = 750000; output_level_max = 750000; RCon_tag = "Outpost - Main Power Unit 1"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"je" = (/obj/machinery/power/smes/buildable{charge = 1.5e+007; cur_coils = 3; input_attempt = 1; input_level = 750000; input_level_max = 750000; output_level = 750000; output_level_max = 750000; RCon_tag = "Outpost - Main Power Unit 2"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"jf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/closet/toolcloset,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"jg" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"jh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
+"ji" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"jj" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"jk" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"jl" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/gen_room)
+"jm" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/table/steel,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jn" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jo" = (/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jp" = (/turf/simulated/wall,/area/surface/outpost/main/gen_room)
+"jq" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/highsecurity{name = "Teleport Access"; req_access = list(17)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/teleporter)
+"jr" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"js" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"jt" = (/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/obj/item/frame/light,/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"ju" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"jv" = (/obj/machinery/floodlight,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"jw" = (/obj/machinery/space_heater,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"jx" = (/obj/structure/cable,/obj/structure/cable/heavyduty{d2 = 2; icon_state = "0-2"},/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
+"jy" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/sif/planetuse,/area/surface/outside/plains/outpost)
+"jz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"jA" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jB" = (/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jC" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jD" = (/obj/structure/sign/electricshock,/turf/simulated/wall,/area/surface/outpost/main/gen_room)
+"jE" = (/obj/structure/dispenser{phorontanks = 0},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Teleporter Access"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"jF" = (/obj/structure/closet/emcloset,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"jG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"jH" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"jI" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"jJ" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Hallway North 2"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"jK" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"jL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"jM" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/plains/outpost)
+"jN" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "2-4"},/turf/simulated/floor/tiled/sif/planetuse,/area/surface/outside/path/plains)
+"jO" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/turf/simulated/floor/tiled/sif/planetuse,/area/surface/outside/path/plains)
+"jP" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/heavyduty{icon_state = "1-8"},/turf/simulated/floor/tiled/sif/planetuse,/area/surface/outside/path/plains)
+"jQ" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/sif/planetuse,/area/surface/outside/path/plains)
+"jR" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/sif/planetuse,/area/surface/outside/path/plains)
+"jS" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "2-8"},/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/structure/cable/heavyduty{icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains)
+"jT" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/sif/planetuse,/area/surface/outside/plains/outpost)
+"jU" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/heavyduty{icon_state = "2-8"},/obj/machinery/portable_atmospherics/powered/pump/filled{pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jY" = (/obj/machinery/door/airlock/engineering{name = "Generator Room"; req_one_access = list(12,47)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"jZ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ka" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kb" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ke" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kf" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kg" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"ki" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"kj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kk" = (/obj/structure/cable/heavyduty,/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"kl" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"km" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kn" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ko" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kp" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/blue/border,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kq" = (/obj/machinery/status_display,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/surface/outpost/main)
+"kr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ks" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kt" = (/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ku" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kv" = (/obj/machinery/power/smes/buildable{charge = 1.5e+007; cur_coils = 3; input_attempt = 1; input_level = 750000; input_level_max = 750000; output_level = 750000; output_level_max = 750000; RCon_tag = "Outpost - Main Power Unit 1"},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"kw" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/steel,/obj/item/weapon/storage/toolbox/electrical,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"kx" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"ky" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled/dark,/area/surface/outpost/main)
+"kz" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled/dark,/area/surface/outpost/main)
+"kA" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled/dark,/area/surface/outpost/main)
+"kB" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main)
+"kC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kD" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kE" = (/obj/machinery/portable_atmospherics/powered/pump/filled{pixel_x = 0},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kG" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kH" = (/obj/machinery/mech_recharger,/obj/effect/decal/mecha_wreckage/ripley,/obj/machinery/light,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kI" = (/obj/item/inflatable/door/torn,/obj/item/weapon/tool/screwdriver,/turf/simulated/floor,/area/surface/outpost/main/garage)
+"kJ" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"kK" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/surface/outpost/main/garage)
+"kL" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"kM" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/gym)
+"kN" = (/turf/simulated/wall,/area/surface/outpost/main/gym)
+"kO" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kP" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kR" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kS" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/computer/guestpass{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"kT" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage)
+"kU" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/construction_area)
+"kV" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"kW" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/gen_room/smes)
+"kX" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
+"kY" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/bar)
+"kZ" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"la" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/holofloor/wood,/area/surface/outpost/main/gym)
+"lb" = (/obj/structure/fitness/punchingbag,/turf/simulated/floor/holofloor/wood,/area/surface/outpost/main/gym)
+"lc" = (/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/holofloor/wood,/area/surface/outpost/main/gym)
+"ld" = (/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/holofloor/wood,/area/surface/outpost/main/gym)
+"le" = (/obj/machinery/vending/fitness,/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"lf" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"lg" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/gym)
+"lh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"li" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ll" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ln" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 1; icon_state = "warningcorner"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lo" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Hallway East"; dir = 9},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lp" = (/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/surface/outpost/main)
+"lq" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lr" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ls" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main)
+"lt" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main)
+"lu" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"lv" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/technology_scanner,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"lw" = (/obj/machinery/alarm{pixel_y = 22},/obj/random/toolbox,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"lx" = (/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"ly" = (/obj/item/weapon/stool,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"lz" = (/turf/simulated/wall,/area/surface/outpost/main/gen_room/smes)
+"lA" = (/obj/structure/cable/heavyduty,/obj/machinery/power/terminal{dir = 4},/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/powercell,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
+"lB" = (/obj/machinery/power/smes/buildable/outpost_substation{charge = 500000; input_attempt = 1; input_level = 150000; output_level = 150000; RCon_tag = "Outpost - Dorms"},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
+"lC" = (/turf/simulated/wall,/area/surface/outpost/main/bar)
+"lD" = (/obj/structure/table/marble,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lE" = (/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lF" = (/obj/structure/table/marble,/obj/item/weapon/stool,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lG" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lH" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; operating = 0; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lI" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/frame/extinguisher_cabinet,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lJ" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main/corridor)
+"lK" = (/obj/effect/overlay/snow/floor,/obj/machinery/light/small,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main/corridor)
+"lL" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/holofloor/wood,/area/surface/outpost/main/gym)
+"lM" = (/turf/simulated/floor/holofloor/wood,/area/surface/outpost/main/gym)
+"lN" = (/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"lO" = (/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"lP" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Gym"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/gym)
+"lQ" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"lT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lY" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"lZ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "main2_airlock_control"; name = "Main Access Console"; pixel_x = 26; pixel_y = -26; tag_exterior_door = "main2_airlock_exterior"; tag_interior_door = "main2_airlock_interior"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ma" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main2_airlock_interior"; locked = 1; name = "Main Outpost Interior"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "main2_airlock_control"; name = "Main Access Button"; pixel_x = 6; pixel_y = -26; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mb" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mc" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"md" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main2_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main2_airlock_control"; name = "Main Access Button"; pixel_x = 0; pixel_y = -24; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"me" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main)
+"mf" = (/obj/structure/closet/toolcloset,/obj/item/device/flashlight/maglight,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"mg" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"mh" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"mi" = (/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
+"mj" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
+"mk" = (/obj/structure/table/marble,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Bar West"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"ml" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mm" = (/obj/structure/table/marble,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mo" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mp" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/item/weapon/stock_parts/motor,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mq" = (/obj/structure/table,/obj/item/stack/material/wood,/obj/item/stack/material/wood,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mr" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/surface/outpost/main/corridor)
+"ms" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/corridor)
+"mt" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main4_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main4_airlock_control"; name = "Main Access Button"; pixel_x = 32; pixel_y = 0; req_access = null},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor)
+"mu" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/corridor)
+"mv" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/gym)
+"mw" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"mx" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"my" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"mz" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/tool/wrench,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"mA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mB" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mD" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/space_heater,/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/green/bordercorner,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mG" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/space_heater,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mH" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mI" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"mJ" = (/obj/machinery/light/small{dir = 8; pixel_x = 0},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main)
+"mK" = (/obj/structure/closet/crate,/obj/item/weapon/tool/crowbar/red,/obj/item/frame/light,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"mL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"mM" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
+"mN" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
+"mO" = (/obj/machinery/light_construct,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mP" = (/obj/structure/table/marble,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mQ" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mR" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Bar East"; dir = 8},/obj/machinery/light_construct,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mS" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/corridor)
+"mT" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Corridor Access North"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"mU" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"mV" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"mW" = (/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"mX" = (/obj/structure/fitness/weightlifter,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"mY" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"mZ" = (/obj/structure/closet/emcloset,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Hallway South 1"; dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"na" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"nb" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"nc" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/restroom)
+"nd" = (/turf/simulated/wall,/area/surface/outpost/main/restroom)
+"ne" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{name = "Unisex Restrooms"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"nf" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"ng" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"nh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"ni" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"nj" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 1},/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"nk" = (/obj/structure/sign/electricshock,/turf/simulated/wall,/area/surface/outpost/main/gen_room/smes)
+"nl" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "SMES Room"; req_one_access = list(12,47)},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
+"nm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"no" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"np" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nq" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nr" = (/obj/structure/table/woodentable,/obj/machinery/recharger,/obj/item/clothing/head/hardhat/orange,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"ns" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"nt" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"nu" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"nv" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nw" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nx" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"ny" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nz" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"nC" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"nD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"nE" = (/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"nF" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"nG" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"nH" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"nI" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"nJ" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"nK" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"nL" = (/turf/simulated/wall,/area/surface/outpost/main/construction_area)
+"nM" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"nN" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"nO" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nP" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nQ" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main4_airlock_interior"; locked = 1; name = "Main Outpost Interior"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "main4_airlock_control"; name = "Main Access Button"; pixel_x = 32; pixel_y = 6; req_access = null},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor)
+"nR" = (/obj/structure/closet/athletic_mixed,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nS" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nT" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nU" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Gym"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nV" = (/obj/item/weapon/stool/padded,/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nW" = (/obj/structure/reagent_dispensers/water_cooler/full,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nX" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/lasertag/red,/obj/item/stack/flag/red,/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main)
+"nY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"nZ" = (/obj/machinery/ai_status_display,/turf/simulated/wall,/area/surface/outpost/main/restroom)
+"oa" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"ob" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"oc" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"od" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/dorms)
+"oe" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"of" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
+"og" = (/obj/structure/table/standard,/obj/item/device/paicard,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oh" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oi" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Bar"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"oj" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"ok" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"ol" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"om" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"on" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "main4_airlock_control"; name = "Main Access Console"; pixel_x = 0; pixel_y = 26; tag_exterior_door = "main4_airlock_exterior"; tag_interior_door = "main4_airlock_interior"},/obj/effect/floor_decal/industrial/warning/corner{dir = 1; icon_state = "warningcorner"},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oo" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"op" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Gym"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/gym)
+"oq" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/lasertag/blue,/obj/item/stack/flag/blue,/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main)
+"or" = (/obj/structure/closet/secure_closet/personal,/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"os" = (/obj/structure/table/bench/marble,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"ot" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"ou" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"ov" = (/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
+"ow" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/dorms)
+"ox" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
+"oy" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Dorms Access"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
+"oz" = (/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/surface/outpost/main/dorms)
+"oA" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oB" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oC" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oD" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/firealarm{pixel_y = 24},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oF" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oG" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oH" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oI" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oJ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oL" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oO" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"oP" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/surface/outpost/main/corridor)
+"oQ" = (/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oU" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/junction/yjunction,/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"oZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/status_display{pixel_y = 32},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pa" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Corridor West"; dir = 2},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/status_display{pixel_y = 32},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pc" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pe" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/effect/floor_decal/borderfloor/corner2{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ph" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pj" = (/obj/structure/disposalpipe/junction/yjunction{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pk" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"pl" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"pm" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
+"pn" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main1_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main1_airlock_control"; name = "Main Access Button"; pixel_x = 0; pixel_y = -24; req_access = null},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
+"po" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
+"pp" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pq" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main1_airlock_interior"; locked = 1; name = "Main Outpost Interior"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "main1_airlock_control"; name = "Main Access Button"; pixel_x = -6; pixel_y = -26; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pr" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "main1_airlock_control"; name = "Main Access Console"; pixel_x = -26; pixel_y = -26; tag_exterior_door = "main1_airlock_exterior"; tag_interior_door = "main1_airlock_interior"},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"ps" = (/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pt" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pu" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pv" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pw" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"px" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"py" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pz" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pA" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pB" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pC" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals4,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"pD" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pE" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pI" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain_full"; dir = 1},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main)
+"pJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pK" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"pN" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor)
+"pO" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pP" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pQ" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pS" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"pT" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"pU" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"pV" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"pW" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"pX" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
+"pY" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/surface/outpost/main/dorms)
+"pZ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qa" = (/obj/structure/closet/wardrobe/mixed,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/light,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qb" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/obj/structure/closet/crate,/obj/item/weapon/bedsheet,/obj/item/weapon/bedsheet/blue,/obj/item/weapon/bedsheet/brown,/obj/item/weapon/bedsheet/green,/obj/item/weapon/bedsheet/orange,/obj/item/weapon/bedsheet/purple,/obj/item/weapon/bedsheet/red,/obj/item/weapon/bedsheet/yellow,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qd" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - Dorms Hallway West"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/green/bordercorner2,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qe" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qg" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qh" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qi" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -25},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qj" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Dorms Hallway East"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qk" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/obj/machinery/vending/cigarette,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/green/bordercorner2,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"ql" = (/obj/machinery/vending/snack,/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qm" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qn" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qo" = (/obj/machinery/lapvend,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"qp" = (/turf/simulated/wall,/area/surface/outpost/main/corridor)
+"qq" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qs" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - Corridor West"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qt" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qu" = (/obj/effect/floor_decal/spline/plain{icon_state = "spline_plain_full"; dir = 1},/obj/structure/showcase{desc = "It looks almost lifelike."; icon = 'icons/obj/statue.dmi'; icon_state = "hos"; name = "Statue"; pixel_y = 2},/obj/item/device/gps/internal/base,/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/corridor)
+"qv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qw" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qy" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/green/bordercorner,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qz" = (/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qA" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Hallway West"; dir = 4},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"qB" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"qC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"qD" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"qE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"qF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"qG" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"qH" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock{name = "Unisex Showers"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qN" = (/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qO" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qP" = (/turf/simulated/wall,/area/surface/outpost/main/dorms)
+"qQ" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qR" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "main3_airlock_control"; name = "Main Access Console"; pixel_x = 0; pixel_y = -26; tag_exterior_door = "main3_airlock_exterior"; tag_interior_door = "main3_airlock_interior"},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qS" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qT" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"qU" = (/obj/structure/closet/wardrobe/mixed,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/light,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main)
+"qV" = (/obj/structure/closet/wardrobe/xenos,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main)
+"qW" = (/obj/structure/closet/wardrobe/suit,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main)
+"qX" = (/obj/structure/closet/wardrobe/grey,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main)
+"qY" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main)
+"qZ" = (/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/steel,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"ra" = (/obj/machinery/mech_recharger,/obj/machinery/light,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main)
+"rb" = (/turf/simulated/wall,/area/surface/outpost/main)
+"rc" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"rd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Hallway South 2"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"re" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
+"rf" = (/obj/machinery/status_display,/turf/simulated/wall,/area/surface/outpost/main/restroom)
+"rg" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"rh" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"ri" = (/obj/structure/table/standard,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/random/soap,/obj/random/soap,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"rj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"rk" = (/obj/structure/bed/double/padded,/obj/item/weapon/bedsheet/purpledouble,/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"rl" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"rm" = (/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"rn" = (/obj/machinery/door/airlock{id_tag = "modorm1"; name = "Room 1"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"ro" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"rp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"rq" = (/obj/machinery/door/airlock{id_tag = "modorm2"; name = "Room 2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"rr" = (/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/carpet/bcarpet,/area/surface/outpost/main/dorms)
+"rs" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet/bcarpet,/area/surface/outpost/main/dorms)
+"rt" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/yellow,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet/bcarpet,/area/surface/outpost/main/dorms)
+"ru" = (/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet/bcarpet,/area/surface/outpost/main/dorms)
+"rv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = "modorm5"; name = "Room 5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"rw" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = "modorm6"; name = "Room 6"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"rx" = (/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"ry" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"rz" = (/obj/item/weapon/bedsheet/bluedouble,/obj/structure/bed/double/padded,/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"rA" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/light,/obj/structure/closet/emcloset,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"rB" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main3_airlock_interior"; locked = 1; name = "Main Outpost Interior"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "main3_airlock_control"; name = "Main Access Button"; pixel_x = -32; pixel_y = -6; req_access = null},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor)
+"rC" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/pool)
+"rD" = (/turf/simulated/wall,/area/surface/outpost/main/pool)
+"rE" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Pool"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/pool)
+"rF" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/pool)
+"rG" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Pool"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/pool)
+"rH" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock{name = "Unisex Restrooms"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"rI" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Unisex Showers"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"rJ" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"rK" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light,/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"rL" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm1"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"rM" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"rN" = (/obj/machinery/button/remote/airlock{id = "modorm2"; name = "Door Bolt Control"; pixel_x = -25; pixel_y = 0; specialfunctions = 4},/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet/bcarpet,/area/surface/outpost/main/dorms)
+"rO" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light,/turf/simulated/floor/carpet/bcarpet,/area/surface/outpost/main/dorms)
+"rP" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light,/turf/simulated/floor/carpet/bcarpet,/area/surface/outpost/main/dorms)
+"rQ" = (/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm5"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/carpet/bcarpet,/area/surface/outpost/main/dorms)
+"rR" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"rS" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm6"; name = "Door Bolt Control"; pixel_x = -25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"rT" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light,/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"rU" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 1; pixel_y = -25},/obj/item/device/gps{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"rV" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/surface/outpost/main/corridor)
+"rW" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/corridor)
+"rX" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"rY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/newscaster{pixel_y = 30},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"rZ" = (/obj/machinery/space_heater,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sa" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sb" = (/obj/machinery/light/spot{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sc" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sd" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"se" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Pool North"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sg" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sh" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"si" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sj" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/spot{dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sk" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sl" = (/obj/structure/closet/athletic_mixed,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sm" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/structure/closet/athletic_mixed,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sn" = (/obj/machinery/newscaster{pixel_y = 30},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"so" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sp" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/corridor)
+"sq" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/corridor)
+"sr" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Corridor Access South"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
+"ss" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/pool)
+"st" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"su" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sz" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sA" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/purple,/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"sB" = (/obj/machinery/door/airlock{id_tag = "modorm3"; name = "Room 3"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"sC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"sD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Dorms Hallway South 1"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"sE" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = "modorm4"; name = "Room 4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"sF" = (/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms)
+"sG" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/red,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms)
+"sH" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/red,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms)
+"sI" = (/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms)
+"sJ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = "modorm7"; name = "Room 7"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"sK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Dorms Hallway South 2"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"sL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = "modorm8"; name = "Room 8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"sM" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"sN" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main3_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main3_airlock_control"; name = "Main Access Button"; pixel_x = -32; pixel_y = 0; req_access = null},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor)
+"sO" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/pool)
+"sP" = (/obj/structure/table/glass,/obj/item/device/paicard,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sR" = (/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sS" = (/obj/effect/floor_decal/spline/plain{dir = 9},/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool)
+"sT" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool)
+"sU" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/water/deep/pool,/area/surface/outpost/main/pool)
+"sV" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/water/deep/pool,/area/surface/outpost/main/pool)
+"sW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sX" = (/obj/structure/table/glass,/obj/item/weapon/inflatable_duck,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"sY" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light,/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"sZ" = (/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm3"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/carpet/purcarpet,/area/surface/outpost/main/dorms)
+"ta" = (/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm4"; name = "Door Bolt Control"; pixel_x = -25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms)
+"tb" = (/obj/structure/table/standard,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light,/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms)
+"tc" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light,/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms)
+"td" = (/obj/item/weapon/stool,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm7"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/carpet,/area/surface/outpost/main/dorms)
+"te" = (/obj/item/weapon/stool/padded,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/button/remote/airlock{id = "modorm8"; name = "Door Bolt Control"; pixel_x = -25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"tf" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light,/turf/simulated/floor/carpet/blucarpet,/area/surface/outpost/main/dorms)
+"tg" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/corridor)
+"th" = (/obj/effect/overlay/snow/floor,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main/corridor)
+"ti" = (/obj/effect/floor_decal/spline/plain{dir = 8},/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool)
+"tj" = (/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool)
+"tk" = (/turf/simulated/floor/water/deep/pool,/area/surface/outpost/main/pool)
+"tl" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/simulated/floor/water/deep/pool,/area/surface/outpost/main/pool)
+"tm" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -32; pixel_y = 0},/obj/item/weapon/stool/padded,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Pool West"; dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/hologram/holopad,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"to" = (/obj/effect/floor_decal/spline/plain{dir = 9},/obj/item/weapon/beach_ball,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tp" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tq" = (/obj/effect/floor_decal/spline/plain{dir = 5},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"ts" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/obj/item/weapon/stool/padded,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Pool East"; dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tt" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/path/plains)
+"tu" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"tv" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/effect/zone_divider,/turf/simulated/floor/plating,/area/surface/outpost/main/pool)
+"tw" = (/obj/structure/table/glass,/obj/item/weapon/book/codex/lore/vir,/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/table/glass,/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"ty" = (/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tz" = (/obj/effect/floor_decal/spline/plain{dir = 8},/obj/effect/zone_divider,/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool)
+"tA" = (/obj/effect/zone_divider,/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool)
+"tB" = (/obj/effect/floor_decal/spline/plain{dir = 10},/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tC" = (/obj/effect/floor_decal/spline/plain,/obj/machinery/hologram/holopad,/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tD" = (/obj/effect/floor_decal/spline/plain{dir = 6},/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tE" = (/obj/effect/zone_divider,/turf/simulated/floor/water/deep/pool,/area/surface/outpost/main/pool)
+"tF" = (/obj/effect/floor_decal/spline/plain{dir = 4},/obj/effect/zone_divider,/turf/simulated/floor/water/deep/pool,/area/surface/outpost/main/pool)
+"tG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/glass,/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tH" = (/obj/structure/table/glass,/obj/effect/zone_divider,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tI" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/plains/mountains)
+"tJ" = (/obj/effect/zone_divider,/turf/simulated/floor/water/shoreline/corner,/area/surface/outside/ocean)
+"tK" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/effect/zone_divider,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"tL" = (/obj/effect/zone_divider,/turf/simulated/floor/water,/area/surface/outside/ocean)
+"tM" = (/obj/effect/zone_divider,/turf/simulated/floor/water/deep,/area/surface/outside/ocean)
+"tN" = (/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/surface/outside/plains/normal)
+"tO" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tQ" = (/obj/effect/floor_decal/spline/plain{dir = 10},/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool)
+"tR" = (/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/water/pool,/area/surface/outpost/main/pool)
+"tS" = (/obj/effect/floor_decal/spline/plain,/turf/simulated/floor/water/deep/pool,/area/surface/outpost/main/pool)
+"tT" = (/obj/effect/floor_decal/spline/plain{dir = 6},/turf/simulated/floor/water/deep/pool,/area/surface/outpost/main/pool)
+"tU" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/main/pool)
+"tV" = (/obj/structure/closet/emcloset,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tW" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/main/pool)
+"tX" = (/obj/structure/table/glass,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tY" = (/obj/machinery/light/spot,/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"tZ" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"ua" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"ub" = (/obj/structure/table/glass,/obj/item/inflatable{pixel_x = 6; pixel_y = 6},/obj/item/inflatable{pixel_x = 2; pixel_y = 2},/obj/item/inflatable{pixel_x = -2; pixel_y = -3},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"uc" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/plains/mountains)
+"ud" = (/obj/effect/overlay/snow/floor,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "surface_dock_1"; name = "shuttle bay controller"; pixel_x = -26; pixel_y = 0; tag_door = "surface_dock_1_door"},/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/main/corridor)
+"ue" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"uf" = (/obj/effect/overlay/snow/floor,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "surface_dock_2"; name = "shuttle bay controller"; pixel_x = 26; pixel_y = 0; tag_door = "surface_dock_2_door"},/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/main/corridor)
+"ug" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"uh" = (/obj/structure/table/glass,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Pool South"; dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"ui" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/pool)
+"uj" = (/obj/machinery/light{dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/main/corridor)
+"uk" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"ul" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"um" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"un" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"uo" = (/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"up" = (/turf/simulated/floor/plating/sif/planetuse,/area/shuttle/shuttle1/planet)
+"uq" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"ur" = (/turf/simulated/floor/plating/sif/planetuse,/area/shuttle/shuttle2/planet)
+"us" = (/obj/effect/zone_divider,/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 6},/area/surface/outside/ocean)
+"ut" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains)
+"uu" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 5},/area/surface/outside/ocean)
+"uv" = (/turf/simulated/floor/water/shoreline/corner{icon_state = "shorelinecorner"; dir = 8},/area/surface/outside/ocean)
+"uw" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"ux" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/path/plains)
+"uy" = (/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/outpost)
+"uz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"uA" = (/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/research/xenoresearch)
+"uB" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/research/xenoresearch)
+"uC" = (/obj/structure/sign/warning/biohazard,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch)
+"uD" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch)
+"uE" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "research_airlock_exterior"; locked = 1; name = "Research Exterior Airlock"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "research_airlock_control"; name = "Research Access Button"; pixel_x = -24; pixel_y = 0; req_access = null},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/surface/outpost/research/xenoresearch)
+"uF" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"uG" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch/emergencystorage)
+"uH" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch/smes)
+"uI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/smes)
+"uJ" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch/restroom)
+"uK" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/tiled/steel,/area/surface/outpost/research/xenoresearch)
+"uL" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"uM" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/computer/guestpass{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"uN" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"uO" = (/turf/simulated/wall,/area/surface/outpost/research/xenoresearch)
+"uP" = (/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/light/small{dir = 1},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/emergencystorage)
+"uQ" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/emergencystorage)
+"uR" = (/turf/simulated/wall,/area/surface/outpost/research/xenoresearch/smes)
+"uS" = (/obj/machinery/power/smes/buildable/outpost_substation{charge = 500000; input_attempt = 1; input_level = 150000; output_level = 150000; RCon_tag = "Outpost - Research"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/smes)
+"uT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/machinery/power/terminal{dir = 8},/obj/structure/cable/heavyduty,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/smes)
+"uU" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/light/small{dir = 4},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/smes)
+"uV" = (/turf/simulated/wall,/area/surface/outpost/research/xenoresearch/restroom)
+"uW" = (/obj/structure/toilet{dir = 4},/obj/structure/window/reinforced/tinted,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"uX" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"uY" = (/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"uZ" = (/obj/structure/sink{pixel_y = 16},/obj/structure/mirror{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"va" = (/obj/structure/table/standard,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/random/soap,/obj/random/soap,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"vb" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vc" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vd" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Research Airlock"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"ve" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vf" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vg" = (/obj/structure/table/reinforced,/obj/machinery/recharger,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vh" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vi" = (/obj/item/weapon/storage/box/donkpockets,/obj/structure/table/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vj" = (/obj/machinery/microwave,/obj/structure/table/reinforced,/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vk" = (/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"vl" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"vm" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"vn" = (/obj/effect/zone_divider,/turf/simulated/mineral/sif,/area/surface/outside/plains/outpost)
+"vo" = (/turf/simulated/mineral/sif,/area/surface/outside/plains/normal)
+"vp" = (/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/normal)
+"vq" = (/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/plains/normal)
+"vr" = (/obj/item/clothing/glasses/meson,/obj/structure/closet/hydrant{pixel_x = -32},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/emergencystorage)
+"vs" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/emergencystorage)
+"vt" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/emergencystorage)
+"vu" = (/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/item/weapon/cell/high,/obj/item/weapon/weldpack,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/smes)
+"vv" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{long_range = 1; name_tag = "Research Outpost"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/smes)
+"vw" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/smes)
+"vx" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"vy" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"vz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"vA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"vB" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"vC" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "research_airlock_interior"; locked = 1; name = "Research Interior Airlock"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "research_airlock_control"; name = "Research Access Button"; pixel_x = -26; pixel_y = 6; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vD" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vF" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vG" = (/obj/structure/table/reinforced,/obj/item/device/multitool,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vH" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vI" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"vK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"vL" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/outpost)
+"vM" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/plains/normal)
+"vN" = (/turf/simulated/wall,/area/surface/outpost/research/xenoresearch/emergencystorage)
+"vO" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock{name = "Emergency Storage"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/emergencystorage)
+"vP" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/engineering{name = "SMES Room"; req_one_access = list(12,47)},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/smes)
+"vQ" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock{name = "Research Restroom"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/restroom)
+"vR" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"vS" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "research_airlock_control"; name = "Research Access Console"; pixel_x = -26; pixel_y = 26; tag_exterior_door = "research_airlock_exterior"; tag_interior_door = "research_airlock_interior"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"vT" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"vU" = (/obj/structure/disposalpipe/segment,/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vW" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vX" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vY" = (/obj/structure/bed/chair{dir = 8},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"vZ" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch)
+"wa" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"wb" = (/obj/machinery/light,/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/main/corridor)
+"wc" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"wd" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"we" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"wf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Research Hallway 1"; dir = 2},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wk" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wm" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wp" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wr" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Research Hallway 2"; dir = 2},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"ws" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"ww" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wC" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wE" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/main/corridor)
+"wF" = (/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wG" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wI" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wJ" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/mob/living/bot/secbot/slime,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wK" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wL" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wP" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wS" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wU" = (/obj/structure/disposalpipe/junction{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wX" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wY" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"wZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Research Hallway 4"; dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xb" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xc" = (/obj/machinery/light,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xd" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xe" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xf" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xeno_airlock_exterior"; locked = 1; name = "Xenobiology External Airlock"; req_access = list(55)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -26; pixel_y = 0; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xg" = (/obj/structure/bed/chair,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for containment."; id = "xenobiocontain"; name = "Containment Switch"; pixel_x = -28; pixel_y = 0; req_access = null},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xi" = (/obj/structure/table/glass,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xj" = (/obj/structure/sign/greencross{desc = "White cross in a green field, you can get medical aid here."; name = "First-Aid"},/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch)
+"xk" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_medical,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xl" = (/obj/machinery/space_heater,/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xm" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Research Hallway 3"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xn" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xo" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xp" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xq" = (/obj/machinery/smartfridge,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xs" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch)
+"xt" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch)
+"xu" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/obj/effect/overlay/snow/floor,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xv" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; dir = 8; icon_state = "pdoor0"; id = "xenobiocontain"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xw" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; dir = 8; icon_state = "pdoor0"; id = "xenobiocontain"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xx" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; dir = 8; icon_state = "pdoor0"; id = "xenobiocontain"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xy" = (/obj/structure/sign/warning/biohazard,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xz" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/closet/l3closet/scientist,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xA" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xB" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/window/reinforced,/obj/machinery/shower{pixel_y = 3},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xC" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobiocontain"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xD" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobiocontain"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xE" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobiocontain"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xF" = (/obj/structure/bed/roller,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xG" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xH" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xI" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - First Aid Station"; dir = 2},/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xJ" = (/obj/structure/table/glass,/obj/machinery/recharger,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/defib_kit/loaded,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xK" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xL" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xM" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xO" = (/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xP" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xQ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora)
+"xR" = (/obj/machinery/computer/operating{name = "Xenobiology Operating Computer"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xS" = (/obj/machinery/optable{name = "Xenobiology Operating Table"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xT" = (/obj/structure/table/standard,/obj/item/weapon/surgical/scalpel{pixel_y = 12},/obj/item/weapon/surgical/circular_saw,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xU" = (/obj/structure/table/standard,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xV" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/closet/l3closet/scientist,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xW" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xX" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology Access"; dir = 1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xY" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"xZ" = (/obj/structure/table/standard,/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"ya" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/folder,/obj/item/weapon/pen,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yb" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yc" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"ye" = (/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/paleblue,/obj/structure/table/rack,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/o2{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yf" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yg" = (/obj/machinery/atmospherics/unary/heater{dir = 2; icon_state = "heater"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yh" = (/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yi" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/crate/hydroponics/prespawned,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoflora North"; dir = 2},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yj" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yl" = (/obj/structure/table/glass,/obj/item/weapon/tape_roll,/obj/item/device/analyzer/plant_analyzer,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"ym" = (/obj/machinery/atmospherics/tvalve{dir = 1; name = "siphon switching valve"},/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yn" = (/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yo" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 9; icon_state = "intact"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yp" = (/obj/structure/table/glass,/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 30; pixel_y = 0},/obj/item/weapon/clipboard,/obj/item/weapon/folder/white,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yq" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yr" = (/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"ys" = (/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yt" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xeno_airlock_interior"; locked = 1; name = "Xenobiology Internal Airlock"; req_access = list(55)},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "xeno_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -26; pixel_y = 6; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yu" = (/obj/item/clothing/shoes/galoshes,/obj/item/clothing/shoes/galoshes,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yv" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yw" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yx" = (/obj/structure/table/reinforced,/obj/machinery/chemical_dispenser/full{density = 1},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yy" = (/obj/machinery/sleeper{dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/effect/floor_decal/corner/paleblue/full,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yz" = (/obj/machinery/sleep_console,/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yA" = (/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid/regular,/obj/random/medical/lite,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/item/bodybag/cryobag,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yB" = (/turf/simulated/wall,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yC" = (/obj/effect/overlay/snow/floor,/obj/structure/cable/heavyduty{icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"yD" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yE" = (/obj/structure/cable/heavyduty{icon_state = "2-8"},/obj/effect/overlay/snow/floor,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"yF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yG" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yH" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yI" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yJ" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yK" = (/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yL" = (/obj/structure/closet/emcloset/legacy,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yM" = (/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yN" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yO" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for containment."; id = "xenobiocontain"; name = "Containment Switch"; pixel_x = -6; pixel_y = 28; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yP" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "xeno_airlock_control"; name = "Xenobiology Access Console"; pixel_x = -26; pixel_y = 26; tag_exterior_door = "xeno_airlock_exterior"; tag_interior_door = "xeno_airlock_interior"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yQ" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yR" = (/obj/structure/sink{pixel_x = 0; pixel_y = 28},/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 38},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yS" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"yT" = (/obj/structure/reagent_dispensers/watertank/high,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yU" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yW" = (/obj/effect/floor_decal/corner/green{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yY" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"yZ" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"za" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zc" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zd" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"ze" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zf" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zg" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zh" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zi" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zk" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zm" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zn" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zo" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/obj/machinery/atmospherics/portables_connector,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zp" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zq" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zr" = (/obj/effect/floor_decal/corner/green,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zs" = (/obj/structure/table/glass,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/knife/machete/hatchet,/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zt" = (/obj/structure/table/glass,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zu" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zv" = (/obj/structure/table/glass,/obj/effect/floor_decal/corner/green{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zw" = (/obj/effect/floor_decal/corner/green{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zx" = (/obj/structure/sink{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zy" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zz" = (/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zA" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/westleft{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zB" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zD" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/item/clothing/gloves/sterile/latex,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/junction/yjunction{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zH" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/standard,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/weapon/gun/energy/taser/xeno,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zJ" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zK" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/door/window/brigdoor/westleft{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zL" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"zM" = (/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zN" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/obj/item/weapon/tool/wrench,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zO" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zP" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Isolation to Waste"},/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/door/window/westright{name = "Xenoflora Containment"; req_access = list(55)},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zQ" = (/obj/effect/floor_decal/corner/green{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zR" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zS" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zT" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/vending/hydronutrients{categories = 3},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zU" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/botany/editor,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/botany/extractor,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zW" = (/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zX" = (/obj/effect/floor_decal/corner/green{dir = 10},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoflora East"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zY" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"zZ" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Aa" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ab" = (/obj/machinery/disposal,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ac" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ad" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/machinery/button/remote/blast_door{id = "xenobio6"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ae" = (/obj/structure/window/reinforced,/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Af" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Ag" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Ah" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/botanydisk,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Ai" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Aj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Ak" = (/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Al" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Am" = (/turf/simulated/wall,/area/surface/outpost/research/xenoresearch/xenobiology)
+"An" = (/obj/machinery/status_display,/turf/simulated/wall,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ao" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology West"; dir = 4},/obj/structure/closet/firecloset/full/double,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ap" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Aq" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ar" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"As" = (/obj/structure/table/standard,/obj/item/glass_jar,/obj/item/glass_jar,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"At" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology East"; dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/item/weapon/extinguisher,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Au" = (/obj/machinery/ai_status_display,/turf/simulated/wall,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Av" = (/obj/machinery/door/blast/regular{desc = "Blastdoor divider"; id = "xenobioout7"; name = "Containment Divider"},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Aw" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoflora West"; dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Ax" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Ay" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Az" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AA" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AB" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AC" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 9; icon_state = "intact"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AE" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AF" = (/obj/machinery/light/spot{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AG" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AH" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AI" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AJ" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"AK" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio4"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"AL" = (/obj/machinery/smartfridge/secure/extract,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"AM" = (/obj/structure/table/reinforced,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/button/remote/blast_door{id = "xenobio5"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/structure/window/reinforced,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"AN" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"AO" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AP" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AQ" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AS" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AU" = (/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"AW" = (/turf/unsimulated/wall/planetary/sif,/area/surface/outside/river/indalsalven)
+"AX" = (/turf/simulated/floor/water,/area/surface/outside/river/indalsalven)
+"AY" = (/mob/living/simple_mob/slime/xenobio,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"AZ" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/westleft{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ba" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bb" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/weapon/gun/energy/taser/xeno,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Be" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/processor,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bg" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bh" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bi" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Port to Isolation"},/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bj" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/structure/extinguisher_cabinet{pixel_x = -25},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bk" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Isolation to Waste"},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bl" = (/obj/effect/floor_decal/corner/green{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 9; icon_state = "intact"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bm" = (/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bn" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bo" = (/obj/structure/window/reinforced,/obj/machinery/biogenerator,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bp" = (/obj/structure/window/reinforced,/obj/machinery/seed_extractor,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bq" = (/obj/machinery/seed_storage/xenobotany,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Br" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bs" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bt" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoflora Grow Room 2"; dir = 4},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Bu" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio4"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bx" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"By" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Bz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/wingrille_spawn/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"BA" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"BB" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BC" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/item/weapon/tool/wrench,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BD" = (/obj/effect/floor_decal/corner/green{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BE" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BF" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BG" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/obj/structure/reagent_dispensers/watertank/high,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BH" = (/obj/machinery/smartfridge/drying_rack,/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BI" = (/obj/effect/floor_decal/corner/green{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BJ" = (/obj/machinery/light,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BK" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BL" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"BM" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the divider between pens."; id = "xenobioout7"; name = "Containment Divider Switch"; pixel_x = 28; pixel_y = 0; req_access = list(55)},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"BN" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BO" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BP" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BQ" = (/obj/effect/floor_decal/corner/green{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BS" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BT" = (/obj/effect/floor_decal/corner/green{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BU" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BV" = (/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BW" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Xenoflora Storage"; req_access = list(55)},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"BX" = (/obj/structure/closet,/obj/item/toy/figure/scientist,/obj/item/clothing/accessory/armband/science,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoresearch/xenobiology)
+"BY" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for a door to space."; id = "xenobioout6"; name = "Containment Release Switch"; pixel_x = 0; pixel_y = -28; req_access = list(55)},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"BZ" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ca" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/door/window/brigdoor/northright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cb" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/button/remote/blast_door{id = "xenobio1"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cc" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/light,/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenobiology South"; dir = 1},/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -38},/obj/structure/reagent_dispensers/watertank/high,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cd" = (/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio2"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ce" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cf" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ch" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ci" = (/obj/structure/closet/radiation,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Ck" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cl" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"Cm" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Cn" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Co" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Cp" = (/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Cq" = (/obj/machinery/light/spot,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Cr" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Cs" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Ct" = (/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Cu" = (/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven)
+"Cv" = (/turf/simulated/wall,/area/surface/outside/path/plains)
+"Cw" = (/turf/simulated/floor/wood{outdoors = 1},/area/surface/outside/path/plains)
+"Cx" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cy" = (/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Cz" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CA" = (/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CB" = (/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CC" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CD" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CE" = (/obj/structure/closet/l3closet/general,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CF" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CG" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CH" = (/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CI" = (/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CJ" = (/obj/structure/closet/crate/hydroponics/exotic,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CK" = (/obj/effect/step_trigger/teleporter/bridge/west_to_east,/obj/structure/railing{dir = 4},/turf/simulated/floor/water,/area/surface/outside/river/indalsalven)
+"CL" = (/obj/effect/step_trigger/teleporter/bridge/east_to_west,/obj/structure/railing{dir = 8},/turf/simulated/floor/water,/area/surface/outside/river/indalsalven)
+"CM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CN" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CO" = (/obj/structure/closet/bombcloset,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CP" = (/obj/effect/overlay/snow/floor,/obj/structure/grille,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
+"CQ" = (/obj/effect/overlay/snow/floor,/obj/structure/grille,/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/outpost)
+"CR" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CS" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CW" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoflora Grow Room 1"; dir = 2},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"CX" = (/obj/effect/step_trigger/teleporter/bridge/east_to_west,/obj/structure/railing{dir = 8},/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven)
+"CY" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"CZ" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Da" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Db" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Dc" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Dd" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"De" = (/obj/effect/step_trigger/teleporter/bridge/west_to_east,/obj/structure/railing{dir = 4},/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven)
+"Df" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Dg" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Dh" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Di" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/hydro,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Dj" = (/obj/machinery/door/blast/regular{desc = "By gods, release the hounds!"; id = "xenobioout6"; name = "Containment Release"},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
+"Dk" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/normal)
+"Dl" = (/obj/effect/zone_divider,/turf/simulated/floor/water,/area/surface/outside/river/indalsalven)
+"Dm" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/snow/sif/planetuse,/area/surface/outside/plains/normal)
+"Dn" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/shuttle/response_ship/planet)
+"Do" = (/obj/effect/step_trigger/teleporter/bridge/north_to_south,/obj/structure/railing,/turf/simulated/floor/water,/area/surface/outside/river/indalsalven)
+"Dp" = (/obj/effect/step_trigger/teleporter/bridge/north_to_south,/obj/structure/railing,/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven)
+"Dq" = (/obj/effect/step_trigger/teleporter/bridge/north_to_south,/obj/structure/railing,/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/normal)
+"Dr" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Ds" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenoflora)
+"Dt" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{icon_state = "railing0"; dir = 1},/turf/simulated/floor/outdoors/grass/sif/planetuse,/area/surface/outside/plains/normal)
+"Du" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{icon_state = "railing0"; dir = 1},/turf/simulated/floor/water,/area/surface/outside/river/indalsalven)
+"Dv" = (/obj/effect/step_trigger/teleporter/bridge/south_to_north,/obj/structure/railing{icon_state = "railing0"; dir = 1},/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven)
+"Dw" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 1},/area/surface/outside/ocean)
+"Dx" = (/turf/simulated/floor/water,/area/surface/outside/river/faxalven)
+"Dy" = (/obj/effect/zone_divider,/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven)
+"Dz" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/syndicate_station/planet)
+"DA" = (/turf/simulated/floor/outdoors/grass/sif/forest/planetuse,/area/surface/outside/plains/normal)
+"DB" = (/turf/simulated/floor/plating/sif/planetuse,/area/surface/outside/plains/normal)
+"DC" = (/obj/effect/step_trigger/teleporter/bridge/west_to_east,/obj/structure/railing{dir = 4},/turf/simulated/floor/water,/area/surface/outside/river/faxalven)
+"DD" = (/obj/effect/step_trigger/teleporter/bridge/east_to_west,/obj/structure/railing{dir = 8},/turf/simulated/floor/water,/area/surface/outside/river/faxalven)
+"DE" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/grass/sif/forest/planetuse,/area/surface/outside/plains/normal)
+"DF" = (/obj/effect/zone_divider,/turf/simulated/floor/water,/area/surface/outside/river/faxalven)
+"DG" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/surface/outside/plains/normal)
+"DH" = (/obj/effect/zone_divider,/turf/simulated/floor/outdoors/rocks/sif/planetuse,/area/surface/outside/plains/normal)
+"DI" = (/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 9},/area/surface/outside/ocean)
+"DJ" = (/turf/simulated/floor/water,/area/surface/outside/lake/romsele)
+"DK" = (/turf/simulated/floor/water/deep,/area/surface/outside/lake/romsele)
+"DL" = (/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/skipjack_station/planet)
+"DM" = (/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall)
+"DN" = (/obj/item/weapon/banner/virgov,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall)
+"DO" = (/obj/machinery/light,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall)
+"DP" = (/obj/item/weapon/banner/nt,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall)
+"DQ" = (/turf/simulated/shuttle/wall/voidcraft,/area/surface/outpost/wall)
+"DR" = (/turf/simulated/shuttle/wall/voidcraft/hard_corner,/area/surface/outpost/wall)
+"DS" = (/turf/simulated/wall/dungeon{icon = 'icons/obj/doors/shuttledoors.dmi'; icon_state = "door_locked"; name = "Wall Gate"},/area/surface/outpost/wall)
+"DT" = (/obj/structure/sign/warning/caution{desc = "This appears to be a sign warning people that the other side is dangerous. It also says that NanoTrasen cannot guarantee your safety beyond this point."; name = "\improper WARNING: NO ACCESS"},/turf/simulated/shuttle/wall/voidcraft/hard_corner,/area/surface/outpost/wall)
+"DU" = (/obj/structure/sign/warning/caution{desc = "This appears to be a sign warning people that the other side is dangerous. It also says that NanoTrasen cannot guarantee your safety beyond this point."; name = "\improper WARNING: NO ACCESS"},/turf/simulated/shuttle/wall/voidcraft,/area/surface/outpost/wall)
+"DV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall)
+"DW" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall)
+"DX" = (/turf/unsimulated/wall/planetary/sif{icon_state = "rock-dark"},/area/surface/outpost/wall)
+"DY" = (/obj/effect/step_trigger/teleporter/wild/to_wild,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall)
+"DZ" = (/turf/simulated/shuttle/wall/voidcraft,/area/surface/outside/lake/romsele)
+"Ea" = (/turf/simulated/floor/water/shoreline/corner{icon_state = "shorelinecorner"; dir = 4},/area/surface/outside/ocean)
+"Eb" = (/obj/effect/zone_divider,/turf/simulated/floor/water/shoreline{icon_state = "shoreline"; dir = 8},/area/surface/outside/ocean)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacadadadabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeababababababababab
+aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiajajajahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafahahahalalalalalalalalalalalalalalalalalalalahahahahalalalalalalalahahahahalalahahahahamajajajananananalalalalalalalalalalahahahahahahahahahahahahalalalalahahahahahahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafafafalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahalalalalalalalamajajajaoapaqanalalalalalalalalalalalahahahahahahahahahahalalalalalalahahahahahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalamajajajarasatanalalalalalalalalalalalalalahahahahahahalalalalalalalalalahahahahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalauavavavawaxayanalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajananananalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafafalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafafalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafafalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafafafalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafafafalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa
+aaafafafafafafalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafaAafafaa
+aaafafafafafafalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakaBafafafafaAaAafafaa
+aaafafafafafafalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaBaBaBafafaAaAaAaAaAafaa
+aaafafafafafafafalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaCaDaDaDaEaAaAaAaAaAaAafaa
+aaafafafafafafafafalalalalalalalafafalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaGaDaDaDaHaAaAaAaAaCaEafaa
+aaafafafafafafafafafalalalalafafafafafalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaIalazajajajalaIalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaCaJaDaDaDaHaAaAaAaCaJaKaLaM
+aaafafafafafafafafafafafafafafafafafalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaCaJaDaDaDaDaKaLaLaLaJaDaDaDaM
+aaafafafafafafafafafafafafafafafafalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNaNaOaOaOaNaNaPaPaPaPaQaQaQaPaPalalalalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaGaDaDaDaDaDaDaDaDaDaDaDaDaDaM
+aaafafafafafafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalafafafafafafalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNaNaRaSaTaUaVaNaWaXaYaZaZaZbabbaPaPaPaPalalalazajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDaDaDaDaDaDaDaDaM
+aaafafafafafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNbcbdbebebfbgaObhbibibibibibibjaPbkblaPbmbmbmazajajajalalalalalalalalalalalalalalalalalbnbnbobpbobnbnalalalalalalalalalalalalalalalalalalahahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDaDaDaDaDaDaDaM
+aaafafafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaObqbebrbsbtbubvbwbxbybzbybAbBbCbDbEbFbGbmbmbmazajajajalalalalalalalalalalalalbHbIbJbIbHbnbKbLbMbNbObnbPbQbRbQbPalalalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDaDaDaDaDaDaM
+aaafafafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaObSbTbUbVbWbXaObYbZbicacbcccbcdaQcecfaQbmbmbmazajajajalalalalalalalalalalalbHbHcgchcicjckbNclcmcnbNcocpcqcrcsbPbPalalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaCaJaDaDaDaDaDaDaDaDaDaDaDaDaDaM
+aaafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalctalalalctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNcucucvcvcvcvaNcwcxcyaQczcAcBcCcDcDcDcDcEcEcEcFajajajalalalalalalalalalalbHbHcGcGcHcIcJcKcLcMcNcOcPcKcQcRcRcScTbPbPalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaCaJaDaDaDaDaDaDaDaDaDaDaDaDcUcUaM
+aaafafafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalctalalalctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNcvcvcvcVcWcXcYcZbZdacDcDcDcDcDcDdbdcdddedfdfdgajajajalalalalalalalalalalbIdhdidjdkcIdlcKdmdndodpdqcKdrcRcRdsdtdubQalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaCaJaDaDaDaDaDaDaDaDaDaDaDcUcUcUcUaM
+aaafafafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctalalalctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNdvdwcvdxdydzcYdAbZdBcDdCdDdEdFdGdHdIdJdKdKdKdLajajajalalalalalalalalalalbJdMcIdNcIdOdPbIdQdRdRdRdSbQdTdUcRdVdWdXbRalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUaM
+aaafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaNaNaNaNdYdZcYcYeaebeccDedeeeecDeedbcDcDegefcEehajajajalalalalalalalalalalbIeiejekelemeneoepeqereqeseteuevewexeyezbQalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUaM
+aaafafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalbmbmbmaQeAeBaQeCeDeEeFbheGbieHeIeIeJeKeeeLcDeMeMeMeMeNajajajalalalalalalalalalalbHeOePeQeReSeTbIeUeVeWeXeYbQeZfafbfcfdfebPalalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUaM
+aaafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctctctalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalbmbmfffgfhfifjfkflfmfnfmfofpfqfrfsftfufvfwcDeMeMeMeMeNajajajajalalalalalalalbHbHbHfxfxfxfyfzfAfxcKbofBbocKfCfDfEfFfCfCfCbPbPalalalalalalalalalalalahahahahahahahafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM
+aaafafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctctctalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalbmbmfGaPfHfIaPfJfKfLbYbieGbieHeIfMfNfOeefPcDeMeMeMeMeNajajajajajajajajajajfQbIfRfSbIfTfUfVcIfWfXbIfYfZgabQgbgcgcgdgegfgcggbQalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctctctalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajaPaPghaPgigiaPgjgkglgmcDgneeeegoeedbcDeMeMeMeMgpajajajajajajajajajajfQgqgrgsgtgucIgvelelgwgxgygzgAgBgCgDgDgEgFgFgGgHbQalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctctctalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIgJgKgLgKgMgIgNgOgPgOcDgQgRgSgTgUgVcDgWgWgWgWgXajajajajajajajajajajgYbHgZhabHhbhchdhehfhgfxhhhihjfChkhlhmhnhohphqhrbPalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIgIhshthuhvhwhxhyhzhyhAgIgIgIgIgIgIgIalalalalamajajajajajalalalalalalbHhBhBhBhBhBhChChChChChDhihEhFhFhFhFhFhGhGhGhFhFalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIhHhIhyhJhKhLhMhNhOhPhQhRhShShTgIalalalalalamajajajajalalalalalalalalhBhUhVhWhBhXhYhZiaibhDhihEhFicidieifigihiiijhFalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIikhIhyiliminioipiqirisisitiuivgIalalalalalamajajajalalalalalalalalalhBiwixiyhBiziAiAiBhCiCiDiEhFiFiGiGiGiHiHiGiIhFalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIiJiKiLhJhyiMiNiOiPiQiRiSiTiUiVgIalalalalalamajajajalalalalalalalalalhBhBiWhBhBiXiYiZjahChDhijbhFiHiHjciiiiiHiHiGhGalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIgIjdjejfjggIgIjhgIgIjijjjkjkgIgIalalalalalamajajajalalalalalalalalaljljmjnjojphChCjqhChCjrhijshGjtiHjujvjwiGiHiHhGalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIgIgIgIjxgIjyjzjygIgIgIgIgIgIalalalalalalamajajajalalalalalalalalaljljAjWjCjDjEjFjGjHjIfYhijJhGjKiHjLiHiGiGiHiHhGaljMjMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalajajajjNjOjOjOjPjOjOjQjRjRjRjRjRjRjRjRjRjRjRjRjRjSjRjRjRjTjTjTjTjTjTjTjTjTjUjVlSjXjYjZkakbkakckakdkekfkgkhkikhkhkjiHiHhGalaljMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajajajajajajamajajajajajajajajajajajajajajajajajajajajamajajajalalalalalalalalaljlkkjBkljpkmknkokpkqkrkskthGkuiGjuiHiHiHiHiHhFalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalaljMalalalalajajajajajajajajajajajamajajajajajajajajajajajajajajajajajajajajamajajajalalalalalalalalaljlkvkwkxjpkykzkAkBkBjIkCkDhFhFkEkFkGkHkIkJkKhFalaIalaljMalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalalalalalalkLalalalalalalalalalalalalalalalalalalalalamajajajalalalalalalalalalkMkNkNkNkNkNkNkNkMkOkPkQkRkShFhGkThGhGhFhFhFhFalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalkUkUkUkUkVkVkWkXkWkYkYkYkYkZkZkYkYkYkYalalalalalalalalalamajajajalalalalalalalalalkMlalblclbldlelflglhliljlkfYjIlllmlnlolplqlrlsltjMalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUkUlulvlwlxlylzlAlBlClDlElFlElGlHlElIkYkYalalalalalalalalamlJlJlKalalalalalalalalalkMlLlMlMlMlMlNlOlPlQlRpIlTlUlVlWlXlYlZmambmcmdmejMjMjMalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUmflxlxlxmgmhlzmimjlCmkmlmmmnmomnmnmpmqkYalalalalalalalalmrmsmtmumualalalalalalalalmvmwmxmxmxmxmymzmvhhmAmBmCfYjImDmEmFmGkBmHmIkBmJaljMjMalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUlulxmKlxmLlxlzmMmNlCmOlEmPlEmQlElElEmRkYalalalalalalalalmSmTmUmVmsalalalalalalalalmvmWmXmWmXmWmWmYkMmZfYnakRnbncndnendndkBkBkBkBalalaljMjMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalkUnflxngnhninjlznknllClEnmnnnonpnononqnrkYalalalalalalalalmSnsntnumsalalalalalalalalkMnvnwnxnynzmWnAkMkBjInBkDncncnCnDnEnFnGncalalalaIalaljMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajaIalkUnHnIlxlxnJnKnLnMnNlClElElElEnOlElElEnPkYalalalalalalalmumrmsnQmumumualalalalalalalkMnRnSnTnUnVmWnWkNnXfYiDnYnZoanEobocndndncalalalalalaljMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalodkUkUkUkVkVoeofnLogohlCkZkZkZlCoilCkZkZojkYmumumsmsmumsmsmuokolomonoomumsmsmumsmsmumukMkNmvopmvkNmvmvkNoqfYnakRndornEosnEotouncalalalalalaljMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajovowoxoyozoAoBoCoDoEoFoGoHoIoJoJoKoLoMoJoNoOoJoPoQoRoRoSoRoToRoUoVoWoXoYoZoRoRpaoToRoRoPpbpclhpdpepcpfpcpgphphpipjndpknEosplndndncncncalalalaljMalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajpmpnpopppqprpsptpupvpwpxpypvpvpzpvpApvpvpBpvpCpDpEpFpGpGpGpHpGpKpJqupLpGpGpGpFpGpHpGpMpNgylUlUpOpPpPpQpPpPpPkapRpSndpTnEosplndpUpVpWncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajpXodpYpZodqaqbqcpsqdqeqfqgqhqiqjpsqcqkqlqmqnqoqpqqqrqqqsqqqqqtqQqvqwqxqyqqqqqrqzqqqqqqqpqAqBqBqCqBqBqBqBqDfYqEqFqGndqHqIqJqKqLqMqNqOncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalododododqPqPqcpsqPqPqPqPqPqPqPpsqcqPqPodododmumumsmsmumsmsmurAqRntqSqTmumsmsmumsmsmumukBqUqVqWqXqYqZrarbfYrcrdrerfrgnErhrindpUrjpWncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajaIalodrkrlrmrnrorprqrrrsqPrtrurvrprorwrxryrzodalalalalalalalmurVmurBmsmumualalalalalalalkBrCrDrDrDrDrDrDrDrDrErFrGndndndrHndndndrIncncalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalowrJrKrLqPqcrMqPrNrOqPrPrQqPrRqcqPrSrTrUowalalalalalalalaltgrWmUmVmsalalalalalalalalalrCrXrYrZrZsasbscsdsesfsgshsisjskslsmsnsorCalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalodqPqPqPqPqcpsqPqPqPqPqPqPqPpsqcqPqPqPqPodalalalalalalaIaltgspsqsrmsalaIalalalalalalalssstsusvswswswswswswsxswswswswswswsyszstssalalalaljMalalalalafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalodsArlrmsBsCsDsEsFsGqPsHsIsJsKsCsLrxrysModalalalalalalalalrVmusNmsmualalalalalalalalalsOsPstsQsRsSsTsTsTsTsTsTsUsUsUsVsRsWstsXsOalalalaljMalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalododsYsZqPowowqPtatbqPtctdqPowowqPtetfododalalalalalalalaltuthlJlJalalalalalalalalalalssstsRsQsRtitjtjtjtjtjtjtktktktlsRsWsRstssalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalajajalalodowododalalododowodowododalalododowodalalalalalalalalaltuajajajalalalalalalalalalalrCrCtmtnsRtitjtjtjtotptqtktktktlsRtrtsrCrCalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaagagaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFttttttaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFaFtKttttttaFaFaFaFaFaFaFaFaFaFaFtvtwtxtytztAtAtAtBtCtDtEtEtEtFtytGtHtvaFaFaFaFaFaFaFaFaFaFaFaFagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagtItItItItJustLtLtLtLtLtLtLtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalaltuajajajajalalalalalalalalalalsOsttOsRtitjtjtjtktktktktktktlsRtPstsOalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalalalalalalalalalalalalalalalalalalalalalalaltuajajajajalalalalalalalalalalsssRsRsRtQtRtRtRtStStStStStStTsRsRsRssalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalalalalalalalalalalalalalalalalalalalalaltuajajajajalalalalalalalalalalrCtUtVsRsRsRsRsRsRsRsRsRsRsRsRsRsRtWrCalalaljMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalalalalalalalalalalalalalalalalalalalaltuajajajajalalalalalalalalalalalrCrCsttXtYtZsRsRsRsRsRuatYubstrCrCalalalaljMalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafucucaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalmuudajajalalalalalalaluemuuealalalalalalalalalufmualtualajajajalalalalalalalalalalalalrCsssOssrCtXuguhuitXrCsssOssrCalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalujukulululululululululumujukulululululululululumujaltualajajajalalalalalalalalalalalalalalalalrCrCsssOssrCrCalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuououpupupupupuououqueunururuouououououruruqalaltuajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalaljMalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafucaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururuououourururuqalajutajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalaljMjMalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafucucaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajajutajajajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafucucucaAaAaAaAaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajajutalajajajalajajajajajajajajajajajajajajajalalalalalalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafucucucucaAaAaAaAuvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqajaluwyCuxuxuxyCyCyCyCyCyCyCyCyCyEajajajajajajajajalalalalaljMjMjMalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAuvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqalalalajajajajalalalalalalalalaltualalalalajajajajajajalaljMjMalalalalalalalalalalalalalalalalalalalalalalalafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAaAuvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunuoupupupupupupupuouqueunurururururururururuqalalalajajajalalalalalalalalalaltualalalalalalajajajajajalalalalalalalalalalalalalalalalalalalalalalalalaluyuyafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafucucucucaAaAaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaltualalalalalalalalajajajalalalalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyafafafafafafafafafafafafafafagafafafafafafafafafafafafafafucucucucucaAaAaAaAaAaAaAaAaAuvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaluzalalalalalaIalaluAuBuBalalaIalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyuyuyafafafafafafafafafafafafagafafafafafafafafafafafafafucucucucucucaAaAaAaAaAaAaAaAaAaAuvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalalalalalalaluzalalalalalalaluCuDuEuFuCalalalalalalalalalalalalalalalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyafafafafafafafagafafafafafafafafafafafafucucucucucucaAaAaAaAaAaAaAaAaAaAaAaAuvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalalaluGuGuGuHuHuIuHuJuJuJuJuJuJuJuKuLuMuDuDuDuFuNuFuDuDuFuDuOuDuFuDalalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyafafafafagafafafafafafafafafafafucucucucucucucaAaAaAaAaAaAaAaAaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupupupupupupupuqueunuourururururururuouqalalalajajajalalalaluGuGuPuQuRuSuTuUuVuWuXuYuZvauJvbvcvduDvevfvgvhvivjuOvkvkvkvlvmuDuDalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvnvovovovovovovovpucucucucucucucucucucaAaAaAvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupupuouououpupupuqueunuourururururururuouqalalalajajajalalalaluGvrvsvtuRvuvvvwuVvxvyvzvAvBuJuDvCuFuDvDvEvFvGvHvIuOvkvkvkvJvKuOuDalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalunupupuouououououpupuqueunuouourururururuououqalalalajajajalalalaluGvNvOvNuRuRvPuRuVuVuVvQuVuVuVvRvSvTuOvUvVvWvXvYvZuOuOuOuOwauOuOuDalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalwbwcwdwdwdwdwdwdwdwdwdwewbwcwdwdwdwdwdwdwdwdwdwewbalalajajajalalalaluFwfwgwhwiwjwkwlwmwnwowpwowqwrwowswowtwuwvwwwxwowywzwwwowAwBwCwDuFalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalmuwEalalalalalalalalalwEmuwEalalalalalalalalalwEmualalajajajalalalaluNwFwGwHwIwJwKwLwMwNwOwPwQwQwRwQwSwQwTwUwQwVwQwQwQwWwXwYwZxawFwFuNalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalaluFxbxcxdxexexfxexexgxcxhxixjuFuFxkuFuFuDxlxmxnwFxoxoxpxqxoxrxnxsxtxualalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalxexexvxwxxxyxzxAxBxyxCxDxExexexFxGxHxIxJxoxoxKxLxKxoxMxNxOxoxPxLxQxoxoalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalxexexRxSxTxUxexVxWxXxexYxZyaybxexeycydyexoxoyfygyhyiyjxOykxOylymynyoypxoxoalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalxeyqyrysyryrxexeytxexeyuyvysywyxxeyyyzyAxoyBBjyDBByFyGxOykxOyHyIyJyKyKyLxoalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalxexexexexeyMysyryNyOyPyQyRyrysySxexexexexexoxoyTxOyKyUyVyWyXyYxOyZzazbzcyByBxoxoxoaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajalalalxezdzezfzgzhyrziysyszjysysziyrzkzlzfzezmxeznzozpzqyKzrzsztxOykxOzuzvzwyKxKzxzyxOxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajalalalalxezzzzzzzAzByszCzDzEzFzGzHzIzJzKzLzzzzzzxezMzNzOzPzQzRzSzTxOykxOzUzVzWzXxKxOxOzYxLuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajalalalalalalxezzzzzzzZAayrysyryrAbyryrysAcAdzlzzzzzzxeAeAfAfzqAgxOxOxOxOAhAiAiAjAiAiAkAiAlzYxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajajalalalalalalalxeAmAmAmAnAoyrysApAqArAsyrysAcAtAuAvAvAvxeAwAxAxAyzaAzAAAAABACADyKyKAEAFyBAGAHAIxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajajalalalalalalalalalxezzzzzzAJAKyrysyryrALyryrysAcAMANzzzzzzxoAOAPAQAyAgxOxOxOARASATyXyXyXyXAUyXAVzYxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+AWAXaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajajalalalalalalalalalalalxezzAYzzAZzBysBaBbBcBdzEBeBfBgzKBhzzzzzzxoBiyKDrBkBlBmBnBoARyKxOBpBqBrBsxKBtxOzYxLuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+AWAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajajalalalalalalalalalalalalalxeBuBvzfBwBxyrziysysysysysziAcByBzzfBvBAxoDsBCyKAyyKBDBEBFARyKxOBGBHBIyKxKxOBJBKxKuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+AWAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajajalalalalalalalalalalalalalalalxexexexexeBLysyrysyryryrysyrBgBMxexexexexoxoxoBNBOyKBPAABQBRBSyXBTyVBUBVyBBWxoxoxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+AWAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalalalalalalalalalalalalalalalxeBXyrysBYBZCaCbCcCdCaCeCfCgChCiCjCkClClxoCmCnCoCpyKyGARCqxOyHyKyKCrCsCtxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+AWCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalCvCwCwCvalalalalalalalalalalalalalalalalalalxexeCxyrxeCyCzCAAmCBCCCDxeyrCExexeClCluexoxoCFCGyBxKxKCHyBCIxKxKyBCsCJxoxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+AWAXCuCuAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalCKCwCwCLAXAXAXalalalalalalalalalalalalalalalalxexeCMxeCNzzzzAmzzzzCNxeCOxexeCPbmbmueCQxoxoCRyBCSxOCTCUCVCWxOBWCtxoxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+AWAXAXAXAXCuAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXCKCwCwCXCuAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXalxexexeCYzzzzAmzzAYCZxexexealCQCQCQCQCQalxoxoxoDaxODbAHDcxODdxoxoxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafAXAXAXCuCuCuAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXDeCwCwCXCuCuCuCuAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXalalxeDfzzzzAmzzzzDgxealalalalalalalalalalalxoxOzYzYDhzYzYDixouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafAXAXAXAXCuCuAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXCuDeCwCwCXAXAXCuCuCuCuCuCuCuCuCuCuCuCuCuCuCuCuCuAXAXAXxeDjDjDjxexexexexealalalalalalalalalaluyxoxKxLxKxoxKxLxKxouyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXCuCuCuCuCKCwCwCLAXAXAXAXAXAXAXAXAXCuCuCuAXCuCuCuCuCuCuCuAXAXAXalalalalalalalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNAXAXAXAXAXAXAXAXAXCuCuAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXCuCuAXAXAXCKCwCwCLAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXalalalalalalaluyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuCuAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXAXAXAXCKCwCwCLAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuCuCuCuAXAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXCuCuCuAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXAXAXAXtNCvCwCwCvtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuCuCuCuCuAXAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuCuAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXCuCuAXAXAXAXAXtNtNtNtNtNtNtNajajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpAXAXAXAXAXAXAXCuCuCuCuCuCuCuAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuCuAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXCuAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXCuAXAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajajtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXCuCuAXAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXCuCuAXAXAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalalAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXCuCuCuAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalalalAXAXAXCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXCuAXAXAXuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyuyvLvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafaftNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalalalAXAXAXCuCuCuAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXCuCuAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalalalAXAXAXAXAXCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalalAXAXAXAXAXCuCuAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalalalAXAXAXAXCuCuAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalalalAXAXAXAXAXCuCuAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNaFalalalalalalalAXAXAXAXAXAXCuCuAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXCuCuAXAXAXAXAXAXtNtNtNtNtNAXAXAXDlAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpajajvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXCuCuCuAXAXAXAXAXAXAXAXAXAXAXAXDlAXAXAXAXAXAXCuCuCuCuAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpajajvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuAXAXAXAXAXAXAXAXAXDlAXCuCuCuCuCuAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpajajvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXCuCuCuCuCuAXAXAXAXAXDlAXAXAXAXAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpajajajajajvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXCuCuAXAXAXAXDlAXAXAXAXAXAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuCuAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpajajajajajajajajvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXAXAXAXAXAXAXDlAXAXtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpajajajajajajajajajajajvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNAXAXAXAXAXtNtNtNDmtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuCuAXAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpajajajajajajajajajajajajajvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNDmtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpajajajajajajttajajajajajvpvpvpvpvpvpvpajajajvMvMvMvMvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNDmtNtNtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuCuAXAXAXvpvpvpvpvpvpajajajajajajajajajttajajajvpvpvpvpvpvpvpvpvpvpajajvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNtNtNtNtNtNtNtNtNtNtNDmtNtNtNtNtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajajajajajajajajajajajajajvpvpvpvpajajajajajajajajajvpvpvpvpvpvpvpvpvpvpAXAXCuCuCuAXAXvpvpvpvpajajajajajajvpvpvpvpvpDkvMDnDnDnDnDnDnDnDnDnDnDnvpajajvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvptNtNtNDmtNtNtNtNtNtNtNtNtNvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpCvDoDoDpDpDpDoDoDqCvajajajajvpvpvpvpvpvpvpvpDkvMDnDnDnDnDnDnDnDnDnDnDnDnajajvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpajajajCwCwCwCwCwCwCwCwCwCwajajvpvpvpvpvpvpvpvpvpvpDkvMDnDnDnDnDnDnDnDnDnDnDnDnvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajCwCwCwCwCwCwCwCwCwCwajvpvpvpvpvpvpvpvpvpvpvpDkvpDnDnDnDnDnDnDnDnDnDnDnDnvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpCvDtDuDuDvDvDvDuDuCvvpvpvpvpvpvpvpvpvpvpvpvpDkvpDnDnDnDnDnDnDnDnDnDnDnvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUaDaDaDDIDwDwDwuuaDaDaDaDcUcUcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpAXAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvMvMvMvMvMvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUaDaDDIEavqvqvquvDwuuaDaDaDaDcUcUcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUaDaDaHvqvMvMvqvqvquvDwuuaDaDaDaDcUcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUaDaDaDaHvqvqvMvMvMvqvqvquvuuaDaDaDaDcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUaDaDaDDIEavqvqvMvMvMvMvMvqvquvDwuuaDaDcUcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqaCaLaJaDaDaDcUcUcUaDaDDIEavqvqvMvMvpvpvpvMvqvqvqvqaGaDaDaDcUcUaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqaCaLaLaLaJaDaDaDaDaDcUcUcUaDaDaHvqvqvMvMvpvpvpvpvMvMvMvMvquvuuaDaDaDcUaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqaLaLaLaJaDaDaDaDaDaDaDaDaDcUcUcUcUaDaKaEvqvMvMvMvpvpvpvpvMvMvMvMvquvuuaDaDaDaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMAXAXaDaDaDaDaDaDaDaDaDaDaDaDaDaDcUcUcUaDaDaKaEvqvMvMvMvMvpvpvpvpvMvMvMvquvuuaDaDaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuCuAXAXvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMAXAXAXAXAXaDaDaDaDDIDwDwDwDwDwDwuuaDaDcUcUcUaDaDaDaKaEvqvqvMvMvMvMvMvMvMvMvMvqvqaGaDaDaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXAXvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXaDaDDIDwEavqvqvqvqvqvqaGaDaDaDcUcUcUaDaDaDaKaEvqvqvMvMvMvMvMvMvqvqvqvqaGaDaDaM
+aaafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXCuAXAXAXAXvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXAXDwDwEavqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUaDaDaDaKaLaEvqvqvqvqvqvqvqaCaLaLaJaDaDaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXAXAXAXvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUaDaDaDaDaKaLaLaLaLaLaLaLaJaDaDaDaDaDaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXvpvpvpvpvpDkvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUcUcUcUcUaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaM
+aaafafafvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpAXAXCuCuAXAXAXAXAXAXAXAXDlAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUaDaDaDaDaDaDaDaDaDaDaDaDcUcUcUaM
+aaafafafvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxAXAXAXCuCuCuAXAXAXAXCuCuDyCuCuCuAXAXAXAXAXAXAXAXAXvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxAXAXAXAXAXAXCuCuCuCuCuDyCuCuCuCuCuCuCuCuCuAXAXAXvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxAXAXAXAXAXAXAXAXAXAXDlAXAXAXAXAXCuCuAXAXAXAXAXAXvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvpvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpAXAXDlAXAXAXAXAXAXAXAXAXAXAXAXAXAXAXvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXAXAXvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpAXAXAXAXAXAXAXAXAXAXAXAXAXAXvqvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMDzDzDzDzvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpAXAXAXAXAXAXAXAXvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMAXAXAXAXAXAXAXvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMAXAXAXAXAXAXAXvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvMvMvMvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMAXAXAXAXAXAXaLaEvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafvMvMvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMAXAXAXAXaDaKaEvqvqvqvqaCaJaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADAvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqAXAXAXaDaDaKaLaLaEvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADAvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDBvpDBvpCvCwCwCvvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqAXAXaDaDaDaDaDaKaLaJaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADAvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvquvDwDwuuaDaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADAvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxDxvpvpvpvpDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADAvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvquvDwuuaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADAvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDxDxDxDCCwCwDDDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADAvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxDxDxDBvpDBvpCvCwCwCvvpvpvpDxDxDxDxDxDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADAvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADAvMvMDzDzDzDzvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvMvMDAvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADAvMvMvMvMvMvMvMvMvMvMDzDzDzDzDzDzDzDzDzDzDzDzvMvMvMvMvMvMvMvMvMvMvMvMvMDADADADADADEvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADAvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMDADADADADEDADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMDADADADEDADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMDAvMvMvMDADADADADADEDADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDxDxDxvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaagagagDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDFDFDFDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkttttttttDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDkDGDGDGDGDGDGDHDHDHDHDHDHDHDHDHDHDHDHEbtLtLtLtLtLtLtLtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMtMaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpajajajajajvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpvpvpvpvpDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvpvpvpvpDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwuuaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM
+aaafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDcUcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqaGaDaDaDaDaDcUcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvaDaDaDaDaDaDcUcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDcUcUcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDcUcUcUcUaM
+aaafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwuuaDaDaDaDaDcUcUcUaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaDaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaDaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvuuaDaDaDaDaDaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwDwuuaDaDaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvquvDwDwaM
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafaa
+aaafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafaa
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJvMvMvMvMDJDJDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafafaa
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJvMvpvpvMvMDJDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafafaa
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJvMvMvpvpvMDJDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMDLDLDLDLvMvMvMDLvMvMvMvMvMDLvMvMvMDLDLDLDLvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafafaa
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJDJvMvpvpvMDJDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMDLDLDLDLvMvMvMDLDLDLDLDLDLDLvMvMvMDLDLDLDLvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqvqvqafafafafaa
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJvMvMvpvMDJDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMDLDLDLDLvMvMDLDLDLDLDLDLDLDLDLvMvMDLDLDLDLvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqvqafafafafaa
+aaafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJDJvMvMvMDJDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMDLDLDLDLvMvMDLDLDLDLDLDLDLDLDLvMvMDLDLDLDLvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqvqvqafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqvqvqafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMDADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvqvqvqvqvqvqvqvqafafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMDADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvqvqvqvqvqafafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMDADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJvpvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqvqafafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvqafafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMDADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMDADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvpvpvpvpvpvpvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvpvpvpvpvpvpvpvpvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafafaa
+aaafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafafaa
+aaafafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafafafaa
+aaafafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMDADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJDJDJDKDKDKDKDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafafafafafaa
+aaafafafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMvMvMDADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJDJDJDKDKDKDKDKDKDJDJDJDJDJDJDJDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafafafafafafaa
+aaafafafafafafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMvMvMDADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJDJDJDKDKDKDKDJDJDJDJDJDJDJDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMDLDLDLDLDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafafafafafafafafaa
+aaafafafafafafafafafafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADAvMvMDMDMDMvMvMDADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDJDJDJDJDKDKDJDJDJDJDJDJDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMDMDMDMvMvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMDLDLDLDLDLDLDLDLDLvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafafafafafafafafafafaa
+aaafafafafafafafafafafafafafafafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADADADADADADADADADADADADADADADADADADADADADAvMDNDMDODMDPvMDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADJDJDJDJDJDJDKDKDJDJDJDJDJDJDJDJDJvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpDNDMDODMDPvMvpvpvpvpvpvpvpvpvpvpvpvpvpvpafafafafafafafvpvpvpDkvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvpvMvMvMvMvMvMvMvMvMDLDLDLDLDLDLDLvMvMvMvMvMvMvMafafafafafafafafafafafafafafafafafafafafafaa
+aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafDADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADEDADADADADADAafafafafafDQDADADADQDADADADQDADADADQDADADADRDSDTDSDRDADADADQDADADADQDADADADQDADADADQDADADADQDADADADQDADADADQDADADADQDADJDJDJDKDKDJDJDJDADQDADAvpDQvpvpvpDQvpvpvpDQvpvpvpDQvpvpvpDQvpvpvpDRDSDUDSDRvpvpvpDQvpvpvpDQvpvpvpDQafafafafafafafafafafafafafagafafafvpvpvpvpvpvpvpafafafafafafafafvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMafafafafafafafafafafafafafafafafafafafafafafafafafafafaa
+aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafDADADADADADADADADADADADAafafafafafafafafafafafafafafDADADADkDADADAafafafafafDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDMDMDMDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDJDJDKDKDJDJDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDMDMDMDQDQDQDQDQDQDQDQDQDQDQDQDQDQafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafvMvMvMvMafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaa
+aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDVDMDWDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDJDJDKDKDJDJDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDVDMDWDQDQDQDQDQDQDQDQDQDQDQDQDQDQafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaa
+aaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDYDYDYDQDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDZDZDZDZDZDZDQDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDYDYDYDQDXDXDXDXDXDXDXDXDXDXDXDXDXababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababab
+"}
+
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
diff --git a/maps/southern_cross/southern_cross-4.dmm b/maps/southern_cross/southern_cross-4.dmm
index d445308393..3b3dbdcdbb 100644
--- a/maps/southern_cross/southern_cross-4.dmm
+++ b/maps/southern_cross/southern_cross-4.dmm
@@ -1,700 +1,700 @@
-"aa" = (/turf/unsimulated/wall/planetary/sif,/area/surface/cave/unexplored/deep)
-"ab" = (/turf/simulated/mineral/sif,/area/surface/cave/unexplored/deep)
-"ac" = (/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/deep)
-"ad" = (/turf/unsimulated/wall/planetary/sif,/area/surface/cave/unexplored/normal)
-"ae" = (/turf/simulated/mineral/sif,/area/surface/cave/unexplored/normal)
-"af" = (/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
-"ag" = (/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/unexplored/normal)
-"ah" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
-"ai" = (/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
-"aj" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
-"ak" = (/obj/machinery/conveyor_switch{id = "anolongstorage"; name = "conveyor switch"; pixel_x = 0; pixel_y = 0; req_access = list(65)},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
-"al" = (/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
-"am" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology)
-"an" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
-"ao" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1397; master_tag = "xenoarch2_airlock_control"; name = "Xenoarch Access Button"; pixel_x = 24; pixel_y = 0; req_access = list(47)},/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1397; icon_state = "door_locked"; id_tag = "xenoarch2_airlock_exterior"; locked = 1; name = "Research Exterior Airlock"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"ap" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aq" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"ar" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"as" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"at" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"au" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/computer/guestpass{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"av" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/anomaly)
-"aw" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"ax" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"ay" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"az" = (/obj/effect/floor_decal/corner/purple/full{dir = 8},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aA" = (/obj/structure/closet/excavation,/obj/effect/floor_decal/corner/purple{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aB" = (/obj/structure/closet/excavation,/obj/effect/floor_decal/corner/purple{dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aC" = (/obj/structure/closet/excavation,/obj/effect/floor_decal/corner/purple{dir = 5},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aD" = (/obj/machinery/conveyor_switch{id = "anolongstorage"; name = "conveyor switch"; pixel_x = 0; pixel_y = 0; req_access = list(65)},/obj/effect/floor_decal/corner/purple{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aE" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aF" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Airlock 2"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"aG" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"aH" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"aI" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"aJ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/conveyor_switch{id = "anolongstorage"; name = "conveyor switch"; pixel_x = 0; pixel_y = 0; req_access = list(65)},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/anomaly)
-"aK" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"aL" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"aM" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"aN" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"aO" = (/obj/structure/disposaloutlet{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"aP" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"aQ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/table/rack,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"aR" = (/obj/effect/floor_decal/corner/purple/full{dir = 8},/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aS" = (/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aT" = (/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aU" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aV" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aW" = (/obj/machinery/disposal/deliveryChute{dir = 1},/obj/effect/floor_decal/industrial/warning,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"aX" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1397; icon_state = "door_locked"; id_tag = "xenoarch2_airlock_interior"; locked = 1; name = "Research Interior Airlock"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1397; master_tag = "xenoarch2_airlock_control"; name = "Research Access Button"; pixel_x = 26; pixel_y = 6; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"aY" = (/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/obj/effect/floor_decal/corner/purple{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"aZ" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"ba" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bb" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bc" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bd" = (/obj/structure/sign/warning/nosmoking_2,/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"be" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bf" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bg" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bh" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/closet/crate,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bi" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/status_display{pixel_x = -32},/obj/machinery/floodlight,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bk" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bl" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bm" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bn" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bo" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/purple{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"bp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/embedded_controller/radio/airlock/access_controller{frequency = 1397; id_tag = "xenoarch2_airlock_control"; name = "Research Access Console"; pixel_x = 26; pixel_y = 26; tag_exterior_door = "xenoarch2_airlock_exterior"; tag_interior_door = "xenoarch2_airlock_interior"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"bq" = (/obj/machinery/shower{pixel_y = 3},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology)
-"br" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bs" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bt" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Long Term Storage"; req_access = list(65)},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bw" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bx" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"by" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bz" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bA" = (/obj/machinery/floodlight,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bD" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bE" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bF" = (/obj/effect/floor_decal/corner/purple{dir = 8},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bG" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_research{name = "Expedition Prep"; req_access = list(65)},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"bI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"bJ" = (/obj/machinery/space_heater,/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"bK" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bL" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bN" = (/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bO" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"bP" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/structure/anomaly_container,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bQ" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/light/small,/obj/structure/anomaly_container,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bR" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Long Term Storage"; dir = 1},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bS" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/structure/anomaly_container,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
-"bT" = (/obj/effect/floor_decal/corner/purple/full,/obj/machinery/suspension_gen,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bU" = (/obj/machinery/suspension_gen,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bV" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bW" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Expedition Prep"; dir = 1},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bX" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced,/obj/machinery/door/window/northleft,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bY" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced,/obj/machinery/door/window/northright,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"bZ" = (/obj/structure/table/steel,/obj/item/device/suit_cooling_unit,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue,/obj/item/device/suit_cooling_unit,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/item/device/gps/science,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"ca" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/exp_prep)
-"cb" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"cc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"cd" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"ce" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/power/emitter{anchored = 1; dir = 1; state = 2},/obj/structure/window/reinforced,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cf" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cg" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 2; tag_south = 0; tag_west = 3},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"ch" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"ci" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/sterile/latex,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"cj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"ck" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Hallway 2"; dir = 8},/obj/effect/floor_decal/corner/purple{dir = 4},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"cl" = (/obj/effect/floor_decal/corner/purple{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Anomalous Materials 2"; dir = 4},/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cn" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/portable_atmospherics/powered/scrubber/huge,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/anomaly)
-"co" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cp" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/purple{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cq" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"cr" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"cs" = (/obj/structure/bed,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"ct" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"cu" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"cv" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/cave)
-"cw" = (/obj/effect/step_trigger/teleporter/wild/to_wild,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
-"cx" = (/turf/simulated/shuttle/wall/voidcraft,/area/surface/outpost/wall/checkpoint)
-"cy" = (/obj/structure/showcase/sign{pixel_y = -5},/turf/simulated/wall/dungeon,/area/surface/cave/unexplored/deep)
-"cz" = (/obj/effect/step_trigger/teleporter/wild/to_wild,/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/deep)
-"cA" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/medical)
-"cB" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"cC" = (/obj/machinery/sleep_console,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"cD" = (/obj/structure/table/rack,/obj/machinery/firealarm{pixel_y = 24},/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid/regular,/obj/random/medical/lite,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"cE" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/medical)
-"cF" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/item/clothing/suit/storage/hooded/wintercoat/science,/obj/effect/floor_decal/corner/purple/full{dir = 8},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"cG" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/machinery/newscaster{pixel_y = 30},/obj/item/clothing/suit/storage/hooded/wintercoat/science,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"cH" = (/obj/effect/floor_decal/corner/purple/full{dir = 1},/obj/structure/bookcase/manuals/xenoarchaeology,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"cI" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
-"cJ" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/sterile/latex,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"cK" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"cL" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"cM" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_research{name = "Anomalous Materials"; req_access = list(65)},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cN" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cO" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cP" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cQ" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cR" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cS" = (/obj/machinery/atmospherics/valve/digital/open{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"cT" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Isolation Room 1"; req_access = list(65)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"cU" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"cV" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"cW" = (/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"cX" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
-"cY" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
-"cZ" = (/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
-"da" = (/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"db" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dc" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dd" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"de" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"df" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"dg" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/sterile/latex,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"dh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"di" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/purple,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"dj" = (/obj/structure/table/standard,/obj/item/clothing/head/welding,/obj/item/weapon/weldingtool,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dk" = (/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dl" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dm" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dn" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"do" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"dp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/obj/machinery/light,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"dq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one"; dir = 1; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"dr" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Isolation Cell 1"; dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
-"ds" = (/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/deep)
-"dt" = (/obj/machinery/door/airlock/voidcraft{name = "Wilderness Containment"},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
-"du" = (/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"dz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"dA" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/structure/table/standard,/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/obj/item/weapon/storage/box/cups,/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"dB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_research{name = "Outpost Hallway"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"dC" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dD" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/machinery/floodlight,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"dE" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dF" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dG" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/tool/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dH" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dI" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/button/remote/blast_door{id = "xenoarch_cell2"; name = "Cell 2"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dJ" = (/obj/structure/table/steel,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/machinery/cell_charger,/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"dK" = (/obj/machinery/computer/crew,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/table/glass,/obj/machinery/recharger,/obj/item/device/defib_kit/loaded,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch First-Aid"; dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dM" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/o2{pixel_x = 0; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
-"dN" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/medical)
-"dO" = (/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"dP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/bed/chair/office/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"dQ" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/purple{dir = 6},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/device/taperecorder,/obj/item/weapon/folder,/obj/item/weapon/stamp,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"dR" = (/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"dS" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"dT" = (/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"dU" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dV" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"dW" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dX" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dY" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"dZ" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"ea" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"eb" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"ec" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"ed" = (/obj/machinery/artifact_analyser,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"ee" = (/obj/machinery/door/blast/regular{id = "xenoarch_cell2"},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"ef" = (/turf/simulated/shuttle/wall/voidcraft/hard_corner,/area/surface/outpost/wall/checkpoint)
-"eg" = (/obj/structure/showcase/sign{pixel_y = -5},/turf/simulated/shuttle/wall/voidcraft,/area/surface/outpost/wall/checkpoint)
-"eh" = (/obj/item/weapon/banner/nt,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
-"ei" = (/obj/item/weapon/banner/nt,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
-"ej" = (/obj/structure/sign/greencross{desc = "White cross in a green field, you can get medical aid here."; name = "First-Aid"},/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/medical)
-"ek" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"el" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"em" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/purple{dir = 4},/obj/effect/floor_decal/industrial/warning,/obj/item/device/camera_film{pixel_x = 2; pixel_y = 2},/obj/item/device/camera,/obj/machinery/recharger,/obj/item/weapon/tape_roll,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Crew Area"; dir = 8},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
-"en" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology)
-"eo" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"ep" = (/obj/structure/table/reinforced,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two","isolation_three"); req_access = null; req_one_access = null},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"eq" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"er" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"es" = (/obj/machinery/atmospherics/valve/digital/open{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"et" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Isolation Room 2"; req_access = list(65)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"eu" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"ev" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"ew" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"ex" = (/obj/machinery/light/small{dir = 1},/obj/item/weapon/banner/virgov,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
-"ey" = (/obj/structure/table/steel,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"ez" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"eA" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Airlock 1"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"eB" = (/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eE" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eF" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eG" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/device/camera,/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"eH" = (/obj/structure/table/reinforced,/obj/item/weapon/folder,/obj/item/weapon/pen,/obj/item/weapon/tape_roll,/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"eI" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"eJ" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"eK" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"eL" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"eM" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"eN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/obj/machinery/light,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"eO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two"; dir = 1; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"eP" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Isolation Cell 2"; dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"eQ" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xenoarch1_airlock_exterior"; locked = 1; name = "Research Exterior Airlock"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "xenoarch1_airlock_control"; name = "Xenoarch Access Button"; pixel_x = 0; pixel_y = -24; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"eR" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/effect/floor_decal/rust/part_rusted1,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"eS" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"eT" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xenoarch1_airlock_interior"; locked = 1; name = "Research Interior Airlock"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "xenoarch1_airlock_control"; name = "Research Access Button"; pixel_x = -6; pixel_y = -26; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"eU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "xenoarch1_airlock_control"; name = "Research Access Console"; pixel_x = -26; pixel_y = -26; tag_exterior_door = "xenoarch1_airlock_exterior"; tag_interior_door = "xenoarch1_airlock_interior"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eW" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eX" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eY" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"eZ" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fa" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fb" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Hallway 1"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fc" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fd" = (/obj/machinery/artifact_harvester,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/bluegrid,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fe" = (/obj/item/weapon/anobattery{pixel_x = -6; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = -2; pixel_y = -2},/obj/item/weapon/anobattery{pixel_x = 2; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = 6; pixel_y = 6},/obj/structure/table/steel,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"ff" = (/obj/item/weapon/anodevice{pixel_x = 3; pixel_y = 3},/obj/item/weapon/anodevice,/obj/structure/table/steel,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fg" = (/obj/machinery/artifact_harvester,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/bluegrid,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fh" = (/obj/effect/floor_decal/industrial/warning/full,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fi" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fj" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/isolation_b)
-"fk" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"fl" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/status_display{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
-"fm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/purple{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/purple{dir = 8},/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/noticeboard/anomaly{icon_state = "nboard05"; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fp" = (/obj/effect/floor_decal/corner/purple,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fq" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/corner/purple{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fr" = (/obj/effect/floor_decal/corner/purple{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fs" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"ft" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/purple{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fu" = (/obj/machinery/artifact_scanpad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/bluegrid,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fv" = (/obj/machinery/artifact_scanpad,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/bluegrid,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fx" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fy" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fz" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fA" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fB" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fC" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fD" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/smes)
-"fE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/smes)
-"fF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/smes)
-"fG" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Generator Room"; req_one_access = list(12,47)},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"fH" = (/obj/structure/sign/warning/high_voltage,/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/smes)
-"fI" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/purple{dir = 9},/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fJ" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fK" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
-"fL" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass_research{name = "Anomalous Materials"; req_access = list(65)},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fM" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fN" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fO" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fP" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fR" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Isolation Room 3"; req_access = list(65)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fS" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fT" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fU" = (/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"fV" = (/obj/machinery/power/smes/buildable/outpost_substation{charge = 500000; input_attempt = 1; input_level = 150000; output_level = 150000; RCon_tag = "Outpost - Xenoarch"},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"fW" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/structure/anomaly_container,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"fX" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/steel,/obj/random/tool,/obj/random/tool,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"fY" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/steel,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"fZ" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/structure/anomaly_container,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"ga" = (/obj/machinery/atmospherics/binary/pump/on{dir = 2; target_pressure = 200},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gb" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/powercell,/obj/random/maintenance/clean,/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gc" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/smes)
-"gd" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/restroom)
-"ge" = (/obj/machinery/door/airlock{name = "Research Restroom"},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"gf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Anomalous Materials 1"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/corner/purple{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"gg" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"gh" = (/obj/machinery/atmospherics/unary/heater{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"gi" = (/obj/machinery/atmospherics/unary/freezer{dir = 1; icon_state = "freezer"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"gj" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/corner/purple,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/structure/anomaly_container,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"gk" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"gl" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/obj/machinery/light,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"gm" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one"; dir = 1; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"gn" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Isolation Cell 3"; dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
-"go" = (/obj/item/stack/flag/green,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/deep)
-"gp" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"gq" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"gr" = (/obj/item/stack/flag/red{amount = 1},/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/deep)
-"gs" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"gt" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"gu" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable/heavyduty{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gv" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gw" = (/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gx" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gy" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gz" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gA" = (/obj/structure/table/steel,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gB" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"gC" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"gD" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"gE" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/restroom)
-"gF" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/analysis)
-"gG" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_research{name = "Sample Preparation"; req_access = list(65)},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"gH" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_research{name = "Sample Preparation"; req_access = list(65)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"gI" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/analysis)
-"gJ" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/analysis)
-"gK" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"gL" = (/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/normal)
-"gM" = (/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
-"gN" = (/obj/structure/cable,/obj/machinery/power/port_gen/pacman,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gO" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gP" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gQ" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gR" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 7; tag_north = 1; tag_south = 2; tag_west = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gS" = (/obj/machinery/atmospherics/pipe/tank/nitrous_oxide{dir = 8},/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"gT" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"gU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"gV" = (/obj/structure/table/standard,/obj/item/weapon/towel{color = "#800080"; name = "purple towel"},/obj/item/weapon/towel{color = "#800080"; name = "purple towel"},/obj/item/weapon/towel{color = "#800080"; name = "purple towel"},/obj/random/soap,/obj/random/soap,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"gW" = (/obj/item/weapon/reagent_containers/glass/bottle/toxin,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric{name = "beaker 'sulphuric acid'"},/obj/structure/table/glass,/obj/effect/floor_decal/corner/beige{dir = 9},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"gX" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"gY" = (/obj/effect/floor_decal/corner/beige{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"gZ" = (/obj/effect/floor_decal/corner/lime{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Sample Preparation"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"ha" = (/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hb" = (/obj/structure/reagent_dispensers/coolanttank,/obj/effect/floor_decal/corner/lime{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hc" = (/obj/structure/reagent_dispensers/coolanttank,/obj/effect/floor_decal/corner/lime{dir = 5},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hd" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"he" = (/obj/machinery/space_heater,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"hf" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"hg" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 50},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hh" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/portable_atmospherics/powered/pump/filled{pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hi" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hj" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 5; tag_north = 1; tag_south = 2; tag_west = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hk" = (/obj/machinery/atmospherics/pipe/tank/carbon_dioxide{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"hm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"hn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"ho" = (/obj/machinery/chemical_dispenser/full,/obj/structure/sign/warning/nosmoking_2{pixel_x = -32},/obj/effect/floor_decal/corner/beige{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hp" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hq" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hr" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/door/window/westright,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hs" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"ht" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hu" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Emergency Storage"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"hw" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"hx" = (/obj/item/weapon/weldpack,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"hy" = (/obj/structure/closet/toolcloset,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hz" = (/obj/structure/table/reinforced,/obj/item/clothing/gloves/sterile/latex,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"hA" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hB" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hC" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 6; tag_north = 1; tag_south = 0; tag_west = 2},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hD" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hE" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 8},/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"hF" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/machinery/recharge_station,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"hG" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
-"hH" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/beige{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hI" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hJ" = (/obj/effect/floor_decal/corner/beige,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hK" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hL" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hM" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hN" = (/obj/item/clothing/glasses/meson,/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"hO" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"hP" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hQ" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hR" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hS" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hT" = (/obj/machinery/status_display{pixel_y = -32},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hU" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"hV" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/corner/beige/full,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hW" = (/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/structure/table/glass,/obj/effect/floor_decal/corner/beige{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hX" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/corner/beige/full{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
-"hY" = (/obj/machinery/radiocarbon_spectrometer,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/analysis)
-"hZ" = (/obj/structure/table/glass,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/analysis)
-"ia" = (/obj/machinery/radiocarbon_spectrometer,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/analysis)
-"ib" = (/obj/machinery/radiocarbon_spectrometer,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/analysis)
-"ic" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/obj/item/clothing/accessory/armband/science,/obj/item/clothing/glasses/science,/obj/item/device/suit_cooling_unit,/obj/item/weapon/extinguisher,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
-"id" = (/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/outpost/research/xenoarcheology)
-"ie" = (/turf/simulated/wall/dungeon,/area/surface/cave/unexplored/normal)
-"if" = (/obj/item/stack/flag/green,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
-"ig" = (/obj/item/stack/flag/red{amount = 1},/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
-"ih" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/tool/crowbar,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
-"ii" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 8},/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"ij" = (/obj/structure/cable/heavyduty{icon_state = "2-8"},/obj/structure/cable/heavyduty{icon_state = "2-4"},/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
-"ik" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/obj/structure/cable/heavyduty{icon_state = "4-8"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"il" = (/obj/structure/cable/heavyduty{icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
-"im" = (/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"in" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
-"io" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
-"ip" = (/obj/structure/cable/ender{icon_state = "1-2"; id = "surface_cave"},/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
-"ir" = (/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"is" = (/obj/machinery/mining/drill,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"it" = (/obj/vehicle/train/engine,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"iu" = (/obj/vehicle/train/trolley,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"iw" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/heavyduty{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"ix" = (/obj/structure/cable/heavyduty{icon_state = "4-8"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"iz" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
-"iA" = (/obj/effect/step_trigger/teleporter/mine/from_mining,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
-"iB" = (/obj/effect/step_trigger/teleporter/mine/from_mining,/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/normal)
-
-(1,1,1) = {"
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxcwcwcwcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyczczczaaaaaaaaaaaaaaaaaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcxcXcZcYcxababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcxcZcZcZcxababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsacabababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababefdtegdtefabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacdsdsdsacacababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacehcZcZcZexacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacacababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacaccZcZcZacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsabacababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacgoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgoacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacacababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacacababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacabababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacabababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacabababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacabababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsabababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababababababababababababababababababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsabababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsabababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgoacacacgoababababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabacacacacababababababababababababacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababacacacacabababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababacacacacabababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababacacacacababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababacacacacababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgoacacgoabacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacababgoacacacabababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacgoabababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacabacabababababababababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacababababacacacacacacacacacacacacabababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacababababababababacacacacacacacacacacacabababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacababababababababababababacacacacacacacacacacababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacabababababababababababababababacacacacacacacacacabababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacababababababababababababababababacacacacacacacacacacacababababababababababababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababababababababababababababababababacacacacacacababacacacabababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababababababababababababababababababababacacacacacacacababacacacacababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacabababababababababababababababababababacacacacgoacacacabababacacacacababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababacacacabababababababababababababababababacacacacacabacacacababababacacacacacacababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacababababababababacacababababababababababababababababacacacacababacacacabababababacacacacacacacababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacababababababababababababacacababababababababababababababacacacacacababacacacababababababababacacacacacacacababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababababababababababababababababababababababababababababacacacacabababacacacababababababababababacacacacacacacabacgoababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacababababababababababababababababababababababababababababababacacacacacabababacacacababababababababababababacacacacacacacacababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababacacacacacabababacacacabababababababababababababababacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababacacacacababababacacacabababababababababababababababababacacgoacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababacacacacabababacacacacababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababacacacacabababacacacacabababababababababababababababababababababacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababacacacacabababacacacacacabababababababababababababababababacacabacacababababacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababacacacacabababacacacacacababababababababababababababababababacacacacababababababababacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababacacacacabababacacacacacabababababababababababababababababababacacacababababababababababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababacacacacabababacacacacacababababababababababababababababababacacacacacababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababacacacabababababababababababababababababababacacacacabacabababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacacacabababababababababababababababababababacacacababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacacababababababababababababababababababababacacacabababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsabacababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacacababababababababababababababababababababacacababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacacababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababacacabababababababababababababababababababacacacababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacabababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababacacabababababababababababababababababababacacabababababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacabacacababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacabababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacgoacacabababababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacabababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabacacababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
-aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabacacabababababababababababababababababababababababababababababababababababababacgrdsdsdsababababababababaa
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafigaeaeaeaeaeaeaeaeaeaeafafafafafigaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeigafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeafafafaeaeaeafafafaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeafafaeaeafafaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeafagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeafafaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafifaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeifafafafafaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeafafafafaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeafafafafaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafgLgLgLafaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafaeaeaeaeafafafaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafgLgLgLafafaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafifaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafgLgLgLafafaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeafafaeaeafgLgLgLafafaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeafafafaeaeafafafafafaeaeaeaegLgLgLafafaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeafafaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeafafafaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafifaeaeaeafafafafafafafafafafafafafafaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeifafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeafifaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafifaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeafifafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeahaiaiajajaiahafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeafafafafafahakaiajalakahafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeafafafafafafahamanaoamamahafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeapaqapapapaqarapasatauavawaxavavaxayayayayayafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeapapazaAaBaCaDaEapaFaGaHavaIaJaKaLaMaNaOaPaQayayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafafaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeapaRaSaTaUaTaVaWapanaXamavaYaZbabbbcbdbebfbgbhayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafafaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeapbiaTbjbkblaTbmbnbobpbqbrbsbtbubububvbwbxbybzayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeafaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapbAaTbBbCbDbEbFbGbHbIbJbKbLbMbNbObNaNbPbQbRbSayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapbTbUbVbWbXbYbZcacbcccdavcebMcfcgchaNayayayayayafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapapapapapapapapapcicjckavclcmcncncocpcqcrcsctcuafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaecvdDdVdJeydDcvafafafaecAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcuafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegpimimimimimgqafafafaecAdadbdccEdddedfandgdhdiaxdjdkdkdldmdndodpdqdrcuafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimimgtafafaeaecAdudvdwdxdydzdAamandBandCdGdEdFihdHdIcucucucucugMafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimimgtafafafaecAdKdLdMdNdOdPdQcIdRdSdTaxdUhzdWdXdYdZeaebecedeegMafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsirisirimitgtafafafeicAdNdNcAejekelemeneodSdTbKepbNbNeqereseteueveweegMafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimiugtafafafidanezeAaneBeBeCeDeEeFdSdTaxeGeHeIeJeKeLeMeNeOePeegMafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsirisirimiugtafafafideQeReSeTeUeVeWeXeYeZfafbfcfdfefffgfhfifjfjfjfjfjgMafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimiugtafafafidamfkflamfmfnfofpfqfrfsftaxfudkdkfvfwfxfyfzfAfBfCafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsirisirimimgtafafafeifDfDfDfDfEfFfGfHfDfIfJfKfLfMfNfOfPfQesfRfSfTfUfCafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimimgtafafafaffDfVfWfXfYfZgagbgcgdgegdavgfggghgibNgjgkglgmgnfCafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeiiimimiwixixikijilililgugvgwgwgxgygzgAgdgBgCgDgEgFgGgFgFgHgIgJgKgKgKgKafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaecvizizcvizizcvinafafaffDgNgwgOgPgQgRgSgdgTgUgVgdgWgXgYgZhahbhchdhehfgKaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafaffDhggwgOhhhihjhkgdhlhmhngdhohphqhrhshthuhvhwhxgKaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafaffDhygwiohAhBhChDgdhEhFhGgdhHhIhJhKhLhMhLhdhNhOgKaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafaffDfDhPhQhRhShThUfDgEgEgEgJhVhWhXhYhZiaibhdicgKgKaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafafaefDfDfDfDfDfDfDfDaeaeaegJgJgFgJgJgFgJgJgKgKgKaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeipafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
-adadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadieiAiAiAadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadiBiBiBadadadadadadadadad
-"}
+"aa" = (/turf/unsimulated/wall/planetary/sif,/area/surface/cave/unexplored/deep)
+"ab" = (/turf/simulated/mineral/sif,/area/surface/cave/unexplored/deep)
+"ac" = (/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/deep)
+"ad" = (/turf/unsimulated/wall/planetary/sif,/area/surface/cave/unexplored/normal)
+"ae" = (/turf/simulated/mineral/sif,/area/surface/cave/unexplored/normal)
+"af" = (/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
+"ag" = (/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/unexplored/normal)
+"ah" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
+"ai" = (/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
+"aj" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
+"ak" = (/obj/machinery/conveyor_switch{id = "anolongstorage"; name = "conveyor switch"; pixel_x = 0; pixel_y = 0; req_access = list(65)},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
+"al" = (/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
+"am" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology)
+"an" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
+"ao" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1397; master_tag = "xenoarch2_airlock_control"; name = "Xenoarch Access Button"; pixel_x = 24; pixel_y = 0; req_access = list(47)},/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1397; icon_state = "door_locked"; id_tag = "xenoarch2_airlock_exterior"; locked = 1; name = "Research Exterior Airlock"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"ap" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aq" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"ar" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"as" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/status_display{pixel_x = -32},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"at" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"au" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/computer/guestpass{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"av" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/anomaly)
+"aw" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"ax" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"ay" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"az" = (/obj/effect/floor_decal/corner/purple/full{dir = 8},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aA" = (/obj/structure/closet/excavation,/obj/effect/floor_decal/corner/purple{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aB" = (/obj/structure/closet/excavation,/obj/effect/floor_decal/corner/purple{dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aC" = (/obj/structure/closet/excavation,/obj/effect/floor_decal/corner/purple{dir = 5},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aD" = (/obj/machinery/conveyor_switch{id = "anolongstorage"; name = "conveyor switch"; pixel_x = 0; pixel_y = 0; req_access = list(65)},/obj/effect/floor_decal/corner/purple{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aE" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aF" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Airlock 2"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"aG" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"aH" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"aI" = (/obj/machinery/conveyor{dir = 2; id = "anolongstorage"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"aJ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/conveyor_switch{id = "anolongstorage"; name = "conveyor switch"; pixel_x = 0; pixel_y = 0; req_access = list(65)},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/anomaly)
+"aK" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"aL" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"aM" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"aN" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"aO" = (/obj/structure/disposaloutlet{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"aP" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"aQ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/table/rack,/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"aR" = (/obj/effect/floor_decal/corner/purple/full{dir = 8},/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aS" = (/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aT" = (/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aU" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aV" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aW" = (/obj/machinery/disposal/deliveryChute{dir = 1},/obj/effect/floor_decal/industrial/warning,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"aX" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1397; icon_state = "door_locked"; id_tag = "xenoarch2_airlock_interior"; locked = 1; name = "Research Interior Airlock"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1397; master_tag = "xenoarch2_airlock_control"; name = "Research Access Button"; pixel_x = 26; pixel_y = 6; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"aY" = (/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/obj/effect/floor_decal/corner/purple{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"aZ" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"ba" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bb" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bc" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bd" = (/obj/structure/sign/warning/nosmoking_2,/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"be" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bf" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bg" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bh" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/closet/crate,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bi" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/status_display{pixel_x = -32},/obj/machinery/floodlight,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bk" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bl" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bm" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bn" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bo" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/corner/purple{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"bp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/embedded_controller/radio/airlock/access_controller{frequency = 1397; id_tag = "xenoarch2_airlock_control"; name = "Research Access Console"; pixel_x = 26; pixel_y = 26; tag_exterior_door = "xenoarch2_airlock_exterior"; tag_interior_door = "xenoarch2_airlock_interior"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"bq" = (/obj/machinery/shower{pixel_y = 3},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology)
+"br" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bs" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bt" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Long Term Storage"; req_access = list(65)},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bw" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bx" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"by" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bz" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bA" = (/obj/machinery/floodlight,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bD" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bE" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bF" = (/obj/effect/floor_decal/corner/purple{dir = 8},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bG" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_research{name = "Expedition Prep"; req_access = list(65)},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"bI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"bJ" = (/obj/machinery/space_heater,/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"bK" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bL" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bN" = (/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bO" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"bP" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/structure/anomaly_container,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bQ" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/light/small,/obj/structure/anomaly_container,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bR" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Long Term Storage"; dir = 1},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bS" = (/obj/effect/floor_decal/industrial/outline/grey,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/structure/anomaly_container,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/longtermstorage)
+"bT" = (/obj/effect/floor_decal/corner/purple/full,/obj/machinery/suspension_gen,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bU" = (/obj/machinery/suspension_gen,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bV" = (/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bW" = (/obj/item/weapon/storage/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/obj/structure/table/steel,/obj/effect/floor_decal/corner/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Expedition Prep"; dir = 1},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bX" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced,/obj/machinery/door/window/northleft,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bY" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/structure/window/reinforced,/obj/machinery/door/window/northright,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"bZ" = (/obj/structure/table/steel,/obj/item/device/suit_cooling_unit,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue,/obj/item/device/suit_cooling_unit,/obj/item/device/gps/science,/obj/item/device/gps/science,/obj/item/device/gps/science,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"ca" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/exp_prep)
+"cb" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"cc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"cd" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"ce" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/power/emitter{anchored = 1; dir = 1; state = 2},/obj/structure/window/reinforced,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cf" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cg" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 2; tag_south = 0; tag_west = 3},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"ch" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"ci" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/sterile/latex,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"cj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"ck" = (/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Hallway 2"; dir = 8},/obj/effect/floor_decal/corner/purple{dir = 4},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"cl" = (/obj/effect/floor_decal/corner/purple{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Anomalous Materials 2"; dir = 4},/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cn" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/portable_atmospherics/powered/scrubber/huge,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/anomaly)
+"co" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cp" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/purple{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cq" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"cr" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"cs" = (/obj/structure/bed,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"ct" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"cu" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"cv" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/cave)
+"cw" = (/obj/effect/step_trigger/teleporter/wild/to_wild,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
+"cx" = (/turf/simulated/shuttle/wall/voidcraft,/area/surface/outpost/wall/checkpoint)
+"cy" = (/obj/structure/showcase/sign{pixel_y = -5},/turf/simulated/wall/dungeon,/area/surface/cave/unexplored/deep)
+"cz" = (/obj/effect/step_trigger/teleporter/wild/to_wild,/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/deep)
+"cA" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/medical)
+"cB" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"cC" = (/obj/machinery/sleep_console,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"cD" = (/obj/structure/table/rack,/obj/machinery/firealarm{pixel_y = 24},/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/firstaid/regular,/obj/random/medical/lite,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"cE" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/medical)
+"cF" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/item/clothing/suit/storage/hooded/wintercoat/science,/obj/effect/floor_decal/corner/purple/full{dir = 8},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"cG" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/machinery/newscaster{pixel_y = 30},/obj/item/clothing/suit/storage/hooded/wintercoat/science,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"cH" = (/obj/effect/floor_decal/corner/purple/full{dir = 1},/obj/structure/bookcase/manuals/xenoarchaeology,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"cI" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology)
+"cJ" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/sterile/latex,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"cK" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"cL" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"cM" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/glass_research{name = "Anomalous Materials"; req_access = list(65)},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cN" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cO" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cP" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cQ" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cR" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cS" = (/obj/machinery/atmospherics/valve/digital/open{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"cT" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Isolation Room 1"; req_access = list(65)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"cU" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"cV" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"cW" = (/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"cX" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
+"cY" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
+"cZ" = (/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
+"da" = (/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"db" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dc" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dd" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"de" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"df" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"dg" = (/obj/structure/table/rack,/obj/item/clothing/suit/bio_suit/anomaly,/obj/item/clothing/head/bio_hood/anomaly,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/obj/item/clothing/gloves/sterile/latex,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"dh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"di" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/purple,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"dj" = (/obj/structure/table/standard,/obj/item/clothing/head/welding,/obj/item/weapon/weldingtool,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dk" = (/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dl" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dm" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dn" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"do" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"dp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/obj/machinery/light,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"dq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one"; dir = 1; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"dr" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Isolation Cell 1"; dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_a)
+"ds" = (/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/deep)
+"dt" = (/obj/machinery/door/airlock/voidcraft{name = "Wilderness Containment"},/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
+"du" = (/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"dz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"dA" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/structure/table/standard,/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/effect/floor_decal/corner/purple{dir = 6},/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/obj/item/weapon/storage/box/cups,/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"dB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_research{name = "Outpost Hallway"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"dC" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dD" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/machinery/floodlight,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"dE" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dF" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dG" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/tool/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dH" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dI" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/button/remote/blast_door{id = "xenoarch_cell2"; name = "Cell 2"; pixel_x = 26; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dJ" = (/obj/structure/table/steel,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/machinery/cell_charger,/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"dK" = (/obj/machinery/computer/crew,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/table/glass,/obj/machinery/recharger,/obj/item/device/defib_kit/loaded,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch First-Aid"; dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dM" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/o2{pixel_x = 0; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/medical)
+"dN" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/medical)
+"dO" = (/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"dP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/bed/chair/office/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"dQ" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/purple{dir = 6},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/device/taperecorder,/obj/item/weapon/folder,/obj/item/weapon/stamp,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"dR" = (/obj/effect/floor_decal/corner/purple{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"dS" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"dT" = (/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"dU" = (/obj/structure/table/reinforced,/obj/item/device/flashlight/lamp,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dV" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/obj/item/weapon/cell/high,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"dW" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dX" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dY" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"dZ" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"ea" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"eb" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"ec" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"ed" = (/obj/machinery/artifact_analyser,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"ee" = (/obj/machinery/door/blast/regular{id = "xenoarch_cell2"},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"ef" = (/turf/simulated/shuttle/wall/voidcraft/hard_corner,/area/surface/outpost/wall/checkpoint)
+"eg" = (/obj/structure/showcase/sign{pixel_y = -5},/turf/simulated/shuttle/wall/voidcraft,/area/surface/outpost/wall/checkpoint)
+"eh" = (/obj/item/weapon/banner/nt,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
+"ei" = (/obj/item/weapon/banner/nt,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
+"ej" = (/obj/structure/sign/greencross{desc = "White cross in a green field, you can get medical aid here."; name = "First-Aid"},/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/medical)
+"ek" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"el" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"em" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/effect/floor_decal/corner/purple{dir = 4},/obj/effect/floor_decal/industrial/warning,/obj/item/device/camera_film{pixel_x = 2; pixel_y = 2},/obj/item/device/camera,/obj/machinery/recharger,/obj/item/weapon/tape_roll,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Crew Area"; dir = 8},/turf/simulated/floor/tiled/neutral,/area/surface/outpost/research/xenoarcheology)
+"en" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology)
+"eo" = (/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"ep" = (/obj/structure/table/reinforced,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two","isolation_three"); req_access = null; req_one_access = null},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"eq" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"er" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"es" = (/obj/machinery/atmospherics/valve/digital/open{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"et" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Isolation Room 2"; req_access = list(65)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"eu" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"ev" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"ew" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"ex" = (/obj/machinery/light/small{dir = 1},/obj/item/weapon/banner/virgov,/turf/simulated/shuttle/floor/voidcraft/external,/area/surface/outpost/wall/checkpoint)
+"ey" = (/obj/structure/table/steel,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wrench,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"ez" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"eA" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Airlock 1"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"eB" = (/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eE" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/corner/purple{dir = 5},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eF" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/purple{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eG" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/device/camera,/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/corner/purple{dir = 9},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"eH" = (/obj/structure/table/reinforced,/obj/item/weapon/folder,/obj/item/weapon/pen,/obj/item/weapon/tape_roll,/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"eI" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/effect/floor_decal/industrial/warning/full,/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"eJ" = (/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"eK" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"eL" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"eM" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"eN" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/obj/machinery/light,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"eO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two"; dir = 1; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"eP" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Isolation Cell 2"; dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"eQ" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xenoarch1_airlock_exterior"; locked = 1; name = "Research Exterior Airlock"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "xenoarch1_airlock_control"; name = "Xenoarch Access Button"; pixel_x = 0; pixel_y = -24; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"eR" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/effect/floor_decal/rust/part_rusted1,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"eS" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"eT" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xenoarch1_airlock_interior"; locked = 1; name = "Research Interior Airlock"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "xenoarch1_airlock_control"; name = "Research Access Button"; pixel_x = -6; pixel_y = -26; req_access = null},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"eU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "xenoarch1_airlock_control"; name = "Research Access Console"; pixel_x = -26; pixel_y = -26; tag_exterior_door = "xenoarch1_airlock_exterior"; tag_interior_door = "xenoarch1_airlock_interior"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eV" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eW" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eX" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eY" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"eZ" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fa" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fb" = (/obj/effect/floor_decal/corner/purple{dir = 6},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Xenoarch Hallway 1"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fc" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fd" = (/obj/machinery/artifact_harvester,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/bluegrid,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fe" = (/obj/item/weapon/anobattery{pixel_x = -6; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = -2; pixel_y = -2},/obj/item/weapon/anobattery{pixel_x = 2; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = 6; pixel_y = 6},/obj/structure/table/steel,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"ff" = (/obj/item/weapon/anodevice{pixel_x = 3; pixel_y = 3},/obj/item/weapon/anodevice,/obj/structure/table/steel,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fg" = (/obj/machinery/artifact_harvester,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/bluegrid,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fh" = (/obj/effect/floor_decal/industrial/warning/full,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fi" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fj" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/isolation_b)
+"fk" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"fl" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/status_display{pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology)
+"fm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/purple{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fn" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/corner/purple{dir = 8},/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/noticeboard/anomaly{icon_state = "nboard05"; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fp" = (/obj/effect/floor_decal/corner/purple,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fq" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/corner/purple{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fr" = (/obj/effect/floor_decal/corner/purple{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fs" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"ft" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/corner/purple{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fu" = (/obj/machinery/artifact_scanpad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/bluegrid,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fv" = (/obj/machinery/artifact_scanpad,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/bluegrid,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fx" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fy" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fz" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fA" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fB" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fC" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fD" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/smes)
+"fE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/smes)
+"fF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/smes)
+"fG" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Generator Room"; req_one_access = list(12,47)},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"fH" = (/obj/structure/sign/warning/high_voltage,/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/smes)
+"fI" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/purple{dir = 9},/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fJ" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fK" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
+"fL" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/glass_research{name = "Anomalous Materials"; req_access = list(65)},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fM" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fN" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fO" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fP" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fR" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Isolation Room 3"; req_access = list(65)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fS" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fT" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fU" = (/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"fV" = (/obj/machinery/power/smes/buildable/outpost_substation{charge = 500000; input_attempt = 1; input_level = 150000; output_level = 150000; RCon_tag = "Outpost - Xenoarch"},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"fW" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/structure/anomaly_container,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"fX" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/steel,/obj/random/tool,/obj/random/tool,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"fY" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/steel,/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"fZ" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/structure/anomaly_container,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"ga" = (/obj/machinery/atmospherics/binary/pump/on{dir = 2; target_pressure = 200},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gb" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/powercell,/obj/random/maintenance/clean,/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gc" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/smes)
+"gd" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/restroom)
+"ge" = (/obj/machinery/door/airlock{name = "Research Restroom"},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"gf" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Anomalous Materials 1"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/corner/purple{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"gg" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"gh" = (/obj/machinery/atmospherics/unary/heater{dir = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"gi" = (/obj/machinery/atmospherics/unary/freezer{dir = 1; icon_state = "freezer"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"gj" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/corner/purple,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/structure/anomaly_container,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"gk" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"gl" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/obj/machinery/light,/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"gm" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one"; dir = 1; pixel_x = 0; pixel_y = -22},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"gn" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Isolation Cell 3"; dir = 1},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoarcheology/isolation_c)
+"go" = (/obj/item/stack/flag/green,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/deep)
+"gp" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"gq" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"gr" = (/obj/item/stack/flag/red{amount = 1},/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/deep)
+"gs" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 8},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"gt" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"gu" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable/heavyduty{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gv" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gw" = (/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gx" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gy" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gz" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gA" = (/obj/structure/table/steel,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gB" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"gC" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"gD" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"gE" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/restroom)
+"gF" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/analysis)
+"gG" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_research{name = "Sample Preparation"; req_access = list(65)},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"gH" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_research{name = "Sample Preparation"; req_access = list(65)},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"gI" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/analysis)
+"gJ" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/analysis)
+"gK" = (/turf/simulated/wall/r_wall,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"gL" = (/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/normal)
+"gM" = (/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
+"gN" = (/obj/structure/cable,/obj/machinery/power/port_gen/pacman,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gO" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gP" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gQ" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gR" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 7; tag_north = 1; tag_south = 2; tag_west = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gS" = (/obj/machinery/atmospherics/pipe/tank/nitrous_oxide{dir = 8},/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"gT" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"gU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"gV" = (/obj/structure/table/standard,/obj/item/weapon/towel{color = "#800080"; name = "purple towel"},/obj/item/weapon/towel{color = "#800080"; name = "purple towel"},/obj/item/weapon/towel{color = "#800080"; name = "purple towel"},/obj/random/soap,/obj/random/soap,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"gW" = (/obj/item/weapon/reagent_containers/glass/bottle/toxin,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric{name = "beaker 'sulphuric acid'"},/obj/structure/table/glass,/obj/effect/floor_decal/corner/beige{dir = 9},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"gX" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"gY" = (/obj/effect/floor_decal/corner/beige{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"gZ" = (/obj/effect/floor_decal/corner/lime{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/research_outpost{c_tag = "OPR - Sample Preparation"; dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"ha" = (/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hb" = (/obj/structure/reagent_dispensers/coolanttank,/obj/effect/floor_decal/corner/lime{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hc" = (/obj/structure/reagent_dispensers/coolanttank,/obj/effect/floor_decal/corner/lime{dir = 5},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hd" = (/turf/simulated/wall,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"he" = (/obj/machinery/space_heater,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"hf" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"hg" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 50},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hh" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/portable_atmospherics/powered/pump/filled{pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hi" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hj" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 5; tag_north = 1; tag_south = 2; tag_west = 0},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hk" = (/obj/machinery/atmospherics/pipe/tank/carbon_dioxide{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"hm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"hn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"ho" = (/obj/machinery/chemical_dispenser/full,/obj/structure/sign/warning/nosmoking_2{pixel_x = -32},/obj/effect/floor_decal/corner/beige{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hp" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hq" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hr" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/door/window/westright,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hs" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"ht" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hu" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Emergency Storage"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"hw" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"hx" = (/obj/item/weapon/weldpack,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"hy" = (/obj/structure/closet/toolcloset,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hz" = (/obj/structure/table/reinforced,/obj/item/clothing/gloves/sterile/latex,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"hA" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/obj/machinery/meter,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hB" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hC" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 6; tag_north = 1; tag_south = 0; tag_west = 2},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hD" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hE" = (/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 8},/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"hF" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/machinery/recharge_station,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"hG" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/research/xenoarcheology/restroom)
+"hH" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/beige{dir = 9},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hI" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hJ" = (/obj/effect/floor_decal/corner/beige,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hK" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hL" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hM" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hN" = (/obj/item/clothing/glasses/meson,/obj/structure/closet/hydrant{pixel_x = -32},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"hO" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"hP" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hQ" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hR" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hS" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hT" = (/obj/machinery/status_display{pixel_y = -32},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hU" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"hV" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/corner/beige/full,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hW" = (/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/structure/table/glass,/obj/effect/floor_decal/corner/beige{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hX" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/corner/beige/full{dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/analysis)
+"hY" = (/obj/machinery/radiocarbon_spectrometer,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/analysis)
+"hZ" = (/obj/structure/table/glass,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/analysis)
+"ia" = (/obj/machinery/radiocarbon_spectrometer,/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/analysis)
+"ib" = (/obj/machinery/radiocarbon_spectrometer,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/surface/outpost/research/xenoarcheology/analysis)
+"ic" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/obj/item/clothing/accessory/armband/science,/obj/item/clothing/glasses/science,/obj/item/device/suit_cooling_unit,/obj/item/weapon/extinguisher,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/emergencystorage)
+"id" = (/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/outpost/research/xenoarcheology)
+"ie" = (/turf/simulated/wall/dungeon,/area/surface/cave/unexplored/normal)
+"if" = (/obj/item/stack/flag/green,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
+"ig" = (/obj/item/stack/flag/red{amount = 1},/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
+"ih" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/tool/crowbar,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology/anomaly)
+"ii" = (/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 8},/obj/machinery/light/small,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"ij" = (/obj/structure/cable/heavyduty{icon_state = "2-8"},/obj/structure/cable/heavyduty{icon_state = "2-4"},/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
+"ik" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning/dust{icon_state = "warning_dust"; dir = 4},/obj/structure/cable/heavyduty{icon_state = "4-8"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"il" = (/obj/structure/cable/heavyduty{icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
+"im" = (/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"in" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
+"io" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/surface/outpost/research/xenoarcheology/smes)
+"ip" = (/obj/structure/cable/ender{icon_state = "1-2"; id = "surface_cave"},/turf/simulated/floor/plating{icon_state = "asteroidplating2"},/area/surface/cave/explored/normal)
+"ir" = (/obj/machinery/mining/brace,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"is" = (/obj/machinery/mining/drill,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"it" = (/obj/vehicle/train/engine,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"iu" = (/obj/vehicle/train/trolley,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"iw" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/heavyduty{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"ix" = (/obj/structure/cable/heavyduty{icon_state = "4-8"},/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"iz" = (/obj/effect/floor_decal/industrial/warning/dust,/obj/structure/ore_box,/turf/simulated/floor/tiled/asteroid_steel,/area/surface/outpost/mining_main/cave)
+"iA" = (/obj/effect/step_trigger/teleporter/mine/from_mining,/turf/simulated/mineral/floor/ignore_mapgen/sif,/area/surface/cave/explored/normal)
+"iB" = (/obj/effect/step_trigger/teleporter/mine/from_mining,/turf/simulated/floor/water{outdoors = 0},/area/surface/cave/explored/normal)
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacxcwcwcwcxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyczczczaaaaaaaaaaaaaaaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcxcXcZcYcxababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcxcZcZcZcxababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsacabababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababefdtegdtefabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacdsdsdsacacababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacehcZcZcZexacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacacababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacaccZcZcZacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsabacababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacgoabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgoacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacacababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacacababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacabababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacabababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacabababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacabababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsabababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababababababababababababababababababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsabababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsabababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgoacacacgoababababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabacacacacababababababababababababacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababacacacacabababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababacacacacabababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababacacacacababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababacacacacababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgoacacgoabacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacababgoacacacabababababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacgoabababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacabacabababababababababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacababababacacacacacacacacacacacacabababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacababababababababacacacacacacacacacacacabababababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacababababababababababababacacacacacacacacacacababababababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacabababababababababababababababacacacacacacacacacabababababababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacababababababababababababababababacacacacacacacacacacacababababababababababababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababababababababababababababababababacacacacacacababacacacabababababababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababababababababababababababababababababacacacacacacacababacacacacababababababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacacabababababababababababababababababababacacacacgoacacacabababacacacacababababababababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababacacacabababababababababababababababababacacacacacabacacacababababacacacacacacababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacababababababababacacababababababababababababababababacacacacababacacacabababababacacacacacacacababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacababababababababababababacacababababababababababababababacacacacacababacacacababababababababacacacacacacacababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababababababababababababababababababababababababababababacacacacabababacacacababababababababababacacacacacacacabacgoababababacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacababababababababababababababababababababababababababababababacacacacacabababacacacababababababababababababacacacacacacacacababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababacacacacacabababacacacabababababababababababababababacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacacababababababababababababababababababababababababababababababababacacacacababababacacacabababababababababababababababababacacgoacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababacacacacabababacacacacababababababababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababacacacacabababacacacacabababababababababababababababababababababacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababacacacacabababacacacacacabababababababababababababababababacacabacacababababacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacacabababababababababababababababababababababababababababababababababababababababababacacacacabababacacacacacababababababababababababababababababacacacacababababababababacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababacacacacabababacacacacacabababababababababababababababababababacacacababababababababababababacacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababacacacacabababacacacacacababababababababababababababababababacacacacacababababababababababababababacacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababacacacabababababababababababababababababababacacacacabacabababababababababababababababababacacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacacacabababababababababababababababababababacacacababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacacababababababababababababababababababababacacacabababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsabacababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacacababababababababababababababababababababacacababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacacababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababacacabababababababababababababababababababacacacababababababababababababababababababababababababababababababababacacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsacabababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacababacacabababababababababababababababababababacacabababababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacabacacababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacababababababababababababababababababacacacabababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacababababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacabacacabababababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacgoacacabababababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababacacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacabababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacacababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacacababababababababababababababacacacababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacabababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacacababababababababababababababacacabababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabacacababababababababababababababababababababababababababababababababababababababababdsdsdsababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacacacacababababababababababababababacacababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacacabacacabababababababababababababababababababababababababababababababababababababacgrdsdsdsababababababababaa
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafigaeaeaeaeaeaeaeaeaeaeafafafafafigaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeigafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeafafafaeaeaeafafafaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeafafaeaeafafaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeafagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeafafaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafifaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeifafafafafaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeafafafafaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeafafafafaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafgLgLgLafaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafaeaeaeaeafafafaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafgLgLgLafafaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafifaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafgLgLgLafafaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeafafaeaeafgLgLgLafafaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeafafafaeaeafafafafafaeaeaeaegLgLgLafafaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeafafaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeafafafaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafifaeaeaeafafafafafafafafafafafafafafaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeifafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeafifaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafifaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeafifafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafifaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeafafafafafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeaeaeaeaeaeaeahaiaiajajaiahafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeaeafafafafafahakaiajalakahafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeaeaeafafafafafafahamanaoamamahafafafafafafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeaeaeapaqapapapaqarapasatauavawaxavavaxayayayayayafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafaeapapazaAaBaCaDaEapaFaGaHavaIaJaKaLaMaNaOaPaQayayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafafaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeapaRaSaTaUaTaVaWapanaXamavaYaZbabbbcbdbebfbgbhayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLafafaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafaeapbiaTbjbkblaTbmbnbobpbqbrbsbtbubububvbwbxbybzayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeafaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapbAaTbBbCbDbEbFbGbHbIbJbKbLbMbNbObNaNbPbQbRbSayafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapbTbUbVbWbXbYbZcacbcccdavcebMcfcgchaNayayayayayafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafaeapapapapapapapapapcicjckavclcmcncncocpcqcrcsctcuafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaecvdDdVdJeydDcvafafafaecAcBcCcDcEcFcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcuafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegpimimimimimgqafafafaecAdadbdccEdddedfandgdhdiaxdjdkdkdldmdndodpdqdrcuafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimimgtafafaeaecAdudvdwdxdydzdAamandBandCdGdEdFihdHdIcucucucucugMafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimimgtafafafaecAdKdLdMdNdOdPdQcIdRdSdTaxdUhzdWdXdYdZeaebecedeegMafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsirisirimitgtafafafeicAdNdNcAejekelemeneodSdTbKepbNbNeqereseteueveweegMafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimiugtafafafidanezeAaneBeBeCeDeEeFdSdTaxeGeHeIeJeKeLeMeNeOePeegMafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsirisirimiugtafafafideQeReSeTeUeVeWeXeYeZfafbfcfdfefffgfhfifjfjfjfjfjgMafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimiugtafafafidamfkflamfmfnfofpfqfrfsftaxfudkdkfvfwfxfyfzfAfBfCafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsirisirimimgtafafafeifDfDfDfDfEfFfGfHfDfIfJfKfLfMfNfOfPfQesfRfSfTfUfCafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegsimimimimimgtafafafaffDfVfWfXfYfZgagbgcgdgegdavgfggghgibNgjgkglgmgnfCafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeiiimimiwixixikijilililgugvgwgwgxgygzgAgdgBgCgDgEgFgGgFgFgHgIgJgKgKgKgKafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaecvizizcvizizcvinafafaffDgNgwgOgPgQgRgSgdgTgUgVgdgWgXgYgZhahbhchdhehfgKaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafaffDhggwgOhhhihjhkgdhlhmhngdhohphqhrhshthuhvhwhxgKaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafaffDhygwiohAhBhChDgdhEhFhGgdhHhIhJhKhLhMhLhdhNhOgKaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafaffDfDhPhQhRhShThUfDgEgEgEgJhVhWhXhYhZiaibhdicgKgKaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafgLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafafaefDfDfDfDfDfDfDfDaeaeaegJgJgFgJgJgFgJgJgKgKgKaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeinafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafafafafafafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeipafafafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaegLgLgLaeaeaeaeaeaeaeaead
+adadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadieiAiAiAadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadiBiBiBadadadadadadadadad
+"}
+
diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm
index f681cf1436..28d452ab52 100644
--- a/maps/southern_cross/southern_cross-6.dmm
+++ b/maps/southern_cross/southern_cross-6.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
"aa" = (/turf/space,/area/space)
"ab" = (/turf/unsimulated/wall,/area/space)
"ac" = (/obj/structure/window/reinforced,/turf/unsimulated/wall,/area/space)
@@ -2500,3 +2501,2507 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
+=======
+"aa" = (/turf/space,/area/space)
+"ab" = (/turf/unsimulated/wall,/area/space)
+"ac" = (/obj/structure/window/reinforced,/turf/unsimulated/wall,/area/space)
+"ad" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/wall,/area/space)
+"ae" = (/turf/simulated/floor/holofloor/desert,/area/holodeck/source_desert)
+"af" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_desert)
+"ag" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall,/area/space)
+"ah" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"ai" = (/obj/structure/flora/ausbushes/sparsegrass,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aj" = (/obj/structure/table/rack/holorack,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/head/pin/flower,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_theatre)
+"ak" = (/obj/effect/landmark/costume,/obj/structure/table/rack/holorack,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_theatre)
+"al" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"am" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom)
+"an" = (/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom)
+"ao" = (/turf/simulated/floor/holofloor/reinforced,/area/holodeck/source_wildlife)
+"ap" = (/turf/simulated/floor/holofloor/reinforced,/area/holodeck/source_plating)
+"aq" = (/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"ar" = (/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"as" = (/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"at" = (/obj/structure/holostool,/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"au" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"av" = (/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_emptycourt)
+"aw" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/wall,/area/space)
+"ax" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_desert)
+"ay" = (/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"az" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aA" = (/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_theatre)
+"aB" = (/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"aC" = (/obj/machinery/door/window/holowindoor{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom)
+"aD" = (/obj/effect/landmark{name = "Holocarp Spawn"},/turf/simulated/floor/holofloor/reinforced,/area/holodeck/source_wildlife)
+"aE" = (/obj/effect/floor_decal/corner/red{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"aF" = (/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"aG" = (/obj/effect/floor_decal/corner/red{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"aH" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/corner,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aI" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aJ" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aK" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 8},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aL" = (/obj/machinery/door/window/holowindoor{dir = 1; name = "Jury Box"},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 5},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"aM" = (/obj/structure/window/reinforced/holowindow{dir = 1},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"aN" = (/obj/structure/window/reinforced/holowindow{dir = 4},/obj/structure/window/reinforced/holowindow{dir = 1},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"aO" = (/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"aP" = (/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_courtroom)
+"aQ" = (/obj/machinery/door/window/holowindoor{dir = 8; name = "Red Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_emptycourt)
+"aR" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aS" = (/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
+"aT" = (/obj/effect/decal/cleanable/dirt,/obj/structure/holostool,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
+"aU" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
+"aV" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 10},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aW" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 6},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"aX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
+"aY" = (/obj/effect/floor_decal/spline/plain{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre)
+"aZ" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"ba" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet/corners{dir = 5},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bb" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/obj/structure/bed/chair/holochair{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bc" = (/obj/structure/window/reinforced/holowindow{dir = 4},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"bd" = (/obj/structure/window/reinforced/holowindow,/obj/machinery/door/window/holowindoor{dir = 1; name = "Court Reporter's Box"},/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"be" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"bf" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"bg" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"bh" = (/obj/structure/window/reinforced/holowindow,/obj/machinery/door/window/holowindoor{base_state = "right"; dir = 1; icon_state = "right"; name = "Witness Box"},/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_courtroom)
+"bi" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 4},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"bj" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
+"bk" = (/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre)
+"bl" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bm" = (/obj/effect/floor_decal/carpet{dir = 1},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bn" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bo" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bp" = (/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bq" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/structure/bed/chair/holochair{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"br" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bs" = (/obj/effect/floor_decal/carpet{dir = 1},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bt" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bu" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bv" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bw" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bx" = (/obj/structure/table/woodentable/holotable,/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"by" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bz" = (/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bA" = (/obj/structure/table/woodentable/holotable,/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bB" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"bC" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"bD" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{icon_state = "spline_fancy"; dir = 9},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"bE" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 5},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"bF" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/spline/fancy/wood,/turf/simulated/floor/holofloor/desert,/area/holodeck/source_picnicarea)
+"bG" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bH" = (/obj/structure/bed/chair/holochair{dir = 1},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bI" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bJ" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 1},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"bK" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"bL" = (/obj/structure/flora/ausbushes/brflowers,/obj/effect/floor_decal/spline/fancy/wood{dir = 1},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"bM" = (/obj/structure/flora/ausbushes/ywflowers,/obj/effect/floor_decal/spline/fancy/wood/corner{dir = 4},/turf/simulated/floor/holofloor/grass,/area/holodeck/source_picnicarea)
+"bN" = (/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bO" = (/obj/machinery/door/window/holowindoor{base_state = "right"; dir = 8; icon_state = "right"; name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_emptycourt)
+"bP" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bQ" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bR" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bS" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bT" = (/obj/structure/flora/pottedplant{icon_state = "plant-06"},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_theatre)
+"bU" = (/obj/effect/floor_decal/carpet{dir = 5},/obj/effect/floor_decal/carpet{dir = 6},/obj/effect/floor_decal/carpet{dir = 10},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_theatre)
+"bV" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bW" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/obj/structure/bed/chair/holochair{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bX" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bY" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"bZ" = (/obj/structure/bed/chair/holochair{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_courtroom)
+"ca" = (/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"cb" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"cc" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_emptycourt)
+"cd" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall,/area/space)
+"ce" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/wall,/area/space)
+"cf" = (/turf/simulated/floor/holofloor/space,/area/holodeck/source_space)
+"cg" = (/turf/simulated/floor/holofloor/snow,/area/holodeck/source_snowfield)
+"ch" = (/obj/structure/flora/pottedplant{icon_state = "plant-06"},/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall)
+"ci" = (/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall)
+"cj" = (/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"ck" = (/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"cl" = (/obj/structure/holohoop,/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"cm" = (/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"cn" = (/obj/structure/holostool,/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"co" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"cp" = (/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_basketball)
+"cq" = (/turf/simulated/floor/holofloor/beach/sand,/area/holodeck/source_beach)
+"cr" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"cs" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/under/color/red,/obj/item/weapon/holo/esword/red,/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"ct" = (/obj/structure/table/holotable,/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"cu" = (/obj/structure/holostool,/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"cv" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"cw" = (/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_thunderdomecourt)
+"cx" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"cy" = (/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"cz" = (/obj/effect/landmark{name = "Holocarp Spawn Random"},/turf/simulated/floor/holofloor/space,/area/holodeck/source_space)
+"cA" = (/obj/structure/flora/grass/both,/turf/simulated/floor/holofloor/snow,/area/holodeck/source_snowfield)
+"cB" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 9},/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"cC" = (/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 1},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"cD" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/obj/effect/floor_decal/carpet{dir = 6},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"cE" = (/obj/effect/floor_decal/corner/red{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"cF" = (/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"cG" = (/obj/effect/floor_decal/corner/red{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"cH" = (/obj/effect/overlay/palmtree_r,/turf/simulated/floor/holofloor/beach/sand,/area/holodeck/source_beach)
+"cI" = (/obj/effect/floor_decal/corner/red{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"cJ" = (/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"cK" = (/obj/effect/floor_decal/corner/red{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"cL" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"cM" = (/obj/structure/flora/tree/pine,/turf/simulated/floor/holofloor/snow,/area/holodeck/source_snowfield)
+"cN" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_meetinghall)
+"cO" = (/obj/machinery/door/window/holowindoor{dir = 8; name = "Red Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_basketball)
+"cP" = (/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/holofloor/beach/sand,/area/holodeck/source_beach)
+"cQ" = (/obj/effect/overlay/palmtree_l,/obj/effect/overlay/coconut,/turf/simulated/floor/holofloor/beach/sand,/area/holodeck/source_beach)
+"cR" = (/obj/machinery/door/window/holowindoor{dir = 8; name = "Red Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_thunderdomecourt)
+"cS" = (/obj/machinery/door/window/holowindoor{base_state = "right"; dir = 2; icon_state = "right"; name = "Red Corner"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"cT" = (/obj/structure/window/reinforced/holowindow,/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"cU" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/holofloor/snow,/area/holodeck/source_snowfield)
+"cV" = (/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_meetinghall)
+"cW" = (/turf/simulated/floor/holofloor/lino,/area/holodeck/source_meetinghall)
+"cX" = (/obj/effect/floor_decal/carpet{dir = 5},/obj/effect/floor_decal/carpet{dir = 6},/obj/effect/floor_decal/carpet{dir = 9},/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"cY" = (/obj/item/weapon/beach_ball,/turf/simulated/floor/holofloor/beach/sand,/area/holodeck/source_beach)
+"cZ" = (/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"da" = (/obj/effect/floor_decal/corner/red/full{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"db" = (/obj/effect/floor_decal/corner/red{dir = 5},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"dc" = (/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"dd" = (/obj/structure/window/reinforced/holowindow{dir = 8},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"de" = (/obj/structure/flora/grass/green,/turf/simulated/floor/holofloor/snow,/area/holodeck/source_snowfield)
+"df" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 9},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"dg" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 1},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"dh" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"di" = (/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dj" = (/obj/effect/floor_decal/corner/red{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dk" = (/obj/item/weapon/beach_ball/holoball,/obj/effect/floor_decal/corner/red{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dl" = (/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dm" = (/obj/item/weapon/inflatable_duck,/turf/simulated/floor/holofloor/beach/sand,/area/holodeck/source_beach)
+"dn" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red/full,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"do" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"dp" = (/obj/structure/window/reinforced/holowindow/disappearing,/obj/effect/floor_decal/corner/red/full{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"dq" = (/obj/effect/floor_decal/corner/red{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"dr" = (/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"ds" = (/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"dt" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"du" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 8},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"dv" = (/obj/structure/holostool,/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"dw" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"dx" = (/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dy" = (/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dz" = (/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dA" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green/full{dir = 8},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"dB" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green{dir = 5},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"dC" = (/obj/structure/window/reinforced/holowindow/disappearing{dir = 1},/obj/effect/floor_decal/corner/green/full{dir = 1},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"dD" = (/obj/effect/floor_decal/corner/blue/full,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"dE" = (/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"dF" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dG" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dH" = (/obj/effect/floor_decal/corner/green{dir = 9},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"dI" = (/obj/effect/floor_decal/corner/green{dir = 6},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"dJ" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"dK" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_boxingcourt)
+"dL" = (/obj/structure/flora/grass/brown,/turf/simulated/floor/holofloor/snow,/area/holodeck/source_snowfield)
+"dM" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 4},/turf/simulated/floor/holofloor/carpet{dir = 8},/area/holodeck/source_meetinghall)
+"dN" = (/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dO" = (/obj/machinery/door/window/holowindoor{base_state = "right"; dir = 8; icon_state = "right"; name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_basketball)
+"dP" = (/turf/unsimulated/beach/sand{icon_state = "beach"},/area/holodeck/source_beach)
+"dQ" = (/obj/machinery/door/window/holowindoor{base_state = "right"; dir = 8; icon_state = "right"; name = "Green Team"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_thunderdomecourt)
+"dR" = (/obj/structure/window/reinforced/holowindow{dir = 1},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"dS" = (/obj/machinery/door/window/holowindoor{dir = 1; name = "Green Corner"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"dT" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"dU" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet,/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"dV" = (/obj/structure/holostool,/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 6},/turf/simulated/floor/holofloor/carpet,/area/holodeck/source_meetinghall)
+"dW" = (/turf/simulated/floor/holofloor/beach/water,/area/holodeck/source_beach)
+"dX" = (/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dY" = (/obj/structure/holohoop{dir = 1},/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"dZ" = (/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_basketball)
+"ea" = (/obj/structure/table/holotable,/obj/effect/floor_decal/corner/green/full,/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"eb" = (/obj/structure/table/holotable,/obj/item/clothing/head/helmet/thunderdome,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/under/color/green,/obj/item/weapon/holo/esword/green,/obj/effect/floor_decal/corner/green{dir = 10},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"ec" = (/obj/structure/table/holotable,/obj/machinery/readybutton{pixel_y = 0},/obj/effect/floor_decal/corner/green/full{dir = 4},/turf/simulated/floor/holofloor/tiled,/area/holodeck/source_thunderdomecourt)
+"ed" = (/obj/structure/table/holotable,/obj/item/clothing/gloves/boxing/hologlove{icon_state = "boxinggreen"; item_state = "boxinggreen"},/turf/simulated/floor/holofloor/tiled/dark,/area/holodeck/source_boxingcourt)
+"ee" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/wall,/area/space)
+"ef" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/centcom/specops)
+"eg" = (/obj/structure/table/rack,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/obj/item/ammo_casing/rocket,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"eh" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT"; name = "Assault Weapon Storage"; p_open = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"ei" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"ej" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/obj/item/ammo_magazine/m762,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"ek" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/rocket,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"el" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/z8,/obj/item/weapon/gun/projectile/automatic/z8,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"em" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/obj/item/weapon/rig/ert/assetprotection,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"en" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"eo" = (/obj/structure/table/rack,/obj/item/weapon/melee/energy/sword/blue,/obj/item/weapon/melee/energy/sword/blue,/obj/item/weapon/melee/energy/sword/blue,/obj/item/weapon/melee/energy/sword/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"ep" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/l6_saw,/obj/item/ammo_magazine/m545saw,/obj/item/ammo_magazine/m545saw,/obj/item/ammo_magazine/m545saw,/obj/item/ammo_magazine/m545saw,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"eq" = (/obj/structure/table/rack,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"er" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"es" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/ammo_magazine/m9mmp90,/obj/item/weapon/gun/projectile/automatic/p90,/obj/item/weapon/gun/projectile/automatic/p90,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"et" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/xray,/obj/item/weapon/gun/energy/xray,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"eu" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"ev" = (/obj/machinery/deployable/barrier,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ew" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ex" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ey" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/gun/energy/ionrifle,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ez" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/ionrifle/pistol,/obj/item/weapon/gun/energy/ionrifle/pistol,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eA" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eB" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eC" = (/obj/machinery/teleport/hub,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eD" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eE" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eF" = (/obj/machinery/mech_recharger,/obj/mecha/combat/gygax/dark,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eG" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eH" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eI" = (/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eJ" = (/obj/structure/table/steel_reinforced,/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion,/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eK" = (/obj/structure/table/steel_reinforced,/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster,/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eL" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/weapon/storage/belt/security/tactical/bandolier,/obj/item/weapon/storage/belt/security/tactical/bandolier,/obj/item/weapon/storage/belt/security/tactical/bandolier,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eM" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"eN" = (/obj/item/weapon/bikehorn/rubberducky,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"eO" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"eP" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT"; name = "Assault Armor Storage"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"eQ" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/gun/launcher/grenade,/obj/item/weapon/gun/launcher/grenade,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eR" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/gun/energy/gun/nuclear,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eS" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunammo,/obj/item/weapon/storage/box/shotgunammo,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eT" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eU" = (/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/stunshells,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/obj/structure/window/reinforced,/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eV" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/taser,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/clothing/glasses/night{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/night{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/night{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/night{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/night{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/night{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/sunglasses/sechud/tactical{pixel_x = -2; pixel_y = -2},/obj/item/clothing/glasses/sunglasses/sechud/tactical{pixel_x = -2; pixel_y = -2},/obj/item/clothing/glasses/sunglasses/sechud/tactical{pixel_x = -2; pixel_y = -2},/obj/item/clothing/glasses/sunglasses/sechud/tactical{pixel_x = -2; pixel_y = -2},/obj/item/clothing/glasses/sunglasses/sechud/tactical{pixel_x = -2; pixel_y = -2},/obj/item/clothing/glasses/sunglasses/sechud/tactical{pixel_x = -2; pixel_y = -2},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eX" = (/obj/structure/closet/wardrobe/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eY" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"eZ" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fa" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fb" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fc" = (/obj/structure/table/standard,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/random/soap,/obj/random/soap,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"fd" = (/obj/structure/urinal{pixel_y = 32},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"fe" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/window/reinforced/tinted,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"ff" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"fg" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/obj/structure/window/reinforced/tinted,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"fh" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fi" = (/obj/structure/table/steel_reinforced,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fj" = (/obj/item/mecha_parts/mecha_equipment/teleporter,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/item/mecha_parts/mecha_tracking,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fk" = (/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/sleeper,/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fl" = (/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fm" = (/obj/structure/table/rack,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fn" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/emps{pixel_x = 4; pixel_y = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/box/frags,/obj/item/weapon/storage/box/smokes,/obj/item/weapon/storage/box/smokes,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fo" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/obj/item/ammo_magazine/m9mmt/rubber,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fp" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fq" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/item/ammo_magazine/m9mmt,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fr" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fs" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/storage/black_drop_pouches,/obj/item/clothing/accessory/storage/black_drop_pouches,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ft" = (/obj/structure/table/reinforced,/obj/item/weapon/shield_diffuser,/obj/item/weapon/shield_diffuser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fu" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/shield_diffuser,/obj/item/weapon/shield_diffuser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fv" = (/obj/effect/landmark{name = "Response Team"},/obj/effect/landmark{name = "Commando"},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
+"fw" = (/obj/effect/landmark{name = "Commando"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fx" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fz" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fA" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/specops)
+"fB" = (/obj/structure/table/bench/padded,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fC" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"fD" = (/obj/item/mecha_parts/mecha_equipment/tool/extinguisher,/obj/item/mecha_parts/mecha_equipment/tool/rcd,/obj/item/weapon/pickaxe/diamonddrill,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fE" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/weapon/rig/ert/security,/obj/item/weapon/rig/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fF" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fG" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/hip,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fH" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fI" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fJ" = (/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fK" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; enabled = 0; req_one_access = list(103); use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fL" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"fM" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"fN" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"fO" = (/obj/mecha/working/hoverpod,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fP" = (/obj/mecha/working/ripley/firefighter,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fQ" = (/obj/mecha/medical/odysseus/loaded,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fR" = (/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"fS" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/rubber,/obj/item/ammo_magazine/m45/flash,/obj/item/ammo_magazine/m45/flash,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/obj/item/ammo_magazine/m45,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fT" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/item/weapon/gun/projectile/sec,/obj/item/weapon/gun/projectile/sec,/obj/item/weapon/gun/projectile/sec,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fU" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fV" = (/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fW" = (/obj/machinery/vending/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fX" = (/obj/structure/table/rack,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/taperoll/police,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"fZ" = (/obj/structure/table/rack,/obj/item/clothing/accessory/holster/leg,/obj/item/clothing/accessory/holster/leg,/obj/item/clothing/accessory/holster/leg,/obj/item/clothing/accessory/holster/leg,/obj/item/clothing/accessory/holster/leg,/obj/item/clothing/accessory/holster/leg,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ga" = (/obj/machinery/door/airlock/centcom{icon_state = "door_locked"; locked = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gb" = (/obj/structure/table/glass,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gc" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"gd" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"ge" = (/obj/structure/sign/warning/secure_area/armory,/turf/simulated/shuttle/wall/dark/hard_corner,/area/centcom/specops)
+"gf" = (/obj/structure/sign/warning/secure_area,/turf/simulated/shuttle/wall/dark/hard_corner,/area/centcom/specops)
+"gg" = (/obj/effect/floor_decal/corner/red{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gh" = (/obj/effect/floor_decal/corner/red{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gi" = (/obj/effect/floor_decal/corner/red{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gj" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gk" = (/obj/effect/floor_decal/corner/purple{dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gl" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gm" = (/obj/structure/table/rack,/obj/item/device/lightreplacer,/obj/item/device/lightreplacer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gn" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"go" = (/obj/structure/table/reinforced,/obj/item/weapon/stamp/centcomm,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gp" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gq" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/radio/off,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gr" = (/obj/machinery/door/airlock,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gs" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/specops)
+"gt" = (/obj/effect/floor_decal/corner/yellow,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gu" = (/obj/effect/floor_decal/corner/yellow{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gv" = (/obj/effect/floor_decal/corner/yellow{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gw" = (/obj/effect/floor_decal/corner/white,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gx" = (/obj/effect/floor_decal/corner/white{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gy" = (/obj/effect/floor_decal/corner/white{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gz" = (/obj/structure/table/reinforced,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gA" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gB" = (/obj/structure/table/reinforced,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gC" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gD" = (/obj/item/weapon/mop,/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gE" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket{amount_per_transfer_from_this = 50},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gF" = (/obj/structure/sign/greencross{desc = "White cross in a green field, you can get medical aid here."; name = "First-Aid"},/turf/simulated/shuttle/wall/dark/hard_corner,/area/centcom/specops)
+"gG" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"gH" = (/turf/simulated/shuttle/wall/dark/no_join,/area/centcom/specops)
+"gI" = (/obj/item/weapon/circuitboard/aiupload,/obj/item/weapon/circuitboard/borgupload,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/protectStation,/obj/item/weapon/aiModule/quarantine,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/safeguard,/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gJ" = (/obj/machinery/vending/assist,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gK" = (/obj/machinery/vending/tool,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gL" = (/obj/machinery/vending/engivend,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gM" = (/obj/machinery/vending/engineering,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gN" = (/obj/structure/table/rack,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/clothing/glasses/welding/superior,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/obj/item/weapon/grenade/chem_grenade/metalfoam,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gO" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/obj/item/weapon/storage/backpack/ert/engineer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gP" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/pillbottles,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gQ" = (/obj/machinery/chemical_dispenser/full,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gR" = (/obj/machinery/chem_master,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gS" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gT" = (/obj/machinery/vending/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gU" = (/obj/item/clothing/glasses/hud/health{pixel_x = 4; pixel_y = 4},/obj/item/clothing/glasses/hud/health{pixel_x = 2; pixel_y = 2},/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gV" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/rack,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gW" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gX" = (/obj/structure/table/reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"gY" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/response_ship/start)
+"gZ" = (/turf/simulated/shuttle/wall/dark{join_group = "shuttle_ert"},/area/shuttle/response_ship/start)
+"ha" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/rig/ert/engineer,/obj/item/weapon/rig/ert/engineer,/obj/item/weapon/rig/ert/engineer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hb" = (/obj/structure/closet/crate/medical,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"hc" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"hd" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced,/obj/structure/table/rack,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/obj/item/weapon/rig/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"he" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hf" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hg" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hh" = (/obj/structure/closet/crate/internals{name = "Mask Crate"},/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hi" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced,/obj/effect/floor_decal/industrial/outline/blue,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hj" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/response_ship/start)
+"hk" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating/airless,/area/shuttle/response_ship/start)
+"hl" = (/obj/machinery/computer/security/telescreen{desc = ""; name = "Spec. Ops. Monitor"; network = list("NETWORK_ERT"); pixel_y = 26},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hm" = (/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hn" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"ho" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/structure/bed/chair,/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hp" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/machinery/light{dir = 4},/obj/structure/bed/chair,/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hq" = (/turf/simulated/shuttle/wall/dark{hard_corner = 1; join_group = "shuttle_ert"},/area/shuttle/response_ship/start)
+"hr" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/accessory/storage/brown_drop_pouches,/obj/item/clothing/accessory/storage/brown_drop_pouches,/obj/item/clothing/accessory/storage/brown_drop_pouches,/obj/item/clothing/accessory/storage/brown_drop_pouches,/obj/item/clothing/accessory/storage/brown_drop_pouches,/obj/item/clothing/accessory/storage/brown_drop_pouches,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hs" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/rack,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/obj/item/clothing/accessory/storage/white_drop_pouches,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ht" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/airless,/area/shuttle/response_ship/start)
+"hu" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hv" = (/obj/machinery/computer/shuttle_control/web/ert{icon_state = "flightcomp_center"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hw" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hx" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "response_shuttle"; pixel_x = 0; pixel_y = -25; tag_door = "response_shuttle_door"},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hy" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "response_shuttle_door"; locked = 1; name = "Forward Docking Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hz" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "response_base_door"; locked = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"hA" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "response_base"; name = "docking port controller"; pixel_x = 0; pixel_y = -25; req_one_access = list(103); tag_door = "response_base_door"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"hB" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hC" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hD" = (/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hE" = (/obj/machinery/pipedispenser/orderable,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hF" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/head/helmet/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/obj/item/clothing/suit/armor/vest/ert/engineer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hG" = (/obj/structure/table/reinforced,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/tool/screwdriver,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hI" = (/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hJ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/masks,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hK" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced,/obj/structure/table/rack,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hL" = (/obj/structure/table/rack,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/rcd,/obj/item/rig_module/device/plasmacutter,/obj/item/rig_module/device/plasmacutter,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hM" = (/obj/structure/table/rack,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/chem_dispenser/injector,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/healthscanner,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hN" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/egun,/obj/item/rig_module/mounted/egun,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hO" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/box/cdeathalarm_kit,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hP" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hQ" = (/obj/structure/table/reinforced,/obj/item/device/aicard,/obj/item/weapon/stamp/centcomm,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hR" = (/obj/item/device/radio/intercom/specops{pixel_y = -21},/obj/machinery/computer/communications,/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hS" = (/obj/structure/flight_right{icon_state = "right"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hT" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hU" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hV" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/response_ship/start)
+"hW" = (/obj/structure/reagent_dispensers/fueltank,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hX" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/obj/item/taperoll/engineering,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hY" = (/obj/structure/table/steel_reinforced,/obj/item/taperoll/atmos,/obj/item/taperoll/atmos,/obj/item/taperoll/atmos,/obj/item/weapon/pickaxe/drill,/obj/item/weapon/pickaxe/drill,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"hZ" = (/obj/machinery/pipedispenser/disposal/orderable,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ia" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ib" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dylovene,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/dermaline,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/obj/item/weapon/storage/pill_bottle/dexalin_plus,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ic" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"id" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/nanopaste,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/mask/surgical,/obj/item/weapon/autopsy_scanner,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ie" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"if" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ig" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ih" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/response_ship/start)
+"ii" = (/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"ij" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ik" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"il" = (/obj/structure/table/reinforced,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/screwdriver,/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"im" = (/obj/structure/table/reinforced,/obj/item/weapon/pinpointer/advpinpointer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"in" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; dir = 8; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/specops)
+"io" = (/obj/machinery/shield_gen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ip" = (/obj/machinery/shield_gen/external,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iq" = (/obj/machinery/power/emitter,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ir" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"is" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"it" = (/obj/machinery/portable_atmospherics/canister/air,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iu" = (/obj/machinery/shieldwallgen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iv" = (/obj/machinery/shieldgen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iw" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/bodybags,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"ix" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iy" = (/obj/machinery/shield_capacitor,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iz" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iA" = (/obj/structure/table/reinforced,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/spray/sterilizine,/obj/item/weapon/reagent_containers/spray/sterilizine,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iB" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/combat{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/combat,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iC" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/fire{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iD" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/adv{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/adv,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iF" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/o2,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iG" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/regular,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/clotting{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/clotting,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iI" = (/obj/structure/table/reinforced,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iJ" = (/obj/structure/table/rack,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/drill,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/maneuvering_jets,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iK" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iL" = (/obj/structure/table/rack,/obj/item/rig_module/grenade_launcher,/obj/item/rig_module/grenade_launcher,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iM" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"iN" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"iO" = (/obj/structure/table/reinforced,/obj/item/weapon/handcuffs,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iP" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iQ" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/hand_tele,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops)
+"iR" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "CREED"; name = "Ready Room"; p_open = 0},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/specops)
+"iS" = (/obj/structure/sign/warning/docking_area,/turf/unsimulated/wall,/area/centcom/command)
+"iT" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command)
+"iU" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"iV" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"iW" = (/turf/unsimulated/wall,/area/centcom/command)
+"iX" = (/turf/unsimulated/wall,/area/centcom/suppy)
+"iY" = (/turf/simulated/shuttle/wall,/area/centcom/evac)
+"iZ" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; dir = 8; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/evac)
+"ja" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/suppy)
+"jb" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod1/centcom)
+"jc" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod2/centcom)
+"jd" = (/turf/simulated/shuttle/wall,/area/supply/dock)
+"je" = (/turf/unsimulated/wall,/area/centcom/main_hall)
+"jf" = (/obj/structure/window/reinforced,/turf/simulated/shuttle/wall/dark/no_join,/area/supply/dock)
+"jg" = (/turf/unsimulated/wall,/area/tdome)
+"jh" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/main_hall)
+"ji" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "CREED"; name = "Ready Room"; p_open = 0},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"jj" = (/turf/unsimulated/wall,/area/centcom/creed)
+"jk" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/creed)
+"jl" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/supply/dock)
+"jm" = (/turf/simulated/shuttle/floor,/area/supply/dock)
+"jn" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/supply/dock)
+"jo" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"jp" = (/obj/structure/closet/secure_closet/hydroponics,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"jq" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"jr" = (/turf/unsimulated/wall{icon = 'icons/obj/doors/Doormaint.dmi'; icon_state = "door_closed"; name = "Sealed Door"},/area/centcom/bar)
+"js" = (/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/command)
+"jt" = (/obj/machinery/computer/card/centcom,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"ju" = (/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"jv" = (/obj/structure/table/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"jw" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/turf/simulated/shuttle/floor,/area/supply/dock)
+"jx" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
+"jy" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/centcom/evac)
+"jz" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/centcom/evac)
+"jA" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/centcom/evac)
+"jB" = (/obj/structure/kitchenspike,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"jC" = (/obj/machinery/chem_master/condimaster,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"jD" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"jE" = (/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 9},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"jF" = (/obj/structure/bed/chair/comfy/teal,/obj/effect/floor_decal/carpet{dir = 1},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"jG" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"jH" = (/obj/structure/table/wooden_reinforced,/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor"; network = list("ERT")},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"jI" = (/obj/structure/bed/chair/office/dark,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"jJ" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/obj/item/device/radio/intercom/specops{pixel_y = -21},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"jK" = (/obj/structure/closet/secure_closet/hos,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"jL" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/supply/dock)
+"jM" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 1},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating/airless,/area/centcom/evac)
+"jN" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 1"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"jO" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 2"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"jP" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration"; req_access = list(102)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"jQ" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"jR" = (/obj/structure/closet/chefcloset,/obj/item/glass_jar,/obj/item/device/retail_scanner/civilian,/obj/item/weapon/soap/nanotrasen,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"jS" = (/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"jT" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"jU" = (/obj/structure/bed/chair/comfy/teal{dir = 4},/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"jV" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"jW" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/bananapeel,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"jX" = (/obj/structure/bed/chair/comfy/teal{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"jY" = (/obj/structure/table/wooden_reinforced,/obj/machinery/button/remote/blast_door{name = "Spec Ops Ready Room"; pixel_y = 15; req_access = list(11); id = "CREED"},/obj/machinery/button/remote/blast_door{name = "Mech Storage"; icon_state = "doorctrl0"; pixel_y = 0; req_access = list(11); id = "ASSAULT"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"jZ" = (/obj/structure/table/wooden_reinforced,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"ka" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "supply_shuttle"; pixel_x = 25; pixel_y = 0; req_one_access = list(13,31); tag_door = "supply_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/supply/dock)
+"kb" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/table/rack,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"kc" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/shuttle/plating,/area/centcom/evac)
+"kd" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"ke" = (/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"kf" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_1_recovery"; pixel_x = -25; pixel_y = 25; req_one_access = list(13); tag_door = "escape_pod_1_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"kg" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_2_recovery"; pixel_x = -25; pixel_y = 25; req_one_access = list(13); tag_door = "escape_pod_2_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"kh" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"ki" = (/obj/machinery/door/blast/regular{id = "thunderdomegen"; name = "General Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"kj" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/centcom/main_hall)
+"kk" = (/obj/structure/mopbucket,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"kl" = (/turf/simulated/shuttle/plating,/area/centcom/evac)
+"km" = (/obj/machinery/door/airlock/maintenance_hatch{req_access = list(101)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"kn" = (/turf/simulated/shuttle/floor,/area/centcom/evac)
+"ko" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"kp" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/closet/secure_closet/personal,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"kq" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/closet/secure_closet/personal,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"kr" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"ks" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"kt" = (/obj/machinery/door/blast/regular{id = "thunderdomehea"; name = "Heavy Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"ku" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2)
+"kv" = (/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2)
+"kw" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"kx" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"ky" = (/obj/machinery/door/airlock/centcom{name = "Courthouse"; opacity = 1},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/command)
+"kz" = (/obj/machinery/door/airlock/centcom{name = "Administrative Office"; opacity = 1; req_access = list(108)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"kA" = (/mob/living/simple_mob/animal/passive/dog/corgi/puppy/Bockscar,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"kB" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"kC" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock)
+"kD" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
+"kE" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"kF" = (/obj/machinery/vending/engineering,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"kG" = (/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"kH" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome2)
+"kI" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"kJ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/storage/briefcase,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"kK" = (/turf/simulated/shuttle/wall/hard_corner,/area/supply/dock)
+"kL" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/evac)
+"kM" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod7/centcom)
+"kN" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod8/centcom)
+"kO" = (/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 10},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"kP" = (/obj/structure/bed/chair/comfy/teal{dir = 1},/obj/effect/floor_decal/carpet,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"kQ" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"kR" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed)
+"kS" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/wall/no_join,/area/supply/dock)
+"kT" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_7_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 7"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"kU" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_7_recovery"; pixel_x = -26; pixel_y = 26; req_one_access = list(13); tag_door = "escape_pod_7_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"kV" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_8_recovery"; pixel_x = 26; pixel_y = -26; req_one_access = list(13); tag_door = "escape_pod_8_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"kW" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_8_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 8"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"kX" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/simulated/shuttle/plating/airless/carry,/area/supply/dock)
+"kY" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/supply/dock)
+"kZ" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/shuttle/plating/airless/carry,/area/supply/dock)
+"la" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome)
+"lb" = (/obj/machinery/door/blast/regular{id = "thunderdome"; name = "Thunderdome Blast Door"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"lc" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"ld" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"le" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/main_hall)
+"lf" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"lg" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; dir = 8; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/command)
+"lh" = (/turf/simulated/shuttle/wall/hard_corner,/area/centcom/evac)
+"li" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"lj" = (/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"lk" = (/obj/machinery/igniter,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"ll" = (/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"lm" = (/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"ln" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"lo" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"lp" = (/obj/machinery/smartfridge,/turf/unsimulated/wall,/area/centcom/bar)
+"lq" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"lr" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/transport1/centcom)
+"ls" = (/turf/simulated/shuttle/wall,/area/shuttle/transport1/centcom)
+"lt" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom)
+"lu" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command)
+"lv" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"lw" = (/turf/simulated/shuttle/wall/dark/no_join,/area/centcom/evac)
+"lx" = (/obj/structure/closet/secure_closet/security,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"ly" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"lz" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"lA" = (/obj/structure/table/rack,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"lB" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"lC" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"lD" = (/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod2/centcom)
+"lE" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark{name = "tdomeadmin"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"lF" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"lG" = (/obj/structure/bed/chair{dir = 8},/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"lH" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"lI" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"lJ" = (/obj/machinery/porta_turret/crescent,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"lK" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/transport1/centcom)
+"lL" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating/airless,/area/shuttle/transport1/centcom)
+"lM" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"lN" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"lO" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/shuttle/floor/yellow,/area/shuttle/transport1/centcom)
+"lP" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/shuttle/floor/yellow,/area/shuttle/transport1/centcom)
+"lQ" = (/obj/machinery/computer/shuttle_control{req_access = list(101); shuttle_tag = "Centcom"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"lR" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"lS" = (/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"lT" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"lU" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"lV" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"lW" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"lX" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"lY" = (/obj/structure/reagent_dispensers/watertank/high,/obj/item/weapon/reagent_containers/glass/bucket,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"lZ" = (/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"ma" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/glass/beaker,/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/reagentgrinder,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mb" = (/obj/machinery/door/airlock/freezer,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"mc" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"md" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"me" = (/obj/machinery/computer/rcon,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"mf" = (/obj/machinery/computer/station_alert/all,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"mg" = (/obj/machinery/computer/power_monitor,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"mh" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"mi" = (/obj/machinery/door/airlock/external{frequency = 1380; glass = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_bay_door"; locked = 1; name = "Transport Airlock"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"mj" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"mk" = (/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"ml" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"mm" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"mn" = (/obj/machinery/computer/shuttle_control/centcom,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"mo" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/simulated/shuttle/plating,/area/centcom/evac)
+"mp" = (/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"mq" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"mr" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"ms" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"mt" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mu" = (/obj/machinery/biogenerator,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mv" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mw" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/fryer,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mx" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/supplycomp/control,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"my" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"mz" = (/obj/machinery/computer/robotics,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"mA" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating/airless,/area/shuttle/transport1/centcom)
+"mB" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"mC" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"mD" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/shuttle/floor/yellow,/area/shuttle/transport1/centcom)
+"mE" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/shuttle/floor/yellow,/area/shuttle/transport1/centcom)
+"mF" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_shuttle"; pixel_x = 0; pixel_y = -25; tag_door = "centcom_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"mG" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
+"mH" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"mI" = (/obj/machinery/computer/pod{id = "thunderdomeaxe"; name = "Thunderdome Axe Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"mJ" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"mK" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"mL" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mM" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/grill,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mN" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mO" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"mP" = (/obj/machinery/button/remote/blast_door{id = "crescent_thunderdome"; name = "Thunderdome Access"; pixel_x = 6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_vip_shuttle"; name = "VIP Shuttle Access"; pixel_x = 6; pixel_y = -34; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"mQ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_shuttle_bay"; name = "shuttle bay controller"; pixel_x = 26; pixel_y = 0; tag_door = "centcom_shuttle_bay_door"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"mR" = (/obj/machinery/computer/card,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"mS" = (/obj/machinery/computer/secure_data,/turf/simulated/shuttle/floor{icon_state = "floor_red"},/area/centcom/evac)
+"mT" = (/obj/machinery/computer/pod{id = "thunderdomegen"; name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"mU" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/oven,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mV" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/minihoe,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mW" = (/obj/machinery/smartfridge/drying_rack,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mX" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"mY" = (/obj/machinery/door/airlock/centcom{name = "Maintenance Access"; opacity = 1; req_access = list(106)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"mZ" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"na" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_2_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 02"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"nb" = (/obj/machinery/computer/pod{id = "thunderdomehea"; name = "Thunderdome Heavy Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"nc" = (/obj/item/weapon/tool/wrench,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"nd" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration"; req_access = list(102)},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"ne" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"nf" = (/obj/machinery/atmospherics/pipe/vent{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"ng" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access = list(101)},/obj/machinery/door/blast/regular{id = "crescent_thunderdome"; name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "steel"},/area/tdome)
+"nh" = (/obj/machinery/seed_storage/garden,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"ni" = (/obj/machinery/honey_extractor,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"nj" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"nk" = (/obj/machinery/computer/secure_data,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"nl" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"nm" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/command)
+"nn" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/command)
+"no" = (/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/command)
+"np" = (/obj/machinery/computer/shuttle_control/web/shuttle2{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"nq" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"nr" = (/obj/machinery/computer/med_data,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"ns" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "CREED"; name = "Ready Room"; p_open = 0},/turf/simulated/shuttle/floor,/area/centcom/evac)
+"nt" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "large_escape_pod_2_recovery"; pixel_x = -25; pixel_y = 25; req_one_access = list(13); tag_door = "large_escape_pod_2_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"nu" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"nv" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent{pixel_x = 1},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"nw" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"nx" = (/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/effect/wingrille_spawn/reinforced/crescent,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"ny" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"nz" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"nA" = (/obj/machinery/camera/network/thunder{c_tag = "Thunderdome Arena"; invisibility = 101},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"nB" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"nC" = (/obj/machinery/seed_extractor,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"nD" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"nE" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/candy,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"nF" = (/obj/machinery/door/blast/regular{id = "CentComPort"; name = "Security Doors"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"nG" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"nH" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"nI" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"nJ" = (/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/mob/living/silicon/decoy{name = "A.L.I.C.E."},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/command)
+"nK" = (/obj/structure/filingcabinet/filingcabinet,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"nL" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"nM" = (/obj/machinery/door/airlock/external,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"nN" = (/obj/machinery/computer/pod{id = "thunderdome"; name = "Thunderdome Blast Door Control"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"nO" = (/obj/item/weapon/extinguisher,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"nP" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
+"nQ" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/glasses/square,/obj/item/weapon/storage/box/glasses/square,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"nR" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/icecream_vat,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"nS" = (/obj/machinery/computer/security,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"nT" = (/obj/machinery/computer/shuttle_control/web/shuttle1,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"nU" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1443; listening = 0; name = "Spec Ops Intercom"; pixel_y = 22},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/command)
+"nV" = (/obj/machinery/door/window{dir = 2; name = "AI Core Door"; req_access = list(109)},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/command)
+"nW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/obj/machinery/turretid{pixel_x = 0; pixel_y = 28; req_access = list(101)},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/command)
+"nX" = (/obj/machinery/computer/crew,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"nY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "admin_shuttle_bay"; name = "shuttle bay controller"; pixel_x = 0; pixel_y = -26; tag_door = "admin_shuttle_bay_door"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"nZ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "large_escape_pod_1_recovery"; pixel_x = -25; pixel_y = -25; req_one_access = list(13); tag_door = "large_escape_pod_1_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"oa" = (/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"ob" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/material/kitchen/rollingpin,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"oc" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"od" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"oe" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/cereal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"of" = (/obj/structure/table/reinforced,/obj/item/weapon/card/id/gold/captain/spare,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"og" = (/obj/structure/table/reinforced,/obj/item/device/pda/captain,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command)
+"oh" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_bay_door"; locked = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command)
+"oi" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_1_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 01"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"oj" = (/obj/structure/table/standard,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"ok" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"ol" = (/obj/effect/floor_decal/spline/plain{dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"om" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/vending/dinnerware,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"on" = (/obj/structure/flora/pottedplant/stoutbush,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/main_hall)
+"oo" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"op" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"oq" = (/obj/machinery/account_database{name = "CentComm Accounts database"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"or" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"os" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"ot" = (/turf/simulated/shuttle/plating,/area/shuttle/cryo/centcom)
+"ou" = (/obj/structure/table/standard,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/item/weapon/towel,/obj/random/soap,/obj/random/soap,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"ov" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"ow" = (/obj/structure/toilet,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"ox" = (/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod1/centcom)
+"oy" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"oz" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"oA" = (/obj/structure/flora/pottedplant,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"oB" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/door/airlock/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"oC" = (/obj/machinery/telecomms/broadcaster/preset_cent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"oD" = (/obj/machinery/computer/shuttle_control{req_access = list(101); shuttle_tag = "Centcom"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"oE" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"oF" = (/obj/machinery/computer/shuttle_control{req_access = list(101); shuttle_tag = "Centcom"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"oG" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"oH" = (/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"oI" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"oJ" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"oK" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve)
+"oL" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/spesslaw,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"oM" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"oN" = (/obj/machinery/telecomms/hub/preset_cent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"oO" = (/obj/machinery/computer/card,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"oP" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"oQ" = (/obj/machinery/computer/communications,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command)
+"oR" = (/turf/simulated/shuttle/wall/dark,/area/shuttle/administration/centcom)
+"oS" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
+"oT" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"oU" = (/obj/machinery/computer/rdservercontrol{badmin = 1; name = "Master R&D Server Controller"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"oV" = (/obj/machinery/vending/boozeomat,/turf/simulated/shuttle/wall/dark,/area/shuttle/administration/centcom)
+"oW" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"oX" = (/obj/machinery/vending/cigarette,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"oY" = (/obj/machinery/microwave,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"oZ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "admin_shuttle"; pixel_x = -25; pixel_y = 0; req_one_access = list(101); tag_door = "admin_shuttle_hatch"},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
+"pa" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
+"pb" = (/obj/item/device/multitool,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pc" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pd" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "cryostorage_shuttle_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock Cryostorage"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"pe" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cryostorage_shuttle_recovery"; pixel_x = -26; pixel_y = 26; req_one_access = list(13); tag_door = "cryostorage_shuttle_recovery_hatch"},/turf/simulated/shuttle/floor,/area/centcom/evac)
+"pf" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/turf/simulated/shuttle/floor,/area/centcom/evac)
+"pg" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin)
+"ph" = (/obj/machinery/telecomms/receiver/preset_cent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"pi" = (/obj/machinery/telecomms/bus/preset_cent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"pj" = (/obj/machinery/telecomms/relay/preset/southerncross/transit,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"pk" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"pl" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"pm" = (/obj/machinery/r_n_d/server/centcom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"pn" = (/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"po" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
+"pp" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pq" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pr" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake/filled,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"ps" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/meatsteak,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"pt" = (/obj/machinery/door/window/northright,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pu" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pv" = (/obj/item/weapon/flame/lighter/zippo,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pw" = (/obj/item/weapon/storage/fancy/cigarettes,/obj/structure/table/reinforced,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"px" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"py" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pz" = (/obj/item/stack/material/glass{amount = 50},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pA" = (/obj/item/stack/material/steel{amount = 50},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"pB" = (/obj/machinery/door/airlock{name = "Unisex Showers"},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"pC" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/vest,/obj/item/clothing/head/helmet/swat,/obj/item/weapon/gun/energy/laser,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"pD" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1)
+"pE" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1)
+"pF" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/weapon/melee/energy/axe,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"pG" = (/obj/structure/table/glass,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/main_hall)
+"pH" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"pI" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"pJ" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"pK" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"pL" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"pM" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"pN" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"pO" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"pP" = (/turf/unsimulated/wall,/area/centcom/bar)
+"pQ" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"pR" = (/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"pS" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 9},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
+"pT" = (/obj/effect/floor_decal/carpet{dir = 1},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
+"pU" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
+"pV" = (/obj/machinery/door/airlock/centcom{name = "Living Quarters"; opacity = 1; req_access = list(105)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"pW" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"pX" = (/turf/unsimulated/wall,/area/centcom/living)
+"pY" = (/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"pZ" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"qa" = (/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"qb" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/administration/centcom)
+"qc" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/airless,/area/shuttle/administration/centcom)
+"qd" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qe" = (/obj/item/weapon/stool,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qf" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qg" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qh" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qi" = (/obj/machinery/robotic_fabricator,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qj" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Thunderdome Autolathe"},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qk" = (/obj/structure/dispenser,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"ql" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"qm" = (/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"qn" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = -1},/obj/structure/curtain/open/shower,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"qo" = (/obj/machinery/door/airlock,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"qp" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"qq" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qr" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/bloodsoup,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qs" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
+"qt" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/obj/structure/table/standard,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
+"qu" = (/obj/effect/floor_decal/carpet,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
+"qv" = (/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 6},/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
+"qw" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/living)
+"qx" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"qy" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/administration/centcom)
+"qz" = (/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"qA" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"qB" = (/turf/unsimulated/wall,/area/shuttle/trade)
+"qC" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome/tdome1)
+"qD" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qE" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qF" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = 4; pixel_y = -2},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qG" = (/obj/structure/bed/chair/wood/wings,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"qH" = (/obj/machinery/light,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qI" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qJ" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/simulated/shuttle/plating,/area/shuttle/administration/centcom)
+"qK" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/shuttle/trade)
+"qL" = (/obj/structure/table/standard,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/shuttle/trade)
+"qM" = (/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"qN" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qO" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qP" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qQ" = (/obj/machinery/smartfridge,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"qR" = (/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"qS" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"qT" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"qU" = (/obj/machinery/vending/boozeomat,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"qV" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"qW" = (/obj/structure/device/piano{dir = 4},/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"qX" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"qY" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod4/centcom)
+"qZ" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod6/centcom)
+"ra" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/shuttle/trade)
+"rb" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/shuttle/trade)
+"rc" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/glass2/square,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"rd" = (/obj/machinery/door/airlock/glass{icon_state = "door_locked"; locked = 1; name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"re" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"rf" = (/obj/structure/table/marble,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/glass/rag,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"rg" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/spoon{pixel_x = 2},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"rh" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/tofukabob,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"ri" = (/turf/unsimulated/wall{icon = 'icons/obj/doors/Doormaint.dmi'; icon_state = "door_closed"; name = "Sealed Door"},/area/centcom/main_hall)
+"rj" = (/obj/structure/table/marble,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/accessory/wcoat,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"rk" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"rl" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"rm" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"rn" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/poppypretzel,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar)
+"ro" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = 4; pixel_y = -2},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/bar)
+"rp" = (/obj/machinery/floor_light,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
+"rq" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"rr" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"rs" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 10},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
+"rt" = (/obj/machinery/dna_scannernew,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"ru" = (/obj/machinery/computer/cloning,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"rv" = (/obj/machinery/clonepod,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"rw" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"rx" = (/obj/machinery/computer/shuttle_control/administration,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"ry" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_4_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 4"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"rz" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_4_recovery"; pixel_x = -26; pixel_y = 26; req_one_access = list(13); tag_door = "escape_pod_4_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"rA" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_6_recovery"; pixel_x = 26; pixel_y = -26; req_one_access = list(13); tag_door = "escape_pod_6_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"rB" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_6_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 6"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"rC" = (/obj/structure/closet/secure_closet/guncabinet,/obj/item/weapon/gun/energy/gun/burst,/obj/item/weapon/gun/energy/gun/burst,/obj/item/weapon/gun/energy/ionrifle/pistol,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"rD" = (/obj/structure/table/standard,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/glasses/sunglasses,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"rE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"rF" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/storage/box/syndie_kit/clerical,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"rG" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"rH" = (/obj/machinery/door/airlock/glass{name = "Bar"},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"rI" = (/obj/machinery/floor_light,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
+"rJ" = (/obj/structure/sink{pixel_y = 16},/obj/structure/mirror{pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"rK" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"rL" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/shotgunammo/large,/obj/item/weapon/storage/box/stunshells/large,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"rM" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"rN" = (/obj/machinery/computer/shuttle_control{name = "Beruang control console"; req_access = list(160); shuttle_tag = "Trade"},/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"rO" = (/obj/structure/closet/crate,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/shuttle/trade)
+"rP" = (/turf/unsimulated/floor{icon_state = "dark"},/area/shuttle/trade)
+"rQ" = (/obj/structure/table/rack,/obj/item/clothing/under/color/green,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/green,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/green,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
+"rR" = (/obj/machinery/door/airlock/centcom{name = "Bridge Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"rS" = (/obj/machinery/door/airlock/glass_centcom{name = "Bridge Access"; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"rT" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"rU" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"rV" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = 4; pixel_y = -2},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/obj/item/weapon/flame/candle,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"rW" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"rX" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"rY" = (/obj/structure/table/reinforced,/obj/machinery/librarycomp,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"rZ" = (/obj/structure/bookcase,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"sa" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor,/area/centcom/evac)
+"sb" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy,/obj/item/clothing/suit/storage/vest,/obj/item/clothing/head/helmet,/obj/item/clothing/head/helmet,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"sc" = (/obj/structure/frame/computer,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"sd" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/shuttle/trade)
+"se" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"sf" = (/obj/machinery/media/jukebox,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"sg" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"sh" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"si" = (/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -6},/obj/structure/table/standard,/obj/effect/floor_decal/corner/yellow/diagonal,/obj/effect/floor_decal/corner/blue/diagonal{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/living)
+"sj" = (/obj/machinery/door/window/northright{icon_state = "right"; dir = 2},/obj/machinery/light{dir = 8},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"sk" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"sl" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"sm" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"sn" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod3/centcom)
+"so" = (/turf/simulated/shuttle/plating,/area/shuttle/escape_pod5/centcom)
+"sp" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/shuttle/trade)
+"sq" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 4; req_access = list(160)},/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"sr" = (/obj/structure/table/woodentable{dir = 5},/obj/item/device/flashlight/lamp/green,/turf/unsimulated/floor{icon_state = "wood"},/area/centcom/bar)
+"ss" = (/obj/machinery/floor_light,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/bar)
+"st" = (/obj/machinery/light{dir = 8},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"su" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 3"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"sv" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_3_recovery"; pixel_x = -26; pixel_y = 26; req_one_access = list(13); tag_door = "escape_pod_3_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"sw" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/centcom/evac)
+"sx" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_5_recovery"; pixel_x = 26; pixel_y = -26; req_one_access = list(13); tag_door = "escape_pod_5_recovery_hatch"},/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"sy" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock 5"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"sz" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade)
+"sA" = (/obj/structure/table/standard,/obj/item/weapon/soap/deluxe,/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade)
+"sB" = (/obj/structure/table/standard,/obj/item/clothing/accessory/permit,/obj/item/clothing/accessory/permit,/obj/item/clothing/accessory/permit,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"sC" = (/obj/structure/closet/wardrobe/white,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"sD" = (/obj/structure/closet/wardrobe/green,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"sE" = (/obj/structure/closet/wardrobe/grey,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"sF" = (/obj/machinery/button/remote/blast_door{id = "tradestationshutters"; name = "warehouse control"; pixel_x = -30; req_access = list(160)},/turf/unsimulated/floor{icon_state = "dark"},/area/shuttle/trade)
+"sG" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"sH" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"sI" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"sJ" = (/obj/machinery/vending/medical,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"sK" = (/obj/machinery/chem_master,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"sL" = (/obj/machinery/chemical_dispenser/ert,/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom)
+"sM" = (/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade)
+"sN" = (/obj/machinery/door/blast/shutters{dir = 8; id = "tradestationshutters"; name = "Warehouse Shutters"},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/shuttle/trade)
+"sO" = (/obj/structure/table/standard,/obj/random/soap,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/bar)
+"sP" = (/obj/structure/sign/double/barsign,/turf/unsimulated/wall,/area/centcom/bar)
+"sQ" = (/obj/structure/sign/directions/cargo{dir = 8},/obj/structure/sign/directions/security{dir = 8; pixel_y = -10},/obj/structure/sign/directions/engineering{dir = 8; pixel_y = 10},/turf/unsimulated/wall,/area/centcom/main_hall)
+"sR" = (/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"sS" = (/obj/structure/sign/directions/medical{dir = 4},/obj/structure/sign/directions/evac{pixel_y = 10},/turf/unsimulated/wall,/area/centcom/main_hall)
+"sT" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -25; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"sU" = (/obj/machinery/door/airlock/glass{icon_state = "door_locked"; locked = 1; name = "Central Access"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"sV" = (/obj/machinery/turretid{pixel_x = -28; pixel_y = -28; req_access = list(101)},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall)
+"sW" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"sX" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"sY" = (/obj/machinery/vending/cola,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"sZ" = (/obj/machinery/vending/cigarette,/turf/simulated/shuttle/floor/yellow,/area/centcom/evac)
+"ta" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade)
+"tb" = (/obj/machinery/door/airlock{name = "Restroom"},/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade)
+"tc" = (/obj/structure/table/bench/steel,/obj/effect/landmark{name = "Trader"},/turf/unsimulated/floor{icon_state = "dark"},/area/shuttle/trade)
+"td" = (/obj/effect/landmark{name = "Trader"},/turf/unsimulated/floor{icon_state = "dark"},/area/shuttle/trade)
+"te" = (/obj/structure/table/glass,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"tf" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"tg" = (/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"th" = (/obj/structure/table/reinforced,/obj/item/frame/light,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"ti" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"tj" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"tk" = (/obj/item/weapon/tool/crowbar,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"tl" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tm" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tn" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"to" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tp" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tq" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tr" = (/obj/machinery/button/remote/blast_door{id = "tradestationshutters"; name = "warehouse control"; pixel_x = 30; req_access = list(160)},/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"ts" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/main_hall)
+"tt" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tu" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tv" = (/obj/structure/bed/roller,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tw" = (/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/tool/wrench,/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tx" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"ty" = (/obj/machinery/atmospherics/pipe/manifold/visible,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tz" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tA" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade)
+"tB" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade)
+"tC" = (/obj/structure/closet/wardrobe/pink,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"tD" = (/obj/structure/closet/wardrobe/yellow,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"tE" = (/obj/structure/closet/wardrobe/mixed,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"tF" = (/obj/structure/closet/wardrobe/pjs,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"tG" = (/obj/structure/closet/wardrobe/suit,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"tH" = (/obj/structure/closet/wardrobe/xenos,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"tI" = (/obj/structure/closet/wardrobe/black,/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"tJ" = (/obj/item/frame/light,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"tK" = (/obj/machinery/chem_master,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"tL" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/turf/unsimulated/floor{icon_state = "lino"},/area/centcom/bar)
+"tM" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"tN" = (/obj/machinery/chemical_dispenser/full,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"tO" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"tP" = (/obj/structure/closet/secure_closet/medical_wall/pills{pixel_y = 32},/obj/structure/table/glass,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"tQ" = (/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"tR" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/blue{dir = 5},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"tS" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tT" = (/obj/structure/toilet{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/shuttle/trade)
+"tU" = (/turf/unsimulated/wall,/area/centcom/security)
+"tV" = (/turf/unsimulated/wall,/area/centcom/medical)
+"tW" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -30; pixel_y = 0},/obj/structure/table/standard,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/obj/machinery/recharger,/obj/item/weapon/tool/screwdriver,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tX" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tY" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"tZ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "trade_shuttle_bay"; name = "shuttle bay controller"; pixel_x = 25; pixel_y = 0; tag_door = "trade_shuttle_bay_door"},/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"ua" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ub" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"uc" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/floor_decal/corner/orange/full{dir = 8},/obj/item/weapon/reagent_containers/glass/bucket,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ud" = (/obj/structure/table/reinforced,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ue" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"uf" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ug" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"uh" = (/obj/structure/closet/secure_closet/security,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ui" = (/obj/structure/closet/secure_closet/security,/obj/effect/floor_decal/corner/red{dir = 5},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"uj" = (/obj/structure/closet/secure_closet/security,/obj/effect/floor_decal/corner/red/full{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"uk" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/medical)
+"ul" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"um" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"un" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uo" = (/obj/machinery/iv_drip,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"up" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uq" = (/obj/structure/table/standard,/obj/item/weapon/surgical/hemostat,/obj/item/weapon/surgical/cautery,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"ur" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/surgical/retractor,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"us" = (/obj/structure/table/standard,/obj/item/weapon/surgical/circular_saw{pixel_y = 8},/obj/item/weapon/surgical/scalpel,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"ut" = (/obj/structure/table/standard,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"; pixel_x = 2; pixel_y = 2},/obj/item/weapon/surgical/FixOVein,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uu" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgical/circular_saw,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/nanopaste,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/mask/surgical,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uv" = (/obj/machinery/door/airlock/hatch{name = "Cockpit"; req_access = list(109)},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"uw" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/bodybags,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"ux" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uy" = (/obj/machinery/clonepod,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uz" = (/obj/machinery/computer/cloning,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uA" = (/obj/machinery/dna_scannernew,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uB" = (/obj/structure/closet{name = "Prisoner's Locker"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"uC" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/security)
+"uD" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"uE" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uF" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uG" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uH" = (/obj/structure/table/standard,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uI" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uJ" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uK" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"uL" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"uM" = (/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"uN" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"uO" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"uP" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6)},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uQ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "trade_shuttle_bay_door"; locked = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/shuttle/trade)
+"uR" = (/obj/machinery/optable,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uS" = (/obj/machinery/computer/operating,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"uT" = (/obj/machinery/computer/operating,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uU" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"uV" = (/obj/structure/morgue,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uW" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"uX" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/shuttle/merchant/home)
+"uY" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "trade_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"uZ" = (/turf/simulated/shuttle/wall/dark,/area/shuttle/merchant/home)
+"va" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"vb" = (/obj/machinery/vending/hydroseeds,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"vc" = (/obj/structure/table/reinforced,/obj/item/clothing/head/greenbandana,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"vd" = (/obj/machinery/computer/security,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ve" = (/obj/machinery/bodyscanner{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vf" = (/obj/machinery/body_scanconsole,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vg" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vh" = (/obj/machinery/vending/wallmed1{pixel_y = -30},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vi" = (/obj/structure/closet/secure_closet/medical2,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vj" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"vk" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"vl" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"vm" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"vn" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor/white,/area/centcom/evac)
+"vo" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/stamp/captain,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"vp" = (/obj/machinery/computer/shuttle,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"vq" = (/obj/structure/table/standard,/obj/item/weapon/storage/lockbox,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"vr" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"vs" = (/obj/structure/table/standard,/obj/item/device/radio/off,/obj/item/weapon/paper_bin,/turf/simulated/shuttle/floor/black,/area/centcom/evac)
+"vt" = (/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradestarshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"vu" = (/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradestarshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"vv" = (/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradestarshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"vw" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "trade_shuttle"; pixel_x = -25; pixel_y = 0; req_one_access = list(101); tag_door = "trade_shuttle_hatch"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vx" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vy" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/shuttle/plating/airless,/area/shuttle/merchant/home)
+"vz" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/merchant/home)
+"vA" = (/obj/machinery/door/window/brigdoor{dir = 4; name = "Security"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"vB" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"vC" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vD" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/centcom/evac)
+"vE" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vF" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/rd,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vG" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vH" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vI" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"vJ" = (/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"vK" = (/obj/structure/flora/pottedplant{icon_state = "plant-22"},/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"vL" = (/obj/machinery/sleep_console{dir = 8},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vM" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vN" = (/turf/space,/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/merchant/home)
+"vO" = (/obj/structure/table/bench/steel,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"vP" = (/obj/structure/closet/secure_closet/brig,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"vQ" = (/obj/structure/table/reinforced,/obj/item/weapon/book/codex/corp_regs,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"vR" = (/obj/machinery/door/airlock/glass_security{name = "Security Lobby"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"vS" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/medical)
+"vT" = (/obj/structure/closet/secure_closet/chemical,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vU" = (/obj/structure/table/glass,/obj/item/stack/material/phoron,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vV" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vW" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vX" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vY" = (/obj/structure/closet/wardrobe/white,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"vZ" = (/obj/machinery/clonepod,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"wa" = (/obj/machinery/computer/cloning,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"wb" = (/obj/machinery/dna_scannernew,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"wc" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"wd" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradestarshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"we" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wf" = (/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wg" = (/obj/machinery/door/airlock/silver{name = "Sleeping"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wh" = (/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"wi" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"wj" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"wk" = (/obj/machinery/atm{pixel_x = -32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wl" = (/obj/machinery/suit_cycler/syndicate,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wm" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wn" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wo" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/medical_wall{pixel_y = 32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wp" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wq" = (/obj/structure/table/reinforced,/obj/item/device/taperecorder,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"wr" = (/obj/structure/table/reinforced,/obj/item/weapon/book/codex/corp_regs,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ws" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck/cards,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"wt" = (/obj/machinery/door/airlock/glass_security{name = "Spaceport Security Airlock"; req_access = list(63)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"wu" = (/obj/structure/table/bench/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"wv" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradestarshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"ww" = (/obj/structure/closet/wardrobe/pjs,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wx" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/obj/machinery/light,/obj/structure/table/glass,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wy" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/obj/structure/sign/poster{pixel_y = -32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wz" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"wA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square,/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"wB" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32},/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"wC" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/inflatable_duck,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wD" = (/obj/structure/table/steel_reinforced,/obj/item/stack/material/mhydrogen,/obj/item/stack/material/diamond,/obj/item/stack/material/sandstone,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wE" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/rig/internalaffairs,/obj/item/clothing/head/helmet/space/void/wizard,/obj/item/clothing/suit/space/void/wizard,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wF" = (/obj/structure/table/steel_reinforced,/obj/random/tool,/obj/random/tool,/obj/random/tool,/obj/random/tool,/obj/random/tool,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wG" = (/obj/structure/table/steel_reinforced,/obj/random/toolbox,/obj/random/toolbox,/obj/random/toolbox,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wH" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"wI" = (/obj/vehicle/train/engine,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wJ" = (/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home)
+"wK" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Bay"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wL" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wM" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/merchant/home)
+"wN" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/red,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"wO" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = -32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wP" = (/obj/machinery/button/remote/blast_door{id = "tradestarshutters"; name = "remote shutter control"; pixel_x = 30; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wQ" = (/obj/structure/table/steel_reinforced,/obj/random/firstaid,/obj/random/firstaid,/obj/random/firstaid,/obj/random/firstaid,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wR" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wS" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wT" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wU" = (/obj/structure/table/steel_reinforced,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/weapon/weldpack,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"wW" = (/obj/vehicle/train/trolley,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wX" = (/obj/machinery/light,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wY" = (/obj/machinery/vending/medical{pixel_y = -32; req_access = null},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"wZ" = (/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xa" = (/obj/structure/table/bench/padded,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
+"xb" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue/full{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xc" = (/obj/effect/floor_decal/corner/blue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xd" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue/full{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xe" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 4; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xf" = (/obj/structure/table/steel_reinforced,/obj/random/medical,/obj/random/medical,/obj/random/medical,/obj/random/medical,/obj/structure/window/reinforced,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xg" = (/obj/machinery/door/window/southleft{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xh" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/coin/uranium,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/platinum,/obj/item/weapon/coin/phoron,/obj/item/weapon/coin/iron,/obj/item/weapon/coin/gold,/obj/item/weapon/coin/diamond,/obj/structure/window/reinforced,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xi" = (/obj/machinery/door/window/southright{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xj" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/cell/high,/obj/item/weapon/cell/high,/obj/item/weapon/cell/hyper,/obj/item/weapon/cell/potato,/obj/structure/window/reinforced,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xk" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"xl" = (/obj/structure/table/standard,/obj/item/clothing/gloves/sterile/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/surgical/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/surgical/scalpel,/obj/item/weapon/surgical/surgicaldrill,/obj/item/weapon/surgical/circular_saw,/obj/item/stack/nanopaste,/obj/item/weapon/surgical/hemostat{pixel_y = 4},/obj/item/weapon/surgical/cautery{pixel_y = 4},/obj/item/weapon/surgical/FixOVein{pixel_x = -6; pixel_y = 1},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel{pixel_x = 4; pixel_y = 3},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xm" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xn" = (/obj/structure/table/glass,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xo" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/blue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xp" = (/obj/structure/morgue{icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xq" = (/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"xr" = (/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"xs" = (/obj/machinery/vending/coffee,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xt" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xu" = (/obj/machinery/door/airlock/multi_tile/glass,/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home)
+"xv" = (/obj/structure/closet/crate/secure/weapon,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xw" = (/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xx" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xy" = (/obj/structure/table/glass,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xz" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xA" = (/obj/structure/closet/secure_closet/personal/patient,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xB" = (/obj/effect/floor_decal/corner/blue{dir = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xC" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xD" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xE" = (/obj/structure/table/steel_reinforced,/obj/machinery/newscaster{pixel_x = 32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xF" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/white,/area/shuttle/merchant/home)
+"xG" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light/small,/turf/simulated/shuttle/floor/white,/area/shuttle/merchant/home)
+"xH" = (/obj/structure/mirror{pixel_x = 0; pixel_y = 28},/turf/simulated/shuttle/floor/white,/area/shuttle/merchant/home)
+"xI" = (/obj/structure/curtain/open/shower,/obj/machinery/shower{pixel_y = 3},/turf/simulated/shuttle/floor/white,/area/shuttle/merchant/home)
+"xJ" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xK" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"xL" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xM" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xN" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 30},/obj/effect/floor_decal/corner/orange{dir = 6},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xO" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xP" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xQ" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xR" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{dir = 4; name = "Security"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"xS" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xT" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xU" = (/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"xV" = (/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"xW" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"xX" = (/obj/machinery/light{dir = 4},/obj/structure/sign/kiddieplaque{desc = "A plaque commemorating the construction of the cargo ship Beruang."; name = "Beruang"; pixel_x = 32},/mob/living/simple_mob/animal/passive/dog/tamaskan/Spice,/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home)
+"xY" = (/obj/machinery/door/airlock/silver{name = "Toilet"},/turf/simulated/shuttle/floor/white,/area/shuttle/merchant/home)
+"xZ" = (/obj/machinery/door/airlock/silver{name = "Restroom"},/turf/simulated/shuttle/floor/white,/area/shuttle/merchant/home)
+"ya" = (/obj/structure/undies_wardrobe,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yb" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yc" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/largecrate/animal/cat,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yd" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/structure/largecrate/animal/cow,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"ye" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yf" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/item/device/kit/paint/ripley/death,/obj/item/device/kit/paint/ripley/flames_blue,/obj/item/device/kit/paint/ripley/flames_red,/obj/item/device/kit/paint/ripley,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yg" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/structure/closet/crate/secure/loot,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/structure/largecrate/hoverpod,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yi" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/mecha/working/ripley/mining,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yj" = (/obj/machinery/door/window/westright{name = "Storefront"; req_access = list(160)},/obj/structure/table/marble,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "trade"; name = "Shop Shutters"; opacity = 0},/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home)
+"yk" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home)
+"yl" = (/obj/machinery/computer/arcade/battle,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ym" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/orange{dir = 10},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"yn" = (/obj/structure/table/reinforced,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"yo" = (/obj/item/device/camera{desc = "A one use - polaroid camera. 30 photos left."; name = "detectives camera"; pictures_left = 30; pixel_x = 2; pixel_y = 3},/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"yp" = (/obj/item/weapon/storage/box/evidence,/obj/item/weapon/folder/red,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"yq" = (/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"yr" = (/obj/structure/closet{name = "Evidence Closet"},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"ys" = (/obj/machinery/computer/card,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/security)
+"yt" = (/obj/machinery/smartfridge/chemistry,/turf/unsimulated/wall,/area/centcom/medical)
+"yu" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"yv" = (/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"yw" = (/obj/effect/floor_decal/corner/blue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"yx" = (/obj/item/weapon/autopsy_scanner,/obj/item/weapon/surgical/scalpel,/obj/structure/table/standard,/obj/effect/floor_decal/corner/blue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"yy" = (/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"yz" = (/obj/machinery/computer/shuttle_control/merchant,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yA" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home)
+"yB" = (/obj/machinery/door/airlock/command{name = "Bridge"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yC" = (/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yD" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/structure/largecrate/animal/corgi,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yE" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/largecrate/animal/corgi,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yF" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/closet/crate/internals,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yG" = (/obj/structure/table/rack,/obj/effect/floor_decal/industrial/warning,/obj/item/device/kit/paint/gygax/darkgygax,/obj/item/device/kit/paint/gygax/recitence,/obj/item/device/kit/paint/durand,/obj/item/device/kit/paint/durand/phazon,/obj/item/device/kit/paint/durand/seraph,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yH" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/closet/crate/secure/loot,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yI" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/largecrate/hoverpod,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yJ" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/mecha/working/ripley/firefighter,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yK" = (/obj/machinery/door/window/westleft{name = "Storefront"; req_access = list(160)},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "trade"; name = "Shop Shutters"; opacity = 0},/obj/structure/table/marble,/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home)
+"yL" = (/obj/machinery/door/airlock/medical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"yM" = (/obj/machinery/computer/arcade/battle,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yN" = (/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "tradebridgeshutters"; name = "remote shutter control"; pixel_x = 30; req_access = list(150)},/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Esteban"; pixel_y = 8},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yO" = (/obj/machinery/vending/assist{contraband = null; name = "Old Vending Machine"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yP" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yQ" = (/obj/machinery/vending/sovietsoda,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yR" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/weapon/soap,/obj/item/weapon/towel{color = "#0000FF"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yS" = (/obj/structure/sign/poster{pixel_y = -32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yT" = (/obj/machinery/door/airlock/multi_tile/glass{dir = 2; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yU" = (/obj/machinery/door/window/westleft{name = "Storefront"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yV" = (/obj/machinery/button/remote/blast_door{id = "trade"; name = "Shop Shutters"; pixel_x = 0; pixel_y = -26},/turf/simulated/shuttle/floor/darkred,/area/shuttle/merchant/home)
+"yW" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/head/bearpelt,/obj/item/clothing/head/bowler,/obj/item/clothing/head/caphat/cap,/obj/item/clothing/head/beaverhat,/obj/item/clothing/head/beret/centcom,/obj/item/clothing/head/beret/sec,/obj/item/clothing/head/collectable/kitty,/obj/item/clothing/head/collectable/kitty,/obj/item/clothing/head/collectable/kitty,/obj/item/clothing/head/collectable/rabbitears,/obj/item/clothing/head/collectable/rabbitears,/obj/item/clothing/head/collectable/rabbitears,/obj/item/clothing/head/collectable/petehat,/obj/item/clothing/head/collectable/pirate,/obj/item/clothing/head/collectable/wizard,/obj/item/clothing/head/collectable/xenom,/obj/item/clothing/head/cowboy_hat,/obj/item/clothing/head/pin/flower/violet,/obj/item/clothing/head/pin/flower/blue,/obj/item/clothing/head/pin/flower/orange,/obj/item/clothing/head/pin/flower/pink,/obj/item/clothing/head/justice,/obj/item/clothing/head/justice/blue,/obj/item/clothing/head/justice/green,/obj/item/clothing/head/justice/pink,/obj/item/clothing/head/justice/yellow,/obj/item/clothing/head/philosopher_wig,/obj/item/clothing/head/plaguedoctorhat,/obj/item/clothing/head/xenos,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"yX" = (/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"yY" = (/turf/unsimulated/wall,/area/centcom/terminal)
+"yZ" = (/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"za" = (/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradebridgeshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"zb" = (/obj/machinery/vending/boozeomat{req_access = null},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zc" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zd" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"ze" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/under/cheongsam,/obj/item/clothing/under/hosformalmale,/obj/item/clothing/under/hosformalfem,/obj/item/clothing/under/harness,/obj/item/clothing/under/gladiator,/obj/item/clothing/under/ert,/obj/item/clothing/under/schoolgirl,/obj/item/clothing/under/redcoat,/obj/item/clothing/under/sexymime,/obj/item/clothing/under/sexyclown,/obj/item/clothing/under/soviet,/obj/item/clothing/under/space,/obj/item/clothing/under/swimsuit/stripper/mankini,/obj/item/clothing/under/suit_jacket/female,/obj/item/clothing/under/rank/psych/turtleneck,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/under/syndicate/tacticool,/obj/item/clothing/under/syndicate/tacticool,/obj/item/clothing/under/dress/sailordress,/obj/item/clothing/under/dress/redeveninggown,/obj/item/clothing/under/dress/dress_saloon,/obj/item/clothing/under/dress/blacktango,/obj/item/clothing/under/dress/blacktango/alt,/obj/item/clothing/under/dress/dress_orange,/obj/item/clothing/under/dress/maid/janitor,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zf" = (/obj/machinery/door/airlock/glass{name = "Dock"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall)
+"zg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel_reinforced,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zh" = (/obj/machinery/door/window/northleft{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zi" = (/obj/structure/table/steel_reinforced,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/random/plushie,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zj" = (/obj/machinery/door/window/northright{name = "Cargo Hold"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zk" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/blue,/obj/item/clothing/gloves/brown,/obj/item/clothing/gloves/captain,/obj/item/clothing/gloves/combat,/obj/item/clothing/gloves/green,/obj/item/clothing/gloves/grey,/obj/item/clothing/gloves/light_brown,/obj/item/clothing/gloves/purple,/obj/item/clothing/gloves/rainbow,/obj/item/clothing/gloves/swat,/obj/item/clothing/gloves/white,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zl" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 2; start_pressure = 740.5},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zm" = (/obj/structure/closet/walllocker/emerglocker{pixel_y = 32},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zn" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zo" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/terminal)
+"zp" = (/obj/machinery/button/remote/blast_door{id = "tradeportshutters"; name = "remote shutter control"; pixel_x = 30; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zq" = (/obj/structure/table/steel_reinforced,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/item/weapon/bikehorn,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zr" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zs" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zt" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zu" = (/obj/machinery/door/airlock/glass{icon_state = "door_locked"; locked = 1; name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"zv" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/meter,/obj/structure/largecrate/animal/cat,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zw" = (/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zx" = (/obj/machinery/vending/medical,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zy" = (/obj/structure/flora/pottedplant/orientaltree,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zz" = (/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zA" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/adv,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zB" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zC" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zD" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zE" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/o2{pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zF" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zG" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/emergency,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zH" = (/obj/effect/floor_decal/corner/paleblue,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zI" = (/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zJ" = (/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = 0; pixel_y = -32},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zK" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"zL" = (/obj/structure/closet/wardrobe/captain,/obj/item/weapon/gun/projectile/revolver/mateba,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zM" = (/obj/machinery/light{dir = 1},/obj/structure/bookcase,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zN" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zO" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"zP" = (/obj/machinery/photocopier,/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"zQ" = (/obj/structure/table/steel_reinforced,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zR" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/lipstick/black,/obj/item/weapon/lipstick/jade,/obj/item/weapon/lipstick/purple,/obj/item/weapon/lipstick,/obj/item/weapon/lipstick/random,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zS" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/armpit,/obj/item/clothing/accessory/holster/hip,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/webbing,/obj/item/clothing/accessory/storage/webbing,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/scarf/white,/obj/item/clothing/accessory/scarf/lightblue,/obj/item/clothing/accessory/scarf/red,/obj/item/clothing/accessory/scarf/purple,/obj/item/clothing/accessory/armband/science,/obj/item/clothing/accessory/armband/med,/obj/item/clothing/accessory/armband/engine,/obj/item/clothing/accessory/armband/cargo,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/medal/nobel_science,/obj/item/clothing/accessory/medal/silver,/obj/item/clothing/accessory/medal/gold,/obj/item/clothing/accessory/medal/bronze_heart,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zT" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zU" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/suit/hgpirate,/obj/item/clothing/suit/imperium_monk,/obj/item/clothing/suit/leathercoat,/obj/item/clothing/suit/justice,/obj/item/clothing/suit/justice,/obj/item/clothing/suit/justice,/obj/item/clothing/suit/justice,/obj/item/clothing/suit/justice,/obj/item/clothing/suit/pirate,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zV" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/closet/crate/solar,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"zW" = (/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zX" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zY" = (/obj/machinery/door/airlock/glass_medical{id_tag = "MedbayFoyer"; name = "Medbay"; req_access = list(5)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"zZ" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Aa" = (/obj/structure/bed/chair/office/light{dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ab" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ac" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/paleblue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ad" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ae" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/corner/paleblue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Af" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
+"Ag" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/centcom/terminal)
+"Ah" = (/turf/unsimulated/wall{icon = 'icons/obj/doors/Doormaint.dmi'; icon_state = "door_closed"; name = "Sealed Door"},/area/centcom/terminal)
+"Ai" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/terminal)
+"Aj" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/terminal)
+"Ak" = (/obj/structure/sign/directions/cargo{dir = 1},/obj/structure/sign/directions/security{dir = 1; pixel_y = -10},/obj/structure/sign/directions/engineering{dir = 1; pixel_y = 10},/turf/unsimulated/wall,/area/centcom/terminal)
+"Al" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"Am" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = list(160)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"An" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"Ao" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"Ap" = (/obj/structure/table/woodentable,/obj/item/device/laptop,/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"Aq" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"Ar" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"As" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "tradeportshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/shuttle/merchant/home)
+"At" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/machinery/atm{pixel_x = -32},/obj/machinery/meter,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"Au" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "trade2_control"; pixel_x = -22; pixel_y = -32; req_one_access = list(150)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"Av" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 10},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"Aw" = (/obj/structure/table/standard,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"Ax" = (/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"Ay" = (/obj/structure/table/standard,/obj/item/stack/material/steel{amount = 2},/obj/item/stack/material/steel{amount = 2},/obj/item/stack/material/glass{amount = 15},/obj/item/stack/material/glass{amount = 15},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"Az" = (/obj/structure/sign/directions/medical{dir = 1; pixel_y = -10},/obj/structure/sign/directions/science{dir = 1},/turf/unsimulated/wall,/area/centcom/terminal)
+"AA" = (/obj/machinery/door/airlock/glass{name = "Dock"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"AB" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"AC" = (/obj/effect/floor_decal/corner/white/full{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"AD" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AE" = (/obj/structure/table/glass,/obj/machinery/computer3/wall_comp/telescreen/entertainment{pixel_y = -35},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AF" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AG" = (/obj/machinery/light,/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"AH" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"AI" = (/obj/structure/flora/pottedplant{icon_state = "plant-10"},/turf/simulated/floor/carpet,/area/shuttle/merchant/home)
+"AJ" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_inner"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AK" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_inner"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AL" = (/obj/machinery/vending/engivend,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AM" = (/obj/machinery/vending/tool,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AN" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"AO" = (/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"AP" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"AQ" = (/obj/effect/floor_decal/corner/white/diagonal{icon_state = "corner_white_diagonal"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"AR" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"AS" = (/obj/structure/table/standard,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"AT" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1331; id_tag = "trade2_vent"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1331; id_tag = "trade2_control"; pixel_x = -24; req_access = list(150); tag_airpump = "trade2_vent"; tag_chamber_sensor = "trade2_sensor"; tag_exterior_door = "trade2_shuttle_outer"; tag_interior_door = "trade2_shuttle_inner"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AU" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "trade2_sensor"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1331; id_tag = "trade2_vent"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AV" = (/obj/structure/table/standard,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"AW" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"AX" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"AY" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_outer"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"AZ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "trade2_control"; pixel_x = 24; req_one_access = list(150)},/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "trade2_shuttle_outer"; locked = 1; name = "Ship Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"Ba" = (/obj/structure/table/standard,/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Bb" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Bc" = (/obj/effect/floor_decal/industrial/loading{icon_state = "loadingarea"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Bd" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Be" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Bf" = (/obj/machinery/light{dir = 8},/obj/structure/bed/chair/shuttle{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Bg" = (/obj/machinery/light{dir = 8},/obj/structure/closet/emcloset,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Bh" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/closet/emcloset,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Bi" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"Bj" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"Bk" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Bl" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Bm" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom)
+"Bn" = (/obj/structure/bed/chair/shuttle{dir = 1},/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Bo" = (/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Bp" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/sign/dock/one,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Bq" = (/obj/structure/table/standard,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Br" = (/obj/structure/lattice,/turf/space,/area/space)
+"Bs" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space,/area/space)
+"Bt" = (/obj/structure/sign/warning/docking_area,/turf/unsimulated/wall,/area/centcom/terminal)
+"Bu" = (/obj/structure/table/standard,/obj/effect/floor_decal/industrial/warning/corner,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Bv" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Bw" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Bx" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"By" = (/turf/simulated/shuttle/wall,/area/shuttle/escape/centcom)
+"Bz" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
+"BA" = (/obj/effect/floor_decal/industrial/warning,/obj/effect/floor_decal/sign/dock/two,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BB" = (/obj/effect/floor_decal/corner/white{dir = 6; icon_state = "corner_white"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BC" = (/obj/effect/floor_decal/corner/white{dir = 5},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BD" = (/obj/effect/floor_decal/corner/white{icon_state = "corner_white"; dir = 1},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BE" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/escape/centcom)
+"BF" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"BG" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"BH" = (/obj/machinery/computer/shuttle_control/emergency,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"BI" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"BJ" = (/obj/effect/floor_decal/corner/white,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BK" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/wizard_station)
+"BL" = (/obj/effect/wingrille_spawn/reinforced/crescent,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"BM" = (/obj/effect/floor_decal/corner/white{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BN" = (/obj/effect/floor_decal/corner/white{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"BO" = (/obj/machinery/computer/security,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BP" = (/obj/structure/bed/chair/shuttle{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BQ" = (/obj/structure/bed/chair/shuttle{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BR" = (/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BS" = (/obj/structure/bed/chair/shuttle{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BT" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BU" = (/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "white"},/area/wizard_station)
+"BV" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine{pixel_x = -4; pixel_y = 10},/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "white"},/area/wizard_station)
+"BW" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/wizard_station)
+"BX" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"BY" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"BZ" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_shuttle"; pixel_x = 0; pixel_y = -25; req_one_access = list(13); tag_door = "escape_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Ca" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Cb" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Cc" = (/obj/machinery/computer/arcade/battle,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Cd" = (/obj/machinery/computer/arcade/orion_trail,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Ce" = (/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "white"},/area/wizard_station)
+"Cf" = (/turf/unsimulated/floor{icon_state = "white"},/area/wizard_station)
+"Cg" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/toy/figure/ninja,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
+"Ch" = (/obj/structure/bed,/obj/item/weapon/bedsheet/rd,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
+"Ci" = (/obj/structure/AIcore/deactivated,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Cj" = (/obj/structure/bed/chair/wood/wings,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = 30},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Ck" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Cl" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Cm" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "white"},/area/wizard_station)
+"Cn" = (/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
+"Co" = (/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
+"Cp" = (/obj/structure/table/woodentable,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/weapon/ore/slag{desc = "Well at least Arthur doesn't have to share now..."; name = "pet rock"},/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
+"Cq" = (/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = 30},/obj/structure/bedsheetbin,/obj/structure/table/woodentable,/turf/unsimulated/floor{icon_state = "lino"},/area/wizard_station)
+"Cr" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Cs" = (/obj/machinery/door/airlock/glass_command{name = "Escape Shuttle Cockpit"; req_access = list(19)},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Ct" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Cu" = (/obj/structure/table/woodentable,/obj/item/device/radio/headset,/obj/item/weapon/spacecash/c500,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Cv" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Cw" = (/obj/item/weapon/reagent_containers/food/snacks/spellburger{pixel_y = 8},/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "white"},/area/wizard_station)
+"Cx" = (/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Cy" = (/obj/structure/undies_wardrobe,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Cz" = (/turf/simulated/shuttle/wall/no_join,/area/shuttle/escape/centcom)
+"CA" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/tool/crowbar,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"CB" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"CC" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"CD" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"CE" = (/obj/structure/table/woodentable,/obj/item/weapon/book/codex/corp_regs,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"CF" = (/obj/machinery/door/airlock/hatch,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"CG" = (/obj/machinery/door/airlock/hatch,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"CH" = (/obj/item/weapon/antag_spawner/technomancer_apprentice,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"CI" = (/obj/structure/table/woodentable,/obj/item/clothing/shoes/boots/workboots,/obj/item/clothing/under/technomancer,/obj/item/clothing/head/technomancer,/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/storage/box/syndie_kit/chameleon,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"CJ" = (/obj/machinery/door/airlock/external{icon_state = "door_locked"; locked = 1},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"CK" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_dock_airlock"; locked = 1; name = "Arrivals Airlock"; req_access = list(13)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"CL" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"CM" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 1},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"CN" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
+"CO" = (/obj/machinery/vending/hydroseeds,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
+"CP" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"CQ" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"CR" = (/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"CS" = (/obj/structure/table/woodentable,/obj/machinery/librarycomp{pixel_y = 6},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"CT" = (/obj/machinery/media/jukebox,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"CU" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
+"CV" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"CW" = (/mob/living/simple_mob/animal/passive/mouse/gray{desc = "He looks kingly."; name = "Arthur"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"CX" = (/obj/structure/flora/pottedplant{icon_state = "plant-24"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"CY" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"CZ" = (/obj/structure/bed/chair/shuttle{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Da" = (/obj/structure/bed/chair/shuttle{dir = 4},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Db" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/bed/chair/shuttle{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Dc" = (/obj/machinery/photocopier,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Dd" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"De" = (/obj/structure/flora/pottedplant{icon_state = "plant-08"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Df" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dg" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dh" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Di" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dj" = (/obj/structure/bed/chair/shuttle{dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Dk" = (/obj/structure/bed/chair/shuttle{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Dl" = (/obj/machinery/the_singularitygen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dm" = (/obj/machinery/crystal,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Dn" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Do" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/arrow/quill,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Dp" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/stock_parts/matter_bin/super,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dq" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"Dr" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_dock"; name = "docking port controller"; pixel_x = 25; pixel_y = 0; req_one_access = list(13); tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Ds" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"Dt" = (/obj/machinery/computer/communications,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Du" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dv" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dw" = (/obj/machinery/computer/message_monitor,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dx" = (/obj/structure/frame/computer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dy" = (/obj/structure/table/steel_reinforced,/obj/item/stack/telecrystal,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Dz" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DA" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"DB" = (/obj/structure/flora/pottedplant{icon_state = "plant-04"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DC" = (/obj/structure/sign/electricshock,/turf/simulated/shuttle/wall/dark/hard_corner,/area/wizard_station)
+"DD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"DE" = (/obj/machinery/computer/shuttle,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"DF" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"DG" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"DH" = (/obj/machinery/computer/crew,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"DI" = (/obj/machinery/computer/power_monitor,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DJ" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/computer/station_alert/all,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DK" = (/obj/structure/table/steel_reinforced,/obj/item/device/mmi/radio_enabled,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"DL" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"DM" = (/obj/structure/flora/pottedplant{icon_state = "plant-03"},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DN" = (/obj/structure/reagent_dispensers/watertank,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"DO" = (/obj/machinery/power/port_gen/pacman,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"DP" = (/obj/structure/table/steel_reinforced,/obj/item/xenos_claw,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DQ" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/coin/diamond,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"DR" = (/obj/structure/table/steel_reinforced,/obj/item/broken_device,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"DS" = (/obj/structure/table/steel_reinforced,/obj/item/organ/internal/stack,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DT" = (/obj/machinery/floodlight,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"DU" = (/obj/machinery/mecha_part_fabricator,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DV" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DW" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/book/manual/ripley_build_and_repair,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DX" = (/obj/item/device/suit_cooling_unit,/obj/structure/table/steel_reinforced,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = 30},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DY" = (/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = 30},/obj/item/target,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"DZ" = (/obj/item/target/syndicate,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Ea" = (/obj/structure/table/steel_reinforced,/obj/item/toy/sword,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Eb" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/structure/table/steel_reinforced,/obj/item/weapon/gun/energy/laser/practice,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Ec" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access = list(1)},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom)
+"Ed" = (/obj/machinery/door/airlock/glass_medical{name = "Escape Shuttle Infirmary"; req_access = list(5)},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Ee" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Ef" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/book/manual/engineering_hacking,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Eg" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Eh" = (/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Ei" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Ej" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Subversive Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/obj/item/target,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Ek" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom)
+"El" = (/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom)
+"Em" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom)
+"En" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Eo" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Ep" = (/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Eq" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/tool/wrench,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Er" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"Es" = (/obj/item/robot_parts/r_arm,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"Et" = (/obj/item/robot_parts/l_leg,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"Eu" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/book/manual/robotics_cyborgs,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Ev" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Ew" = (/obj/machinery/power/emitter{anchored = 1; desc = "It is a heavy duty industrial laser used in a very non-industrial way."; name = "teleport defender"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Ex" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Ey" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"Ez" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EA" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EB" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"EC" = (/obj/item/robot_parts/r_leg,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"ED" = (/obj/item/robot_parts/chest,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EE" = (/obj/item/robot_parts/l_arm,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EF" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"EG" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"EH" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EI" = (/obj/structure/target_stake,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EJ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EK" = (/obj/machinery/light,/turf/simulated/shuttle/floor/red,/area/shuttle/escape/centcom)
+"EL" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"EM" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"EN" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"EO" = (/obj/machinery/sleep_console{dir = 4},/obj/machinery/light,/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"EP" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
+"EQ" = (/obj/structure/AIcore,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"ER" = (/obj/structure/flora/pottedplant{icon_state = "plant-20"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"ES" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"ET" = (/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EU" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EV" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/shuttle/escape/centcom)
+"EW" = (/obj/effect/decal/mecha_wreckage/phazon,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EX" = (/obj/item/robot_parts/head,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/wizard_station)
+"EY" = (/obj/item/weapon/firstaid_arm_assembly,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"EZ" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/escape/centcom)
+"Fa" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating/airless,/area/shuttle/escape/centcom)
+"Fb" = (/obj/item/weapon/bucket_sensor,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Fc" = (/obj/item/weapon/farmbot_arm_assembly,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Fd" = (/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Fe" = (/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Ff" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Fg" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Fh" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
+"Fi" = (/obj/effect/floor_decal/industrial/warning,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
+"Fj" = (/turf/unsimulated/wall,/area/ninja_dojo/dojo)
+"Fk" = (/turf/unsimulated/wall,/area/beach)
+"Fl" = (/turf/unsimulated/mineral,/area/ninja_dojo/dojo)
+"Fm" = (/turf/unsimulated/beach/sand{density = 1; opacity = 1},/area/beach)
+"Fn" = (/turf/simulated/mineral,/area/ninja_dojo/dojo)
+"Fo" = (/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo)
+"Fp" = (/obj/effect/floor_decal/asteroid,/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo)
+"Fq" = (/turf/unsimulated/beach/sand,/area/beach)
+"Fr" = (/obj/structure/signpost,/turf/unsimulated/beach/sand,/area/beach)
+"Fs" = (/obj/structure/closet,/turf/unsimulated/beach/sand,/area/beach)
+"Ft" = (/turf/simulated/shuttle/wall/voidcraft/green,/area/ninja_dojo/start)
+"Fu" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand,/area/beach)
+"Fv" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach)
+"Fw" = (/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach)
+"Fx" = (/obj/item/target/alien,/turf/unsimulated/floor{icon = 'icons/turf/flooring/wood.dmi'; icon_state = "wood_broken2"},/area/ninja_dojo/dojo)
+"Fy" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Fz" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/flame/candle,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"FA" = (/obj/structure/table/wooden_reinforced,/obj/item/weapon/material/sword/katana,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"FB" = (/obj/machinery/space_heater,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"FC" = (/obj/item/target,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"FD" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/ninja_dojo/start)
+"FE" = (/turf/simulated/shuttle/wall/voidcraft/blue,/area/ninja_dojo/start)
+"FF" = (/obj/effect/overlay/palmtree_r,/turf/unsimulated/beach/sand,/area/beach)
+"FG" = (/obj/item/target/syndicate,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"FH" = (/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 9},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"FI" = (/obj/effect/floor_decal/carpet{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"FJ" = (/obj/effect/floor_decal/carpet{dir = 1},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"FK" = (/obj/effect/wingrille_spawn/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/ninja_dojo/dojo)
+"FL" = (/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
+"FM" = (/obj/machinery/teleport/hub,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/ninja_dojo/dojo)
+"FN" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/ninja_dojo/dojo)
+"FO" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/ninja_dojo/dojo)
+"FP" = (/obj/effect/floor_decal/carpet{dir = 8},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"FQ" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"FR" = (/obj/effect/floor_decal/carpet{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"FS" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/ninja_dojo/dojo)
+"FT" = (/turf/simulated/shuttle/wall/voidcraft/hard_corner,/area/ninja_dojo/start)
+"FU" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 2; start_pressure = 740.5},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"FV" = (/obj/machinery/computer/teleporter,/turf/simulated/shuttle/plating,/area/ninja_dojo/start)
+"FW" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/plating,/area/ninja_dojo/start)
+"FX" = (/obj/machinery/teleport/hub,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/shuttle/plating,/area/ninja_dojo/start)
+"FY" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"FZ" = (/obj/structure/table/standard,/turf/unsimulated/beach/sand,/area/beach)
+"Ga" = (/obj/structure/table/standard,/obj/item/clothing/under/color/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach)
+"Gb" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"Gc" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'},/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"Gd" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/ninja_dojo/dojo)
+"Ge" = (/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1331; id_tag = "ninja_shuttle_outer"; name = "Ship External Hatch"; req_access = list(150)},/obj/machinery/door/blast/regular{density = 0; dir = 8; icon_state = "pdoor0"; id = "blastninja"; name = "Outer Airlock"; opacity = 0},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gf" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "ninja_shuttle_sensor"; pixel_x = 0; pixel_y = 28},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gg" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/meter,/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"Gh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gi" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"Gj" = (/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gk" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/combat,/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gl" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/unsimulated/beach/sand,/area/beach)
+"Gm" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/beach/sand,/area/beach)
+"Gn" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/beach)
+"Go" = (/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"Gp" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331; id_tag = "ninja_shuttle"; pixel_x = 0; pixel_y = -25; req_access = list(150)},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "ninja_shuttle_pump"},/obj/machinery/button/remote/blast_door{id = "blastninja"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gq" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1331; id_tag = "ninja_shuttle_inner"; name = "Ship Internal Hatch"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gr" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "ninja_shuttle"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gs" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"Gt" = (/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 10},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"Gu" = (/obj/effect/floor_decal/carpet,/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"Gv" = (/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet,/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/ninja_dojo/dojo)
+"Gw" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"Gx" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/computer/security,/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"Gy" = (/turf/unsimulated/floor{icon = 'icons/turf/flooring/wood.dmi'; icon_state = "wood_broken1"},/area/ninja_dojo/dojo)
+"Gz" = (/obj/structure/table/steel_reinforced,/obj/item/device/paicard,/obj/item/device/pda/syndicate,/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"GA" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/shuttle/floor/voidcraft/dark,/area/ninja_dojo/start)
+"GB" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1; pixel_y = 3},/obj/machinery/button/remote/blast_door{id = "ninjawindow"; name = "remote shutter control"; pixel_x = 0; pixel_y = -25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"GC" = (/obj/structure/table/bench/wooden,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"GD" = (/obj/structure/flight_right{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"GE" = (/obj/machinery/computer/shuttle_control/web/ninja{icon_state = "flightcomp_center"; dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"GF" = (/obj/structure/flight_left{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start)
+"GG" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/obj/item/toy/plushie/mouse{desc = "A plushie of a small fuzzy rodent."; name = "Woodrat"},/turf/unsimulated/beach/sand,/area/beach)
+"GH" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
+"GI" = (/obj/machinery/vending/coffee,/turf/unsimulated/beach/sand,/area/beach)
+"GJ" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"GK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ninjawindow"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/ninja_dojo/start)
+"GL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ninjawindow"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/ninja_dojo/start)
+"GM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "ninjawindow"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/ninja_dojo/start)
+"GN" = (/obj/item/clothing/head/collectable/paper,/turf/unsimulated/beach/sand,/area/beach)
+"GO" = (/obj/structure/flora/tree/pine,/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo)
+"GP" = (/obj/structure/flora/ausbushes/palebush,/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo)
+"GQ" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo)
+"GR" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "asteroid"},/area/ninja_dojo/dojo)
+"GS" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/ninja_dojo/dojo)
+"GT" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/unsimulated/floor{icon_state = "asteroid"},/area/ninja_dojo/dojo)
+"GU" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{dir = 2; icon = 'icons/turf/snow_new.dmi'; icon_state = "snow"; name = "snow"},/area/ninja_dojo/dojo)
+"GV" = (/turf/unsimulated/floor{icon_state = "sandwater"},/area/beach)
+"GW" = (/turf/unsimulated/beach/coastline{density = 1; opacity = 1},/area/beach)
+"GX" = (/turf/unsimulated/beach/coastline,/area/beach)
+"GY" = (/turf/unsimulated/beach/water{density = 1; opacity = 1},/area/beach)
+"GZ" = (/turf/unsimulated/beach/water,/area/beach)
+"Ha" = (/obj/structure/table/wooden_reinforced,/obj/machinery/recharger{pixel_y = 0},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hb" = (/obj/structure/table/wooden_reinforced,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hc" = (/turf/unsimulated/wall{icon = 'icons/obj/doors/Dooruranium.dmi'; icon_state = "door_closed"; name = "Sealed Door"},/area/ninja_dojo/dojo)
+"Hd" = (/obj/structure/table/glass,/obj/item/clothing/mask/balaclava/tactical{pixel_x = 2; pixel_y = 2},/obj/item/clothing/mask/balaclava,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"He" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/fortunecookie,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hf" = (/obj/structure/table/glass,/obj/item/clothing/mask/balaclava,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hg" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hh" = (/obj/structure/table/glass,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hi" = (/obj/structure/toilet{dir = 4},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja_dojo/dojo)
+"Hj" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja_dojo/dojo)
+"Hk" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja_dojo/dojo)
+"Hl" = (/obj/structure/table/bench/wooden,/obj/effect/landmark{name = "ninjastart"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hm" = (/obj/effect/landmark{name = "ninjastart"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hn" = (/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/table/glass,/obj/item/weapon/towel{color = "#FF6666"; name = "light red towel"},/obj/item/weapon/towel{color = "#FF6666"; name = "light red towel"},/obj/random/soap,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja_dojo/dojo)
+"Ho" = (/obj/machinery/recharger{pixel_y = 0},/obj/structure/table/steel_reinforced,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hp" = (/obj/structure/table/wooden_reinforced,/obj/item/device/radio/uplink,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hq" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja_dojo/dojo)
+"Hr" = (/obj/item/weapon/rig/light/stealth,/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"Hs" = (/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"Ht" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'},/turf/unsimulated/floor{icon_state = "white"},/area/ninja_dojo/dojo)
+"Hu" = (/obj/machinery/door/morgue,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/ninja_dojo/dojo)
+"Hv" = (/obj/structure/closet/crate,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"Hw" = (/obj/item/broken_device,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"Hx" = (/turf/unsimulated/floor{icon_state = "white"},/area/ninja_dojo/dojo)
+"Hy" = (/obj/machinery/door/morgue,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja_dojo/dojo)
+"Hz" = (/obj/structure/table/steel_reinforced,/obj/item/rig_module/chem_dispenser/ninja,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"HA" = (/obj/structure/bed/chair/office/dark,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"HB" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1; pixel_y = 3},/obj/random/tech_supply,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"HC" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja_dojo/dojo)
+"HD" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = -1},/obj/structure/curtain/open/shower/medical,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/ninja_dojo/dojo)
+"HE" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/obj/random/powercell,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"HF" = (/obj/structure/table/steel_reinforced,/obj/item/rig_module/mounted/energy_blade,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"HG" = (/obj/structure/table/steel_reinforced,/obj/item/rig_module/fabricator/energy_net,/obj/item/rig_module/vision/multi,/turf/unsimulated/floor{icon_state = "dark"},/area/ninja_dojo/dojo)
+"HH" = (/obj/machinery/sleeper{dir = 8},/turf/unsimulated/floor{icon_state = "white"},/area/ninja_dojo/dojo)
+"HI" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon_state = "white"},/area/ninja_dojo/dojo)
+"HJ" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/adv,/turf/unsimulated/floor{icon_state = "white"},/area/ninja_dojo/dojo)
+"HK" = (/turf/unsimulated/wall,/area/syndicate_station)
+"HL" = (/obj/machinery/space_heater,/turf/unsimulated/floor{icon = 'icons/turf/flooring/wood.dmi'; icon_state = "wood_broken3"},/area/ninja_dojo/dojo)
+"HM" = (/turf/unsimulated/wall,/area/syndicate_mothership/elite_squad)
+"HN" = (/turf/unsimulated/wall,/area/skipjack_station)
+"HO" = (/turf/unsimulated/wall,/area/prison/solitary)
+"HP" = (/obj/structure/table/rack,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera_film,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"HQ" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency{pixel_x = -3; pixel_y = -3},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency{pixel_x = -3; pixel_y = -3},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"HR" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/plasmastun,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"HS" = (/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"HT" = (/obj/structure/table/rack,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/material/knife/tacknife/combatknife,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"HU" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/obj/item/weapon/gun/energy/ionrifle,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"HV" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
+"HW" = (/obj/mecha/combat/marauder/mauler,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
+"HX" = (/obj/machinery/mech_recharger,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
+"HY" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/weapon/gun/projectile/automatic/sts35,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/obj/item/ammo_magazine/m545,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"HZ" = (/turf/simulated/shuttle/wall/dark,/area/shuttle/syndicate_elite/mothership)
+"Ia" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/syndicate_elite/mothership)
+"Ib" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/syndicate_elite/mothership)
+"Ic" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/syndicate_elite/mothership)
+"Id" = (/turf/simulated/mineral,/area/space)
+"Ie" = (/turf/simulated/mineral,/area/skipjack_station)
+"If" = (/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"Ig" = (/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two;Airlock Three;Airlock Four"; child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock;escape_dock_snorth_airlock;escape_dock_ssouth_airlock"; frequency = 1380; id_tag = "escape_dock"; pixel_y = -32; req_one_access = list(13)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"Ih" = (/obj/structure/table/standard,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"Ii" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "cobweb1"},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"Ij" = (/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"Ik" = (/obj/structure/bed,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/prison/solitary)
+"Il" = (/obj/effect/landmark{name = "prisonwarp"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/prison/solitary)
+"Im" = (/obj/structure/table/rack,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"In" = (/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Io" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Ip" = (/mob/living/silicon/decoy{icon_state = "ai-malf"; name = "GLaDOS"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Iq" = (/obj/structure/window/reinforced,/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 1},/turf/simulated/floor/airless,/area/shuttle/syndicate_elite/mothership)
+"Ir" = (/obj/structure/inflatable,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Is" = (/obj/item/weapon/ore,/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"It" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Iu" = (/obj/structure/table/rack,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/obj/item/device/flashlight/maglight,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Iv" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/storage/box/smokes,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Iw" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/obj/item/clothing/accessory/storage/white_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Ix" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 1; frequency = 1213; listening = 1; name = "Syndicate Ops Intercom"; pixel_y = 26; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Iy" = (/obj/machinery/door/airlock/glass_security{name = "Airlock"; req_access = list(150)},/obj/machinery/door/blast/regular{id = "syndicate_elite_mech_room"; name = "Mech Room Door"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
+"Iz" = (/obj/effect/wingrille_spawn/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership/elite_squad)
+"IA" = (/turf/simulated/shuttle/wall/dark/no_join,/area/shuttle/syndicate_elite/mothership)
+"IB" = (/obj/effect/landmark{name = "Syndicate-Commando-Bomb"},/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership)
+"IC" = (/obj/structure/inflatable,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"ID" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"IE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"IF" = (/obj/item/weapon/tray{pixel_y = 5},/obj/structure/table/standard,/obj/item/weapon/material/knife/butch,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"IG" = (/obj/structure/table/rack,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/obj/item/device/flashlight/flare,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"IH" = (/obj/structure/table/rack,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/obj/item/device/binoculars,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"II" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"IJ" = (/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two"; child_tags_txt = "arrivals_dock_north_airlock;arrivals_dock_south_airlock"; frequency = 1380; id_tag = "arrivals_dock"; pixel_y = -32},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal)
+"IK" = (/obj/effect/wingrille_spawn/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_station)
+"IL" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
+"IM" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership/elite_squad)
+"IN" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/syndicate_mothership/elite_squad)
+"IO" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock"; req_access = list(150)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "syndicate_elite"; name = "Side Hull Door"; opacity = 0},/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership)
+"IP" = (/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership)
+"IQ" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"IR" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"IS" = (/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"IT" = (/obj/item/weapon/ore,/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"IU" = (/obj/structure/table/rack,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/obj/item/clothing/mask/balaclava,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"IV" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/shuttle/merc,/obj/item/weapon/pinpointer/shuttle/merc,/obj/item/weapon/pinpointer/shuttle/merc,/obj/item/weapon/pinpointer/shuttle/merc,/obj/item/weapon/pinpointer/shuttle/merc,/obj/item/weapon/pinpointer/shuttle/merc,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"IW" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"IX" = (/obj/structure/table/rack,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"IY" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/syndicate_mothership/elite_squad)
+"IZ" = (/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"Ja" = (/obj/item/weapon/ore,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jb" = (/obj/structure/urinal{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station)
+"Jc" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station)
+"Jd" = (/obj/structure/toilet,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station)
+"Je" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/suit/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/obj/item/clothing/head/helmet/space/vox/carapace,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jf" = (/obj/item/weapon/gun/energy/sonic,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jg" = (/obj/structure/closet/crate,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/under/vox/vox_casual,/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/under/vox/vox_robes,/obj/item/clothing/under/vox/vox_robes,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jh" = (/obj/structure/closet/crate,/obj/item/clothing/accessory/storage/vox,/obj/item/clothing/accessory/storage/vox,/obj/item/clothing/accessory/storage/vox,/obj/item/clothing/accessory/storage/vox,/obj/item/clothing/accessory/storage/vox,/obj/item/clothing/accessory/storage/vox,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Ji" = (/obj/structure/closet/crate,/obj/item/clothing/gloves/vox,/obj/item/clothing/gloves/vox,/obj/item/clothing/gloves/vox,/obj/item/clothing/gloves/vox,/obj/item/clothing/gloves/vox,/obj/item/clothing/gloves/vox,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/shoes/magboots/vox,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jj" = (/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jk" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jl" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/obj/item/clothing/suit/storage/vest/heavy/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Jm" = (/obj/effect/landmark{name = "Syndicate-Commando"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
+"Jn" = (/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership/elite_squad)
+"Jo" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership)
+"Jp" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership)
+"Jq" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"Jr" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"Js" = (/obj/structure/mirror/raider{pixel_x = -32},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station)
+"Jt" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station)
+"Ju" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station)
+"Jv" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/suit/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/obj/item/clothing/head/helmet/space/vox/medic,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jw" = (/obj/item/clothing/glasses/night/vox,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jx" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/darkmatter,/obj/item/weapon/gun/energy/darkmatter,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Jy" = (/obj/machinery/door/airlock/centcom{name = "Storage"; opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Jz" = (/obj/machinery/door/airlock/centcom{icon_state = "door_locked"; locked = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"JA" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon = 'icons/turf/flooring/wood.dmi'; icon_state = "wood_broken1"},/area/skipjack_station)
+"JB" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"JC" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/brown,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"JD" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"JE" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"JF" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"JG" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{dir = 4; pixel_x = -28; pixel_y = 0},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station)
+"JH" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/skipjack_station)
+"JI" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/pressure,/obj/item/clothing/suit/space/vox/pressure,/obj/item/clothing/head/helmet/space/vox/pressure,/obj/item/clothing/head/helmet/space/vox/pressure,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"JJ" = (/obj/item/weapon/gun/energy/plasmastun,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"JK" = (/obj/item/weapon/gun/launcher/crossbow,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"JL" = (/obj/fiftyspawner/rods,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"JM" = (/obj/item/clothing/mask/gas/swat/vox,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"JN" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas/swat/vox,/obj/item/clothing/mask/gas/swat/vox,/obj/item/clothing/mask/gas/swat/vox,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"JO" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"JP" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"JQ" = (/obj/structure/reagent_dispensers/beerkeg/fakenuke{desc = "Something seems off about this bomb."; name = "\improper Nuclear Fission Explosive"},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"JR" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"JS" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"JT" = (/obj/structure/curtain/open/shower/security,/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = -1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"JU" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"JV" = (/obj/structure/curtain/open/shower/security,/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = -1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"JW" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership)
+"JX" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"JY" = (/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"JZ" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 9},/obj/effect/floor_decal/carpet{dir = 5},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/skipjack_station)
+"Ka" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"Kb" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"Kc" = (/obj/structure/kitchenspike,/turf/unsimulated/floor{icon_state = "white"},/area/skipjack_station)
+"Kd" = (/turf/unsimulated/wall{desc = "That looks like it doesn't open easily."; icon = 'icons/obj/doors/rapid_pdoor.dmi'; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/skipjack_station)
+"Ke" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Kf" = (/obj/machinery/door/airlock/centcom{name = "Armory"; opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Kg" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/glasses/square{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"Kh" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"Ki" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"Kj" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"Kk" = (/obj/machinery/recharge_station,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"Kl" = (/obj/machinery/computer/pod{id = "syndicate_elite"; name = "Hull Door Control"},/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership)
+"Km" = (/obj/machinery/computer/syndicate_elite_shuttle,/turf/simulated/shuttle/floor/skipjack,/area/shuttle/syndicate_elite/mothership)
+"Kn" = (/turf/unsimulated/floor{icon = 'icons/turf/flooring/wood.dmi'; icon_state = "wood_broken3"},/area/skipjack_station)
+"Ko" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/skipjack_station)
+"Kp" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/skipjack_station)
+"Kq" = (/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/skipjack_station)
+"Kr" = (/obj/item/xenos_claw,/obj/item/organ/internal/brain/vox,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"Ks" = (/obj/item/weapon/ore,/turf/unsimulated/floor{name = "plating"; icon_state = "asteroid_dug"},/area/skipjack_station)
+"Kt" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/syndicate_station)
+"Ku" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"Kv" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"Kw" = (/obj/structure/mirror{dir = 4; pixel_x = -32; pixel_y = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"Kx" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/shuttle/syndicate_elite/mothership)
+"Ky" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock"; req_access = list(150)},/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "syndicate_elite"; name = "Front Hull Door"; opacity = 1},/turf/simulated/shuttle/plating,/area/shuttle/syndicate_elite/mothership)
+"Kz" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{icon = 'icons/turf/flooring/wood.dmi'; icon_state = "wood_broken2"},/area/skipjack_station)
+"KA" = (/obj/effect/floor_decal/carpet{dir = 8},/obj/effect/floor_decal/carpet{dir = 4},/obj/effect/floor_decal/carpet{dir = 10},/obj/effect/floor_decal/carpet{dir = 6},/turf/unsimulated/floor{dir = 2; icon_state = "carpet"},/area/skipjack_station)
+"KB" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"KC" = (/obj/structure/table/rack,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"KD" = (/obj/structure/table/rack,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"KE" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/spikethrower,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"KF" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"KG" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"KH" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"KI" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/weapon/tank/jetpack/carbondioxide,/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"KJ" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"KK" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = 3; pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/bottle/wine{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"KL" = (/obj/structure/table/standard,/obj/item/weapon/towel{color = "#ff0000"; name = "red towel"},/obj/item/weapon/towel{color = "#ff0000"; name = "red towel"},/obj/item/weapon/towel{color = "#ff0000"; name = "red towel"},/obj/item/weapon/towel{color = "#ff0000"; name = "red towel"},/obj/item/weapon/towel{color = "#ff0000"; name = "red towel"},/obj/item/weapon/soap/syndie,/obj/item/weapon/soap/syndie,/turf/simulated/floor/tiled/freezer,/area/syndicate_station)
+"KM" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"KN" = (/obj/structure/toilet{dir = 8},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"KO" = (/turf/simulated/floor/airless,/area/shuttle/syndicate_elite/mothership)
+"KP" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"KQ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"KR" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hop,/turf/unsimulated/floor{icon_state = "wood"},/area/skipjack_station)
+"KS" = (/obj/item/weapon/ore,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"KT" = (/obj/item/clothing/head/xenos,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"KU" = (/obj/machinery/door/airlock/centcom{name = "Suit Storage"; opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"KV" = (/obj/machinery/door/airlock/centcom{name = "Kitchen"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_station)
+"KW" = (/obj/machinery/door/airlock{name = "Restroom"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_station)
+"KX" = (/obj/effect/wingrille_spawn/reinforced,/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/skipjack_station)
+"KY" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"KZ" = (/obj/item/weapon/storage/box,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"La" = (/obj/item/clothing/mask/gas/swat{desc = "A close-fitting mask clearly not made for a human face."; name = "\improper alien mask"},/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"Lb" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Lc" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Ld" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Le" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"Lf" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"Lg" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"Lh" = (/obj/item/weapon/storage/box/syndie_kit/clerical,/obj/structure/table/standard,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"Li" = (/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station)
+"Lj" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/hos,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station)
+"Lk" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"Ll" = (/obj/effect/decal/cleanable/cobweb2,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"Lm" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"Ln" = (/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"},/turf/unsimulated/floor{icon_state = "steel_dirty"},/area/skipjack_station)
+"Lo" = (/obj/structure/table/rack,/obj/item/weapon/tank/vox,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"Lp" = (/obj/item/pizzabox/meat,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"Lq" = (/obj/structure/table/rack,/obj/item/weapon/storage/briefcase/inflatable,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Lr" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/blue,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/blue,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Ls" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/med,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/med,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Lt" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Lu" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"Lv" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station)
+"Lw" = (/obj/structure/table/standard,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/obj/item/device/radio/headset/syndicate/alt,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station)
+"Lx" = (/obj/structure/bed/chair,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"Ly" = (/obj/item/weapon/tank/vox,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"Lz" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"LA" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"LB" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"LC" = (/obj/machinery/door/airlock/centcom{name = "Barracks"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"LD" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"LE" = (/obj/structure/table/glass,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"LF" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"LG" = (/obj/machinery/door/airlock/centcom{name = "Barracks"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station)
+"LH" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/obj/item/clothing/glasses/sunglasses/prescription,/obj/item/clothing/glasses/sunglasses/prescription,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station)
+"LI" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"LJ" = (/obj/structure/table/steel,/obj/item/device/pda/syndicate,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"LK" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"LL" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/item/weapon/tank/vox,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"LM" = (/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"LN" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"LO" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"LP" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"LQ" = (/obj/structure/table/glass,/obj/item/device/paicard,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"LR" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station)
+"LS" = (/obj/structure/table/steel,/obj/item/device/radio/uplink,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"LT" = (/obj/item/weapon/gun/launcher/pneumatic,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"LU" = (/obj/structure/bed/chair/comfy/black{dir = 1},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station)
+"LV" = (/obj/structure/table/standard,/obj/item/device/pda/syndicate,/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station)
+"LW" = (/obj/item/weapon/storage/box/syndie_kit/spy,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"LX" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/skipjack_station)
+"LY" = (/obj/structure/ore_box,/turf/unsimulated/floor{icon_state = "asteroid"},/area/skipjack_station)
+"LZ" = (/obj/structure/table/rack,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/obj/item/device/suit_cooling_unit,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Ma" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Mb" = (/obj/structure/table/rack,/obj/item/weapon/rig/merc/empty,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Mc" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Md" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
+"Me" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"Mf" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
+"Mg" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/space,/area/space)
+"Mh" = (/obj/machinery/door/airlock/external{frequency = 1331; id_tag = "merc_base_hatch"; req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Mi" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space)
+"Mj" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"Mk" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"Ml" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Mm" = (/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station)
+"Mn" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/space)
+"Mo" = (/obj/structure/window/reinforced{dir = 8},/turf/space,/area/space)
+"Mp" = (/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start)
+"Mq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"Mr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"Ms" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"Mt" = (/turf/simulated/wall/skipjack,/area/skipjack_station/start)
+"Mu" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_west_control"; req_one_access = list(150)},/turf/simulated/wall/skipjack,/area/skipjack_station/start)
+"Mv" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_northwest_lock"; locked = 0; req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Mw" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_northeast_lock"; locked = 0; req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Mx" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_east_control"; req_access = list(150)},/turf/simulated/wall/skipjack,/area/skipjack_station/start)
+"My" = (/obj/structure/table/standard,/obj/random/projectile,/turf/unsimulated/floor{icon_state = "steel"},/area/skipjack_station)
+"Mz" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "smindicate"; name = "Outer Airlock"; opacity = 0},/obj/machinery/door/airlock/voidcraft{frequency = 1331; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"MA" = (/obj/structure/table/steel,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"MB" = (/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"MC" = (/obj/machinery/autolathe{hacked = 1; name = "hacked autolathe"},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"MD" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/airless,/area/syndicate_station/start)
+"ME" = (/obj/structure/shuttle/engine/router{icon_state = "router"; dir = 8},/turf/simulated/floor/airless,/area/syndicate_station/start)
+"MF" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start)
+"MG" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MH" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_west_sensor"; pixel_x = 25},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"ML" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MM" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MN" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start)
+"MO" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"MP" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "merc_shuttle_sensor"; pixel_x = 28; pixel_y = 8},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331; id_tag = "merc_shuttle"; pixel_x = 24; pixel_y = -2; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"MQ" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start)
+"MR" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 10},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start)
+"MS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"MT" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"MU" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"MV" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/structure/table/steel,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/item/weapon/plastique,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"MW" = (/obj/machinery/light{dir = 4},/obj/structure/table/rack,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"MX" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start)
+"MY" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"MZ" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent"; tag_exterior_door = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; tag_interior_door = "vox_southwest_lock"; pixel_x = 24; req_access = list(150); tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "vox_west_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Na" = (/obj/structure/flight_left,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Nb" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Nc" = (/obj/structure/flight_right,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Nd" = (/obj/machinery/computer/shuttle_control/web/heist,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Ne" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/head/pirate,/obj/item/clothing/glasses/thermal/plain/monocle,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Nf" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1331; id_tag = "skipjack_shuttle"; pixel_x = -24; req_access = list(150); tag_airpump = "vox_east_vent"; tag_chamber_sensor = "vox_east_sensor"; tag_exterior_door = "vox_northeast_lock"; tag_interior_door = "vox_southeast_lock"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "vox_east_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ng" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Nh" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Ni" = (/obj/machinery/atmospherics/pipe/manifold/visible{icon_state = "map"; dir = 8},/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1331; id_tag = "merc_shuttle_inner"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Nj" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/light/small,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Nk" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Nl" = (/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1331; id_tag = "merc_shuttle_inner"; name = "Ship External Access"; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Nm" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "merc_shuttle"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Nn" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"No" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Np" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Nq" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/structure/table/steel,/obj/item/weapon/storage/box/frags,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Nr" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_southwest_lock"; locked = 0; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ns" = (/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Nt" = (/obj/machinery/light/small{dir = 8},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Nu" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Nv" = (/obj/machinery/light/small{dir = 4},/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Nw" = (/obj/machinery/button/remote/blast_door{id = "skipjackshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/wall/skipjack,/area/skipjack_station/start)
+"Nx" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_closed"; id_tag = "vox_southeast_lock"; locked = 0; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ny" = (/obj/machinery/porta_turret/ai_defense,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Nz" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start)
+"NA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced/full,/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"NB" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/turf/simulated/shuttle/wall/voidcraft/red,/area/syndicate_station/start)
+"NC" = (/obj/structure/table/steel,/obj/effect/spawner/newbomb/timer/syndicate,/obj/item/weapon/tool/screwdriver,/obj/item/device/assembly/signaler{pixel_y = 2},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"ND" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"NF" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"NG" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/syndicate_station/start)
+"NH" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_west_control"; pixel_x = -22; req_one_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"NI" = (/obj/structure/table/rack,/obj/item/weapon/material/harpoon,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/random/rigsuit,/obj/random/multiple/voidsuit,/obj/random/multiple/voidsuit,/obj/random/energy,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"NJ" = (/obj/structure/table/rack,/obj/random/rigsuit,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"NK" = (/obj/structure/table/rack,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/random/multiple/voidsuit,/obj/random/multiple/voidsuit,/obj/random/energy,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"NL" = (/obj/structure/table/rack,/obj/item/clothing/mask/breath,/obj/machinery/light/small{dir = 8},/obj/random/multiple/voidsuit,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"NM" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_east_control"; pixel_x = 22; req_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"NN" = (/obj/structure/frame/computer,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NO" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NP" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NQ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/security/tactical/bandolier,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NR" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox/syndicate/powertools,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NS" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/item/ammo_magazine/m9mm,/obj/item/weapon/gun/projectile/pistol,/obj/item/ammo_magazine/m9mm,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NT" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/security,/obj/item/weapon/storage/belt/security,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NU" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NV" = (/obj/machinery/light,/obj/structure/closet/syndicate/suit{name = "suit closet"},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NW" = (/obj/machinery/light,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NX" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_telebay"; name = "remote shutter control"; pixel_x = 0; pixel_y = -25; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"NY" = (/obj/machinery/door/blast/regular{dir = 4; id = "syndieshutters_telebay"; name = "Outer Airlock"},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"NZ" = (/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Oa" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Ob" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Oc" = (/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Od" = (/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Oe" = (/obj/item/seeds/potatoseed,/obj/item/seeds/potatoseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/weapon/material/minihoe,/obj/item/weapon/beartrap,/obj/structure/table/steel,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Of" = (/obj/machinery/vending/hydroseeds,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Og" = (/obj/structure/table/rack,/obj/item/weapon/melee/energy/sword/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/weapon/tank/oxygen,/obj/item/weapon/pinpointer/shuttle/heist,/obj/item/weapon/pinpointer/shuttle/heist,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Oh" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/clothing/shoes/magboots,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Oi" = (/obj/machinery/washing_machine,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Oj" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/flame/lighter/zippo,/obj/item/clothing/gloves/yellow,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/weapon/card/emag,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ok" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"Ol" = (/obj/structure/table/steel_reinforced,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Om" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview"; dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"On" = (/obj/machinery/light{dir = 4},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Oo" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/structure/bed/chair/comfy/red{dir = 4; icon_state = "comfychair_preview"},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Op" = (/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Oq" = (/obj/machinery/light{dir = 4},/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Or" = (/obj/machinery/door/airlock/voidcraft{req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Os" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Ot" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Ou" = (/obj/structure/table/rack,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/obj/item/clothing/gloves/yellow,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Ov" = (/obj/structure/table/rack,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/item/clothing/glasses/night,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Ow" = (/obj/structure/table/rack,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Ox" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/simulated/mineral,/area/space)
+"Oy" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Oz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OC" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"OD" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/skipjack_station/start)
+"OE" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"OG" = (/obj/structure/flight_right{icon_state = "right"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"OH" = (/obj/machinery/turretid{pixel_x = 32; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"OI" = (/obj/structure/bed/chair/comfy/red{dir = 4; icon_state = "comfychair_preview"},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"OJ" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"OK" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"OL" = (/obj/machinery/turretid{pixel_x = 0; pixel_y = 32; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"OM" = (/obj/structure/table/rack,/obj/item/device/aicard,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"ON" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space,/area/space)
+"OO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OP" = (/obj/item/robot_parts/l_leg,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OQ" = (/obj/machinery/computer/shuttle_control/web/syndicate{dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"OR" = (/obj/structure/bed/chair/comfy/red{icon_state = "comfychair_preview"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"OS" = (/obj/machinery/door/airlock/voidcraft/vertical{req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"OT" = (/mob/living/simple_mob/animal/passive/cat/kitten{name = "Enola"},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"OU" = (/obj/machinery/door/airlock/voidcraft/vertical{req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"OV" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"OW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OX" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OY" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"OZ" = (/obj/item/device/suit_cooling_unit,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Pa" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Pb" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Pc" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Pd" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Pe" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Pf" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Pg" = (/obj/structure/flight_left{icon_state = "left"; dir = 8},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Ph" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Pi" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Pj" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Pk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Pl" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"Pm" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Pn" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Po" = (/obj/structure/table/steel,/obj/item/clothing/glasses/regular,/obj/item/clothing/glasses/regular,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Pp" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"Pq" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Pr" = (/obj/item/weapon/tool/wrench,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Ps" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/item/weapon/tool/crowbar,/obj/item/device/suit_cooling_unit,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Pt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"Pu" = (/obj/structure/table/steel_reinforced,/obj/machinery/recharger,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Pv" = (/obj/structure/bed/chair/comfy/red,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Pw" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Px" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Py" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1; pixel_y = 3},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Pz" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/machinery/light/small,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"PA" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"PB" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"PC" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"PD" = (/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"PE" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"PF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"PG" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"PH" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"PI" = (/obj/structure/table/steel,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"PJ" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"PK" = (/obj/machinery/light/small{dir = 1},/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"PL" = (/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"PM" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"PN" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"PO" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"PP" = (/obj/structure/frame/computer,/obj/machinery/light,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"PQ" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"PR" = (/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"PS" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"PT" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"PU" = (/obj/machinery/light{dir = 1},/obj/structure/table/steel,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/item/device/defib_kit/compact/combat/loaded,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"PV" = (/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/storage/firstaid/combat,/obj/item/weapon/storage/firstaid/clotting,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"PW" = (/obj/machinery/atmospherics/pipe/manifold/visible{icon_state = "map"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"PX" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 9},/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"PY" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating/airless,/area/skipjack_station/start)
+"PZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Qa" = (/obj/structure/table/steel,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Qb" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"Qc" = (/obj/machinery/door/airlock/voidcraft{req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Qd" = (/obj/machinery/door/window{dir = 8; name = "Cell"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Qe" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Qf" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Qg" = (/obj/machinery/atmospherics/portables_connector{icon_state = "map_connector"; dir = 4},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Qh" = (/obj/structure/table/steel,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/obj/machinery/atmospherics/pipe/manifold/visible,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/adv,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Qi" = (/obj/machinery/atmospherics/unary/freezer{icon_state = "freezer_0"; dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Qj" = (/turf/simulated/shuttle/wall/no_join{base_state = "orange"; icon = 'icons/turf/shuttle_orange.dmi'; icon_state = "orange"},/area/centcom/evac)
+"Qk" = (/obj/structure/table/standard,/obj/item/weapon/handcuffs/legcuffs,/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"Ql" = (/obj/structure/table/standard,/obj/item/weapon/deck/cards,/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"Qm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
+"Qn" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor/darkred,/area/skipjack_station/start)
+"Qo" = (/obj/structure/table/standard,/obj/item/weapon/surgical/circular_saw{pixel_y = 8},/obj/item/weapon/surgical/hemostat,/obj/item/weapon/surgical/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"Qp" = (/obj/structure/toilet{dir = 4},/obj/machinery/flasher{id = "syndieflash"; pixel_x = -28; pixel_y = 0},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"Qq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"Qr" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Qs" = (/obj/machinery/light{dir = 4},/obj/machinery/button/flasher{id = "syndieflash"; name = "Flasher"; pixel_x = 27; pixel_y = 0},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"Qt" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window{dir = 8; name = "Surgery"; req_access = list(150)},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Qu" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Qv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/steel,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"Qw" = (/mob/living/simple_mob/animal/passive/tindalos,/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"Qx" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"Qy" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"Qz" = (/obj/structure/table/standard,/obj/item/weapon/surgical/cautery,/obj/item/weapon/surgical/retractor,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"QA" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"QB" = (/obj/structure/mopbucket,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start)
+"QC" = (/obj/structure/table/steel,/obj/item/weapon/material/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 9},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = -1},/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"QD" = (/obj/item/device/radio/electropack,/obj/structure/table/steel,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start)
+"QE" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary"; name = "remote shutter control"; pixel_x = -25},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/steel,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/stack/nanopaste,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QG" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/sterile/latex,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QH" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"QI" = (/obj/item/weapon/bedsheet/rainbow,/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"QJ" = (/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"QK" = (/obj/item/weapon/bedsheet/hos,/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"QL" = (/obj/structure/table/standard,/obj/item/weapon/surgical/bonesetter,/obj/item/weapon/surgical/bonegel,/obj/item/weapon/surgical/FixOVein,/obj/item/stack/nanopaste,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"QM" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QN" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QO" = (/obj/structure/table/steel,/obj/item/stack/medical/splint,/obj/item/stack/medical/splint,/obj/item/weapon/storage/belt/medical/emt,/obj/item/weapon/storage/belt/medical/emt,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QP" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/steel,/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QQ" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QR" = (/obj/machinery/iv_drip,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start)
+"QS" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/machinery/turretid{pixel_x = 32; req_access = list(150)},/obj/machinery/turretid{pixel_x = 32; req_access = list(150)},/turf/simulated/floor/airless,/area/syndicate_station/start)
+"QT" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor/black,/area/skipjack_station/start)
+"QU" = (/obj/item/weapon/bedsheet/orange,/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"QV" = (/obj/item/weapon/bedsheet/green,/obj/machinery/light/small{dir = 4},/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"QW" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"QX" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/machinery/light/small{dir = 4},/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/shuttle/floor/white,/area/skipjack_station/start)
+"QY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"QZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"Ra" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/shuttle/plating,/area/syndicate_station/start)
+"Rb" = (/obj/item/weapon/bedsheet/rd,/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"Rc" = (/obj/item/pizzabox/meat,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"Rd" = (/obj/item/weapon/bedsheet/clown,/obj/structure/bed/padded,/turf/simulated/shuttle/floor/red,/area/skipjack_station/start)
+"Re" = (/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/space)
+"Rf" = (/turf/unsimulated/wall{icon = 'icons/misc/title.dmi'; icon_state = "title"},/area/space)
+"Rg" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/simulated/mineral,/area/space)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabacacacacacacacacacacabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeafaeaeaeaeaeaeagahaiahaiahahaiahaiahagajakakakakakakakakakagalalalalalalalalamanagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagaqarararararasatauavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeaeaeaeaxaeagayazayazayazayazayazagaAaAaAaAaAaAaAaAaAaAagaBaBaBaBaBaBaBaBaCanagaoaDaoaoaoaoaoaoaDaoagapapapapapapapapapapagaEaFaFaFaFaFaGatauavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaxaeaeaeaeaeaeaeaeagazayaHaIaJaIaJaKazayagaAaAaAaAaAaAaAaAaAaAagaLaMaNaBalaOalaBaPanagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagaEaFaFaFaFaFaGaQavavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeafaeaeaeaeagazayaRaSaTaTaUaVaWaXagaYaYaYaYaYaYaYaYaYaZagbabbbcbdbebfbgbhaPanagaoaoaoaDaoaoaDaoaoaoagapapapapapapapapapapagaEaFaFaFaFaFaGatauavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeafaeaeaeafaeaeaeagayazbiaUbjbjaUaUaUaUagbkbkblbmbmbmbmbnbkboagbpbqbcbrbsbsbsbtaPanagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagaEaFaFaFaFaFaGatauavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeaeaeaeaeaeagayazbiaUbjbjaUaUaUaUagbkbkbubvbvbvbvbwbkboagbpbqbcbxbybzbybAaPanagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagbBaFaFaFaFaFbCatauavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeaxaeaeaeafagazayaRaSaTaTaUbDbEbFagbkbkbubvbvbvbvbwbkboagbpbqbcbGbHbzbHbIaPanagaoaoaoaDaoaoaDaoaoaoagapapapapapapapapapapagbBaFaFaFaFaFbCatauavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaxaeaeaeaeaeaeaeagazaybJbKbLbKbLbMazayagbkbkbubvbvbvbvbwbkboagbpbqbcbpbzbzbzbNaCanagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagbBaFaFaFaFaFbCbOavavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeaeaeaeaeaeaeaeaeagayazayazayazayazazayagbkbkbPbQbQbQbQbRbkbSagbpbqbcbGbHbHbHbIaPanagaoaDaoaoaoaoaoaoaDaoagapapapapapapapapapapagbBaFaFaFaFaFbCatauavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadafaeaeaeaxaeaeaeaeaxagahaiahaiahahaiahaiahagbTbkbkbkbkbkbkbkbkbUagbVbWbcbXbYbYbYbZamanagaoaoaoaoaoaoaoaoaoaoagapapapapapapapapapapagcacbcbcbcbcbccatauavawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcdcdcdcdcdcdcdcdcdcdabcdcdcdcdcdcdcdcdcdcdabcdcdcdcdcdcdcdcdcdcdabcecececececececececeabcecececececececececeabcecececececececececeabcecececececececececeabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcgcgagchciciciciciciciciciagcjckcjclcmckcmcncocpagcqcqcqcqcqcqcqcqcqcqagcrcscscscscsctcucvcwagcxcxcycycycycycycycyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfczcfcfcfcfczcfagcgcAcgcgcgcgcAcgcgcgagcicicBcCcCcCcDciciciagcEcFcEcFcGcFcGcncocpagcqcqcHcqcqcqcqcqcqcqagcIcJcJcJcJcJcKcucvcwagcycycycycLcLcLcycycyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcMcgagcicicNcNcNcNcNciciciagcEcFckckckcFcGcOcpcpagcqcqcqcqcqcqcPcQcqcqagcIcJcJcJcJcJcKcRcwcwagcycycycScTcTcTcycycyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfczcfcfcfcfczcfcfcfagcgcgcUcgcMcgcgcgcgcgagcVcWcWcWcWcWcWcWcWcXagcEcFcFcFcFcFcGcncocpagcqcqcqcqcYcqcqcqcqcqagcIcJcJcJcJcJcKcucvcwagcycLcZdadbdbdcddcLcyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgdecgcgcgcgdecgagcVdfdgdgdgdgdgdhcWcWagdidjdjdkdjdjdlcncocpagcqcqcqcqcqcqcqdmcqcqagdndodododododpcucvcwagcycLcZdqdrdsdtddcLcyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgcgcgcgcgcgcgagcVdudvdvdvdvdvdwcWcWagdxdydydydydydzcncocpagcqcqcqcqcqcqcqcqcqcqagdAdBdBdBdBdBdCcucvcwagcycLcZdqdDdEdtddcLcyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfczcfcfcfcfczcfagcgcgcgcgcAcgcUcgcgcAagcVdudvdvdvdvdvdwcWcXagdFcFcFcFcFcFdGcncocpagcqcqcqcqcqcqcqcqcqcqagdHcJcJcJcJcJdIcucvcwagcycLcZdcdJdJdKddcLcyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagdLcgcgcgcgdLcgcgcgcgagcVdudvdvdvdvdvdMcWcWagdFcFdNdNdNcFdGdOcpcpagdPdPdPdPdPdPdPdPdPdPagdHcJcJcJcJcJdIdQcwcwagcycycydRdRdRdScycycyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfczcfcfcfcfczcfcfcfagcgdecgcUcgcgdecgcUcgagcVdTdUdUdUdUdUdVcWcWagdFcFdFcFdGcFdGcncocpagdWdWdWdWdWdWdWdWdWdWagdHcJcJcJcJcJdIcucvcwagcycycycLcLcLcycycycyawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadcfcfcfcfcfcfcfcfcfcfagcgcgcgcgdLcgcgcgcgdLagcVcWcWcWcWcWcWcWcWcWagdXdNdXdYdZdNdZcncocpagdWdWdWdWdWdWdWdWdWdWageaebebebebebeccucvcwagcycycycycycycycyededawaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabeeeeeeeeeeeeeeeeeeeeabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefefefefefefefefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefegeheieieiehejefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefekeheieieiehelefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefefefeieieiefefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefemeheieieiehenefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeoeheieieiehepefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefefefeieieiefefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeqeheieieieherefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeseheieieiehetefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefefefefefefefefefefefefefefehehehefefefefefefefefefefefefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeueueueuefeueueueuefevevewewewewexeyezefeAeBeCeieieDewewefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeEeueueEefeFeueueEefeieieieieieieieieGefeweweHeieieDewewefaaaaaaaaaaaaaaaaaaaaaaaaaaaaefefefefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeIeueueIefeJeueueKefeieieieieieieieieLefeweweweieiewewewefaaaaaaefefefefefefefefefefefefeMeNeOefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefefePePefefefePePefefeQeReSeTeUeVeieieWefeweweHeieieDewewefaaaaaaefeXeXeXeYeZfafbeffcfdeffefffgefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeffheueufifjfkeueufleffmfnfofpfqfreieifsefftftfueieieDewewefaaaaaaeffvfvfvfwewewewefffffffffffffefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeueueueueueueueufxefeieieieieieieieifyeffzfzeffAfAeffzfzefefefefeffBfBfBewewewewfCffffffffffffefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeueueueueueueueufDefeieieieieieieieifEeffFfGfHeieifIfJfKefeweweweffvfvfvfweweweweffLffeffMeffNefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeEfOeEfPeEfQeueufReffSfTfUfVfWfXeieifYeffZeieieieieieifKefgaefgaefeXeXeXewewgbgbeffLffefgcefgcefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeffzfzfzfzfzefgdgdefeffzfzfzfzfzgefAfAgeefeieieieieieieieigfeieieiefefefeffAfAefefefefefefefefefefefefefefefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeieieieieieieieieieieieieieieiggghghgieieieigjgjgjgjeieifAeieieifAeieieieieieieieieieieieieieieigkefewglgmefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeieieieieieieieieieieieieieieieieieieieieieigngogpgqeieifzeieieifzeieieieieieieieieieieieieieieigkgrewewgsefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeieieieieigtgugugveieieieieieigwgxgxgyeieieigpgzgAgBeieifAeieieifAeieieieieieieieieieieieieieieigkefgCgDgEefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeffzfzfzfzfzeffAfAefeffzfzfzfzfzgFfAfAgFefeieigGgGgGgGeieiefeieieiefgHgHgHgHgHgHgHgHgHgHgHgHgHgHeieiefefefefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefgIgJgKgLgMgNeieigOefgPgQgRgSgTgUeieigVefgWeieieieieieigXefeieieiefeugYgZgZgZgZgZgZgZgZgZgZeugHeieifzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeieieieieieieieihaefhbhceihceieieieihdefhehffJeieihghhhiefeieieiefeuhjhkhlhmhmhmhmhnhohphqgZgHeieifzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeieieieieieieieihrefeieieieieieieieihseffzfzeffAfAeffzfzefeieieiefeuhjhthuhvhwhmhmhmhmhmhxhyhzhAeiefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeieihBhChDhEeieihFefeieihGhHhIhJeieihKefhLhMhNeieihOhPhQefeieieiefeuhjhthRhShThUhUhmhmhVhqgZgHefefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefeieihWhXhYhZeieiiaefeieiibicidieeieiiaefewewifeieieDewigefeieieiefeuihgZgZgZgZgZgZgZgZgZgZeugHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefiieieieieieieieiijefeieieieieieieieiikefileweweieiewewimefeieieiefefininininininininininininefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefioipiqirisitiuewivefeieieieieieieieiiwefewewifeieieDewixefeieieiefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefiyiyiqirisitiuizivefiAiBiCiDiEiFiGiHiIefiJiKiLiMiNiOiPiQefeieieiefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefeffAefefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefiRiRiRefaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiSiTiUiTiSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiTiViViViTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiTiViViViTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiTiViViViTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiTiViViViTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiWiViViViWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiTiViViViTaaaaaaaaaaaaaaaaiXiXiXiXiXiXiXiXiXiXiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYiZiZiZiYiZiZiZiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiTiViViViTaaaaaaaaaaaaaaaaiXjajajajajajajajajaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYjbjbjbiYjcjcjciYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapPpPpPpPpPpPaaaaaaaaaaaapPpPpPpPpPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiTiViViViTaaaaaaaaaaaaaaaaiXjajajdjdjdjdjdjajaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYjbjbjbiYjcjcjciYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaajgjgjgjgjgjgjgjgjgjgjgjgjgjgjgjgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapPpPjpjpjpjqpPjrpPpPpPpPpPpPjBjBjCpPjrpPpPjejejejejejejeaaaaaaaaaaaaaaaaaaaaaaaaaaiTiViViViTaaaaaaaaaaaaaaaaiXjajdjdjfjfjfjdjdjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYjbjbjbiYjcjcjciYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaajgjojojojojojojojojojojojojojojgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapPpPjDjqjqjqjqjqjqjqpPjRjSjSpPjTjTjTjTjTjTpPkjkjjekIkIkIjeaaaaaaaaaaaaiWiWiTiTiTiTiWiWjiiWjijjjjjkjkjkjjjjaaaaiXjajdjljmjmjmjnjdjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYiYjbjbjbiYjcjcjciYiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjgjgjojojgjgjgjgjgjgjgjgjgjgjojojgjgjgaaaaaaaaaaaaaaaaaaaaaaaaaapPjqjqldldldldldjqjqlpjSjSjSpPlqlWjTjTjTlXpPkjkjlekIkIkIjeaaaaaaaaaaaaiWjsjsjsjsjsjsiWiViViVjjjtjujujujvjjaaaaiXjajdjmjmjwjwjwjxjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYjyjzjzjzjAiYiYjbjbjbiYjcjcjciYiYjyjzjzjzjAiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojojojPjojojQjQjQjQjQjojgjojojojojgaaaaaaaaaaaaaaaaaaaaaaaaaapPlYjqldldldldldjqjqlZjSjSmapPpPpPpPmbpPpPpPkjkjlekIkIkIjeaaaaaaaaaaaaiWjsjEjFjFjGjsiTiViViVjkjHjIjJjujKjjaaaaiXjajdjmjmjmjmjmjLjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYjMjMjMjMjMiYiYiYjNiYiYiYjOiYiYiYjMjMjMjMjMiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgjgjgjgkikikikikikijgjgjgjgjojojgaaaaaaaaaaaaaaaaaaaaaaaaaapPmtjqjqjqjqjqjqjqmuqsmvjSjSjSmwmMmLjSmNmUqskjkjlekIkIkIjeaaaaaaaaaaaaiWjsjUjVjWjXjsiTiViViVjkjYjZjZjujujjaaaaiXjajdjmjmjmjmkajdjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYkbkckckckciYkdkekfkekekekgkekdiYkckckckckhiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgksktkukukukvkvkukukukwkxjgjojojgaaaaaaaaaaaaaaaaaaaaaaaaaapPmVmXmWninhnjmtjqnCqsnDjSjSjSjSjSjSjSjSnEqskjkjjekIkIkIjeaaaaaaaaaaaaiWjsjUjVjVjXjsiWiViViVjjjujujujujujjaaaaiXjajdjmjmjmjmjmjLjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYkkklklklklkmkeknkokpknkqkoknkekmklklklklkriYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgksktkukvkvkHkHkvkvkukwkxjgjojojgaaaaaaaaaaaaaaaaaaaaaaaaaapPpPpPpPpPpPpPqslZqsqsnDjSjSnRnQocobodjSoeqskjkjjekIkIkIjejeaaaaaaaaaaiWjsjUjVjVjXjskyiViViVkzjujujujukBjjaaaaiXjajdjmjmkCkCkCkDjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYkEklklklkliYkeknkokpknkqkoknkeiYkFklklklkGiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgksktkukvkvkHkHkvkvkukwkxjgjojojgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapPokpRolpPpPjSjSjSjSjSjSjSjSomqskjkjlekIkIkIonjeaaaaaaaaaaiWjsjUjVjVjXjsiWiViViVjjjukAjujujujjaaaaiXjajdjljmjmjmjnjdjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalhiYiYiYiYiYiYkeknkokpknkqkoknkeiYiYiYiYiYiYlhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgksktkukukukvkvkukukukwkxjgjojojgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapPozpRoloApPqsoBpPjSoMoLpsprpPpPkjkjlekIkIkIpGjeaaaaaaaaaaiWjsjUjVkJjXjsiTiViViVjkjZjZjZjujujjaaaaiXjajdkKjmjmjmkKjdjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLkMkMkMkMkMiYkeknkokpknkqkoknkeiYkNkNkNkNkNkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgksktkukukukvkvkukukukwkxjgjojojgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapPpRpRolpIpHpJjqpKjSjSjSjSpLpMqskjkjlekIkIkIonjeaaaaaaaaaaiWjskOkPkPkQjsiTiViViVjkjZkRjujujujjaaaaiXjajdjdkSkSkSjdjdjaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLkMkMkMkMkMkTkUknknknknknknknkVkWkNkNkNkNkNkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgjglajgjgjgjgjglblblblblblbjgjgjgjgjglcjgjgaaaaaaaaaaaaaaaaaaaaaaaaaapPpPpPpPpPpPpNpRolpQpOqqqpqDqrqFqEqOqNqPqskjkjlekIkIkIjejeaaaaaaaaaaiWjsjsjsjsjsjsiWiViViVjjjujujujujujjaaaaiXjajakXkYkYkYkZjajaiXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLkMkMkMkMkMiYkekekekeknkekekekeiYkNkNkNkNkNkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgliljljljjglklllllllllllllllllkjglmlmlmlnjgaaaaaaaaaaaaaaaaaaaaaaaaaapPqQsRsRsRqRozpRolpIqSpJjqqTmtqTmtqTmtqTpPlelejekIkIkIjejejejejejejejeiWiWiWiTiTiTiWlfiTlfiWiWiWiWiWiWiWiWiWiWlglglglglglglglglglglglglgiWaaaaaaaaaaaaaaaaaaQjiYiYiYiYiYiYiYiYiYiYiYiYiYkeknkeiYiYiYiYiYiYiYiYiYiYiYiYiYQjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgliljljlElFlllllllllllllllllllllFlGlmlmlHjgaaaaaaaaaaaaaaaaaaaaaaaaaapPqUsRqVsRrcozpRoljqqpjqqpjqqpjqqpjqqpjqrdkIkIkIkIkIkIjekIkIkIkIkIkIkIiWiWiWiViViViViViViViViViViViWiWiWiViViSlrlslsltltltlslslslslslsluiWaaaaaaaaaaaaaaaaaakLlvkllvlwlxlylzlAlBlAlAlAiYlBlClBiYkllDlDlDlDlDlDlDlDlDlDlDkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgliljlTlElFlllllllllllllllllllllFlGlUlmlVjgaaaaaaaaaaaaaaaaaaaaaaaaaapPtLsRresRrcozpRolqpjqqpjqqpjqqpjqqpjqqpqskIkIkIkIkIkIjekIkIkIkIkIkIkIiWiWlJiViViViViViViViViViViVlJiWiWiViViTlKlLlMlMlNlMlOlPlslQlRlslsiWaaaaaaaaaaaaaaaaaakLklklkllBlSlSlSlSlBlSlSlSiYkeknkeiYlDlDlDlDlDlDlDlDlDlDlDlDkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgmqljljlElFlllllllllllllllllllllFlGlmlmmrjgaaaaaaaaaaaaaaaaaaaaaaaaaapPrfsRsRsIrcozpRoljqqpjqqpjqpIrhrgqqqpjqrdkIkIkIkIkIkIjekIkIkIkIkIkIkIiTiViViViVmcmdmemfmgmdmhiViViViViWiViVmimjmkmkmkmkmkmkmkmlmkmmmnltiWaaaaaaaaaaaaaaaaaakLlvklklmolSlSlSlSmplSlSlSiYkeknkeiYlDlDlDlDlDlDlDlDlDlDlDlDkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBqBqBqBqBqBqBqBqBqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgmIljlTlElFlllllllllllllllllllllFlGlUlmmJjgjejejejejejejeaaaajejerijepPrjsRrcrcqRozpRoloArkrmrlqppQrornpJjqqppPlelejekIkIkIjekIkIkIkIkIkIkIiTiViViVmxmdmdmymdmymdmdmziViViViWiViViTlrmAmBmBmCmBmDmElsmFmGlslsiWaaaaaaaaaaaaaaaaaakLklklkllBmHlSlSmHlBlSlSlSiYkeknkeiYlDlDlDlDlDlDlDlDlDlDlDlDkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBqKqLqBqMqMqBqLqKqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgmTljljlElFlllllllllllllllllllllFlGlmlmlmjgkIkIkIkIkIkIjejejejejhjhjhpPpPpRozozozpRpRpRrprprprppPpPpPpPpPrqpPpPkjkjjekIkIkIjekIkIkIkIkIkIkIiTiViVmcmdmdmdmOmPmOmdmdmdmhiViViWiVmQiWlKlslsltltltlslslslslslsluiWaaaaaaaaaaaaaaaaaakLlvkllvlwmRlSlSmSlBlAlAlAiYkeknkeiYkllDlDlDlDlDlDlDlDlDlDlDkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBrararbqMqMrbraraqBqBqBqBqBqBqBqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgnbljncljndllllllnenflllllllllllFlmlmlmlmngkIkIkIkIkIkIjerrlerGkIkIkIkIrHpRpRpRpRpRpRpRrIrIrIrIpPjTjTjTjTjTrJpPkjkjjekIkIkIjejejejejejemYjeiWiViVmdmdmdmOmZmZmZmOmdmdmdiViViWiViViWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiTiSQjlhiYiYlBiYiYmpmpiYiYiYlBiYiYkeknkeiYiYlBiYiYiYnanaiYiYlBiYlhQjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBqBqBqBqMqMqBqBqBqBrCqMrDrEqMrFqBqBqBqBqBqBqBqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgljljnvnwnxnynynynznAnBlllllllllFlmlmlmlmjgkIkIkIkIkIkIrRrrrSrGkIkIkIkIqspRpRpRpRpRqGpRrIrIrIrIpPrTpPrUpPjTjTpPkjkjjekIkIkIkIlekIkIjekIkIkIlfiViVnknlmOmZnmnnnonpmOnqnriViVlfiViViViViViViViViViViViViViViViViViViViVjiiTiViViTiYnsknlBkekekekekekekekekdlBkekeknkekelBkdkekekentkekekekenulBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBqKqLqBqMqMqBqLqKqBrLqMqMqMrMrNqBrOrPrOrPrOrPqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgnNljljnOndllllllnPnflllllllllllFlmlmlmlmngkIkIkIkIkIkIjerrlerGkIkIkIkIrHpRrWrVserWsrsfssrIrIrIpPsGpPsHpPsOpPpPkjkjlekIkIkIkInFkIkInGkIkIkIiTiViVnHmdmOnIiWnJiWnKmOmdnLiViViTiViViViViViViViViViViViViViViViViViViViVjiiUiViViUnMnsknnMknknknknknknknknknlCknknknknknlCknknknknknknknknknnulBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBrararbqMqMrbraraqBsbqMqMqMqMscqBsdrPsdrPsdrPqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgoaljljlElFlllllllllllllllllllllFlGlmlmlmjgkIkIkIkIkIkIjejejejekIkIkIjepPpPqsqsqsqssPpPqsqsqsqspPpPpPpPpPpPpPkjkjkjlekIkIkIkIlekIkIjekIkIkIlfiViVnSnlmOnTnUnVnWmZmOnqnXiViVlfiViViViViViVnYiViViViViViViViViViViViViVjiiWiViViWiYnsknlBkekekekekekekekekdlBkekeknkekelBkdkekekenZkekekekenulBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBqBqBqBqBqBqBqMqMqBqBqBqBspspsqqMspspqBrPrPrPrPrPrPqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgojljlTlElFlllllllllllllllllllllFlGlUlmmJjglelelelejejejekjkjlekIkIkIjekjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjlekIkIkIjejelelejelemsleiWiViVmdmdmdmOofmOogmOmdmdmdiViViWiWiWiWiWiWiWiWohohiWiWiWiWiWiWiWiWiWiWiWiWiWiWiTiSQjlhiYiYlBiYiYlwlwiYiYiYlwiYiYkeknkeiYiYlBiYiYiYoioiiYiYlBiYlhQjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBszsAszqBsBsBqMqMsCsDsEqBqMqMqMqMqMqMqBsFrPrPrPrPrPqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgoyljljlElFlllllllllllllllllllllFlGlmlmmrjgkjkjkjkjkjkjkjkjjesQkIkIkIsSjekjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjkjjejekIkIkIleoooplolololooqiTiViVormdmdmdmOmOmOmdmdmdosiViViWlulululululululululululululululululululululuiWaaaaaakLotototototototiYouovlwowiYkeknkeiYoxoxoxoxoxoxoxoxoxoxoxklkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBsMsMsMqBqMrPrPrPrPrPqMqMqMrPrPrPrPqMsNrPrPrPrPrPrPqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgoJljlTlElFlllllllllllllllllllllFlGlUlmoKjglelelelejelelelejejhkIkIkIjhjejejejejelelelelelelelelelelelelejelelelejejhkIkIkIlemKsTlolololooCiTiViViVoDmdmdoEmdoEmdmdoFiViViViWlulululululululululululululululululululululuiWaaaaaakLotototototototiYoGoHlwoIiYkeknkeiYoxoxoxoxoxoxoxoxoxoxoxoxkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBtasMsMtbqMtctctctctcqMqMqMrPtdtdrPqMsNrPrPrPrPrPrPqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgoTljljlElFlllllllllllllllllllllFlGlmlmmJjgkIkIkIkIkIkIkIkIsUkIkIjhkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkInGkIkIkIkIjesVlololololooNiTiViViViVormdoOoPoQmdosiViViViViWlululululuoRoRoRoRoRoSoSoRoRoRoRoRlululululuiWaaaaaakLotototototototiYknknknkniYkeknkeiYoxoxoxoxoxoxoxoxoxoxoxoxkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBtasMsMqBqMrPrPrPrPrPqMqMqMrPrPrPrPtrqBsdrPrOrPsdrPqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgpgljljljjglklllllllllllllllllkjglmlmlmlmjgkIkIkIkIkIkIkIkIjekIkIjhkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIjekIkIkIkIjelolololololooUiWiWlJiViViViViViViViViViViVlJiWiWlulululuoRoVoWoXoYoRoZpaoRpbpcoRoRoRoRlululuiWaaaaaakLotototototototpdpeknknknpfkeknkeiYoxoxoxoxoxoxoxoxoxoxoxoxkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBtAqBtBqBtCtDtEtFtGtHtIqBqMqMqMqMqMqMqBrOrPrOrPrOrPqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaajgjglajgjgjgjgjglblblblblblbjgjgjgjgjgjgjgjgkIkIkIkIkIkIkIkIsUkIkIjhkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkIkInGkIkIkIkIjephpipjpkpllopmiWiWiWiViViViViViViViViViViViWiWiWlululuoRoRpnpnpnpnoRpopooRpnpnpppqoRoRoRluluiWaaaaaakLotototototototpdknknknknpfkeknkeiYoxoxoxoxoxoxoxoxoxoxoxklkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBqBqBtTqBqBqBqBqBqBqBqBqBqBqBsqqMqBqBqBqBqBqBqBqBqBqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgpCktpDpDpDpEpEpDpDpDkwpFjgaaaaaajelelelejejelelelejejhkIkIkIjhjelelelejejelelelesUlelelejejelelejelelelejejhkIkIkIjejejejejejejejeiWiWiWiWiWiWiWlfiTlfiWiWiWiWiWiWiWluluoRoRoRptpupvpwoRpxpnpypnpnpnpnpzpAoRluluiWaaaaaakLotototototototiYlwlwpBlwiYkeknkeiYlwlwlwlwlwlwlwlwlwlwlwlwlwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBqBqBaaaaaaaaaaaaaaaaaaqBqMtZqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgpCktpDpDpDpEpEpDpDpDkwpFjgaaaaaajekIkIkItejekjkjkjjejetftftfjejekjkjkjjekIkIkIkIkIkIkIkItgjekjkjkjkjkjkjjejekIkIkIjejeaaaaaaaaaaaaaaaapXpSpTpUpVpWpWpWpXpYpZqapZpYiWluluqbqcqdpnqeqeqeoRpnpnoRqfqgqhqiqjqkoRluluiWaaaaaakLotototototototiYqlqmqmqniYkeknkeqoknknknknknknknknknknknknlwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBqMqMqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgpCktpDpEpEqCqCpEpEpDkwpFjgaaaaaajekIkIkIkIjekjkjkjkjjekIkIkIjekjkjkjkjjethtitikIkIkIkIkItgjekjkjkjkjkjkjkjlekIkIkIjeaaaaaaaaaaaaaaaaaapXqtquqvpXpWpWpWqwpYpZqxpZpYiWluluqyqcpnpnpnpnpnpypnpnoRoRoRoRoRoRoRoRluluiWaaaaaakLotototototototiYqlqzqmqniYlBlClBiYqAkoqAkoqAkoqAkoqAkoqAkolwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqBuQuQqBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgpCktpDpEpEqCqCpEpEpDkwpFjgaaaaaajejejekIkIlekjkjkjkjlekIkIkIlekjkjkjkjlekIkIkIkIkIkIkIkItjjelelejejejejejejejejejejeaaaaaaaaaaaaaaaaaapXpXpXpXpXpWpWpWqwpYpYpYpYpYiWluluoRoRpnpnpnqHpnoRpnpnpnqIqJlululululululuiWaaaaaaQjiYiYiYiYiYiYiYiYiYiYlwiYiYkeknkeiYiYiYiYiYiYiYiYiYiYiYiYiYQjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauXuYuYuXaaaaaaaauZuZuZuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgpCktpDpDpDpEpEpDpDpDkwpFjgaaaaaajelojekIkIlekjkjkjlelekIkIkIlelekjkjkjlekIkItkkIkIkIkIkIjejetstststsjeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapXpSpTpUpVpWpWpWpYpYpYpYqWpZiWlululuoRoRoRoRoRoRoRpxpnqXpnqJlululululululuiWaaaaaaaaaaaaaakLqYqYqYqYqYiYkdkekekeknkekekekdiYqZqZqZqZqZkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZuZuZuZvtvuvvuZaaaaaaaaaauZuZvwvxuZuZaaaauZuZuZuZvyvzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojgjgjgjgkikikikikikijgjgabjgaaaaaajelojelololekjkjkjlekIkIkIkIkIlekjkjkjlekIkIkIkIkIkIkIkIjetststststsjeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapXrsquqvpXpWpWpWpYpYpYpYpYpYiWluluoRoRrtrurvrtrwoRpnpnpnrxqJlululululululuiWaaaaaaaaaaaaaakLqYqYqYqYqYryrzknknknknknknknrArBqZqZqZqZqZkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuXvEvFuZvGvHvIvJvKuZuZaaaaaauZuZuXuYuYuXuZvtvvuXvLvMuZvyvNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjojojojojPjojorQrQrQrQrQjojgaaaaaaaaaajejejelololekjkjkjjekIkIkIkIkIjekjkjkjletJkIkIkIkIkIkIkIjetststststsjeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapXpXpXpXpXpWpWpWqwpYpYpYpYpYiWluluqbqcpnpnpnpnpnpypnpnoRoRoRoRoRoRoRoRluluiWaaaaaaaaaaaaaakLqYqYqYqYqYiYkeknrKrKrKrKrKknkeiYqZqZqZqZqZkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawdwewfwfwgwfwfwhwiwjuZuZvtvuvvuZuZwkwfwfwluZwmwnwowfwpuZvyvNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaajgjgjgjgjgjgjgjgjgjgjgjgjgjgjgaaaaaaaaaajelolololojekjkjkjlekIkIkIkIkIlekjkjkjjekIkIkIkIkIkIkIkIjejejejejejejeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapXpSpTpUpVpWpWpWqwpYpZqxpZpYiWluluqyqcrXpnpnpnpnoRpnpnpnpnpnoRpnrYrZoRluluiWaaaaaaaaaaaaaaiYiYiYiYiYiYiYkeknsasasasasaknkeiYiYiYiYiYiYiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawvwwwxwyuZwfwfwzwAwBuZwCwDwEwFwGwHwIwJwJwfwKwfwfwfwfwLuZvywMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajelololojejekjkjkjlelekIkIkIlelekjkjkjjejekIkIkIkIkIkIkIjeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapXrsquqvpXpWsgshpXpYpZsipZpYiWluluoRoRoRsjskslsmoRpxslslslpnpypnpnpnoRluluiWaaaaaaaaaaaaaakLsnsnsnsnsniYkeknsasasasasaknkeiYsososososokLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZuZuZuZwOwfwfwPuZwQwRwSwTwUwVwWwJwJwfwKwfwXwYwfwfuZuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajejejejejekjkjkjkjkjlekIkIkIlekjkjkjkjkjjejejejerijejejejeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapXpXpXpXpXpXpXpXpXpXpXpXpXpXiWlululuoRoRpnpnpnpnoRpnslslslpnoRstoRoRoRluluiWaaaaaaaaaaaaaakLsnsnsnsnsnsusvknswswswswswknsxsysososososokLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZxewfuZuXxfxgxhxixjxkwWwJwfwOuXuZuZuXxlxmuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUjekIkIkIjetVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiWlulululuoRoRsJsKsLoRpnpnpnpnpnoRoRoRoRlululuiWaaaaaaaaaaaaaakLsnsnsnsnsniYkeknknknknknknknkeiYsososososokLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZxqxruZuZuZuZuZuZuZuZxswfwfwfwfxtwfwfwfwfuZuZxuwfuXuZxvxvuZuZuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUuaubuatUucudueueuetUufugubububtUuhuhuiujtUlIkIkIkIlIuktKtNtMtOtKtPtVtPtQtRtRunumupuouotVuqurusuttVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiWlululululuoRoRoRoRoRoRoRoRoRoRoRoRlululululuiWaaaaaaaaaaaaaaiYiYiYiYiYiYiYsWsXkekeknkekesYsZiYiYiYiYiYiYiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZxDxEuZxFuZxGxHxIuXuZxJwfwJwJwJwJwJwJwJwJwJwfwJwfxKxLwJwJwfuZvyvzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUuBubuBtUubububububuCufufuDubububububububtUkIkIkIkIkIukululululululululuEuFuFuFuGululultVuHululuItVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiWlulululululululululululululululululululululuiWaaaaaaaaaaaaaaaaiYtlqmtmtniYiYiYiYkeknkeiYiYiYiYtotptptqiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxVxWwJxXuZxYuXuZxZuZyauZybwJwJycydyeyfygyhyiwJwJwJwJyjykwJwJwfuZvyvNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUuaubuatUubububububuCubububububtUububububtUkIkIkIkIkIukvCvUvTvTxzxzytulululululululululyLululuRuStVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiWlulululululululululululululululululululululuiWaaaaaaaaaaaaaaaaiYttqmqmqmtutulBkdkeknkekdlBtvtwtxtytytziYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayyyzyAwJyBwfwfwfwfyCwfwfwfwJwJyDyEyFyGyHyIyJwJwJwJwJyKwJwJwJwfuZvyvNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUuCubuCtUububvavbvctUubvdubububtUtUtUtUtUtUjezflezfjetVtVukukukuktVtVuIulvevfululululzxtVvgvhulvitVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWiWaaaaaaaaaaaaaaaalBqmqmqmqmqmqmtSkeknknknketSqmqmqmqmqmqmlBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZyMyNuZyOyPyQyRySwfyTwfwfwJwJwJwJwJwJwJwJwJwfwJwfyUwfyVwJwpuZvywMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUububububububtUuCuCtUugufubububvAvBvBvBvBtUjekIkIkIjetVzyzzzzzzzzzytVulululululzAzBultVtVtVtVtVtVtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYtWqmqmtXtYqmlBkeknknknkelBqmqmqmqmqmqmiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZyZzauZuZuZuZuZuZuZuXzbwfwfwfwfwXwfwfwfwfuZuZxuwfuXuZzczduZuZuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUubvOvOvOububuCvPvPuCufufubububvQvBvBvBvBvRkIkIkIkIkIvSululzCzDululvVululvWvXulzEzFultVvYvZwawbwctVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQjuuqmqmtvqmqmiYiYlBuvlBiYiYuwuxqmuyuzuAQjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZxewfuZuXzgzhzizjzkwHzlwJwfzmuXuZuZuZwfznuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUubwqwrwsububwtububwtububububwuufvBvBvBvBuClIkIkIkIlIukululzCzDululukulululululxSzGulyLululululultVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQjuJqmqmtXtYqmiYuKuLuMuNuOiYlwlwuPlwlwlwQjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZuZuZwfzmwfwfzpuZzqzrzsztyWwVzvwJwJwfzwwfxtwfwfwfuZuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUubvOvOvOububwtububwtubububububwNvBvBvBvBvRkIkIkIkIkIvSululzCzDululvVululvWvXulululzHtVtVtVyLtVtVtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYuTqmqmqmqmqmiYuMuUuMuUuMiYuVqmqmqmuWlwiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazKzLzMzNuZwfwfwhzOzPuZzQzRzSzezUxkzVwJwJwfzwwfwfwfwfwfuZvyvzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUububububububtUuCuCtUuCuCwZuCuCuCxaxaxavBtUkIkIkIkIkItVzIululululzHtVzIzHzJxzxzxzxzzTtVxbxcxcxcxdtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYiYvjvkvlvmvniYvovpvqvrvsiYuVqmqmqmuWiYiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAlwfwfwfAmwfwfAnAoApuZuZAqArAsuZuZAtAuAvwfuZAwAxAywfwpuZvyvNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUuCubuCtUububububugtUubububububtUtUuCuCuCtUlolololokItVzWululululzXxnzWzXtVukukzYukuktVxoulululxptVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiYiYiYiYiYiYiYvDvDvDvDvDiYiYiYiYiYiYiYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuXADAEuZAFwfAGAHAIuZuZaaaaaauZuZuXAJAKuXuZAqAsuZALAMuZvyvNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUuaubuatUububububxwtUububufububtUububububxxkIkIkIkIkIukzZulzCzDulzXxyAazXtVxAulululxAtVxBulululxCtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauZuZuZuZuZuZAqArAsuZaaaaaaaaaauZuZATAUuZuZaaaauZuZuZuZvywMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUuBubuBtUxMubububxNtUubxOufxPubwZubububxQxRkIlolololoukAbulzCzDulzXxTzWzXtVulululululyLululuRulxUtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauXAYAZuXaaaaaaaauZuZuZuZuZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUuaubuatUylugubymyntUyoypyqwqyrtUububysuDuCkIkIkIkIkIukAcxzAdAexzzTtVAfzTtVyuulyuulyutVyvywywywyxtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUtUjezfzfzfjetVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVtVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYAgAgAgAgAgAgAgAgAgAgAgAgAgyYAgAgAgAgAgAgzojhkIkIkIjhzoAgAgAgAgAgAgyYAgAgAgAgAgAgAgAgAgAgAgAgyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYAgAgAgAgAgAgAgAgAgAgAgAgAgyYAgAgAgAgAgAgzolIkIkIkIlIzoAgAgAgAgAgAgyYAgAgAgAgAgAgAgAgAgAgAgAgyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYAgAgAgAgAgAgAgAgAgAgyYyYAhyYyYAgAgAgAgAgzojhkIkIkIjhzoAgAgAgAgAgyYyYAhyYyYAgAgAgAgAgAgAgAgAgyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYzozozozozozoyYzozoyYyYAiAiAjyYyYzozozoyYAkzoyXyXyXzoAzyYzozozoyYyYAjAiAiyYyYzozozozozoyYyYyYyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYyXyXyXyXyXyXyXyXyXzuyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXzuyXyXyXyXyXyXyXyXyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYyXyXyXyXyXyXyXyXyXyYyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyYyXyXyXyXyXyXyXyXyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaBKBKBKBLBKBKBKaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYyXyXyXyXyXyXIgyXyXzuyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXyXzuyXIJyXyXyXyXyXyXyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaBKBLBKBKBUBVBWBKBKBLBKaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYzozozozozozoyYzozoyYyYAAAAAAyYyYzoyYzozozozozoyYzozozozozoyYzoyYyYAAAAAAyYyYzoyYzozozozozozoyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaBKBKBKCcCdBKCeCfCfBKCgChBKBKBKaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoyXyXyXyXCrzoaaaaBraaaaaaaaaaaaaaaaaaBraaaazoCryXyXyXCrzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaBKBKCjCkClClBKCmCfCfBKCnCoCpCqBKBKaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBvyXyXyXBwzoaaaaBraaaaaaaaaaaaaaaaaaBraaaazoBxyXyXyXBwzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaBKBKCtCuCvClClBKCwCfCfBKCxCxCxCxCyBKBKaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozozozoABACyXyXyYaaaaBraaaaaaaaaaaaaaaaaaBraaaayYyXBJBCBNyXyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaBKCCCDCECvClClCFCxCxCxCGCxCxCxCHCxCIBKaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBXAOANCJAPBByXBwzoaaaaBraaByBzBzBzBzBzByaaBraaaazoBxyXAQyXBwzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaBKBKClCMCMClClClBKCNCxCOBKCPCxCQCxCxCRBKBKaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozozozoARBMyXyXzoaaaaBrByBEASBGBHBIAVBEByBraaaazoyXBMBCBDyXzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaBLCSClClClClClCTBKCNCxCUBKCVCxCxCWCxCxCXBLaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBvyXyXyXBwzoaaaaBrByBOBPBQBRBQBSBTByBraaaazoBxyXyXyXBwzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaBKBKBKDcDdClDeDdBKBKBKCGBKBKBKDfDgCxDhDiBKBKBKaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBtyYzozozoyYyYyYyYyYyXyXyXyXyXyYBrBrBrBzBRBRBZCaCbBRBRBzBrBrBryYyXyXyXyXyXyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaBKCxBKBKBKCFBKBKBKDlDmDnDoDpBKBKBKCGBKBKBKDqBKaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBvyXyXyXBwzoaaaaaaByBRBRBECiBEBRBRByaaaaaazoBxyXyXyXBwzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaBLDtCxDuDvCxDwDxBKDyDnCxDzDABKDBDnCxDnDCDDDqBLaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozozozoAByXyXCrzoaaaaByBECsAWBEByBEAWCsBEByaaaazoCryXyXyXCrzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaBLDECxDFCxCxCxCxCGDnCxBKCxDnCGCxCxCxCxDGDqDqBLaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBXAOANCJAPyXAXzozozozoCzCABRBRCBBaCBBRBRCACzzozozozoAByXAXzozozozoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaBLDHCxDnDnCxDIDJBKDKDnCxDnDLBKDMDnCxDnBKDNDOBLaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozozozoARyXBbCKyXBcCKCLBRBRBRBRBRBRBRBRBRCLCKyXBcCKAPyXBbCJAOANBXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaBKCxBKBKBKCGBKBKBKDPDQDnDRDSBKBKBKCGBKBKBKDTBKaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBvyXyXBbCKBdyXCKCLBRBRBRBRBRBRBRBRBRCLCKBdyXCKAPyXBezozozozoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaBKBKBKDUDVCxDWDXBKBKBKCGBKBKBKDYDZCxEaEbBKBKBKaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBtyYzozozoyYyYyYyYyYyXyXyXBezozozozoCzBfBRCZDaBRCZDaBRDbCzzozozozoARyXyXBvzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaBLEeCxCxCxCxCxEfBKEgEhEiBKEjCxCxCxCxCxCxBLaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBvyXyXyXBvzoaaaaBzDjBRCZDaBRCZDaBRDkBzaaaazoBvyXyXyXyXzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaBKBKDqEsDqEtCxEuBKEvEwExBKDZCxEyEzEAEBBKBKaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozozozoAByXyXDryYaaaaBzDjBRCZDaCaCZDaBRDkBzaaaayYyXyXyXyXyXzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaBKDqECEDEECxCxCGEFCxEGCGCxCxEHEIEJEBBKaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBXAOANCJAPyXyXBvzoaaaaBzDjBRCZDaBRCZDaBRDkBzaaaazoBvyXyXyXyXzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaBKBKEQDqDqCxERBKEvCxExBKDnCxESETEUBKBKaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozozozoARyXAXzozozozoCzBgBRCZDaBRCZDaBRBhCzzozozozoAByXyXBvzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaBKBKEWEXCxEYBKBKCGBKBKDnCxEBEBBKBKaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBvyXyXBbCKyXBcCKCLBRBRBRBRBRBRBRBRBRCLCKyXBcCKAPyXAXzozozozoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaBKBKBKFbFcBKCxCxCxBKFdFeBKBKBKaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBtyYzozozoyYyYyYyYyYyXyXyXBbCKBdyXCKCLBRBRBRBRBRBRBRBRBRCLCKBdyXCKAPyXBbCJAOANBXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaBKBLBKBKFfFgFhBKBKBLBKaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBvyXyXBezozozozoCzAWEcAWByBiBjEdBiBjCzzozozozoARyXBezozozozoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaBKBKBKBLBKBKBKaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozozozoAByXyXCrzoaaaaByEkElEmByEnEoEpEqErByaaaazoCryXyXyXCrzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBXAOANCJAPyXyXBwzoBrBrByEkElEmByBkBlEpEpEpByBrBrzoBxyXyXyXBwzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozozozoARyXyXyXyYaaaaByEkEKBmByELEMBnEOEPByaaaayYyXyXyXyXyXyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBvyXyXyXBwzoaaaaByEVEVBEByByByBEEVEVByaaaazoBxyXyXyXBwzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoyXAXBpBoBqzoaaaaByEZEZByFaFaFaByEZEZByaaaazoBuBoBAABCrzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayYyYzoCJCJBtyYaaaaaaaaaaByEZEZEZByaaaaaaaaaayYBtCJCJzoyYyYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBFCYBYzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBFCYBYzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoDsFiENzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoDsFiENzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFjFjFjFjFjFjFjFjFjFjFjFjFjFjFjFjFjFjFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazozoBXBXzoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazoBXBXzozoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFlFkFmFmFmFmFmFmFmFmFmFmFmFmFmFmFmFmFmFmFmFmFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFlFnFnFnFoFpFoFoFoFoFoFoFoFoFnFnFnFnFkFmFqFqFrFqFqFqFsFsFsFqFqFsFsFsFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFlFnFoFoFoFoFoFtFoFoFoFtFoFoFnFnFnFnFkFmFuFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFvFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFjFjFjFjFjFjFjFjFjFjFnFoFoFpFoFoFoFtFoFoFoFtFoFoFoFnFnFnFkFmFqFqFqFqFqFqFqFqFqFqFqFqFqFwFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFxFyFyFzFAFzFyFyFBFjFoFpFoFoFoFoFoFtFoFoFoFtFoFoFoFoFnFnFkFmFqFqFqFqFqFqFqFqFqFqFqFqFqFuFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFCFyFyFyFyFyFyFyFyFjFoFoFoFoFoFoFoFtFDFEFDFtFoFoFoFoFoFnFkFmFqFqFqFqFFFwFqFqFqFqFqFqFqFqFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFjFjFjFjFjFGFyFHFIFIFIFJFyFyFjFjFKFKFjFoFtFDFtFtFtFtFtFDFtFoFpFoFoFkFmFqFqFqFqFqFLFLFqFqFqFqFqFqFqFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFMFNFOFjFyFyFyFPFQFQFQFRFyFyFyFjFSFSFjFtFtFTFUFVFWFXFYFTFtFtFoFoFoFkFmFqFqFqFqFLFZGaFLFqFqFqFqFqFqFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjGbGbGbGcFyFyFyFPFQFQFQFRFyFyFyGdFSFSGdGeGfFtGgGhGhGhGiGjGkFtFoFoFoFkFmFqFqFqFqFLGlGmFLFqFqFFFqGnFqFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjGoGoGoFjFyFyFyFPFQFQFQFRFyFyFyFjFSFSFjFtGpGqGrGjGjGjGjGjGsFtFoFoFoFkFmFqFqFqFqFqFLFLFqFqFqFqFqFqFqFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFjFjFjFjFjFyFyGtGuGuGuGvFyFyFjFjFKFKFjFtFTFTGwGjGjGjGxFTFTFtFoFoFpFkFmFqFqFwFqFqFqFqFqFqFqFqFqFqFqFqFqFuFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFjFyFyFyFyFyFyFyGyFyFjFoFoFoFoFoFtFTGzGjGAGjGBFTFtFoFoFoFoFkFmFqFqFFFwFqFqFqFqFqFqFqFqFqFqFqFqFwFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFjGCGCGCFyFyFyGCGCGCFjFoFoFpFoFoFoFtFtGDGEGFFtFtFoFoFoFoFoFkFmFqFqFqFqFqFqFqGGFqGHFqGHFqGIFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFjFjFjFjFKGJFKFjFjFjFjFoFoFoFoFoFoFoFtGKGLGMFtFoFoFoFoFoFoFkFmFqFqFqGNFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoGOFoFoFoFoGPGQGRGSGTGUGPFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkFmGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVGVFmFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFoFoFoGQGRGSGTGUFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkGWGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGXGWFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFoFoFoGQGRGSGTGUFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFpFoFoFoFoFoGQGRGSGTGUFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFoFoFoGQGRGSGTGUFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFoFoFoGQGRGSGTGUFoGOFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFoFoFoGQGRGSGTGUFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoGOFoFoFoGQGRGSGTGUFoFoFoFoFoFoFoFoFoFoFpFoFoFoFoFoFoGOFoFoFoFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFoFoFoGQGRGSGSFjFjFKFKFKFjFjFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFoFoFoFoFoFoFoGQGRGSGSFjHaFyFyFyHbFjFoFoFoFoFoFoFoFoFoFoFoFoFoFoFoFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFjFjFjFKFKFKFKFjFKGJFKFjFyFyGCFyFyFjFKFjFjFjFKFjFjFjFjFjFjFjFjFjFjFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHcFyFyFyFyFyFyFyFyFyFyHdFjFyGCHeGCFyFjHfHgFjHgHhFjHiHjHkFjaaaaaaaaaaFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaHcFyFyFyFyFyFyFyFyFyFyFyFjFyFyHlFyFyFjFyHmFjHmFyFjHnHjHjFjaaaaaaaaaaFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjFKGcFKFjHoFyFyFyFyFyFyFjHpFyFyFyHbFjFyFyFjFyFyFjHqHjHjFjaaaaaaaaaaFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjHrGoHsFjFKHtFKFjFyFyFyFjFKFjHuFjFKFjFjHuFjHuFjFjFjHjHjFjaaaaaaaaaaFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjHvGoHwFjHxHxHxFjFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyHyHjHjFjaaaaaaaaaaFkGYGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGZGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjHzHAHBFjHxHxHxFjFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFyFjHCHDFjaaaaaaaaaaFkGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYFkaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFjHEHFHGFjHHHIHJFjHcFjHcFjHKHKHKHKHKHKHKHKFyFyFBHLHMHMHMHMHMHMHMHMHMHMHMabababababababababababababababababababababaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababHNHNHNHNHNHNHNHNHNHNHNHNHNababababababababababHOHOHOHOHOHOHOHOHOHOHOHOHOababHKHKHPHQHRHSHTHUHKHKHKHKHKHMHVHWHXHWHXHWHXHWHXHMaaaaaaaaHZIaIbIcHZaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIeIeIeIfHNMyMyIhHNIiIjIjHNIeIdIdIdIdIdIdIdIdIdIdHOIkIlHOIkIlHOIkIlHOIkIlHOIdIdHKImInInInInInInIoHKHKIpHKHMHVHVHVHVHVHVHVHVHVHMaaaaaaaaHZIqIqIqHZaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIeIfIfIfIrIjIjIjHNIjIjIsItIeIeIeIdIdIdIdIdIdIdIdHOHOHOHOHOHOHOHOHOHOHOHOHOIdIdHKIuInInIvIwInInIoHKInInIxHMHMHMHMHMIyHMHMHMHMHMHMHMIzHMIAIBIBIBIAaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIeIeIfIfICIfIjIjIDIjIjIjHNIEIFIeIeIdIdIdIdIdIdIdHOIkIlHOIkIlHOIkIlHOIkIlHOIdIdHKIGInInIHIIInInHYHKIKIKIKHMHVHVHVHVHVHVHVHVHVHVHVILIMINIOIPIPIPHZaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdIeIeIfHNIQIjIjHNIjIjIjHNIRISITIeIeHNHNHNHNHNHNHOHOHOHOHOHOHOHOHOHOHOHOHOIdIdHKIUInInIVIWInInIXHKInInInIYHVHVHVHVHVHVHVHVHVHVHVILIMINIOIPIPIPHZaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdIdIeIeHNIjIjIjHNIjIjIjHNIZISISItIeJaJbJcJdHNJeJfJgJhJiJjJkabIdIdIdIdIdIdIdIdHKJlInInInInInInIXHKInInInIYJmJmJmJnJnJnJmJmJmHMHMHMIzHMIAJoIPJpIAaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdHNHNHNHNHNHNHNHNIjIjIjJqISISISJrHNJsJtJtJuHNJvItJwItItItJxabIdIdIdIdIdIdIdHKHKIKIKHKJyJyHKIKIKHKHKJzJzHMHMHMHMHMHMHMHMHMHMHMIdIdIdaaHZJoIPJpHZaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdHNJAJBJCJBJDJEHNIjIjIjHNISISISJFHNJGJtJtJHHNJIJJJKJLJwJMJNabIdIdIdIdIdHKHKHKInInInInInInInInInHKInInInHKJOJPJQJRJSHKJTJUJVHKHKHKIdaaHZJWIPJWHZaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdHNJXJYJXJYJXJZHNIjIjIjHNKaKbKcHNHNHNIDHNHNHNHNHNKdKdKdHNHNabIdIdIdIdIdHKInHKInInInKeInInInInInKfInInInHKKgJPJPJPKhHKKiKiKiKjKkHKIdaaHZKlIPKmHZaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdHNJYKnJYJYJYKoKpIjIjIjHNHNHNHNHNIjIjIjIjItKpKqKrIfIfKsIfIeabIdIdIdIdIdHKKtHKInInInInInInInInInKfInInInHKKuJPJPJPKvHKKwKiKiHKHKHKIdaaHZKxKyKxHZaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdHNJXJYJXJYKzKAHNIjIjIjIjIjIjIjIjIjIjIjIjIjKBKqIfKCKDKEIfIeabIdIdIdIdIdHKHKHKInKFKGInInInInKHKIHKInInInHKKJJPJPJPKKHKKLKiKiKMKNHKIdaaaaHZKOHZaaaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdHNKPJBKQJBKRJBHNKqIjIjIjIjIjIjIjIjIjHNHNHNIeKSKqIfIfIfKTIeabIdIdIdIdIdIdIdHKHKIKIKHKKUKUHKIKIKHKHKInInHKHKHKKVHKHKHKHKKWHKHKHKHKIdaaaaaaaaaaaaaaIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdIdHNHNHNHNHNHNHNHNKXKYKXHNHNHNHNHNHNHNHNIeIeIeIeKZIfIfIfLaIeabIdIdIdIdIdIdIdIdHKLbInInInInInInLcHKLdInInIKLeLfLgLgLhHKLiLiLjLjLjHKHKIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdHNHNIiIjIjKqKqHNLkLkLkLkLlHNLmIjIjIjLnHNHNIeIeIeIfLoKDKDLpIeabIdIdIdIdIdIdIdIdHKLbInInLqLrInInLsHKLtInInHKLgLgLuLgLgHKLiLiLvLvLvLwHKIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdHNIjIjIjIjIjKqHNLkLkLxLkLkHNIjIjIjIjKqKqHNIeIeIeLyIfIfIfIfIeabIdIdIdIdIdIdIdIdHKLbInInLbLzInInLAHKLBInInLCLgLDLELFLgLGLiLiLiLiLiLHHKIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdHNIjIjIjIjIjIjKYLkLILJLKLkKYIjIjIjIjIjKqHNIeIdIeIeLLLMIfIeIeabIdIdIdIdIdIdIdIdHKLbInInLNLOInInLPHKLQInInHKLgLDLELFLgHKLiLiLvLvLvLRHKIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdIdHNKqIjHNKXKXKXHNLkLILSLKLkHNKXKXKXHNIjIjHNIeIdIdIeIeIeLTIfIeabIdIdIdIdIdIdIdIdHKLbInInInInInInLPHKInInInIKLgLgLULgLgHKLVLVLjLjLjHKHKIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdIdIdaaHNIjKqHNaaaaaaHNLWLkLXLkLkHNaaaaaaHNIjIjHNIeIdIdIdIdIeIeLYIeabIdIdIdIdIdIdIdIdHKHKHKLZMaMbMcHKHKHKHKInInHKIKLgLgLgIKHKHKHKIKIKIKHKIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdIdaaaaaaMdMeMeMfaaaaaaHNHNKXKXKXHNHNaaaaaaMdMeMeMfaaIdIdIdIdIdIdIdIdabIdIdIdIdIdIdIdIdIdIdHKHKHKHKHKHKaaaaMgMhMhMiIKIKIKIKIKaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdaaaaaaaaMdMjMkMfaaaaaaaaaaaaaaaaaaaaaaaaaaMdMjMkMfaaIdIdIdIdIdIdIdIdabIdIdIdIdIdIdIdIdIdIdaaaaaaaaaaaaaaaaMgMlMmMiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdIdaaaaaaaaMdMeMeMfaaaaaaaaaaaaaaaaaaaaaaaaaaMdMeMeMfaaaaIdIdIdIdIdIdIdabIdIdIdIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaMnMhMhMoaaaaaaaaaaaaMpMpMqMrMsMpMpMpMpMpMpMpaaaaaaIdIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtMuMvMtaaaaaaMtaaaaaaaaaaMtaaaaaaMtMwMxMtaaaaIdIdIdIdIdIdIdabIdIdIdIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaMpMzMzMpaaaaaaMpMpMpMpMAMBMBMBMBMBMCMpMDMEMFaaaaaaaaIdIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtMGMHMtaaaaaaMtMIMJMJMJMKMtaaaaaaMtMLMMMtaaaaaaaaIdIdIdIdIdabIdIdIdIdIdIdIdIdaaaaaaaaaaaaMpMpMpMpMNMOMPMQMRMSMpMpMTMUMpMVMBMBMBMBMBMWMpMDMEMXaaaaaaaaaaIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtMYMZMtaaaaMtMtNbNaNdNcNeMtMtaaaaMtNfNgMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdIdIdaaaaaaaaaaMpMpMpMBMBNhNiNjNkNlNmNnNnNoNpMBMpNqMBMBMBMpMpMpMpMDMEMXaaaaaaaaaaIdIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtNrMtMtaaaaMtMtNtNsNuNsNvNwMtaaaaMtMtNxMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdIdaaaaaaaaMpMpMpMpNyMBMBMpNzNANAMQNBMBMBMBMBNyMpNCMBMBNDMpNENFMpMDMENGaaaaaaaaaaaaIdIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdIdaaaaaaaaaaMtNHNIMtMtMtMtNJNsNsNsNsNsNJMtMtMtMtNKNMMtaaaaaaaaaaIdIdIdIdabIdIdIdIdIdaaaaaaaaMpMpNNNOMpMBMBNPMpNQNRNSNTMpNUNVMBMBMpMpMpNWMBNXNYNZOaMpMpMpMpMpaaaaaaaaaaaaIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIdIdaaaaaaaaaaaaMtObOcOdOeOfMtOgNsNsNsNsNsOgMtOhOiOjOcObMtaaaaaaaaaaIdIdIdIdabIdIdIdIdaaaaaaaaaaOkOlMBOmMpMBMBOnMpOoOpOpOqMpMpMpMpOrMpOsMpMSOrMpMpNZOtMpOuOvOwMpMpaaaaaaaaaaIdIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOxIdaaaaaaaaaaaaaaMtObOcOcOcOyMtOzOAOBOCOzOAOBMtNLOcOcOEObMtaaaaaaaaaaIdIdIdIdabIdIdIdIdaaaaaaaaaaOFOGOpOHMpMBMBNPMpOIOpOpOJMpMBOKOLOpMBMBMBOKOpMBMpMpMpMpNZNZNZOMMpMpaaaaaaaaaaIdIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaOOObOcOcOcOcOCNsNsNsNsNsNsNsOCOcOcOPOcObOOaaaaaaaaaaaaIdIdIdabIdIdIdIdaaaaaaaaaaOFOQOROpOSOpOpOpOSOpOpOpOpOSOpOpOpOpOpOTOpOpOpNZNZNZNZOUNZNZNZNZOVMpaaaaaaaaaaaaIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaOWOXOcOYOZOcMtPaPbNsNsNsPdPcMtOcPeOcPfObOWaaaaaaaaaaaaIdIdIdabIdIdIdaaaaaaaaaaaaOFPgOpPhMpMBMBNPMpOIOpOpOJMpMBNWMBOpMBMBMBNWOpMBMpMpMpMpPiNZNZPjMpMpaaaaaaaaaaaaIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaPkOXOcOcMtPlMtMtMtPmPoPnMtMtMtPpMtPqPrPsPkaaaaaaaaaaaaaaIdIdabIdIdIdaaaaaaaaaaaaPtPuMBPvMpMBMBOnMpOoOpOpOqMpMpMpMpOrMpPwMpMSOrMpMpPxPxMpPyPzPAMpMpaaaaaaaaaaaaaaIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaMtMtPBPCPCMtPDPEPDPFPGPIPHPFPJPKPLMtPMPNPOMtMtaaaaaaaaaaaaIdIdabIdIdaaaaaaaaaaaaaaMpMpPPPQMpMBMBNPMpPRMBMBPRMpPSPTMpMBMpMpMpPUOpPVOpPWPXMpMpMpMpMpaaaaaaaaaaaaaaaaIdIdIdabaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaMtMtPYPYMtMtPDPDPDPZPGQaPHPZPLPLQbMtMtPYPYMtMtaaaaaaaaaaaaIdIdabIdIdaaaaaaaaaaaaaaaaMpMpMpMpNyMBMBMpMpMpQcMpMpNZNZQdMBNPMpQeQfOpOpQgQhQiMpMDMEMFaaaaaaaaaaaaaaaaaaaaIdIdabaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaMtODODMtMtQkQlPDQmQnNsQnQmPLPLQoMtMtODODMtaaaaaaaaaaaaaaIdIdabIdaaaaaaaaaaaaaaaaaaaaaaMpMpMpMBMBMBMpNENZMpQpNZNZQqQrQsMpOpOpOpOpQtQuQvMpMDMEMXaaaaaaaaaaaaaaaaaaaaIdIdabaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaMtPDQwPDMtMtQxMtMtQyPLQzMtaaaaaaaaaaaaaaaaaaaaIdIdIdabIdaaaaaaaaaaaaaaaaaaaaaaaaaaMpMpMpMpMpQAQBMpMpMSMpMpQCQDMpQEOpOpOpQFOpQGMpMDMEMXaaaaaaaaaaaaaaaaaaaaIdIdabaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaMtPDPDQHMtQIQJQKMtPLPLQLMtaaaaaaaaaaaaaaaaaaaaIdIdIdabIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMpMpMpMpaaaaaaMpMpMpMpQMQNOpQOQPQQQRMpQSMENGaaaaaaaaaaaaaaaaaaBrBrIdabaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaMtMtQTPDMtQUQJQVMtQWQXMtMtaaaaaaaaaaaaaaaaaaaaIdIdIdabIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMpMpQYQZRaMpMpMpMpMpMpMpaaaaaaaaaaaaaaaaBrBraaIdabaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaMtMtMtMtMtRbRcRdMtMtMtMtMtaaaaaaaaaaaaaaaaaaaaIdIdIdabIdBrBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBrBraaaaIdOxaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaaaaaMtMtPYPYPYPYPYMtMtaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdabIdaaBrBraaaaIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBrBraaaaaaaaONaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaIdIdIdaaaaaaaaaaaaaaaaaaMtODODODODODMtaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdabIdaaaaBrBrIdIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdIdaaaaaaaaaaONaaaa
+aaaaabababababababReabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdabIdaaaaaaIdIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdIdIdIdaaaaaaaaONaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdabIdaaaaaaIdIdIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdIdIdIdIdaaaaaaaaaaONaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdabIdaaaaaaIdIdIdIdIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdIdIdIdIdIdaaaaaaaaaaONaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdaaaaaaIdabIdaaaaaaaaIdIdIdIdIdIdIdBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrBrIdIdIdIdIdIdIdIdIdaaaaaaaaaaaaONaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdaaaaaaIdabIdaaaaaaaaaaIdIdIdIdIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdIdIdIdIdaaaaaaaaaaaaaaONaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdaaaaaaaaIdabIdaaaaaaaaaaaaaaaaIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdIdIdIdaaaaaaaaaaaaaaaaaaaaONaaaa
+aaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIdabIdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONaaaa
+aaaaRfababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONRgRgOxONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONONaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
+
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
diff --git a/maps/southern_cross/southern_cross_areas.dm b/maps/southern_cross/southern_cross_areas.dm
index d78089ff34..06ab539b0a 100644
--- a/maps/southern_cross/southern_cross_areas.dm
+++ b/maps/southern_cross/southern_cross_areas.dm
@@ -108,13 +108,13 @@
icon_state = "bluenew"
/area/surface/outside/river/faxalven
- name = "Faxälven River"
+ name = "Faxälven River"
/area/surface/outside/river/indalsalven
- name = "Indalsälven River"
+ name = "Indalsälven River"
/area/surface/outside/river/svartan
- name = "Svartån River"
+ name = "Svartån River"
/area/surface/outside/lake/romsele
name = "Romsele Lake"
diff --git a/maps/submaps/surface_submaps/mountains/BlastMine1.dmm b/maps/submaps/surface_submaps/mountains/BlastMine1.dmm
index 34094caf86..a2c17c17c2 100644
--- a/maps/submaps/surface_submaps/mountains/BlastMine1.dmm
+++ b/maps/submaps/surface_submaps/mountains/BlastMine1.dmm
@@ -3,10 +3,10 @@
"c" = (/obj/structure/sign/warning/bomb_range,/turf/simulated/wall/sandstone,/area/submap/cave/BlastMine1)
"d" = (/obj/structure/table/rack,/obj/item/weapon/syndie/c4explosive,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
"e" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
-"f" = (/mob/living/simple_animal/hostile/savik{returns_home = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
+"f" = (/mob/living/simple_mob/animal/sif/savik,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
"g" = (/obj/structure/table/rack,/obj/item/clothing/head/bomb_hood,/obj/item/clothing/suit/bomb_suit,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
"h" = (/obj/item/device/gps/internal/poi{gps_tag = "Unidentified Signal"},/turf/simulated/wall/sandstone,/area/submap/cave/BlastMine1)
-"i" = (/mob/living/simple_animal/retaliate/diyaab,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
+"i" = (/mob/living/simple_mob/animal/sif/diyaab,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
"j" = (/obj/structure/table/reinforced,/obj/item/weapon/flame/lighter/zippo/c4detonator{detonator_mode = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
"k" = (/obj/structure/table/rack,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
"l" = (/obj/machinery/floodlight,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/BlastMine1)
diff --git a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
index 5b362c4692..5411ee00af 100644
--- a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
+++ b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -163,6 +164,44 @@
},
/turf/simulated/shuttle/plating,
/area/submap/CaveTrench)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/template_noop,/area/submap/CaveTrench)
+"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/CaveTrench)
+"d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"e" = (/turf/simulated/floor/outdoors/rocks,/area/submap/CaveTrench)
+"f" = (/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
+"g" = (/mob/living/simple_mob/mechanical/combat_drone/lesser,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"h" = (/mob/living/simple_mob/animal/passive/fish/trout{faction = "malf_drone"},/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
+"i" = (/obj/effect/decal/remains/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"j" = (/turf/simulated/wall,/area/submap/CaveTrench)
+"k" = (/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"l" = (/mob/living/simple_mob/animal/passive/fish/trout,/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
+"m" = (/turf/simulated/wall/wood,/area/submap/CaveTrench)
+"n" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lantern,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"o" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"p" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"q" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"r" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"s" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "Rellek's telling me that we're in deep shit if the townies found out I'm cooking up drones out here. Like I give a fuck, We're minning our asses off only to dig into some bug nest to get our legs chewed. Well I'm not looking a gift horse in the mouth. Those drone dudes out in the wild hooked us up with these machines so long as they get some of the metal we dig up. Win win for us, Guess we're retiring early after all."; name = "Note"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"t" = (/obj/structure/table/steel,/obj/item/robot_parts/robot_component/actuator,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"u" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"v" = (/obj/structure/simple_door/wood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"w" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"x" = (/obj/structure/table/steel,/obj/item/device/robotanalyzer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"y" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"z" = (/obj/structure/table/bench/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"A" = (/obj/effect/decal/remains,/obj/item/clothing/under/rank/miner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"B" = (/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
+"C" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"D" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"E" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"F" = (/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"G" = (/obj/structure/table/steel,/obj/item/robot_parts/l_leg,/obj/item/robot_parts/head,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"H" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"I" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
+"J" = (/obj/machinery/drone_fabricator{fabricator_tag = "Unknown"},/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/mountains/Cavelake.dmm b/maps/submaps/surface_submaps/mountains/Cavelake.dmm
index d52795fa56..576e74c922 100644
--- a/maps/submaps/surface_submaps/mountains/Cavelake.dmm
+++ b/maps/submaps/surface_submaps/mountains/Cavelake.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -53,6 +54,23 @@
/obj/item/clothing/mask/snorkel,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/Cavelake)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/template_noop,/area/submap/Cavelake)
+"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Cavelake)
+"d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+"e" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+"f" = (/turf/simulated/floor/outdoors/rocks,/area/submap/Cavelake)
+"g" = (/mob/living/simple_mob/animal/sif/hooligan_crab,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+"h" = (/turf/simulated/floor/water,/area/submap/Cavelake)
+"i" = (/mob/living/simple_mob/animal/passive/fish/perch,/turf/simulated/floor/water,/area/submap/Cavelake)
+"j" = (/obj/machinery/crystal,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+"k" = (/mob/living/simple_mob/animal/passive/fish/trout,/turf/simulated/floor/water,/area/submap/Cavelake)
+"l" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+"m" = (/obj/random/mob/sif,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+"n" = (/obj/item/clothing/mask/snorkel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+"o" = (/obj/effect/decal/remains/mouse,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/Cavelake)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/mountains/CrashedMedShuttle1.dmm b/maps/submaps/surface_submaps/mountains/CrashedMedShuttle1.dmm
index fad7093123..74d5e563a4 100644
--- a/maps/submaps/surface_submaps/mountains/CrashedMedShuttle1.dmm
+++ b/maps/submaps/surface_submaps/mountains/CrashedMedShuttle1.dmm
@@ -14,7 +14,7 @@
"an" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/blood/oil,/obj/structure/loot_pile/surface/bones,/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
"ao" = (/obj/item/weapon/circuitboard/broken,/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/shuttle/plating,/area/submap/CrashedMedShuttle)
"ap" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/shuttle/plating,/area/submap/CrashedMedShuttle)
-"aq" = (/obj/effect/decal/cleanable/liquid_fuel,/mob/living/simple_animal/hostile/giant_spider/webslinger{returns_home = 1},/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
+"aq" = (/obj/effect/decal/cleanable/liquid_fuel,/mob/living/simple_mob/animal/giant_spider/webslinger,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"ar" = (/obj/structure/closet/crate/medical,/obj/random/medical,/obj/random/medical,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"as" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"at" = (/obj/item/weapon/material/shard,/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
@@ -23,7 +23,7 @@
"aw" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"ax" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"ay" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
-"az" = (/obj/effect/decal/cleanable/blood/gibs/robot,/obj/item/weapon/firstaid_arm_assembly,/mob/living/simple_animal/hostile/giant_spider/frost{returns_home = 1},/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
+"az" = (/obj/effect/decal/cleanable/blood/gibs/robot,/obj/item/weapon/firstaid_arm_assembly,/mob/living/simple_mob/animal/giant_spider/frost,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"aA" = (/obj/item/stack/rods,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CrashedMedShuttle)
"aB" = (/obj/structure/lattice,/obj/item/stack/rods,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
"aC" = (/obj/effect/decal/cleanable/blood/oil,/obj/item/weapon/firstaid_arm_assembly,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
@@ -38,7 +38,7 @@
"aL" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/simulated/shuttle/plating,/area/submap/CrashedMedShuttle)
"aM" = (/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
"aN" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
-"aO" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider/carrier,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
+"aO" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/carrier,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"aP" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"aQ" = (/obj/effect/spider/stickyweb,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"aR" = (/turf/simulated/shuttle/wall/no_join,/area/submap/CrashedMedShuttle)
@@ -63,12 +63,12 @@
"bk" = (/obj/effect/decal/cleanable/blood/oil,/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
"bl" = (/obj/effect/spider/stickyweb,/obj/item/weapon/material/shard,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"bm" = (/obj/random/medical,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
-"bn" = (/mob/living/simple_animal/hostile/giant_spider/webslinger{returns_home = 1},/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
+"bn" = (/mob/living/simple_mob/animal/giant_spider/webslinger,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
"bo" = (/obj/effect/spider/cocoon,/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
"bp" = (/obj/structure{anchored = 1; density = 1; desc = "Once an artificial intelligence; now merely a brick of inert metal and circuits."; icon = 'icons/mob/AI.dmi'; icon_state = "ai-empty"; name = "V.I.T.A"},/turf/simulated/shuttle/floor/yellow,/area/submap/CrashedMedShuttle)
"bq" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
"br" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
-"bs" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/spider/stickyweb,/mob/living/simple_animal/hostile/giant_spider/webslinger,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CrashedMedShuttle)
+"bs" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/webslinger,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CrashedMedShuttle)
"bt" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CrashedMedShuttle)
"bu" = (/obj/effect/decal/remains/tajaran,/obj/item/weapon/surgical/circular_saw,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
"bv" = (/obj/effect/decal/cleanable/blood/oil,/obj/effect/spider/stickyweb,/turf/simulated/floor/outdoors/rocks,/area/submap/CrashedMedShuttle)
@@ -81,7 +81,7 @@
"bC" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CrashedMedShuttle)
"bD" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv,/turf/simulated/shuttle/floor/purple,/area/submap/CrashedMedShuttle)
"bE" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/purple,/area/submap/CrashedMedShuttle)
-"bF" = (/obj/random/medical/pillbottle,/mob/living/simple_animal/hostile/giant_spider/webslinger{returns_home = 1},/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
+"bF" = (/obj/random/medical/pillbottle,/mob/living/simple_mob/animal/giant_spider/webslinger,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"bG" = (/obj/structure/table/standard,/obj/item/device/defib_kit/loaded,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"bH" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"bI" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
@@ -97,7 +97,7 @@
"bS" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/submap/CrashedMedShuttle)
"bT" = (/obj/structure/table/standard,/obj/item/device/reagent_scanner/adv,/turf/simulated/shuttle/floor/purple,/area/submap/CrashedMedShuttle)
"bU" = (/obj/machinery/iv_drip,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
-"bV" = (/mob/living/simple_animal/hostile/giant_spider/carrier,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
+"bV" = (/mob/living/simple_mob/animal/giant_spider/carrier,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"bW" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/masks,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"bX" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
"bY" = (/obj/structure/table/standard,/obj/item/weapon/storage/backpack/medic,/obj/random/medical/lite,/turf/simulated/shuttle/floor/white,/area/submap/CrashedMedShuttle)
diff --git a/maps/submaps/surface_submaps/mountains/Scave1.dmm b/maps/submaps/surface_submaps/mountains/Scave1.dmm
index 464ab34789..4327deb000 100644
--- a/maps/submaps/surface_submaps/mountains/Scave1.dmm
+++ b/maps/submaps/surface_submaps/mountains/Scave1.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -69,6 +70,25 @@
/obj/random/mob/spider,
/turf/simulated/mineral/floor/ignore_mapgen,
/area/submap/cave/Scave1)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/cave/Scave1)
+"c" = (/obj/effect/spider/stickyweb,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"e" = (/obj/effect/spider/spiderling/frost,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"f" = (/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c100,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"g" = (/obj/random/mob/spider/mutant,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"h" = (/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c100,/obj/item/weapon/spacecash/c100,/obj/effect/decal/remains,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"i" = (/obj/random/mob/spider,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"j" = (/obj/item/weapon/grenade/spawnergrenade/spider,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"k" = (/obj/random/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"l" = (/obj/effect/decal/mecha_wreckage/ripley,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"m" = (/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"n" = (/obj/item/device/flashlight,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"o" = (/mob/living/simple_mob/animal/giant_spider/frost,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"p" = (/obj/effect/spider/stickyweb,/obj/effect/spider/stickyweb,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+"q" = (/obj/effect/decal/remains,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/Scave1)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/mountains/SwordCave.dmm b/maps/submaps/surface_submaps/mountains/SwordCave.dmm
index 8c15e58da8..385c61a540 100644
--- a/maps/submaps/surface_submaps/mountains/SwordCave.dmm
+++ b/maps/submaps/surface_submaps/mountains/SwordCave.dmm
@@ -1,55 +1,55 @@
-"a" = (/turf/template_noop,/area/template_noop)
-"b" = (/turf/simulated/mineral,/area/submap/cave/swordcave)
-"c" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
-"d" = (/obj/machinery/crystal,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
-"e" = (/turf/simulated/floor/water,/area/submap/cave/swordcave)
-"f" = (/turf/simulated/floor/water/deep,/area/submap/cave/swordcave)
-"g" = (/obj/structure/ghost_pod/manual/cursedblade,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
-"h" = (/mob/living/simple_animal/hostile/faithless/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
-"i" = (/obj/item/device/gps/explorer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
-"j" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
-"k" = (/mob/living/simple_animal/hostile/scarybat/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
-
-(1,1,1) = {"
-aaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaa
-aaaaabbbbbbbbbbbcccdccccbbbbbbbbbbbbaaaaa
-aaaabbbbbbcccccccccccccccccccccbbbbbbaaaa
-aaabbbbbbcccccccccccccccccccccccdbbbbbaaa
-aabbbbccccccceeeeeeeeeeeeeccccccccbbbbbaa
-aabbbccccccceeeeeeeeeeeeeeeccccccccbbbbaa
-aabbbcdcccceeeffffffffffffeeeccccccbbbbaa
-aabbbccccceefeeeeeeefeeeeeeeeecccccbbbbaa
-aabbbccccceefeeccceeeeeeeefffeeccccbbbaaa
-aabbbcccceeffeecccccecccceefffeecccbbbaaa
-aabbbcccceeffeeeccgcccchcceeffeecccbbbaaa
-aabbbcccdeeffeeccijcdccccceefeeccdcbbbaaa
-abbbccccceefffeeeccccccceeefeeccccccbbaaa
-abbbcccccceefffeeeccccceeeffeeccccccbbbaa
-abbbcdccccceefffeeeeeeeeffffeeccccccbbbaa
-abbcccckcccceeffffeeeeefffffeeccccccbbbaa
-abbcccccccccceeffffffffffffeeccccdccbbbaa
-abbccccccccccceeffeeeeeefffeecccccccbbbaa
-abbbccccdcccccceefeeeeeeeeeeckccccccbbbaa
-abbbcccccccccccceeecccdceeecccccccccbbaaa
-abbbcccccccccccccecccccccceccccdckccbbaaa
-abbbcccccccccckcccccccccccccccccccccbbaaa
-abbbbcccccckccccccccccccccckccccccccbbaaa
-abbbbbcccccccccccccccckccccccccckcccbbaaa
-aabbbbbccccccccccccccccccccccccccccbbbaaa
-aabbbbbccccccccccccdccccccccccccccbbbbaaa
-aabbbbbcccccdccccccccccccccccccccbbbbbaaa
-aabbbbbccccccccccckccccccccdcccccbbbbaaaa
-aabbbbbbbccccccccccccccccccccccccbbbbaaaa
-aaabbbbbbbcccccccccccccccdccccccbbbbaaaaa
-aaaabbbbbbcckcccccdcccccccccccccbbbbaaaaa
-aaaaabbbbbcccccccccccccccccccccbbbbbaaaaa
-aaaaabbbbbccccccccccccccccccccbbbbbaaaaaa
-aaaaaabbbbbcccdccccccccccccccbbbbbaaaaaaa
-aaaaaaabbbbbcccccccckccccckcbbbbbbaaaaaaa
-aaaaaaabbbbbbcccccccccccccccbbbbbaaaaaaaa
-aaaaaaabbbbbbbbbbbbccccccccccbbbaaaaaaaaa
-aaaaaaaaabbbbbbbbbbbccccccccccbaaaaaaaaaa
-aaaaaaaaaaabbbbbbbbbbccccccccccaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaacccdccccaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaccccccaaaaaaaaaaaa
-"}
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/simulated/mineral,/area/submap/cave/swordcave)
+"c" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
+"d" = (/obj/machinery/crystal,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
+"e" = (/turf/simulated/floor/water,/area/submap/cave/swordcave)
+"f" = (/turf/simulated/floor/water/deep,/area/submap/cave/swordcave)
+"g" = (/obj/structure/ghost_pod/manual/cursedblade,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
+"h" = (/mob/living/simple_mob/faithless/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
+"i" = (/obj/item/device/gps/explorer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
+"j" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
+"k" = (/mob/living/simple_mob/animal/space/bats,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/swordcave)
+
+(1,1,1) = {"
+aaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaa
+aaaaabbbbbbbbbbbcccdccccbbbbbbbbbbbbaaaaa
+aaaabbbbbbcccccccccccccccccccccbbbbbbaaaa
+aaabbbbbbcccccccccccccccccccccccdbbbbbaaa
+aabbbbccccccceeeeeeeeeeeeeccccccccbbbbbaa
+aabbbccccccceeeeeeeeeeeeeeeccccccccbbbbaa
+aabbbcdcccceeeffffffffffffeeeccccccbbbbaa
+aabbbccccceefeeeeeeefeeeeeeeeecccccbbbbaa
+aabbbccccceefeeccceeeeeeeefffeeccccbbbaaa
+aabbbcccceeffeecccccecccceefffeecccbbbaaa
+aabbbcccceeffeeeccgcccchcceeffeecccbbbaaa
+aabbbcccdeeffeeccijcdccccceefeeccdcbbbaaa
+abbbccccceefffeeeccccccceeefeeccccccbbaaa
+abbbcccccceefffeeeccccceeeffeeccccccbbbaa
+abbbcdccccceefffeeeeeeeeffffeeccccccbbbaa
+abbcccckcccceeffffeeeeefffffeeccccccbbbaa
+abbcccccccccceeffffffffffffeeccccdccbbbaa
+abbccccccccccceeffeeeeeefffeecccccccbbbaa
+abbbccccdcccccceefeeeeeeeeeeckccccccbbbaa
+abbbcccccccccccceeecccdceeecccccccccbbaaa
+abbbcccccccccccccecccccccceccccdckccbbaaa
+abbbcccccccccckcccccccccccccccccccccbbaaa
+abbbbcccccckccccccccccccccckccccccccbbaaa
+abbbbbcccccccccccccccckccccccccckcccbbaaa
+aabbbbbccccccccccccccccccccccccccccbbbaaa
+aabbbbbccccccccccccdccccccccccccccbbbbaaa
+aabbbbbcccccdccccccccccccccccccccbbbbbaaa
+aabbbbbccccccccccckccccccccdcccccbbbbaaaa
+aabbbbbbbccccccccccccccccccccccccbbbbaaaa
+aaabbbbbbbcccccccccccccccdccccccbbbbaaaaa
+aaaabbbbbbcckcccccdcccccccccccccbbbbaaaaa
+aaaaabbbbbcccccccccccccccccccccbbbbbaaaaa
+aaaaabbbbbccccccccccccccccccccbbbbbaaaaaa
+aaaaaabbbbbcccdccccccccccccccbbbbbaaaaaaa
+aaaaaaabbbbbcccccccckccccckcbbbbbbaaaaaaa
+aaaaaaabbbbbbcccccccccccccccbbbbbaaaaaaaa
+aaaaaaabbbbbbbbbbbbccccccccccbbbaaaaaaaaa
+aaaaaaaaabbbbbbbbbbbccccccccccbaaaaaaaaaa
+aaaaaaaaaaabbbbbbbbbbccccccccccaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaacccdccccaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaccccccaaaaaaaaaaaa
+"}
diff --git a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm
index 79440f618f..9b19efeea7 100644
--- a/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm
+++ b/maps/submaps/surface_submaps/mountains/crashedcontainmentshuttle.dmm
@@ -1,121 +1,121 @@
-"aa" = (/turf/template_noop,/area/submap/crashedcontainmentshuttle)
-"ab" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/submap/crashedcontainmentshuttle)
-"ac" = (/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
-"ad" = (/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"ae" = (/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"af" = (/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
-"ag" = (/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"ah" = (/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"ai" = (/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aj" = (/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"ak" = (/obj/structure/door_assembly/door_assembly_ext{anchored = 1},/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"al" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"am" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/crashedcontainmentshuttle)
-"an" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"ao" = (/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"ap" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aq" = (/obj/item/weapon/material/shard,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"ar" = (/obj/structure/grille,/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"as" = (/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"at" = (/obj/item/stack/rods,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"au" = (/obj/item/stack/rods,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"av" = (/obj/structure/closet/walllocker/emerglocker/east,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"aw" = (/obj/structure/frame,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"ax" = (/obj/item/frame/mirror,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
-"ay" = (/obj/effect/decal/mecha_wreckage/gygax{anchored = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"az" = (/obj/effect/gibspawner/generic,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"aA" = (/obj/structure/closet/medical_wall,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
-"aB" = (/obj/structure/largecrate/animal/crashedshuttle,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
-"aC" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aD" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aE" = (/obj/structure/extinguisher_cabinet,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
-"aF" = (/obj/machinery/computer,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"aG" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aH" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"aI" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"aJ" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"aK" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"aL" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"aM" = (/obj/structure/frame,/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"aN" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"aO" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/structure/frame,/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"aP" = (/turf/simulated/floor/outdoors/rocks,/area/submap/crashedcontainmentshuttle)
-"aQ" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aR" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/template_noop,/area/submap/crashedcontainmentshuttle)
-"aS" = (/obj/structure/door_assembly/door_assembly_highsecurity{anchored = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"aT" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"aU" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"aV" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aW" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"aX" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aY" = (/obj/item/clothing/suit/space/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"aZ" = (/obj/effect/decal/remains/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"ba" = (/obj/effect/decal/remains/human,/obj/effect/gibspawner/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"bb" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"bc" = (/obj/structure/door_assembly,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"bd" = (/obj/item/clothing/head/helmet/space/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"be" = (/obj/item/weapon/material/knife/ritual,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"bf" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"bg" = (/obj/effect/gibspawner/generic,/turf/template_noop,/area/submap/crashedcontainmentshuttle)
-"bh" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"bi" = (/obj/item/weapon/circuitboard/broken,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"bj" = (/obj/item/device/gps/internal/poi,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
-"bk" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"bl" = (/obj/effect/decal/remains/robot,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
-"bm" = (/obj/effect/decal/cleanable/liquid_fuel,/turf/template_noop,/area/submap/crashedcontainmentshuttle)
-"bn" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"bo" = (/obj/effect/decal/cleanable/blood/drip,/turf/template_noop,/area/submap/crashedcontainmentshuttle)
-"bp" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"bq" = (/obj/item/weapon/circuitboard/broken,/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"br" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"bs" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"bt" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"bu" = (/obj/structure/door_assembly/door_assembly_ext{anchored = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"bv" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
-"bw" = (/obj/item/weapon/material/knife/ritual,/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
-"bx" = (/turf/simulated/shuttle/wall/dark/no_join,/area/submap/crashedcontainmentshuttle)
-"by" = (/obj/random/landmine,/obj/random/landmine,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"bz" = (/obj/effect/decal/remains/human,/obj/item/clothing/head/helmet/space/cult,/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
-"bA" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"bB" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"bC" = (/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"bD" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"bE" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"bF" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"bG" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"bH" = (/obj/structure/closet/crate{name = "landmines crate"; opened = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"bI" = (/obj/random/landmine,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
-"bJ" = (/obj/random/landmine,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
-"bK" = (/obj/random/landmine,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
-"bL" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
-"bM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-"bN" = (/obj/structure/toilet{dir = 8},/obj/effect/gibspawner/generic,/obj/effect/decal/remains/human,/obj/item/weapon/card/id/syndicate{age = "\\42"; blood_type = "\\O+"; desc = "A strange ID card."; dna_hash = "\[REDACTED]"; fingerprint_hash = "\\------"; name = "Aaron Presley's ID Card(Delivery Service) "; registered_name = "Aaron Presley"; sex = "\\Male"},/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
-"bO" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/remains/human,/obj/item/weapon/flame/lighter/random,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aa" = (/turf/template_noop,/area/submap/crashedcontainmentshuttle)
+"ab" = (/turf/simulated/shuttle/wall/dark/hard_corner,/area/submap/crashedcontainmentshuttle)
+"ac" = (/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
+"ad" = (/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"ae" = (/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"af" = (/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
+"ag" = (/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"ah" = (/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"ai" = (/obj/structure/grille,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aj" = (/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"ak" = (/obj/structure/door_assembly/door_assembly_ext{anchored = 1},/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"al" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"am" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/crashedcontainmentshuttle)
+"an" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"ao" = (/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"ap" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aq" = (/obj/item/weapon/material/shard,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"ar" = (/obj/structure/grille,/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"as" = (/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"at" = (/obj/item/stack/rods,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"au" = (/obj/item/stack/rods,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"av" = (/obj/structure/closet/walllocker/emerglocker/east,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"aw" = (/obj/structure/frame,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"ax" = (/obj/item/frame/mirror,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
+"ay" = (/obj/effect/decal/mecha_wreckage/gygax{anchored = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"az" = (/obj/effect/gibspawner/generic,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"aA" = (/obj/structure/closet/medical_wall,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
+"aC" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aD" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aE" = (/obj/structure/extinguisher_cabinet,/turf/simulated/shuttle/wall/dark,/area/submap/crashedcontainmentshuttle)
+"aF" = (/obj/machinery/computer,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"aG" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aH" = (/obj/structure/frame/computer,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"aI" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"aJ" = (/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"aK" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"aL" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"aM" = (/obj/structure/frame,/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"aN" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"aO" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/structure/frame,/obj/item/weapon/circuitboard/broken,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"aP" = (/turf/simulated/floor/outdoors/rocks,/area/submap/crashedcontainmentshuttle)
+"aQ" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aR" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/template_noop,/area/submap/crashedcontainmentshuttle)
+"aS" = (/obj/structure/door_assembly/door_assembly_highsecurity{anchored = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"aT" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"aU" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"aV" = (/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aW" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"aX" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aY" = (/obj/item/clothing/suit/space/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"aZ" = (/obj/effect/decal/remains/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"ba" = (/obj/effect/decal/remains/human,/obj/effect/gibspawner/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"bb" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"bc" = (/obj/structure/door_assembly,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"bd" = (/obj/item/clothing/head/helmet/space/cult,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"be" = (/obj/item/weapon/material/knife/ritual,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"bf" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/decal/remains/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"bg" = (/obj/effect/gibspawner/generic,/turf/template_noop,/area/submap/crashedcontainmentshuttle)
+"bh" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"bi" = (/obj/item/weapon/circuitboard/broken,/obj/effect/decal/remains/human,/obj/item/weapon/gun/energy/laser,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"bj" = (/obj/item/device/gps/internal/poi,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
+"bk" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"bl" = (/obj/effect/decal/remains/robot,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
+"bm" = (/obj/effect/decal/cleanable/liquid_fuel,/turf/template_noop,/area/submap/crashedcontainmentshuttle)
+"bn" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"bo" = (/obj/effect/decal/cleanable/blood/drip,/turf/template_noop,/area/submap/crashedcontainmentshuttle)
+"bp" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"bq" = (/obj/item/weapon/circuitboard/broken,/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"br" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"bs" = (/obj/structure/table/steel_reinforced,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"bt" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"bu" = (/obj/structure/door_assembly/door_assembly_ext{anchored = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"bv" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
+"bw" = (/obj/item/weapon/material/knife/ritual,/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
+"bx" = (/turf/simulated/shuttle/wall/dark/no_join,/area/submap/crashedcontainmentshuttle)
+"by" = (/obj/random/landmine,/obj/random/landmine,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"bz" = (/obj/effect/decal/remains/human,/obj/item/clothing/head/helmet/space/cult,/obj/effect/decal/cleanable/blood,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
+"bA" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"bB" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"bC" = (/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"bD" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"bE" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"bF" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"bG" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/random/landmine,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"bH" = (/obj/structure/closet/crate{name = "landmines crate"; opened = 1},/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"bI" = (/obj/random/landmine,/turf/simulated/shuttle/floor/black,/area/submap/crashedcontainmentshuttle)
+"bJ" = (/obj/random/landmine,/turf/simulated/floor/plating,/area/submap/crashedcontainmentshuttle)
+"bK" = (/obj/random/landmine,/turf/simulated/shuttle/floor/yellow,/area/submap/crashedcontainmentshuttle)
+"bL" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/simulated/shuttle/floor/red,/area/submap/crashedcontainmentshuttle)
+"bM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
+"bN" = (/obj/structure/toilet{dir = 8},/obj/effect/gibspawner/generic,/obj/effect/decal/remains/human,/obj/item/weapon/card/id/syndicate{age = "\\42"; blood_type = "\\O+"; desc = "A strange ID card."; dna_hash = "\[REDACTED]"; fingerprint_hash = "\\------"; name = "Aaron Presley's ID Card(Delivery Service) "; registered_name = "Aaron Presley"; sex = "\\Male"},/turf/simulated/shuttle/floor/white,/area/submap/crashedcontainmentshuttle)
+"bO" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/remains/human,/obj/item/weapon/flame/lighter/random,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/crashedcontainmentshuttle)
-(1,1,1) = {"
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaiaaaaaaajanaaaaaaaaaaaaaaalaaaaaaaa
-aaaaabacaaaaaaaaaaaaaaaaapaaaPaPaaaqaaaaaaaaaaaaaa
-aaaaacaaaaadaaaaaaaaajapaPaPaPadaPaaaaaaataaaaaaaa
-aaaCaaaaauaDakaracacaGaQacacananacabaaaaaaaaaaaaaa
-aaaVaXaaadaoaaadadajaXbHbyayadadaWacabaaaaaaaaaaaa
-aaaYaaaRacaaadadaZapbIbybIazbbadaNacanbJaaaaaaaaaa
-aaaababdbeapapapadadadbIadadauadaNaAaeaTanaaaaataa
-acaaaaaaapadauadadadacacaSacanadavacbhaeaeahaaaaaa
-aPadaVaRacadadadbiadacbjafafacadadadbKbpaHaraaaaaa
-aaaPadaaacaMadbkadbbacbvaBbwacaLadaSbKbqaHaoapaaaa
-aPbxaVaRacaWadbbadbbanblbLbzanadbbasaebraFaIaabfaa
-aPaPaaaaaaaabEazadadanacacacaEadadahaebpaHaoaaaiaa
-aPaPadaaaJapbIadadaPaPadadadadadadacaeaeaeahaaaaaa
-adaaaaaaaaaoadadaPaPaPadacanacbcacacaTbsacacaaaaaa
-aPacaaaaamapadaWaPaPbbadaAbAaUbFaOacacacabaPaaaaaa
-aPaPaaaPacadadadadadadawaxbBagbnbNanabaPaPaaaaaaaa
-aaaaaXbtaaacbuapaoaKanananacacaranabaPaPaabgaaaaaa
-acaaaaaaaPaPaaaoaaaaapapaPaPaPapaPaPaaaaaaaaaaaaaa
-aaaXaaaaaaacaaaaadaaaabmaaboaaaaaaaaaaaaaaaaaaaaaa
-aabDaabgaaaGaaaaaaaabGbmboaabmbgaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaadaLaaaabmbMbObmbmaaaaaaaaaaaaaaaaaaaa
-aaaaadadaaaaaaacaPbCbmbmbmaaajaaaaaaaaaaaaaaaaaaaa
-aaaaaaadaaaaaaaPaPaaaaaabmaaaaaaaaaaaaaaaaaaaaaaaa
-"}
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaiaaaaaaajanaaaaaaaaaaaaaaalaaaaaaaa
+aaaaabacaaaaaaaaaaaaaaaaapaaaPaPaaaqaaaaaaaaaaaaaa
+aaaaacaaaaadaaaaaaaaajapaPaPaPadaPaaaaaaataaaaaaaa
+aaaCaaaaauaDakaracacaGaQacacananacabaaaaaaaaaaaaaa
+aaaVaXaaadaoaaadadajaXbHbyayadadaWacabaaaaaaaaaaaa
+aaaYaaaRacaaadadaZapbIbybIazbbadaNacanbJaaaaaaaaaa
+aaaababdbeapapapadadadbIadadauadaNaAaeaTanaaaaataa
+acaaaaaaapadauadadadacacaSacanadavacbhaeaeahaaaaaa
+aPadaVaRacadadadbiadacbjafafacadadadbKbpaHaraaaaaa
+aaaPadaaacaMadbkadbbacbvafbwacaLadaSbKbqaHaoapaaaa
+aPbxaVaRacaWadbbadbbanblbLbzanadbbasaebraFaIaabfaa
+aPaPaaaaaaaabEazadadanacacacaEadadahaebpaHaoaaaiaa
+aPaPadaaaJapbIadadaPaPadadadadadadacaeaeaeahaaaaaa
+adaaaaaaaaaoadadaPaPaPadacanacbcacacaTbsacacaaaaaa
+aPacaaaaamapadaWaPaPbbadaAbAaUbFaOacacacabaPaaaaaa
+aPaPaaaPacadadadadadadawaxbBagbnbNanabaPaPaaaaaaaa
+aaaaaXbtaaacbuapaoaKanananacacaranabaPaPaabgaaaaaa
+acaaaaaaaPaPaaaoaaaaapapaPaPaPapaPaPaaaaaaaaaaaaaa
+aaaXaaaaaaacaaaaadaaaabmaaboaaaaaaaaaaaaaaaaaaaaaa
+aabDaabgaaaGaaaaaaaabGbmboaabmbgaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaadaLaaaabmbMbObmbmaaaaaaaaaaaaaaaaaaaa
+aaaaadadaaaaaaacaPbCbmbmbmaaajaaaaaaaaaaaaaaaaaaaa
+aaaaaaadaaaaaaaPaPaaaaaabmaaaaaaaaaaaaaaaaaaaaaaaa
+"}
+
diff --git a/maps/submaps/surface_submaps/mountains/digsite.dmm b/maps/submaps/surface_submaps/mountains/digsite.dmm
index f97910d431..3c777b71f6 100644
--- a/maps/submaps/surface_submaps/mountains/digsite.dmm
+++ b/maps/submaps/surface_submaps/mountains/digsite.dmm
@@ -1,63 +1,64 @@
-"a" = (/turf/template_noop,/area/template_noop)
-"b" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/cave/digsite)
-"c" = (/turf/simulated/wall/sandstone,/area/submap/cave/digsite)
-"d" = (/obj/structure/boulder,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
-"e" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"f" = (/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
-"g" = (/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
-"h" = (/obj/item/weapon/ore,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
-"i" = (/obj/structure/bed/alien,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
-"j" = (/obj/structure/cult/talisman,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
-"k" = (/obj/machinery/artifact,/obj/structure/anomaly_container,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
-"l" = (/obj/structure/simple_door/sandstone,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
-"m" = (/obj/structure/loot_pile/surface/alien,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
-"n" = (/mob/living/simple_animal/tindalos,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
-"o" = (/obj/structure/closet/crate/secure/loot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"p" = (/obj/item/weapon/ore,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"q" = (/obj/effect/floor_decal/asteroid,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"r" = (/obj/structure/anomaly_container,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"s" = (/turf/simulated/wall,/area/submap/cave/digsite)
-"t" = (/obj/item/frame/apc,/obj/item/weapon/module/power_control,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
-"u" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/powercell,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"v" = (/obj/structure/table/steel,/obj/item/weapon/storage/excavation,/obj/item/device/measuring_tape,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"w" = (/obj/machinery/power/port_gen/pacman/super,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
-"x" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
-"y" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"z" = (/obj/structure/table/steel,/obj/item/weapon/folder,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"A" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"B" = (/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"C" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
-"D" = (/obj/structure/table/steel,/obj/random/tech_supply,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"E" = (/obj/structure/table/rack,/obj/item/weapon/shovel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"F" = (/obj/structure/boulder,/obj/effect/decal/mecha_wreckage/ripley,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"G" = (/obj/structure/boulder,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"H" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
-"I" = (/obj/structure/table/steel,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/box/samplebags,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"J" = (/obj/structure/table/steel,/obj/item/stack/flag/yellow,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"K" = (/obj/random/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"L" = (/obj/structure/closet/crate,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"M" = (/obj/machinery/floodlight,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-"N" = (/obj/structure/ore_box,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/cave/digsite)
+"c" = (/turf/simulated/wall/sandstone,/area/submap/cave/digsite)
+"d" = (/obj/structure/boulder,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
+"e" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"f" = (/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
+"g" = (/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
+"h" = (/obj/item/weapon/ore,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
+"i" = (/obj/structure/bed/alien,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
+"j" = (/obj/structure/cult/talisman,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
+"k" = (/obj/machinery/artifact,/obj/structure/anomaly_container,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
+"l" = (/obj/structure/simple_door/sandstone,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
+"m" = (/obj/structure/loot_pile/surface/alien,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
+"n" = (/mob/living/simple_mob/animal/passive/tindalos,/turf/simulated/floor/tiled/kafel_full/yellow,/area/submap/cave/digsite)
+"o" = (/obj/structure/closet/crate/secure/loot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"p" = (/obj/item/weapon/ore,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"q" = (/obj/effect/floor_decal/asteroid,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"r" = (/obj/structure/anomaly_container,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"s" = (/turf/simulated/wall,/area/submap/cave/digsite)
+"t" = (/obj/item/frame/apc,/obj/item/weapon/module/power_control,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
+"u" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/powercell,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"v" = (/obj/structure/table/steel,/obj/item/weapon/storage/excavation,/obj/item/device/measuring_tape,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"w" = (/obj/machinery/power/port_gen/pacman/super,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
+"x" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
+"y" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"z" = (/obj/structure/table/steel,/obj/item/weapon/folder,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"A" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"B" = (/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"C" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
+"D" = (/obj/structure/table/steel,/obj/random/tech_supply,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"E" = (/obj/structure/table/rack,/obj/item/weapon/shovel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"F" = (/obj/structure/boulder,/obj/effect/decal/mecha_wreckage/ripley,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"G" = (/obj/structure/boulder,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"H" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/floor/plating/external,/area/submap/cave/digsite)
+"I" = (/obj/structure/table/steel,/obj/item/weapon/tool/wrench,/obj/item/weapon/storage/box/samplebags,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"J" = (/obj/structure/table/steel,/obj/item/stack/flag/yellow,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"K" = (/obj/random/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"L" = (/obj/structure/closet/crate,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"M" = (/obj/machinery/floodlight,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
+"N" = (/obj/structure/ore_box,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/digsite)
-(1,1,1) = {"
-aaaaaaaaaaaaaaaaaaaa
-aaabbbbbbbbbbbbbbbaa
-aabccccccccdccccceea
-abccffcfffghgcficcea
-abcfffcffjggfcfffcea
-abcfkflffggfffffmcea
-abcfffcffffffgfffcea
-abccffcffffffgnfccea
-abbccccclccfhccggeea
-abbbbboeffffepqeeeea
-abbbbbbeeeeeeeeeeeea
-abbbbbbpeeeeeqereeea
-abbbbsteeuveeeerbeea
-abbbbwxeyzAeqeBbbbea
-abbbbCgeyDEeeeeFbbba
-abeeGHgeqIJeeeqbbbba
-aeeeKeeeeLMeeeNbbeaa
-aaeeeeeeeeeeeeNeeeaa
-aaaaaeeeeeeeeeeeeaaa
-aaaaaaaaaaaaaaaaaaaa
-"}
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaa
+aaabbbbbbbbbbbbbbbaa
+aabccccccccdccccceea
+abccffcfffghgcficcea
+abcfffcffjggfcfffcea
+abcfkflffggfffffmcea
+abcfffcffffffgfffcea
+abccffcffffffgnfccea
+abbccccclccfhccggeea
+abbbbboeffffepqeeeea
+abbbbbbeeeeeeeeeeeea
+abbbbbbpeeeeeqereeea
+abbbbsteeuveeeerbeea
+abbbbwxeyzAeqeBbbbea
+abbbbCgeyDEeeeeFbbba
+abeeGHgeqIJeeeqbbbba
+aeeeKeeeeLMeeeNbbeaa
+aaeeeeeeeeeeeeNeeeaa
+aaaaaeeeeeeeeeeeeaaa
+aaaaaaaaaaaaaaaaaaaa
+"}
+
diff --git a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
index ab2a36f75b..5d0739cbcf 100644
--- a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
+++ b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm
@@ -1,146 +1,147 @@
-"aa" = (/turf/template_noop,/area/template_noop)
-"ab" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"ac" = (/obj/item/weapon/caution/cone,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"ad" = (/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
-"ae" = (/obj/structure/inflatable,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"af" = (/obj/structure/inflatable/door,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"ag" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"ah" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"ai" = (/obj/structure/grille,/obj/structure/shuttle/window,/obj/machinery/door/blast/regular{dir = 8; id = "QShuttlePoIDoors"; layer = 3.3; name = "Emergency Lockdown Shutters"},/obj/item/tape/medical{dir = 4; icon_state = "tape_door_0"; layer = 3.4},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"aj" = (/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
-"ak" = (/obj/machinery/door/airlock/external{desc = "It opens and closes. It is stamped with the logo of Major Bill's Transportation"; frequency = 1380; icon_state = "door_locked"; id_tag = null; locked = 1; name = "MBT-540"},/obj/item/tape/medical{dir = 4; icon_state = "tape_door_0"; layer = 3.4},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"al" = (/obj/structure/sign/biohazard{dir = 1},/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
-"am" = (/obj/structure/toilet{dir = 4},/obj/effect/decal/cleanable/vomit,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
-"an" = (/obj/machinery/door/airlock{name = "Restroom"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
-"ao" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"ap" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"aq" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"ar" = (/obj/structure/bed/chair,/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"as" = (/obj/machinery/vending/snack{contraband = null; products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 0, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 0, /obj/item/weapon/reagent_containers/food/snacks/chips = 0, /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 0, /obj/item/weapon/reagent_containers/food/snacks/no_raisin = 0, /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 0, /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 0, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 0, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 0)},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"at" = (/obj/machinery/vending/cola{contraband = null; products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 0)},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"au" = (/obj/structure/closet/crate/secure/loot,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"av" = (/obj/item/weapon/pickaxe/drill,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aw" = (/obj/item/clothing/mask/breath,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"ax" = (/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"ay" = (/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"az" = (/obj/item/trash/syndi_cakes,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aA" = (/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aB" = (/obj/item/weapon/cigbutt,/obj/item/weapon/tank/emergency/oxygen,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aC" = (/obj/item/weapon/material/knife/tacknife/boot,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aD" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"aE" = (/obj/item/trash/sosjerky,/obj/item/weapon/storage/box/donut/empty,/obj/item/weapon/reagent_containers/food/drinks/sillycup,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"aF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"aG" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"aI" = (/obj/machinery/button{name = "Cargo Hatch"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
-"aJ" = (/obj/machinery/computer,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
-"aK" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"aL" = (/obj/structure/table/standard,/obj/item/clothing/head/helmet/space/emergency,/obj/item/weapon/paper{desc = "It looks old."; icon_state = "paper_words"; info = "Pilot's Log for Major Bill's Transportation Shuttle MBT-540
Routine flight inbound for VIMC Outpost C-12 6:35AM 03/12/2491, Estimated arrival 7:05AM. 16 passengers, 2 crew.
V.I.S Traffic Control 06:05:55:Major Bill's MBT-540 you are clear for departure from Dock 6 on departure route Charlie. Have a safe flight.
Captain Willis 06:06:33: You too, control. Departing route Charlie.
Captain Willis 06:06:48: ...Damn it.
**
Captain Adisu 06:10:23: Hey Ted, I'm seeing a fuel line pressure drop on engine 3?
Captain Willis 06:10:50: Yeah, I see it. Heater's fading out, redistributing thrust 30% to compensate.
06:12:31: A loud thud is heard.
Captain Adisu 06:12:34: What the (Expletives)?
Captain Adisu 06:12:39: We just lost power to engine- engine two. Hold on... Atmospheric alarm in the cargo bay. Son of a...
Captain Willis 06:12:59: Reducing thrust further 30%, do we have a breach Adi, a breach?
Captain Adisu 06:13:05:No breach, checking cameras... Looks like- looks like some cargo came loose back there.
Captain Willis 06:13:15: (Expletives), I'm turning us around. Put out a distress call to Control, we'll be back in Sif orbit in a couple of minutes.
**
V.I.S Traffic Control 06:15:49: MBT-540 we are recieving you. Your atmospheric sensors are reading potentially harmful toxins in your cargo bay. Advise locking down interior cargo bay doors. Please stand by.
Captain Adisu 06:16:10: Understood.
**
V.I.S Traffic Control 06:27:02: MBT-540, we have no docking bays available at this time, are you equipped for atmospheric re-entry?
Captain Willis 06:27:12: We-We are shielded. But we have fuel and air for-
V.I.S Traffic Control 06:27:17: Please make an emergency landing at the coordinates provided and standby for further information.
**
Captain Willis 06:36:33: Emergency landing successful. Adi, er Adisu is checking on the passengers but we had a smooth enough landing, are we clear to begin evacu-
06:36:50: (Sound of emergency shutters closing)
Captain Willis 06:36:51: What the hell? Control we just had a remote activation of our emergency shutters, please advise.
V.I.S Traffic Control 06:38:10: Captain, please tune to frequency 1493.8 we are passing you on to local emergency response units. Godspeed.
Captain Willis 06:38:49: This is Captain Willis of Major Bill's Transportation flight MBT-540 we have eighteen souls aboard and our emergency lockdown shutters have engaged remotely. Do you read?
S.D.D.C: This is the Sif Department of Disease Control, your vessel has been identified as carrying highly sensitive materials, and due to the nature of your system's automated alerts you will be asked to remain in quarantine until we are able to determine the nature of the pathogens aboard and whether it has entered the air circulation system. Please remain in your cockpit at this time.
** Captain Adisu 17:23:58:09: I don't think they're opening those doors Ted. I don't think they're coming."; item_state = "paper"; name = "Black Box Transcript MBT-540"},/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
-"aM" = (/obj/item/trash/cheesie,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"aN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aO" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aP" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/remains/human,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"aQ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"aR" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aS" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aT" = (/obj/item/clothing/head/helmet/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"aU" = (/obj/machinery/door/airlock/engineering{icon_state = "door_locked"; locked = 1; name = "Cargo Bay"},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aV" = (/obj/item/weapon/virusdish/random,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aW" = (/obj/item/weapon/material/shard,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aX" = (/obj/item/device/paicard,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aY" = (/obj/machinery/door/blast/regular{name = "Cargo Door"},/obj/item/tape/medical{dir = 4; icon_state = "tape_door_0"; layer = 3.4},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"aZ" = (/obj/effect/decal/remains/human,/obj/item/clothing/under/mbill{desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; name = "\improper old Major Bill's uniform"},/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
-"ba" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bb" = (/obj/machinery/door/airlock/command{icon_state = "door_locked"; locked = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bc" = (/obj/item/weapon/tank/emergency/oxygen/engi,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bd" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"be" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"bf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"bg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"bh" = (/obj/item/clothing/suit/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bi" = (/obj/item/trash/candy,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bj" = (/obj/structure/table/rack,/obj/structure/loot_pile/maint/boxfort,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bk" = (/obj/structure/table/rack,/obj/item/weapon/shovel,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bl" = (/obj/structure/closet/crate/secure/science{icon_state = "scisecurecrateopen"; locked = 0; name = "Virus Samples - FRAGILE"; opened = 1},/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bm" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/remains/human,/obj/item/clothing/under/mbill{desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; name = "\improper old Major Bill's uniform"},/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bn" = (/obj/structure/table/standard,/obj/item/device/taperecorder,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
-"bo" = (/obj/item/weapon/tool/crowbar/red,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bp" = (/obj/item/trash/chips,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bq" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"br" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bs" = (/obj/structure/bed/chair,/obj/effect/decal/remains/human,/obj/item/clothing/mask/breath,/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bt" = (/obj/structure/bed/chair,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bu" = (/obj/effect/decal/remains/xeno,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bv" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bw" = (/obj/effect/decal/remains/mouse,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bx" = (/obj/random/maintenance,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"by" = (/obj/item/weapon/coin/silver,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bz" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bA" = (/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bB" = (/obj/item/weapon/tank/emergency/oxygen/engi,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bC" = (/obj/item/trash/sosjerky,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bD" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"bF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
-"bG" = (/obj/machinery/button{dir = 4; name = "Cargo Access"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
-"bH" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
-"bI" = (/obj/machinery/door/airlock{name = "Charge Station"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
-"bJ" = (/obj/item/trash/tastybread,/obj/item/weapon/material/butterfly/boxcutter,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bK" = (/obj/effect/decal/cleanable/vomit,/obj/effect/decal/cleanable/mucus/mapped,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bL" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bM" = (/obj/structure/bed/chair{dir = 1},/obj/item/weapon/card/id/external{desc = "An identification card of some sort. Looks like this one was issued by the Vir Independent Mining Corp."; name = "VIMC identification card"; rank = "Miner"; registered_name = "Nadia Chu"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bN" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bO" = (/obj/structure/table/rack,/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
-"bP" = (/obj/structure/ore_box,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bQ" = (/obj/item/weapon/contraband/poster,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bR" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
-"bS" = (/obj/structure/sign/biohazard,/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
-"bT" = (/obj/item/tape/medical{icon_state = "tape_v_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"bU" = (/obj/item/taperoll/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"bV" = (/obj/item/tape/medical{dir = 1; icon_state = "tape_dir_0"},/obj/item/tape/medical{dir = 4; icon_state = "tape_dir_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"bW" = (/obj/item/tape/medical{icon_state = "tape_h_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"bX" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"bY" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
-"bZ" = (/obj/structure/sign/kiddieplaque{desc = "By order of the S.D.D.C, this site or craft is to be buried and not disturbed until such time that sterility can be confirmed. Dated: 20/12/2491 "; name = "\improper Sif Department of Disease Control notice"},/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
-"ca" = (/obj/structure/sign/warning,/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
-"cb" = (/obj/item/bodybag,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"cc" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"cd" = (/obj/structure/table/steel,/obj/item/clothing/suit/bio_suit,/obj/random/medical/lite,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"ce" = (/obj/structure/closet/l3closet/virology,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"cf" = (/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"cg" = (/obj/structure/dispenser/oxygen,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"ch" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"ci" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"cj" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"ck" = (/obj/structure/table/steel,/obj/item/weapon/tool/crowbar/power,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"cl" = (/obj/structure/table/rack,/obj/item/clothing/head/bio_hood,/obj/item/clothing/suit/bio_suit,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"cm" = (/obj/item/weapon/weldingtool/largetank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-"cn" = (/obj/structure/closet/crate/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"aa" = (/turf/template_noop,/area/template_noop)
+"ab" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"ac" = (/obj/item/weapon/caution/cone,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"ad" = (/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
+"ae" = (/obj/structure/inflatable,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"af" = (/obj/structure/inflatable/door,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"ag" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"ah" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"ai" = (/obj/structure/grille,/obj/structure/shuttle/window,/obj/machinery/door/blast/regular{dir = 8; id = "QShuttlePoIDoors"; layer = 3.3; name = "Emergency Lockdown Shutters"},/obj/item/tape/medical{dir = 4; icon_state = "tape_door_0"; layer = 3.4},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"aj" = (/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
+"ak" = (/obj/machinery/door/airlock/external{desc = "It opens and closes. It is stamped with the logo of Major Bill's Transportation"; frequency = 1380; icon_state = "door_locked"; id_tag = null; locked = 1; name = "MBT-540"},/obj/item/tape/medical{dir = 4; icon_state = "tape_door_0"; layer = 3.4},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"al" = (/obj/structure/sign/biohazard{dir = 1},/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
+"am" = (/obj/structure/toilet{dir = 4},/obj/effect/decal/cleanable/vomit,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
+"an" = (/obj/machinery/door/airlock{name = "Restroom"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
+"ao" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"ap" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"aq" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"ar" = (/obj/structure/bed/chair,/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"as" = (/obj/machinery/vending/snack{contraband = null; products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 0, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 0, /obj/item/weapon/reagent_containers/food/snacks/chips = 0, /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 0, /obj/item/weapon/reagent_containers/food/snacks/no_raisin = 0, /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 0, /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 0, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 0, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 0)},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"at" = (/obj/machinery/vending/cola{contraband = null; products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 0, /obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 0)},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"au" = (/obj/structure/closet/crate/secure/loot,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"av" = (/obj/item/weapon/pickaxe/drill,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aw" = (/obj/item/clothing/mask/breath,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"ax" = (/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"ay" = (/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"az" = (/obj/item/trash/syndi_cakes,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aA" = (/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aB" = (/obj/item/weapon/cigbutt,/obj/item/weapon/tank/emergency/oxygen,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aC" = (/obj/item/weapon/material/knife/tacknife/boot,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aD" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"aE" = (/obj/item/trash/sosjerky,/obj/item/weapon/storage/box/donut/empty,/obj/item/weapon/reagent_containers/food/drinks/sillycup,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"aF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"aG" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"aI" = (/obj/machinery/button{name = "Cargo Hatch"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
+"aJ" = (/obj/machinery/computer,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
+"aK" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"aL" = (/obj/structure/table/standard,/obj/item/clothing/head/helmet/space/emergency,/obj/item/weapon/paper{desc = "It looks old."; icon_state = "paper_words"; info = "Pilot's Log for Major Bill's Transportation Shuttle MBT-540
Routine flight inbound for VIMC Outpost C-12 6:35AM 03/12/2491, Estimated arrival 7:05AM. 16 passengers, 2 crew.
V.I.S Traffic Control 06:05:55:Major Bill's MBT-540 you are clear for departure from Dock 6 on departure route Charlie. Have a safe flight.
Captain Willis 06:06:33: You too, control. Departing route Charlie.
Captain Willis 06:06:48: ...Damn it.
**
Captain Adisu 06:10:23: Hey Ted, I'm seeing a fuel line pressure drop on engine 3?
Captain Willis 06:10:50: Yeah, I see it. Heater's fading out, redistributing thrust 30% to compensate.
06:12:31: A loud thud is heard.
Captain Adisu 06:12:34: What the (Expletives)?
Captain Adisu 06:12:39: We just lost power to engine- engine two. Hold on... Atmospheric alarm in the cargo bay. Son of a...
Captain Willis 06:12:59: Reducing thrust further 30%, do we have a breach Adi, a breach?
Captain Adisu 06:13:05:No breach, checking cameras... Looks like- looks like some cargo came loose back there.
Captain Willis 06:13:15: (Expletives), I'm turning us around. Put out a distress call to Control, we'll be back in Sif orbit in a couple of minutes.
**
V.I.S Traffic Control 06:15:49: MBT-540 we are recieving you. Your atmospheric sensors are reading potentially harmful toxins in your cargo bay. Advise locking down interior cargo bay doors. Please stand by.
Captain Adisu 06:16:10: Understood.
**
V.I.S Traffic Control 06:27:02: MBT-540, we have no docking bays available at this time, are you equipped for atmospheric re-entry?
Captain Willis 06:27:12: We-We are shielded. But we have fuel and air for-
V.I.S Traffic Control 06:27:17: Please make an emergency landing at the coordinates provided and standby for further information.
**
Captain Willis 06:36:33: Emergency landing successful. Adi, er Adisu is checking on the passengers but we had a smooth enough landing, are we clear to begin evacu-
06:36:50: (Sound of emergency shutters closing)
Captain Willis 06:36:51: What the hell? Control we just had a remote activation of our emergency shutters, please advise.
V.I.S Traffic Control 06:38:10: Captain, please tune to frequency 1493.8 we are passing you on to local emergency response units. Godspeed.
Captain Willis 06:38:49: This is Captain Willis of Major Bill's Transportation flight MBT-540 we have eighteen souls aboard and our emergency lockdown shutters have engaged remotely. Do you read?
S.D.D.C: This is the Sif Department of Disease Control, your vessel has been identified as carrying highly sensitive materials, and due to the nature of your system's automated alerts you will be asked to remain in quarantine until we are able to determine the nature of the pathogens aboard and whether it has entered the air circulation system. Please remain in your cockpit at this time.
** Captain Adisu 17:23:58:09: I don't think they're opening those doors Ted. I don't think they're coming."; item_state = "paper"; name = "Black Box Transcript MBT-540"},/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
+"aM" = (/obj/item/trash/cheesie,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"aN" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aO" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aP" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/remains/human,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"aQ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"aR" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aS" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aT" = (/obj/item/clothing/head/helmet/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"aU" = (/obj/machinery/door/airlock/engineering{icon_state = "door_locked"; locked = 1; name = "Cargo Bay"},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aV" = (/obj/item/weapon/virusdish/random,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aW" = (/obj/item/weapon/material/shard,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aX" = (/obj/item/device/paicard,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aY" = (/obj/machinery/door/blast/regular{name = "Cargo Door"},/obj/item/tape/medical{dir = 4; icon_state = "tape_door_0"; layer = 3.4},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"aZ" = (/obj/effect/decal/remains/human,/obj/item/clothing/under/mbill{desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; name = "\improper old Major Bill's uniform"},/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
+"ba" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bb" = (/obj/machinery/door/airlock/command{icon_state = "door_locked"; locked = 1},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bc" = (/obj/item/weapon/tank/emergency/oxygen/engi,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bd" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"be" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"bf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"bg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; health = 1e+006},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"bh" = (/obj/item/clothing/suit/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bi" = (/obj/item/trash/candy,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bj" = (/obj/structure/table/rack,/obj/structure/loot_pile/maint/boxfort,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bk" = (/obj/structure/table/rack,/obj/item/weapon/shovel,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bl" = (/obj/structure/closet/crate/secure/science{icon_state = "scisecurecrateopen"; locked = 0; name = "Virus Samples - FRAGILE"; opened = 1},/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/obj/item/weapon/virusdish/random,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bm" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/effect/decal/remains/human,/obj/item/clothing/under/mbill{desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; name = "\improper old Major Bill's uniform"},/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bn" = (/obj/structure/table/standard,/obj/item/device/taperecorder,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
+"bo" = (/obj/item/weapon/tool/crowbar/red,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bp" = (/obj/item/trash/chips,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bq" = (/obj/structure/bed/chair,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"br" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bs" = (/obj/structure/bed/chair,/obj/effect/decal/remains/human,/obj/item/clothing/mask/breath,/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bt" = (/obj/structure/bed/chair,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bu" = (/obj/effect/decal/remains/xeno,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bv" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bw" = (/obj/effect/decal/remains/mouse,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bx" = (/obj/random/maintenance,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"by" = (/obj/item/weapon/coin/silver,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bz" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bA" = (/obj/effect/decal/cleanable/generic,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bB" = (/obj/item/weapon/tank/emergency/oxygen/engi,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bC" = (/obj/item/trash/sosjerky,/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bD" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"bF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/submap/cave/qShuttle)
+"bG" = (/obj/machinery/button{dir = 4; name = "Cargo Access"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
+"bH" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle)
+"bI" = (/obj/machinery/door/airlock{name = "Charge Station"},/turf/simulated/shuttle/wall,/area/submap/cave/qShuttle)
+"bJ" = (/obj/item/trash/tastybread,/obj/item/weapon/material/butterfly/boxcutter,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bK" = (/obj/effect/decal/cleanable/vomit,/obj/effect/decal/cleanable/mucus/mapped,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bL" = (/obj/structure/bed/chair{dir = 1},/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bM" = (/obj/structure/bed/chair{dir = 1},/obj/item/weapon/card/id/external{desc = "An identification card of some sort. Looks like this one was issued by the Vir Independent Mining Corp."; name = "VIMC identification card"; rank = "Miner"; registered_name = "Nadia Chu"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bN" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bO" = (/obj/structure/table/rack,/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor{ icon_state = "floor_white"},/area/submap/cave/qShuttle)
+"bP" = (/obj/structure/ore_box,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bQ" = (/obj/item/weapon/contraband/poster,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bR" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/shuttle/floor{ icon_state = "floor_yellow"},/area/submap/cave/qShuttle)
+"bS" = (/obj/structure/sign/biohazard,/turf/simulated/shuttle/wall/hard_corner,/area/submap/cave/qShuttle)
+"bT" = (/obj/item/tape/medical{icon_state = "tape_v_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"bU" = (/obj/item/taperoll/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"bV" = (/obj/item/tape/medical{dir = 1; icon_state = "tape_dir_0"},/obj/item/tape/medical{dir = 4; icon_state = "tape_dir_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"bW" = (/obj/item/tape/medical{icon_state = "tape_h_0"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"bX" = (/obj/structure/lattice,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"bY" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
+"bZ" = (/obj/structure/sign/kiddieplaque{desc = "By order of the S.D.D.C, this site or craft is to be buried and not disturbed until such time that sterility can be confirmed. Dated: 20/12/2491 "; name = "\improper Sif Department of Disease Control notice"},/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
+"ca" = (/obj/structure/sign/warning,/turf/simulated/wall/iron,/area/submap/cave/qShuttle)
+"cb" = (/obj/item/bodybag,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"cc" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"cd" = (/obj/structure/table/steel,/obj/item/clothing/suit/bio_suit,/obj/random/medical/lite,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"ce" = (/obj/structure/closet/l3closet/virology,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"cf" = (/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"cg" = (/obj/structure/dispenser/oxygen,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"ch" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"ci" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"cj" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"ck" = (/obj/structure/table/steel,/obj/item/weapon/tool/crowbar/power,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"cl" = (/obj/structure/table/rack,/obj/item/clothing/head/bio_hood,/obj/item/clothing/suit/bio_suit,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"cm" = (/obj/item/weapon/weldingtool/largetank,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
+"cn" = (/obj/structure/closet/crate/medical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/qShuttle)
-(1,1,1) = {"
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaabacababaaaaadadadacaa
-aaabababababaeafaeaeabaaaaabababababababadagahabaa
-aaacababadaiajakakalaiadaiadadadadadadadadadadaaaa
-aaababadadamanaoapadaqaqaradasatadauavauadagahaaaa
-aaaaadadadadadawaxayazaAaBaCaDaEadaFaGaHadaIadabaa
-aaaaaiaJaKaLadaMaNaOaPaQaQaRaSaTaUaVaAaWaXaAaYabaa
-aaabaiaZbababbbcbdadbebfbgadbhbiadbjaAbkaAblaYabaa
-aaabaiaJbmbnadbobpbqbrbsbtbqaNbuaUbvaAbwaVbxaYabaa
-aaabadadadadadaDbyaAbzaAbAbBbCbDadbEaGbFadadbGabaa
-aaababadadbHbIbJbKadbLaQbMadbNbOadbPbQbRadagahabaa
-ababacabadaiajakakbSaiadaiadadadadadadadadadadaaaa
-ababababbTabaeaeafaeababababbUabababababadagahaaaa
-aaabababbVbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWadadadaaaa
-aaaaababababababababbXbYbZcacbcbcbabcccdceabcfaaaa
-aaaaacababcgchcicjckclababcmabcbcbababababababaaaa
-aaaaaaababcnchababababababababaaaaaaaaaaababacaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-"}
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaabacababaaaaadadadacaa
+aaabababababaeafaeaeabaaaaabababababababadagahabaa
+aaacababadaiajakakalaiadaiadadadadadadadadadadaaaa
+aaababadadamanaoapadaqaqaradasatadauavauadagahaaaa
+aaaaadadadadadawaxayazaAaBaCaDaEadaFaGaHadaIadabaa
+aaaaaiaJaKaLadaMaNaOaPaQaQaRaSaTaUaVaAaWaXaAaYabaa
+aaabaiaZbababbbcbdadbebfbgadbhbiadbjaAbkaAblaYabaa
+aaabaiaJbmbnadbobpbqbrbsbtbqaNbuaUbvaAbwaVbxaYabaa
+aaabadadadadadaDbyaAbzaAbAbBbCbDadbEaGbFadadbGabaa
+aaababadadbHbIbJbKadbLaQbMadbNbOadbPbQbRadagahabaa
+ababacabadaiajakakbSaiadaiadadadadadadadadadadaaaa
+ababababbTabaeaeafaeababababbUabababababadagahaaaa
+aaabababbVbWbWbWbWbWbWbWbWbWbWbWbWbWbWbWadadadaaaa
+aaaaababababababababbXbYbZcacbcbcbabcccdceabcfaaaa
+aaaaacababcgchcicjckclababcmabcbcbababababababaaaa
+aaaaaaababcnchababababababababaaaaaaaaaaababacaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
+
diff --git a/maps/submaps/surface_submaps/mountains/vault3.dmm b/maps/submaps/surface_submaps/mountains/vault3.dmm
index b517d1cdee..bd93aba096 100644
--- a/maps/submaps/surface_submaps/mountains/vault3.dmm
+++ b/maps/submaps/surface_submaps/mountains/vault3.dmm
@@ -2,7 +2,7 @@
"b" = (/turf/simulated/wall,/area/submap/cave/vault3)
"c" = (/obj/effect/alien/weeds,/obj/random/multiple/minevault,/turf/simulated/floor/plating,/area/submap/cave/vault3)
"d" = (/obj/structure/loot_pile/maint/technical,/obj/effect/alien/weeds,/turf/simulated/floor/plating,/area/submap/cave/vault3)
-"e" = (/obj/effect/alien/weeds,/mob/living/simple_animal/hostile/alien/drone,/turf/simulated/floor/plating,/area/submap/cave/vault3)
+"e" = (/obj/effect/alien/weeds,/mob/living/simple_mob/animal/space/alien/drone,/turf/simulated/floor/plating,/area/submap/cave/vault3)
"f" = (/obj/effect/alien/weeds,/obj/effect/alien/weeds,/turf/simulated/floor/plating,/area/submap/cave/vault3)
"g" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating,/area/submap/cave/vault3)
"h" = (/obj/effect/alien/weeds,/obj/effect/alien/weeds,/obj/effect/alien/weeds/node,/turf/simulated/floor/plating,/area/submap/cave/vault3)
diff --git a/maps/submaps/surface_submaps/mountains/vault4.dmm b/maps/submaps/surface_submaps/mountains/vault4.dmm
index 7d5213916d..78ac6842d5 100644
--- a/maps/submaps/surface_submaps/mountains/vault4.dmm
+++ b/maps/submaps/surface_submaps/mountains/vault4.dmm
@@ -3,10 +3,10 @@
"c" = (/obj/structure/simple_door/resin,/obj/effect/alien/weeds,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
"d" = (/obj/effect/alien/weeds,/obj/structure/bed/nest,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
"e" = (/obj/effect/alien/weeds,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
-"f" = (/obj/effect/alien/weeds,/mob/living/simple_animal/hostile/alien/drone,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
+"f" = (/obj/effect/alien/weeds,/mob/living/simple_mob/animal/space/alien/drone,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
"g" = (/obj/effect/alien/weeds/node,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
"h" = (/obj/effect/alien/weeds,/obj/random/multiple/minevault,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
-"i" = (/obj/effect/alien/weeds,/mob/living/simple_animal/hostile/alien,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
+"i" = (/obj/effect/alien/weeds,/mob/living/simple_mob/animal/space/alien,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
"j" = (/obj/effect/alien/weeds,/obj/effect/alien/egg,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault4)
(1,1,1) = {"
diff --git a/maps/submaps/surface_submaps/mountains/vault5.dmm b/maps/submaps/surface_submaps/mountains/vault5.dmm
index 1d4befc167..9de959c715 100644
--- a/maps/submaps/surface_submaps/mountains/vault5.dmm
+++ b/maps/submaps/surface_submaps/mountains/vault5.dmm
@@ -5,9 +5,9 @@
"e" = (/obj/effect/alien/weeds,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
"f" = (/obj/effect/alien/weeds,/obj/item/clothing/suit/storage/vest/tactical,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
"g" = (/obj/effect/alien/weeds,/obj/structure/bed/nest,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
-"h" = (/obj/effect/alien/weeds,/obj/random/multiple/minevault,/mob/living/simple_animal/hostile/alien/sentinel/praetorian,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
+"h" = (/obj/effect/alien/weeds,/obj/random/multiple/minevault,/mob/living/simple_mob/animal/space/alien/sentinel/praetorian,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
"i" = (/obj/effect/alien/weeds,/obj/effect/alien/egg,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
-"j" = (/obj/effect/alien/weeds,/obj/effect/alien/weeds/node,/mob/living/simple_animal/hostile/alien/queen/empress,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
+"j" = (/obj/effect/alien/weeds,/obj/effect/alien/weeds/node,/mob/living/simple_mob/animal/space/alien/queen/empress,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
"k" = (/obj/effect/alien/weeds,/obj/item/clothing/head/helmet/tac,/obj/item/weapon/gun/projectile/SVD,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/vault5)
(1,1,1) = {"
diff --git a/maps/submaps/surface_submaps/plains/Oldhouse.dmm b/maps/submaps/surface_submaps/plains/Oldhouse.dmm
index 4e48624a9c..a14d5331d7 100644
--- a/maps/submaps/surface_submaps/plains/Oldhouse.dmm
+++ b/maps/submaps/surface_submaps/plains/Oldhouse.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -255,6 +256,60 @@
icon_state = "wood_broken2"
},
/area/submap/Oldhouse)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/template_noop,/area/submap/Oldhouse)
+"c" = (/turf/simulated/wall/wood,/area/submap/Oldhouse)
+"d" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Oldhouse)
+"e" = (/obj/structure/window/reinforced/full,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"f" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"g" = (/obj/item/stack/material/wood,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"h" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"i" = (/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"j" = (/turf/simulated/floor/wood{icon_state = "wood_broken6"},/area/submap/Oldhouse)
+"k" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"l" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"m" = (/obj/structure/closet/cabinet,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"n" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"o" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood{icon_state = "wood_broken4"},/area/submap/Oldhouse)
+"p" = (/turf/simulated/floor/wood{icon_state = "wood_broken2"},/area/submap/Oldhouse)
+"q" = (/obj/item/stack/material/wood,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"r" = (/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"s" = (/turf/simulated/floor/wood{icon_state = "wood_broken4"},/area/submap/Oldhouse)
+"t" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"u" = (/obj/structure/simple_door/wood,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"v" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"w" = (/obj/item/stack/material/wood,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"x" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/wood{icon_state = "wood_broken6"},/area/submap/Oldhouse)
+"y" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"z" = (/obj/structure/table/woodentable,/obj/item/stack/material/wood,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"A" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"B" = (/obj/structure/bed/chair/comfy/teal,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"C" = (/obj/structure/bookcase,/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"D" = (/obj/structure/table,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"E" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"F" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/blue,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"G" = (/obj/item/weapon/reagent_containers/food/snacks/chips,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"H" = (/obj/structure/table/woodentable,/obj/item/weapon/flame/candle,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"I" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 8},/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"J" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"K" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/obj/item/weapon/paper,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"L" = (/obj/structure/table/woodentable,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"M" = (/obj/structure/frame,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"N" = (/mob/living/simple_mob/animal/giant_spider{attack_armor_pen = 100; attacktext = list("lightly bonked"); desc = "Furry and brown, this spider is so goddamn fat you're surprised it even moves around."; faction = "neutral"; health = 400; melee_damage_lower = 1; melee_damage_upper = 3; melee_miss_chance = 30; move_speed = 5; name = "Mr. Tuddly"},/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"O" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"P" = (/obj/item/weapon/circuitboard/papershredder,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"Q" = (/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers,/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers,/turf/simulated/floor/carpet/turcarpet,/area/submap/Oldhouse)
+"R" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"S" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"T" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/backpack/satchel,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"U" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/head/hood/winter,/obj/item/clothing/head/hood/winter,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"V" = (/obj/item/device/flashlight,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"W" = (/obj/structure/table/rack,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/shoes/boots/winter,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"X" = (/obj/structure/coatrack,/turf/simulated/floor/wood,/area/submap/Oldhouse)
+"Y" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood{icon_state = "wood_broken6"},/area/submap/Oldhouse)
+"Z" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood{icon_state = "wood_broken2"},/area/submap/Oldhouse)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/plains/PooledR.dmm b/maps/submaps/surface_submaps/plains/PooledR.dmm
index 554c4cca8f..93d8a3f09f 100644
--- a/maps/submaps/surface_submaps/plains/PooledR.dmm
+++ b/maps/submaps/surface_submaps/plains/PooledR.dmm
@@ -11,10 +11,10 @@
"k" = (/obj/structure/flora/ausbushes,/turf/template_noop,/area/submap/PooledR)
"l" = (/turf/simulated/floor/water,/area/submap/PooledR)
"m" = (/obj/structure/flora/ausbushes/grassybush,/turf/template_noop,/area/submap/PooledR)
-"n" = (/mob/living/simple_animal/fish/trout,/turf/simulated/floor/water,/area/submap/PooledR)
-"o" = (/mob/living/simple_animal/fish/salmon,/turf/simulated/floor/water,/area/submap/PooledR)
+"n" = (/mob/living/simple_mob/animal/passive/fish/trout,/turf/simulated/floor/water,/area/submap/PooledR)
+"o" = (/mob/living/simple_mob/animal/passive/fish/salmon,/turf/simulated/floor/water,/area/submap/PooledR)
"p" = (/turf/simulated/floor/water/deep,/area/submap/PooledR)
-"q" = (/mob/living/simple_animal/fish/bass,/turf/simulated/floor/water/deep,/area/submap/PooledR)
+"q" = (/mob/living/simple_mob/animal/passive/fish/bass,/turf/simulated/floor/water/deep,/area/submap/PooledR)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/submaps/surface_submaps/plains/RationCache.dmm b/maps/submaps/surface_submaps/plains/RationCache.dmm
index 600832aa18..0ddb58dd6f 100644
--- a/maps/submaps/surface_submaps/plains/RationCache.dmm
+++ b/maps/submaps/surface_submaps/plains/RationCache.dmm
@@ -1,7 +1,7 @@
"a" = (/turf/template_noop,/area/template_noop)
"b" = (/turf/simulated/floor/outdoors/snow,/area/submap/RationCache)
-"c" = (/mob/living/simple_animal/retaliate/diyaab{returns_home = 1},/turf/simulated/floor/outdoors/snow,/area/submap/RationCache)
-"d" = (/mob/living/simple_animal/retaliate/diyaab{returns_home = 1},/turf/simulated/floor/outdoors/dirt,/area/submap/RationCache)
+"c" = (/mob/living/simple_mob/animal/sif/diyaab,/turf/simulated/floor/outdoors/snow,/area/submap/RationCache)
+"d" = (/mob/living/simple_mob/animal/sif/diyaab,/turf/simulated/floor/outdoors/dirt,/area/submap/RationCache)
"e" = (/turf/simulated/floor/outdoors/dirt,/area/submap/RationCache)
"f" = (/obj/item/trash/liquidfood,/obj/item/trash/liquidfood,/obj/item/trash/liquidfood,/obj/item/trash/liquidfood,/obj/item/trash/liquidfood,/obj/item/trash/liquidfood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/RationCache)
"g" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/outdoors/dirt,/area/submap/RationCache)
diff --git a/maps/submaps/surface_submaps/plains/Shakden.dmm b/maps/submaps/surface_submaps/plains/Shakden.dmm
index 8720149d63..86f2057db1 100644
--- a/maps/submaps/surface_submaps/plains/Shakden.dmm
+++ b/maps/submaps/surface_submaps/plains/Shakden.dmm
@@ -4,9 +4,9 @@
"d" = (/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Shakden)
"e" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Shakden)
"f" = (/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Shakden)
-"g" = (/mob/living/simple_animal/hostile/shantak{hostile = 0},/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Shakden)
+"g" = (/mob/living/simple_mob/animal/sif/shantak/retaliate,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Shakden)
"h" = (/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Shakden)
-"i" = (/mob/living/simple_animal/hostile/shantak{hostile = 0},/turf/simulated/floor/outdoors/dirt,/area/submap/Shakden)
+"i" = (/mob/living/simple_mob/animal/sif/shantak/retaliate,/turf/simulated/floor/outdoors/dirt,/area/submap/Shakden)
"j" = (/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Shakden)
"k" = (/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/material/knife/hook,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/Shakden)
diff --git a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
index 479bc4e523..5cfa6aa0f0 100644
--- a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/turf/template_noop,
@@ -785,6 +786,131 @@
/mob/living/simple_animal/hostile/syndicate/ranged/laser/poi,
/turf/template_noop,
/area/submap/Blackshuttledown)
+=======
+"aa" = (/turf/template_noop,/area/template_noop)
+"ab" = (/turf/template_noop,/area/submap/Blackshuttledown)
+"ac" = (/obj/effect/decal/remains/human,/turf/template_noop,/area/submap/Blackshuttledown)
+"ad" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Blackshuttledown)
+"ae" = (/obj/effect/decal/cleanable/blood,/turf/template_noop,/area/submap/Blackshuttledown)
+"af" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Blackshuttledown)
+"ag" = (/obj/structure/table/steel,/turf/template_noop,/area/submap/Blackshuttledown)
+"ah" = (/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/template_noop,/area/submap/Blackshuttledown)
+"ai" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"aj" = (/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"ak" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"al" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"am" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"},/turf/template_noop,/area/submap/Blackshuttledown)
+"an" = (/obj/machinery/light{dir = 1},/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ao" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ap" = (/obj/machinery/door/airlock/external{density = 1; frequency = 1331; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aq" = (/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 9},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"ar" = (/obj/machinery/gibber,/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 1},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"as" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 1},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"at" = (/obj/machinery/bodyscanner{dir = 8},/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 1},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"au" = (/obj/machinery/body_scanconsole,/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 5},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"av" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"aw" = (/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"ax" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/p90,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"ay" = (/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"az" = (/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aA" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aB" = (/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 8},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aC" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aD" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aE" = (/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aF" = (/obj/machinery/organ_printer/flesh,/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 5},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aG" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"aH" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"aI" = (/mob/living/simple_mob/mechanical/viscerator,/mob/living/simple_mob/mechanical/viscerator,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"aJ" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"aK" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aL" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aM" = (/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aN" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aO" = (/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aP" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 4},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aQ" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor/full,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aR" = (/obj/structure/table/steel,/obj/item/weapon/grenade/smokebomb,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"aS" = (/obj/effect/floor_decal/borderfloor/corner,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aT" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aU" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aV" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/surgery,/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 10},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aW" = (/obj/structure/table/standard,/obj/item/weapon/tank/anesthetic,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aX" = (/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aY" = (/obj/structure/table/standard,/obj/item/clothing/gloves/sterile,/obj/item/clothing/gloves/sterile,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aZ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/sterilizine,/obj/item/weapon/reagent_containers/spray/sterilizine,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"ba" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/masks,/obj/effect/floor_decal/corner/green/border{icon_state = "bordercolor"; dir = 6},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"bb" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bc" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bd" = (/obj/machinery/door/airlock/security{locked = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"be" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"bf" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"bg" = (/obj/machinery/computer/communications,/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bh" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bi" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bj" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bk" = (/obj/structure/table/steel,/obj/item/weapon/material/knife,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bl" = (/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bm" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bn" = (/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bo" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bp" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
+"br" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bs" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bt" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bu" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bv" = (/obj/structure/table/steel,/obj/random/projectile,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bw" = (/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
+"by" = (/obj/machinery/door/airlock/glass,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bz" = (/obj/effect/floor_decal/corner/grey,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bA" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bB" = (/obj/structure/table/steel,/obj/item/pizzabox,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bC" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bD" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bE" = (/obj/machinery/door/airlock/glass,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bF" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
+"bH" = (/obj/machinery/power/apc{dir = 8; name = "BSD APC"; pixel_x = -24},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bI" = (/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bJ" = (/obj/machinery/computer/area_atmos,/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bK" = (/mob/living/simple_mob/humanoid/merc/ranged/laser/poi,/turf/template_noop,/area/submap/Blackshuttledown)
+"bL" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bM" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bN" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "We need to take a short stop. The engine's are in need of minor repairs due to turbulence, should be a week's time. We've got reserve food supplies but pleanty of locale fauna to subsist on too if need be. PCRC is keeping most of there assets near New Reykjavik and locale authorities are more mindful then most to travel in this kind of weather. Our outfit should be at the rendezvous point in less then ten days assuming the upper ecehelon hasn't dropped ties with us yet."; name = "Operation Progress/M-53"},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bO" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bP" = (/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bQ" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bR" = (/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bS" = (/obj/machinery/atmospherics/pipe/tank/oxygen,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bT" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bU" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bV" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"bW" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bX" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bY" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bZ" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown)
+"ca" = (/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown)
+"cb" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"cc" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"cd" = (/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ce" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/bed,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cf" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown)
+"cg" = (/mob/living/simple_mob/mechanical/viscerator,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"ch" = (/obj/structure/table/steel,/obj/random/energy,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"ci" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown)
+"cj" = (/obj/machinery/light,/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ck" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cl" = (/obj/structure/table/woodentable,/obj/random/projectile,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cm" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cn" = (/obj/structure/table/woodentable,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"co" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cp" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"cq" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"},/area/submap/Blackshuttledown)
+"cr" = (/obj/effect/floor_decal/borderfloor{dir = 4},/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cs" = (/obj/effect/floor_decal/borderfloor{dir = 4},/mob/living/simple_mob/humanoid/merc/ranged/laser/poi,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
aa
diff --git a/maps/submaps/surface_submaps/wilderness/Boombase.dmm b/maps/submaps/surface_submaps/wilderness/Boombase.dmm
index e8acd62473..438cd0a713 100644
--- a/maps/submaps/surface_submaps/wilderness/Boombase.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Boombase.dmm
@@ -13,7 +13,7 @@
"am" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
"an" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spider,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
"ao" = (/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
-"ap" = (/mob/living/simple_animal/hostile/giant_spider/phorogenic{returns_home = 1},/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
+"ap" = (/mob/living/simple_mob/animal/giant_spider/phorogenic,/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
"aq" = (/obj/machinery/portable_atmospherics/canister/empty/phoron,/turf/simulated/floor/tiled/steel{ icon_state = "steel_dirty"},/area/submap/BoomBase)
"ar" = (/obj/machinery/portable_atmospherics/canister/empty/phoron,/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/steel{ icon_state = "steel_dirty"},/area/submap/BoomBase)
"as" = (/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/submap/BoomBase)
@@ -34,7 +34,7 @@
"aH" = (/obj/effect/decal/cleanable/ash,/turf/simulated/floor/outdoors/dirt,/area/submap/BoomBase)
"aI" = (/obj/random/mob/spider/mutant,/turf/simulated/floor/outdoors/dirt,/area/submap/BoomBase)
"aJ" = (/obj/structure/table,/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
-"aK" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/giant_spider/phorogenic{returns_home = 1},/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
+"aK" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_mob/animal/giant_spider/phorogenic,/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
"aL" = (/turf/simulated/floor/tiled/steel{ icon_state = "burned2"},/area/submap/BoomBase)
"aM" = (/turf/simulated/floor/outdoors/rocks,/area/submap/BoomBase)
"aN" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table/standard,/obj/item/weapon/tank/phoron,/obj/item/weapon/fuel_assembly/phoron,/turf/simulated/floor/tiled/steel,/area/submap/BoomBase)
diff --git a/maps/submaps/surface_submaps/wilderness/CaveS.dmm b/maps/submaps/surface_submaps/wilderness/CaveS.dmm
index e967b39617..8c7d5583b5 100644
--- a/maps/submaps/surface_submaps/wilderness/CaveS.dmm
+++ b/maps/submaps/surface_submaps/wilderness/CaveS.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -227,6 +228,48 @@
outdoors = 0
},
/area/submap/CaveS)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/template_noop,/area/submap/CaveS)
+"c" = (/obj/item/ammo_casing/a45,/turf/template_noop,/area/submap/CaveS)
+"d" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/CaveS)
+"e" = (/obj/item/ammo_casing/a45,/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/template_noop,/area/submap/CaveS)
+"f" = (/obj/random/landmine,/turf/template_noop,/area/submap/CaveS)
+"g" = (/obj/item/ammo_casing/a45,/obj/random/landmine,/turf/template_noop,/area/submap/CaveS)
+"h" = (/obj/random/landmine,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"i" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"j" = (/obj/item/ammo_casing/a45,/obj/item/ammo_casing/a45,/turf/template_noop,/area/submap/CaveS)
+"k" = (/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"l" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/template_noop,/area/submap/CaveS)
+"m" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"n" = (/obj/item/clothing/accessory/storage/webbing,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"o" = (/mob/living/simple_mob/animal/giant_spider,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"p" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"q" = (/obj/random/mob/spider,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"r" = (/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"s" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"t" = (/mob/living/simple_mob/animal/giant_spider/webslinger,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"u" = (/obj/effect/decal/cleanable/cobweb2,/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"v" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
+"w" = (/obj/random/mob/spider/mutant,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"x" = (/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt,/area/submap/CaveS)
+"y" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
+"z" = (/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
+"A" = (/turf/simulated/floor,/area/submap/CaveS)
+"B" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/toolbox,/obj/random/toolbox,/turf/simulated/floor,/area/submap/CaveS)
+"C" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor,/area/submap/CaveS)
+"D" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/submap/CaveS)
+"E" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/submap/CaveS)
+"F" = (/turf/simulated/wall,/area/submap/CaveS)
+"G" = (/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/antitox,/obj/item/weapon/reagent_containers/pill/paracetamol,/obj/random/firstaid,/turf/simulated/floor,/area/submap/CaveS)
+"H" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/submap/CaveS)
+"I" = (/obj/structure/closet/crate,/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/energy,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/obj/item/weapon/material/star,/turf/simulated/floor,/area/submap/CaveS)
+"J" = (/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/CaveS)
+"K" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/submap/CaveS)
+"L" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/submap/CaveS)
+"M" = (/obj/machinery/computer/communications,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/submap/CaveS)
+"N" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor,/area/submap/CaveS)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm b/maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm
index c7440cdaa1..6b85ef347a 100644
--- a/maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm
+++ b/maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm
@@ -6,7 +6,7 @@
"f" = (/obj/machinery/telecomms/relay/preset/ruskie,/turf/simulated/floor/wood,/area/submap/DJOutpost1)
"g" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/wood,/area/submap/DJOutpost1)
"h" = (/obj/structure/sign/goldenplaque{desc = "An award given to Sif Free Radio for media excellency. It looks fake."; name = "Best Radio Station 2558"; pixel_y = 30},/turf/simulated/floor/wood,/area/submap/DJOutpost1)
-"i" = (/mob/living/simple_animal/hostile/giant_spider/frost{returns_home = 1},/turf/simulated/floor/wood,/area/submap/DJOutpost1)
+"i" = (/mob/living/simple_mob/animal/giant_spider/frost,/turf/simulated/floor/wood,/area/submap/DJOutpost1)
"j" = (/obj/effect/decal/remains,/obj/effect/decal/cleanable/blood,/obj/item/clothing/under/frontier,/obj/item/weapon/material/knife/tacknife/combatknife,/obj/random_multi/single_item/sfr_headset,/turf/simulated/floor/wood,/area/submap/DJOutpost1)
"k" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/wood,/area/submap/DJOutpost1)
"l" = (/obj/structure/table/steel_reinforced,/obj/item/device/radio/intercom{ icon_state = "intercom"; dir = 8},/turf/simulated/floor/wood,/area/submap/DJOutpost1)
diff --git a/maps/submaps/surface_submaps/wilderness/DoomP.dmm b/maps/submaps/surface_submaps/wilderness/DoomP.dmm
index bde323248c..1fe258704e 100644
--- a/maps/submaps/surface_submaps/wilderness/DoomP.dmm
+++ b/maps/submaps/surface_submaps/wilderness/DoomP.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/turf/template_noop,
@@ -535,6 +536,98 @@
/mob/living/simple_animal/hostile/syndicate/ranged/poi,
/turf/simulated/floor/tiled,
/area/submap/DoomP)
+=======
+"aa" = (/turf/template_noop,/area/template_noop)
+"ab" = (/turf/template_noop,/area/submap/DoomP)
+"ac" = (/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
+"ad" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ae" = (/mob/living/simple_mob/mechanical/viscerator,/turf/template_noop,/area/submap/DoomP)
+"af" = (/turf/simulated/floor/water,/area/submap/DoomP)
+"ag" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/DoomP)
+"ah" = (/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ai" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"aj" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ak" = (/turf/simulated/floor/water/deep,/area/submap/DoomP)
+"al" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"am" = (/obj/random/landmine,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
+"an" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ao" = (/obj/effect/decal/remains/deer,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ap" = (/obj/effect/decal/remains/mouse,/obj/random/landmine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"aq" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ar" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"as" = (/obj/machinery/porta_turret/poi,/turf/simulated/floor/plating,/area/submap/DoomP)
+"at" = (/turf/simulated/wall/r_wall,/area/submap/DoomP)
+"au" = (/obj/structure/sign/warning/secure_area,/turf/simulated/wall/r_wall,/area/submap/DoomP)
+"av" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/submap/DoomP)
+"aw" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP)
+"ax" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"ay" = (/obj/structure/bed/chair,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"az" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aA" = (/obj/effect/floor_decal/borderfloor{dir = 1},/mob/living/simple_mob/humanoid/merc/ranged/smg/poi,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aB" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aC" = (/obj/machinery/vending/cigarette,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aD" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aE" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/submap/DoomP)
+"aF" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/submap/DoomP)
+"aG" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aH" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/submap/DoomP)
+"aI" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aJ" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aK" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aL" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
+"aM" = (/obj/structure/bed/chair{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aN" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aO" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aP" = (/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aQ" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aR" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aS" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aV" = (/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aW" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"aX" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP)
+"aY" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aZ" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"ba" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bb" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled/techfloor/grid,/area/submap/DoomP)
+"bc" = (/obj/structure/sign/electricshock,/turf/simulated/wall/r_wall,/area/submap/DoomP)
+"bd" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"be" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bf" = (/obj/machinery/light/small,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bg" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/mob/living/simple_mob/humanoid/merc/ranged/laser/poi,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bh" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bi" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bj" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bk" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bl" = (/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bm" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bn" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bo" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bp" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bq" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"br" = (/obj/structure/table/rack,/obj/random/energy,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bs" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bt" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/obj/effect/floor_decal/corner/lime/full{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bu" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bv" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bw" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bx" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/effect/floor_decal/corner/lime{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"by" = (/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bA" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bB" = (/obj/machinery/light/small,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+"bC" = (/obj/machinery/light/small{dir = 8},/obj/effect/floor_decal/corner/lime/full,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bD" = (/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bE" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/floor_decal/corner/lime{dir = 10},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bF" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bG" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/DoomP)
+"bH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP)
+"bI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
+"bJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
+"bK" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"bL" = (/mob/living/simple_mob/humanoid/merc/melee/sword/poi,/turf/simulated/floor/tiled/techfloor,/area/submap/DoomP)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
aa
diff --git a/maps/submaps/surface_submaps/wilderness/Drugden.dmm b/maps/submaps/surface_submaps/wilderness/Drugden.dmm
index f865bdc581..c95c819c95 100644
--- a/maps/submaps/surface_submaps/wilderness/Drugden.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Drugden.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -228,6 +229,55 @@
/obj/item/weapon/reagent_containers/syringe/drugs,
/turf/simulated/floor/carpet,
/area/submap/Drugd)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/template_noop,/area/submap/Drugd)
+"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Drugd)
+"d" = (/turf/simulated/wall,/area/submap/Drugd)
+"e" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/Drugd)
+"f" = (/turf/simulated/floor/tiled,/area/submap/Drugd)
+"g" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"h" = (/obj/random/trash,/turf/simulated/floor,/area/submap/Drugd)
+"i" = (/obj/structure/closet/cabinet,/obj/item/weapon/lipstick/random,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"j" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/curtain/open/bed,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"k" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/pill/happy{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)
+"l" = (/turf/simulated/floor,/area/submap/Drugd)
+"m" = (/obj/structure/curtain/black,/turf/simulated/floor,/area/submap/Drugd)
+"n" = (/obj/random/trash,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"o" = (/turf/simulated/floor/carpet,/area/submap/Drugd)
+"p" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor,/area/submap/Drugd)
+"q" = (/obj/structure/closet/cabinet,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"r" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/pill/methylphenidate{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)
+"s" = (/obj/structure/bed/chair/comfy/beige{icon_state = "armchair_preview"; dir = 1},/turf/simulated/floor/carpet,/area/submap/Drugd)
+"t" = (/obj/item/weapon/reagent_containers/pill/citalopram{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)
+"u" = (/obj/random/junk,/turf/simulated/floor,/area/submap/Drugd)
+"v" = (/obj/structure/closet/cabinet,/obj/item/weapon/contraband/poster,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"w" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"x" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/obj/item/weapon/reagent_containers/syringe/drugs,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"y" = (/obj/structure/bed/chair/comfy/beige,/obj/item/weapon/reagent_containers/pill/citalopram{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)
+"z" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/floor,/area/submap/Drugd)
+"A" = (/obj/item/weapon/reagent_containers/pill/citalopram{name = "pill"},/obj/item/weapon/reagent_containers/pill/citalopram{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)
+"B" = (/obj/structure/table/standard,/obj/item/weapon/storage/pill_bottle/happy,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"C" = (/obj/structure/table/standard,/obj/item/stack/medical/splint,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"D" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"E" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/pill/tramadol,/obj/item/weapon/reagent_containers/pill/tramadol,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"F" = (/obj/structure/closet/cabinet,/obj/item/clothing/accessory/jacket,/obj/item/weapon/material/butterfly/switchblade,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"G" = (/obj/item/weapon/reagent_containers/pill/zoom{name = "pill"},/obj/random/trash,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"H" = (/obj/item/weapon/reagent_containers/pill/zoom{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)
+"I" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"J" = (/obj/structure/table/standard,/obj/item/weapon/surgical/scalpel,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"K" = (/obj/item/wheelchair,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"L" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/Drugd)
+"M" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"N" = (/obj/effect/floor_decal/rust,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Drugd)
+"O" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/pill/zoom,/obj/item/weapon/reagent_containers/pill/zoom,/turf/simulated/floor,/area/submap/Drugd)
+"P" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/pill/tramadol{name = "pill"},/turf/simulated/floor/carpet,/area/submap/Drugd)
+"Q" = (/mob/living/simple_mob/mechanical/hivebot/ranged_damage/strong/guard,/turf/simulated/floor,/area/submap/Drugd)
+"R" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/Drugd)
+"S" = (/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Drugd)
+"T" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/carpet,/area/submap/Drugd)
+"U" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/syringe/drugs,/turf/simulated/floor/carpet,/area/submap/Drugd)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
index add7df4ca5..d720f2decb 100644
--- a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
+++ b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -183,6 +184,45 @@
/obj/random/landmine,
/turf/template_noop,
/area/submap/MilitaryCamp1)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/template_noop,/area/submap/MilitaryCamp1)
+"c" = (/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"d" = (/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1)
+"e" = (/obj/structure/flora/bush,/turf/template_noop,/area/submap/MilitaryCamp1)
+"f" = (/obj/effect/decal/cleanable/blood,/turf/template_noop,/area/submap/MilitaryCamp1)
+"g" = (/obj/random/landmine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"h" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"i" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1)
+"j" = (/obj/effect/decal/remains,/obj/random/landmine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"k" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/MilitaryCamp1)
+"l" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/MilitaryCamp1)
+"m" = (/turf/simulated/wall,/area/submap/MilitaryCamp1)
+"n" = (/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"o" = (/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"p" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/MilitaryCamp1)
+"q" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"r" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"s" = (/obj/machinery/computer/communications,/mob/living/simple_mob/mechanical/viscerator,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"t" = (/obj/structure/table/standard,/obj/random/energy,/mob/living/simple_mob/mechanical/viscerator,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"u" = (/obj/effect/mine,/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"v" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"w" = (/obj/machinery/computer/security,/mob/living/simple_mob/mechanical/viscerator,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"x" = (/mob/living/simple_mob/mechanical/viscerator,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"y" = (/obj/item/weapon/material/shard,/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1)
+"z" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"A" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"B" = (/mob/living/simple_mob/mechanical/viscerator,/turf/template_noop,/area/submap/MilitaryCamp1)
+"C" = (/obj/structure/table,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"D" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"E" = (/obj/effect/decal/cleanable/dirt,/obj/random/landmine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"F" = (/obj/machinery/door/airlock,/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"G" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/MilitaryCamp1)
+"H" = (/obj/random/landmine,/turf/template_noop,/area/template_noop)
+"I" = (/obj/structure/table/standard,/obj/random/cigarettes,/obj/item/weapon/flame/lighter/random,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"J" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"K" = (/obj/effect/decal/cleanable/blood,/obj/random/landmine,/turf/template_noop,/area/submap/MilitaryCamp1)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/wilderness/MHR.dmm b/maps/submaps/surface_submaps/wilderness/MHR.dmm
index f063126b3f..23d2baefac 100644
--- a/maps/submaps/surface_submaps/wilderness/MHR.dmm
+++ b/maps/submaps/surface_submaps/wilderness/MHR.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -102,6 +103,27 @@
outdoors = 0
},
/area/submap/MHR)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/template_noop,/area/submap/MHR)
+"c" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/MHR)
+"d" = (/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"e" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/MHR)
+"f" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"g" = (/turf/simulated/floor/outdoors/dirt,/area/submap/MHR)
+"h" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack,/turf/template_noop,/area/submap/MHR)
+"i" = (/obj/structure/table/standard,/turf/template_noop,/area/submap/MHR)
+"j" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "Do not enter the cave. The estimated active time of the Vicerators is much longer due to the improvements on the rotor bearings. It's estimated to be roughly a few months before we start to see any chancces of mechanical failure. "; name = "NOTICE: DO NOT ENTER"},/turf/template_noop,/area/submap/MHR)
+"k" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"l" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"m" = (/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"n" = (/obj/effect/decal/cleanable/cobweb2,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"o" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"p" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"q" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"r" = (/obj/effect/decal/remains,/obj/item/clothing/mask/gas/explorer,/obj/item/weapon/material/twohanded/fireaxe,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+"s" = (/obj/effect/decal/cleanable/spiderling_remains,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/outdoors/dirt{outdoors = 0},/area/submap/MHR)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/wilderness/Manor1.dmm b/maps/submaps/surface_submaps/wilderness/Manor1.dmm
index 9cb26d7a44..644caf11bd 100644
--- a/maps/submaps/surface_submaps/wilderness/Manor1.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Manor1.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/turf/template_noop,
@@ -728,6 +729,153 @@
/obj/structure/flora/tree/sif,
/turf/template_noop,
/area/submap/Manor1)
+=======
+"aa" = (/turf/template_noop,/area/submap/Manor1)
+"ab" = (/turf/simulated/wall/wood,/area/submap/Manor1)
+"ac" = (/obj/structure/window/reinforced/full,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ad" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ae" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"af" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 8},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ag" = (/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ah" = (/obj/structure/flora/pottedplant/dead,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ai" = (/obj/structure/flora/pottedplant/drooping,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aj" = (/obj/structure/table/woodentable,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ak" = (/obj/structure/flora/pottedplant/dead,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"al" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"am" = (/obj/structure/table/woodentable,/obj/item/device/flashlight,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"an" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ao" = (/obj/structure/mopbucket,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ap" = (/obj/structure/sink,/turf/simulated/wall/wood,/area/submap/Manor1)
+"aq" = (/turf/simulated/floor/carpet/bcarpet,/area/submap/Manor1)
+"ar" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/bcarpet,/area/submap/Manor1)
+"as" = (/obj/structure/simple_door/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"at" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"au" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"av" = (/obj/structure/janitorialcart,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aw" = (/obj/structure/table/woodentable,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ax" = (/obj/structure/closet/cabinet,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ay" = (/obj/effect/decal/cleanable/blood/gibs/robot/limb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"az" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aB" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aC" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/maglight,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aD" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aE" = (/obj/structure/closet/cabinet,/obj/effect/decal/cleanable/cobweb2,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aF" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aG" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aH" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aI" = (/obj/structure/flora/pottedplant/dead,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aJ" = (/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aK" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aL" = (/obj/structure/fireplace,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aM" = (/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aN" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aO" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aP" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aQ" = (/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1)
+"aR" = (/obj/structure/table/standard,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aS" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aT" = (/obj/structure/closet/cabinet,/obj/random/projectile/shotgun,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aU" = (/obj/structure/bookcase,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aV" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aW" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aX" = (/obj/structure/table/standard,/obj/item/weapon/material/knife,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aY" = (/obj/machinery/cooker/oven,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"aZ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ba" = (/obj/machinery/cooker/grill,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bb" = (/obj/structure/table/standard,/obj/item/weapon/tray,/obj/item/weapon/tray,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bc" = (/obj/structure/table/standard,/obj/item/weapon/material/knife/butch,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bd" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"be" = (/obj/random/trash,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bf" = (/obj/structure/closet/cabinet,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/random/contraband,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bg" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bh" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bi" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken0"},/area/submap/Manor1)
+"bj" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bk" = (/obj/random/plushielarge,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bl" = (/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1)
+"bm" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/accessory/sweater/blue,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1)
+"bn" = (/obj/structure/window/reinforced/full,/turf/template_noop,/area/submap/Manor1)
+"bo" = (/obj/item/weapon/material/twohanded/baseballbat/metal,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1)
+"bp" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1)
+"bq" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"br" = (/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken5"},/area/submap/Manor1)
+"bs" = (/obj/structure/table,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bt" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bu" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bv" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bw" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1)
+"bx" = (/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"by" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bz" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bA" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bB" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/weapon/reagent_containers/food/snacks/stew,/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bC" = (/obj/item/weapon/shovel,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bD" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bE" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bF" = (/obj/structure/table/standard,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bG" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/weapon/reagent_containers/food/snacks/sausage,/obj/item/weapon/reagent_containers/food/snacks/sausage,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bH" = (/obj/effect/decal/cleanable/dirt,/obj/structure/flora/pottedplant/drooping,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/flora/pottedplant/dead,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bJ" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/rollingpin,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bK" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bL" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/candle_box,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bM" = (/obj/machinery/papershredder,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bN" = (/obj/structure/simple_door/wood,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1)
+"bO" = (/obj/machinery/icecream_vat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1)
+"bQ" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bR" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bS" = (/obj/structure/flora/pottedplant/subterranean,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bT" = (/obj/item/weapon/material/minihoe,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1)
+"bU" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1)
+"bV" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken6"},/area/submap/Manor1)
+"bW" = (/obj/machinery/washing_machine,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bX" = (/obj/structure/table/woodentable,/obj/structure/bedsheetbin,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bY" = (/obj/structure/table/rack,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"bZ" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random_belt,/obj/random/cash,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ca" = (/obj/structure/table/woodentable,/obj/item/weapon/melee/umbrella/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cb" = (/obj/structure/closet/cabinet,/obj/random/gun/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cc" = (/obj/structure/closet/cabinet,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/random/medical,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cd" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ce" = (/obj/structure/bed/double,/obj/item/weapon/bedsheet/rddouble,/obj/structure/curtain/open/bed,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cf" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/wallet/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cg" = (/obj/structure/flora/pottedplant/dead,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ch" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/accessory/sweater,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1)
+"ci" = (/obj/structure/closet/crate,/obj/item/weapon/flame/lighter/random,/obj/random/powercell,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cj" = (/obj/structure/closet/cabinet,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/head/hood/winter,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ck" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cl" = (/turf/simulated/floor/carpet/turcarpet,/area/submap/Manor1)
+"cm" = (/obj/effect/decal/cleanable/blood,/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cn" = (/obj/structure/closet/crate,/obj/item/weapon/storage/wallet/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"co" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cp" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cq" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/shoes/black,/obj/random/projectile/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cr" = (/obj/structure/simple_door/wood,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1)
+"cs" = (/obj/item/weapon/material/twohanded/spear,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"ct" = (/obj/structure/closet/cabinet{opened = 1},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cu" = (/obj/effect/decal/remains,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cv" = (/obj/structure/sink{pixel_y = 30},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cw" = (/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cx" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cy" = (/obj/structure/table/standard,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cz" = (/obj/effect/decal/cleanable/cobweb2,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cA" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cB" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken3"},/area/submap/Manor1)
+"cC" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cD" = (/obj/structure/closet/crate,/obj/item/clothing/suit/armor/vest,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cE" = (/obj/structure/closet/crate,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cF" = (/obj/structure/simple_door/wood,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cG" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cH" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cI" = (/obj/item/stack/material/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cJ" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cK" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cL" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 1},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1)
+"cM" = (/obj/structure/table/woodentable,/obj/item/device/laptop,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1)
+"cN" = (/turf/template_noop,/area/template_noop)
+"cO" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Manor1)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
cN
diff --git a/maps/submaps/surface_submaps/wilderness/Mudpit.dmm b/maps/submaps/surface_submaps/wilderness/Mudpit.dmm
index 811e6105cc..436d804d86 100644
--- a/maps/submaps/surface_submaps/wilderness/Mudpit.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Mudpit.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -64,6 +65,23 @@
},
/turf/simulated/floor/outdoors/dirt,
/area/submap/Mudpit)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"c" = (/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"d" = (/turf/simulated/floor/outdoors/mud,/area/submap/Mudpit)
+"e" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"f" = (/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"g" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"h" = (/obj/effect/decal/remains/mouse,/obj/effect/decal/cleanable/liquid_fuel,/obj/effect/decal/cleanable/liquid_fuel,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"i" = (/obj/effect/decal/cleanable/liquid_fuel,/turf/template_noop,/area/template_noop)
+"j" = (/turf/simulated/mineral,/area/submap/Mudpit)
+"k" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"l" = (/obj/machinery/portable_atmospherics/canister/empty/phoron,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"m" = (/obj/effect/decal/remains,/obj/item/clothing/suit/space/void/merc/fire,/obj/item/clothing/head/helmet/space/void/merc/fire,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"n" = (/mob/living/simple_mob/animal/giant_spider/thermic,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+"o" = (/obj/effect/decal/mecha_wreckage/ripley/firefighter,/turf/simulated/floor/outdoors/dirt,/area/submap/Mudpit)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/maps/submaps/surface_submaps/wilderness/Rockybase.dmm b/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
index e805a56a6d..2ee29d901b 100644
--- a/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
/turf/template_noop,
@@ -3282,3 +3283,232 @@ aa
aa
aa
"}
+=======
+"aa" = (/turf/template_noop,/area/template_noop)
+"ab" = (/obj/effect/decal/remains,/turf/template_noop,/area/template_noop)
+"ac" = (/obj/item/weapon/grenade/chem_grenade/metalfoam,/turf/template_noop,/area/template_noop)
+"ad" = (/mob/living/simple_mob/mechanical/viscerator,/turf/template_noop,/area/template_noop)
+"ae" = (/obj/effect/decal/remains,/turf/template_noop,/area/submap/Rockybase)
+"af" = (/turf/template_noop,/area/submap/Rockybase)
+"ag" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Rockybase)
+"ah" = (/obj/effect/gibspawner/robot,/turf/template_noop,/area/submap/Rockybase)
+"ai" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Rockybase)
+"aj" = (/obj/effect/decal/remains/robot,/turf/template_noop,/area/template_noop)
+"ak" = (/mob/living/simple_mob/mechanical/combat_drone/lesser,/turf/template_noop,/area/submap/Rockybase)
+"al" = (/turf/simulated/floor,/area/submap/Rockybase)
+"am" = (/obj/effect/decal/remains/posi,/turf/simulated/floor,/area/submap/Rockybase)
+"an" = (/obj/machinery/porta_turret/poi,/turf/simulated/floor,/area/submap/Rockybase)
+"ao" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/submap/Rockybase)
+"ap" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/template_noop)
+"aq" = (/obj/effect/floor_decal/industrial/danger,/turf/simulated/floor,/area/submap/Rockybase)
+"ar" = (/obj/machinery/light,/obj/effect/floor_decal/industrial/danger,/turf/simulated/floor,/area/submap/Rockybase)
+"as" = (/obj/effect/decal/cleanable/blood,/obj/effect/floor_decal/industrial/danger,/turf/simulated/floor,/area/submap/Rockybase)
+"at" = (/turf/simulated/wall/r_wall,/area/submap/Rockybase)
+"au" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/submap/Rockybase)
+"av" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aw" = (/obj/effect/decal/remains/deer,/turf/template_noop,/area/template_noop)
+"ax" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"ay" = (/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"az" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/item/weapon/soap,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"aA" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aB" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aC" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aD" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/pickaxe/plasmacutter,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aE" = (/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aF" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aG" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aH" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aI" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aJ" = (/obj/structure/closet/l3closet/janitor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aK" = (/mob/living/bot/cleanbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aL" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aM" = (/obj/item/weapon/storage/belt/janitor,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aN" = (/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aO" = (/obj/structure/table/standard,/obj/item/device/laptop,/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 9},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aP" = (/obj/structure/table/standard,/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aQ" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/pistol,/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aR" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun/taser,/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aS" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aT" = (/obj/machinery/vending/coffee,/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 5},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aU" = (/turf/simulated/floor/tiled/techfloor,/area/submap/Rockybase)
+"aV" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/simulated/floor/tiled/techfloor,/area/submap/Rockybase)
+"aW" = (/obj/machinery/vending/hydronutrients,/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 9},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aX" = (/obj/structure/closet/crate/hydroponics,/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 5},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aY" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"aZ" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"ba" = (/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bb" = (/obj/structure/table/standard,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bc" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bd" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "Carl's absolutly fucked in the head. He's trying to squeeze as much drone production out as he can since he's worried we're gonna get found out but he's getting sloppier with each batch. Now's he's telling us he can speed the time on the IFF encoding. I already have a hard enough time getting these damn things not to stare at walls and now he's gonna shortchange the only part of these tincans that tells em not to turn us into paste on a wall. I told Richter to get out while he can, We're counting days before either some Sif task force shows up at our door or these things decide we aren't there friends anymore."; name = "Note"},/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"be" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bf" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bg" = (/obj/machinery/vending/security,/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bh" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled/techfloor,/area/submap/Rockybase)
+"bi" = (/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bj" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bk" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"bl" = (/obj/item/mecha_parts/part/gygax_left_leg,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"bm" = (/obj/machinery/light,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"bn" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"bo" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bp" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bq" = (/obj/structure/table/standard,/obj/item/weapon/storage/bag/trash,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"br" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/effect/floor_decal/corner/red/border{icon_state = "bordercolor"; dir = 10},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bs" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/weapon/pen,/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bt" = (/obj/effect/floor_decal/corner/red/border,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bu" = (/obj/effect/floor_decal/corner/red/border,/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bv" = (/obj/machinery/door/airlock/security{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/tiled/techfloor,/area/submap/Rockybase)
+"bw" = (/obj/machinery/light,/turf/simulated/floor/tiled/techfloor,/area/submap/Rockybase)
+"bx" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle/pistol,/turf/simulated/floor/tiled/techfloor,/area/submap/Rockybase)
+"by" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bz" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bA" = (/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 8},/mob/living/bot/farmbot{faction = "malf_drone"; name = "Mr. Weddleton"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bB" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bC" = (/obj/effect/decal/remains/posi,/turf/template_noop,/area/template_noop)
+"bD" = (/obj/machinery/vending/cola,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bE" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bF" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bG" = (/obj/structure/door_assembly,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bI" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bJ" = (/obj/effect/decal/mecha_wreckage/hoverpod,/turf/template_noop,/area/template_noop)
+"bK" = (/mob/living/simple_mob/mechanical/combat_drone/lesser,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bL" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bM" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bN" = (/obj/effect/decal/remains,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bO" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"bP" = (/obj/machinery/vending/snack,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bQ" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bS" = (/obj/item/stack/rods,/obj/structure/girder,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bT" = (/obj/effect/decal/remains,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bU" = (/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bV" = (/obj/effect/decal/cleanable/blood,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bW" = (/obj/item/mecha_parts/part/gygax_right_arm,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bX" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"bY" = (/mob/living/simple_mob/mechanical/viscerator,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"bZ" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ca" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cb" = (/turf/simulated/wall,/area/submap/Rockybase)
+"cc" = (/obj/structure/table/standard,/obj/item/device/kit/paint/gygax/darkgygax,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cd" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "I've decided to go forward and start some small scale tests of the Vicerator delivery grenades, Might as wall make sure they work like the real ones. There are a few Fauna areas nearbye and we're working to make sure the kinks in the code are worked out. Once we've made sure they stay flying we'll work on the IFF signals."; name = "V-Grenade Notice 2"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ce" = (/obj/structure/table/standard,/obj/random/toolbox,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cf" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cg" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "We've finally been able to get the Vicerator delivery grenades working, Took awhile to make sure the latching mechanism didn't fail but we're sure we've got it this time. Vel'Shem's worried about the miners having there own drone fab now but I say it's a small price to pay to keep the metal flowing, Especially since there telling us NT's starting to monopolize the metal rich parts."; name = "V-Grenade Notice 1"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ch" = (/obj/structure/table/standard,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ci" = (/obj/structure/table/standard,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cj" = (/obj/structure/table/standard,/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ck" = (/obj/structure/table/standard,/obj/machinery/light{dir = 1},/obj/item/weapon/circuitboard/mecha/gygax/main,/obj/item/weapon/circuitboard/mecha/gygax/peripherals,/obj/item/weapon/circuitboard/mecha/gygax/targeting,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cl" = (/obj/structure/door_assembly,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cm" = (/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Rockybase)
+"cn" = (/obj/structure/table/standard,/obj/fiftyspawner/rods,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"co" = (/obj/machinery/vending/engivend,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cp" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cq" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cr" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cs" = (/obj/item/mecha_parts/part/gygax_torso,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ct" = (/obj/machinery/light{dir = 1},/obj/structure/closet/crate/medical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cu" = (/obj/structure/table/standard,/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cv" = (/obj/structure/table/standard,/obj/item/clothing/mask/breath/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cw" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cx" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"cy" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"cz" = (/obj/structure/table/standard,/obj/item/device/mmi/digital/robot,/obj/item/weapon/stock_parts/capacitor/adv,/obj/item/weapon/stock_parts/scanning_module/adv,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cA" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cC" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor,/area/submap/Rockybase)
+"cD" = (/obj/structure/door_assembly,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cE" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cF" = (/obj/effect/decal/cleanable/dirt,/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase)
+"cG" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/Rockybase)
+"cH" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table,/turf/simulated/floor,/area/submap/Rockybase)
+"cI" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase)
+"cJ" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cK" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"cL" = (/mob/living/simple_mob/mechanical/mecha/combat/gygax/dark/advanced{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cM" = (/obj/machinery/drone_fabricator{fabricator_tag = "Unknown"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cN" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cO" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cP" = (/obj/structure/table/standard,/obj/item/mecha_parts/mecha_equipment/repair_droid,/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cQ" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cR" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/mob/living/simple_mob/mechanical/combat_drone/lesser,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cS" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cT" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/submap/Rockybase)
+"cU" = (/obj/machinery/vending/medical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cV" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cW" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/Rockybase)
+"cX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Rockybase)
+"cY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/Rockybase)
+"cZ" = (/obj/item/mecha_parts/part/gygax_armour,/turf/simulated/floor,/area/submap/Rockybase)
+"da" = (/obj/item/mecha_parts/chassis/gygax,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dc" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dd" = (/obj/machinery/vending/robotics,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"de" = (/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "Unknown APC"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"df" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dg" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dh" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"di" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/submap/Rockybase)
+"dj" = (/obj/item/mecha_parts/part/gygax_right_leg,/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dk" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/mecha_parts/part/gygax_left_arm,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"dl" = (/obj/machinery/vending,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dm" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dn" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable/green,/turf/simulated/floor,/area/submap/Rockybase)
+"do" = (/obj/machinery/light{dir = 8},/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dp" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/mob/living/simple_mob/mechanical/combat_drone/lesser,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dq" = (/obj/structure/closet/secure_closet/hydroponics,/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dr" = (/obj/effect/decal/cleanable/blood/oil,/turf/template_noop,/area/template_noop)
+"ds" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dt" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"du" = (/obj/structure/table/standard,/obj/item/stack/material/plasteel,/obj/item/stack/material/glass/reinforced,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dv" = (/obj/structure/table/standard,/obj/item/stack/material/glass,/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dw" = (/obj/structure/table/standard,/obj/item/mecha_parts/part/gygax_head,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dx" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dy" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dz" = (/obj/item/weapon/surgical/surgicaldrill,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dA" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dB" = (/obj/effect/decal/cleanable/dirt,/mob/living/bot/medbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dC" = (/obj/machinery/vending/hydroseeds,/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 10},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dD" = (/obj/structure/closet/crate/secure/hydrosec,/obj/effect/floor_decal/corner/lime/border{icon_state = "bordercolor"; dir = 6},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"dE" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/structure/gravemarker{dir = 1},/turf/template_noop,/area/template_noop)
+"dF" = (/obj/effect/gibspawner/robot,/turf/template_noop,/area/template_noop)
+"dG" = (/obj/effect/gibspawner/human,/turf/template_noop,/area/template_noop)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaabacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaa
+aaaaaaaaaeafafafagafafafafagafafafafafaeafafafafafafafafafafafafafagafafafafafafafafafafafafaeafafafafafaaaaaaaa
+aaaaaaaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafahafafafafafafafafafafafafafaaaaaaaa
+aaaaaaaaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaaaaaaaa
+aaaaaaaaafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafaaaaaaaa
+abaaaaaaafafaiaiaiaiaiafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafaaaaajaa
+aaaaaaaaafafaiaiaiaiaiaiakafafafaiaiaiaiaiafafafafafafafafalalamalalalafafafafafafafafafaiaiaiakafafafafaaaaaaaa
+aaaaaaaaafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafanalalaoalalalalalanafafafafafaiaiaiaiaiaiaiaiaiafaaaaaaaa
+aaaaaaapafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaqaqaraqaqaqaqaqasaraqaqaiaiaiaiaiaiaiaiaiaiaiaiaiafaaaaaaaa
+aaaaaaaaafaiaiatatatatatatatatatatatatatatatatatatatatatatatauavavauatatatatatatatatatatatatataiaiaiaiafaaawaaaa
+aaaaaaaaafaiatataxayazataAaBaCaDaEaEaBaFaGaHaBaIatataJaKaLaMataNaNataOaPaQaRaSaTataUaVataWaXatataiaiaiafaaaaaaaa
+aaaaaaaaaiaiatataYayaZataEaEaEaEaEaEaEaEaEaEaEaEatatbaaNaNbbatbcaNatbdbebfaNaNbgataUbhatbibjatataiaiaiafaaaaaaaa
+aaaaaaaaaiaiatataYaybkataEblaEaEbmaEaBbnaBaHaBaFatatboaNbpbqataNaNatbrbsbtbtbubtbvbwbxatbibyatataiaiaiafaaaaaaaa
+aaaaaaabaiaiatatayayayatatatbzatatatatatatatatatatatatbzatatatavavatatatatatbzatatatatatbAbBatataiaiaiafaaaaaabC
+aaaaaaaaaiaiatatatbzatatbDbEbEbEbEbFbEbEbEbEbGbEbFbEbEbEbEbEbEbEbEbEbEbFbEbEbEbEbHbHbIatbibyatataiaiaiafaaaabJaa
+aaaaaaaaaiaiatatbcaNaNaNaNaNaNbKbLbLaNbMbNaNaNaNaNaNaNaNaNaNaNbLaNaNaNaNaNaNaNaNbKbLbLbzbibyatataiaiaiafaaaaaaaa
+aaaaaaaaafaiatatatbOatatbPbQbQbRbRbRbQbQbQbSaNalbTbUbQbVbQbRbRbRbQbQbQbQbQbUbQbQbQbQbWatbibBatataiaiaiafaaaaaaaa
+aaaaaaaaafaiatatbXaybYatatatatatatatatatatatalalatatatatbZatatatatcaatatatatatatatatatatbibyatataiaiaiafaaaaaaaa
+aaaaaaaaafaiatatcbcbayatcccdcecfcgchcicjckclalcmcnatcocpaNcqcratcscaaNctcucvbLaNaNaNcwatbibyatataiaiaiafaaaaaaaa
+aaaaaaaaafaiatatcxbOcyataNaNaNaNaNaNaNaNaNcacaalczataNaNcAcBcCatcDaNbLbLcEcFcGcHcIaNcJatbibBatataiaiaiagaaaaaaaa
+aaaaaaaaafaiatatcbcbcKataNcMaNaNcMaNaNcNaNcOcaalcPatcQbLcRcScTatcUaNbLcVcWcXcYcWcZalaNatbibyatataiaiafafaaaaaaaa
+aaaaaaaaafaiatatcxbOayatcQaNaNdaaNcLaNdcbLdccacaddatdedfdgdfdhataNaNbLdicYcYcWcHalcmaNatbidjatataiaiafafaaaaaaaa
+aaaaabaaafaiatatcbcbdkataNcMaNaNalalbLbLbLbLaNaNdlataNaNdmcSdnatdoaNaNdpcWcGcGcGcGalbLatbidqatataiakafafaaaadraa
+aaaaaaaaafaiatatcxbOayataNaNaNaNaNaNdsdtaNdtaNaNcpatdudvdwaNdxatdyaNdzaNaNdAcIdAbLbLdBatdCdDatataiaiafafaaaabCaa
+aaaaaaaaafaiaiatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatatataiaiafafafaaaaaaaa
+aaaaaaaaafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaa
+aaaaaaaaafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafaiaiaiafafafaiaiaiaiaiaiaiafafafafaaaaaaaa
+aaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiakafafafaiaiaiaiaiaiafafafafafafafafafafafafafafafafafafafafafafafafaaaadraa
+aaaaaaaaafagafafafafafafaiaiaiaiaiafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaaaaaaaa
+aaaaaaadaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaapaaaaaaaaaaaaabaaapaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaadEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaadFaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaadFaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadGaaaaaaaaaaaaabaa
+"}
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
diff --git a/maps/submaps/surface_submaps/wilderness/spider1.dmm b/maps/submaps/surface_submaps/wilderness/spider1.dmm
index deda5470a7..fa425fa054 100644
--- a/maps/submaps/surface_submaps/wilderness/spider1.dmm
+++ b/maps/submaps/surface_submaps/wilderness/spider1.dmm
@@ -1,3 +1,4 @@
+<<<<<<< HEAD
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"a" = (
/turf/template_noop,
@@ -38,6 +39,17 @@
/mob/living/simple_animal/hostile/giant_spider/nurse,
/turf/template_noop,
/area/submap/spider1)
+=======
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/obj/effect/spider/stickyweb,/turf/template_noop,/area/submap/spider1)
+"c" = (/turf/template_noop,/area/submap/spider1)
+"d" = (/obj/structure/flora/tree/pine,/turf/template_noop,/area/submap/spider1)
+"e" = (/obj/effect/spider/eggcluster/small/frost,/turf/template_noop,/area/submap/spider1)
+"f" = (/mob/living/simple_mob/animal/giant_spider/frost,/turf/template_noop,/area/submap/spider1)
+"g" = (/mob/living/simple_mob/animal/giant_spider/nurse,/turf/template_noop,/area/submap/spider1)
+"h" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/spider1)
+"i" = (/obj/effect/spider/cocoon,/mob/living/simple_mob/animal/giant_spider/frost,/turf/template_noop,/area/submap/spider1)
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync
(1,1,1) = {"
a
diff --git a/sound/effects/break_stone.ogg b/sound/effects/break_stone.ogg
new file mode 100644
index 0000000000..711fd50d48
Binary files /dev/null and b/sound/effects/break_stone.ogg differ
diff --git a/sound/effects/servostep.ogg b/sound/effects/servostep.ogg
new file mode 100644
index 0000000000..9999b99ccb
Binary files /dev/null and b/sound/effects/servostep.ogg differ
diff --git a/sound/effects/suitstep1.ogg b/sound/effects/suitstep1.ogg
new file mode 100644
index 0000000000..fdc56bb9e4
Binary files /dev/null and b/sound/effects/suitstep1.ogg differ
diff --git a/sound/effects/suitstep2.ogg b/sound/effects/suitstep2.ogg
new file mode 100644
index 0000000000..17a528feeb
Binary files /dev/null and b/sound/effects/suitstep2.ogg differ
diff --git a/vorestation.dme b/vorestation.dme
index bea34dbe10..adfe57aad9 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -215,6 +215,7 @@
#include "code\controllers\Processes\turf.dm"
#include "code\controllers\ProcessScheduler\core\process.dm"
#include "code\controllers\ProcessScheduler\core\processScheduler.dm"
+#include "code\controllers\subsystems\ai.dm"
#include "code\controllers\subsystems\air.dm"
#include "code\controllers\subsystems\airflow.dm"
#include "code\controllers\subsystems\atoms.dm"
@@ -517,6 +518,7 @@
#include "code\game\gamemodes\cult\narsie.dm"
#include "code\game\gamemodes\cult\ritual.dm"
#include "code\game\gamemodes\cult\runes.dm"
+#include "code\game\gamemodes\cult\soulstone.dm"
#include "code\game\gamemodes\cult\talisman.dm"
#include "code\game\gamemodes\cult\cultify\mob.dm"
#include "code\game\gamemodes\cult\cultify\obj.dm"
@@ -572,7 +574,6 @@
#include "code\game\gamemodes\technomancer\spell_objs_helpers.dm"
#include "code\game\gamemodes\technomancer\technomancer.dm"
#include "code\game\gamemodes\technomancer\assistance\assistance.dm"
-#include "code\game\gamemodes\technomancer\assistance\golem.dm"
#include "code\game\gamemodes\technomancer\devices\boots_of_speed.dm"
#include "code\game\gamemodes\technomancer\devices\disposable_teleporter.dm"
#include "code\game\gamemodes\technomancer\devices\gloves_of_regen.dm"
@@ -1415,6 +1416,22 @@
#include "code\modules\admin\view_variables\helpers.dm"
#include "code\modules\admin\view_variables\topic.dm"
#include "code\modules\admin\view_variables\view_variables.dm"
+#include "code\modules\ai\_defines.dm"
+#include "code\modules\ai\ai_holder.dm"
+#include "code\modules\ai\ai_holder_combat.dm"
+#include "code\modules\ai\ai_holder_communication.dm"
+#include "code\modules\ai\ai_holder_cooperation.dm"
+#include "code\modules\ai\ai_holder_debug.dm"
+#include "code\modules\ai\ai_holder_disabled.dm"
+#include "code\modules\ai\ai_holder_fleeing.dm"
+#include "code\modules\ai\ai_holder_follow.dm"
+#include "code\modules\ai\ai_holder_movement.dm"
+#include "code\modules\ai\ai_holder_pathfinding.dm"
+#include "code\modules\ai\ai_holder_targeting.dm"
+#include "code\modules\ai\interfaces.dm"
+#include "code\modules\ai\say_list.dm"
+#include "code\modules\ai\aI_holder_subtypes\simple_mob_ai.dm"
+#include "code\modules\ai\aI_holder_subtypes\slime_xenobio_ai.dm"
#include "code\modules\alarm\alarm.dm"
#include "code\modules\alarm\alarm_handler.dm"
#include "code\modules\alarm\atmosphere_alarm.dm"
@@ -1453,8 +1470,6 @@
#include "code\modules\blob2\blobs\normal.dm"
#include "code\modules\blob2\blobs\resource.dm"
#include "code\modules\blob2\blobs\shield.dm"
-#include "code\modules\blob2\mobs\blob_mob.dm"
-#include "code\modules\blob2\mobs\spore.dm"
#include "code\modules\blob2\overmind\overmind.dm"
#include "code\modules\blob2\overmind\powers.dm"
#include "code\modules\blob2\overmind\types.dm"
@@ -2223,6 +2238,7 @@
#include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm"
#include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm"
#include "code\modules\mob\living\simple_animal\corpse.dm"
+<<<<<<< HEAD:vorestation.dme
#include "code\modules\mob\living\simple_animal\simple_animal.dm"
#include "code\modules\mob\living\simple_animal\simple_animal_vr.dm"
#include "code\modules\mob\living\simple_animal\simple_hud.dm"
@@ -2315,6 +2331,103 @@
#include "code\modules\mob\living\simple_animal\vore\shadekin\shadekin.dm"
#include "code\modules\mob\living\simple_animal\vore\shadekin\types.dm"
#include "code\modules\mob\living\simple_animal\vore\shadekin\~defines.dm"
+=======
+#include "code\modules\mob\living\simple_mob\appearance.dm"
+#include "code\modules\mob\living\simple_mob\combat.dm"
+#include "code\modules\mob\living\simple_mob\defense.dm"
+#include "code\modules\mob\living\simple_mob\hands.dm"
+#include "code\modules\mob\living\simple_mob\life.dm"
+#include "code\modules\mob\living\simple_mob\on_click.dm"
+#include "code\modules\mob\living\simple_mob\simple_hud.dm"
+#include "code\modules\mob\living\simple_mob\simple_mob.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\animal.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_captive.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\borer\borer_powers.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\chicken.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\cow.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\farm animals\goat.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\_giant_spider.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\carrier.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\electric.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\frost.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\hunter.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\lurker.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\nurse.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\pepper.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\phorogenic.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\thermic.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\tunneler.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\giant_spider\webslinger.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\crab.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\fish.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\lizard.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\misc.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\mouse.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\passive.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\passive\penguin.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\bird.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\cat.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\dog.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\pets\parrot.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\diyaab.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\hooligan_crab.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\savik.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\shantak.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\sif\sif.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\alien.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\bats.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\bear.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\carp.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\goose.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\animal\space\space.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\blob\blob.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\blob\spore.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\clown.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\humanoid.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\russian.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\illusion\illusion.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\combat_drone.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\golem.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mechanical.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\viscerator.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\hivebot.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\ranged_damage.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\support.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\tank.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\adv_dark_gygax.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\combat_mecha.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\durand.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\gygax.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\hoverpod.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\marauder.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\mecha.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\odysseus.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\phazon.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\ripley.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\ward\monitor_ward.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\ward\ward.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\creature.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\faithless.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\_construct.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\artificer.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\harvester.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\juggernaut.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\shade.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\occult\constructs\wraith.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\plant\tomato.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\plant\tree.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\slime.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\feral\feral.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\combat.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\consumption.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\defense.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\discipline.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\subtypes.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\slime\xenobio\xenobio.dm"
+>>>>>>> 3155d58... Merge pull request #5735 from Neerti/hopefully_last_master_sync:polaris.dme
#include "code\modules\mob\living\voice\voice.dm"
#include "code\modules\mob\new_player\login.dm"
#include "code\modules\mob\new_player\logout.dm"
@@ -2552,7 +2665,6 @@
#include "code\modules\projectiles\guns\projectile\shotgun.dm"
#include "code\modules\projectiles\guns\projectile\sniper.dm"
#include "code\modules\projectiles\guns\projectile\sniper\collapsible_sniper.dm"
-#include "code\modules\projectiles\projectile\animate.dm"
#include "code\modules\projectiles\projectile\arc.dm"
#include "code\modules\projectiles\projectile\beams.dm"
#include "code\modules\projectiles\projectile\beams_vr.dm"