diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 8d3aa08493..acb1da7b02 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -17,7 +17,7 @@ Pipelines + Other Objects -> Pipe network
var/nodealert = 0
var/power_rating //the maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts
- layer = PIPES_LAYER
+ layer = ATMOS_LAYER
plane = PLATING_PLANE
var/pipe_flags = PIPING_DEFAULT_LAYER_ONLY // Allow other layers by exception basis.
@@ -202,12 +202,12 @@ Pipelines + Other Objects -> Pipe network
if(PIPING_LAYER_SCRUBBER)
icon_state = "[icon_state]-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
if(PIPING_LAYER_SUPPLY)
icon_state = "[icon_state]-supply"
connect_types = CONNECT_TYPE_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
if(pipe_flags & PIPING_ALL_LAYER)
connect_types = CONNECT_TYPE_REGULAR|CONNECT_TYPE_SUPPLY|CONNECT_TYPE_SCRUBBER
diff --git a/code/ATMOSPHERICS/pipes/cap.dm b/code/ATMOSPHERICS/pipes/cap.dm
index 4658b9c40c..a03ce16af5 100644
--- a/code/ATMOSPHERICS/pipes/cap.dm
+++ b/code/ATMOSPHERICS/pipes/cap.dm
@@ -79,7 +79,7 @@
icon_state = "cap-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -89,7 +89,7 @@
icon_state = "cap-supply"
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -104,7 +104,7 @@
icon_state = "cap-f-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -114,6 +114,6 @@
icon_state = "cap-f-supply"
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
diff --git a/code/ATMOSPHERICS/pipes/he_pipes.dm b/code/ATMOSPHERICS/pipes/he_pipes.dm
index fe6580b1ce..2d77e3a4ca 100644
--- a/code/ATMOSPHERICS/pipes/he_pipes.dm
+++ b/code/ATMOSPHERICS/pipes/he_pipes.dm
@@ -12,7 +12,7 @@
construction_type = /obj/item/pipe/binary/bendable
pipe_state = "he"
- layer = 2.41
+ layer = PIPES_HE_LAYER
var/initialize_directions_he
var/surface = 2 //surface area in m^2
var/icon_temperature = T20C //stop small changes in temperature causing an icon refresh
diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm
index bca6dd3379..524d420d39 100644
--- a/code/ATMOSPHERICS/pipes/manifold.dm
+++ b/code/ATMOSPHERICS/pipes/manifold.dm
@@ -18,7 +18,6 @@
var/obj/machinery/atmospherics/node3
level = 1
- layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold/New()
..()
@@ -166,7 +165,7 @@
icon_state = "map-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -176,7 +175,7 @@
icon_state = "map-supply"
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -212,7 +211,7 @@
icon_state = "map-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -222,7 +221,7 @@
icon_state = "map-supply"
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm
index 88adc47d62..0cc022423b 100644
--- a/code/ATMOSPHERICS/pipes/manifold4w.dm
+++ b/code/ATMOSPHERICS/pipes/manifold4w.dm
@@ -19,7 +19,6 @@
var/obj/machinery/atmospherics/node4
level = 1
- layer = 2.4 //under wires with their 2.44
/obj/machinery/atmospherics/pipe/manifold4w/New()
..()
@@ -168,7 +167,7 @@
icon_state = "map_4way-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -178,7 +177,7 @@
icon_state = "map_4way-supply"
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -214,7 +213,7 @@
icon_state = "map_4way-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -224,7 +223,7 @@
icon_state = "map_4way-supply"
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
diff --git a/code/ATMOSPHERICS/pipes/pipe_base.dm b/code/ATMOSPHERICS/pipes/pipe_base.dm
index 4e852ed0c8..19b05e8b71 100644
--- a/code/ATMOSPHERICS/pipes/pipe_base.dm
+++ b/code/ATMOSPHERICS/pipes/pipe_base.dm
@@ -7,7 +7,7 @@
var/datum/pipeline/parent
var/volume = 0
- layer = 2.4 //under wires with their 2.44
+ layer = PIPES_LAYER
use_power = 0
pipe_flags = 0 // Does not have PIPING_DEFAULT_LAYER_ONLY flag.
diff --git a/code/ATMOSPHERICS/pipes/simple.dm b/code/ATMOSPHERICS/pipes/simple.dm
index 77290e5d8a..6aee81807e 100644
--- a/code/ATMOSPHERICS/pipes/simple.dm
+++ b/code/ATMOSPHERICS/pipes/simple.dm
@@ -173,7 +173,7 @@
icon_state = "intact-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -183,7 +183,7 @@
icon_state = "intact-supply"
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -219,7 +219,7 @@
icon_state = "intact-scrubbers"
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -229,7 +229,7 @@
icon_state = "intact-supply"
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
diff --git a/code/ATMOSPHERICS/pipes/tank.dm b/code/ATMOSPHERICS/pipes/tank.dm
index c96f4ddf1d..751c9ed607 100644
--- a/code/ATMOSPHERICS/pipes/tank.dm
+++ b/code/ATMOSPHERICS/pipes/tank.dm
@@ -11,6 +11,7 @@
volume = 10000 //in liters, 1 meters by 1 meters by 2 meters ~tweaked it a little to simulate a pressure tank without needing to recode them yet
var/start_pressure = 75*ONE_ATMOSPHERE //Vorestation edit
+ layer = ATMOS_LAYER
level = 1
dir = SOUTH
initialize_directions = SOUTH
diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm
index a044b16c85..ad2962547c 100644
--- a/code/__defines/_planes+layers.dm
+++ b/code/__defines/_planes+layers.dm
@@ -40,10 +40,6 @@ What is the naming convention for planes or layers?
*/
-#define PLANE_ADMIN1 -92 //Purely for shenanigans
-#define PLANE_ADMIN2 -91 //And adminbuse
-#define PLANE_ADMIN3 -90 //And generating salt
-
#define SPACE_PLANE -82 // Reserved for use in space/parallax
#define PARALLAX_PLANE -80 // Reserved for use in space/parallax
@@ -57,8 +53,9 @@ What is the naming convention for planes or layers?
#define SPACE_PLANE -43 // Space turfs themselves
#define PLATING_PLANE -44 // Plating
#define DISPOSAL_LAYER 2.1 // Under objects, even when planeswapped
- #define WIRES_LAYER 2.2 // Under objects, even when planeswapped
- #define PIPES_LAYER 2.3 // Under objects, even when planeswapped
+ #define PIPES_LAYER 2.2 // Under objects, even when planeswapped
+ #define WIRES_LAYER 2.3 // Under objects, even when planeswapped
+ #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 such
@@ -105,7 +102,8 @@ What is the naming convention for planes or layers?
#define HUD_LAYER 20 // Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots)
#define SCREEN_LAYER 22 // Mob HUD/effects layer
-
+
+#define PLANE_ADMIN1 3 //Purely for shenanigans (below lighting)
#define PLANE_PLANETLIGHTING 4 //Lighting on planets
#define PLANE_LIGHTING 5 //Where the lighting (and darkness) lives
#define PLANE_LIGHTING_ABOVE 6 //For glowy eyes etc. that shouldn't be affected by darkness
@@ -127,6 +125,8 @@ What is the naming convention for planes or layers?
#define PLANE_MESONS 30 //Stuff seen with mesons, like open ceilings. This is 30 for downstreams.
+#define PLANE_ADMIN2 33 //Purely for shenanigans (above lighting)
+
//Fullscreen overlays under inventory
#define PLANE_FULLSCREEN 90 //Blindness, mesons, druggy, etc
#define OBFUSCATION_LAYER 5 //Where images covering the view for eyes are put
@@ -143,6 +143,8 @@ What is the naming convention for planes or layers?
#define LAYER_HUD_ABOVE 4 //Things that reside above items (highlights)
#define PLANE_PLAYER_HUD_ITEMS 96 //Separate layer with which to apply colorblindness
+#define PLANE_ADMIN3 99 //Purely for shenanigans (above HUD)
+
//////////////////////////
/atom/proc/hud_layerise()
diff --git a/code/__defines/construction.dm b/code/__defines/construction.dm
index 837ad7ed38..2bae550a22 100644
--- a/code/__defines/construction.dm
+++ b/code/__defines/construction.dm
@@ -28,7 +28,7 @@
#define PIPE_BENDABLE 1 //6 directions: N/S, E/W, N/E, N/W, S/E, S/W
#define PIPE_TRINARY 2 //4 directions: N/E/S, E/S/W, S/W/N, W/N/E
#define PIPE_TRIN_M 3 //8 directions: N->S+E, S->N+E, N->S+W, S->N+W, E->W+S, W->E+S, E->W+N, W->E+N
-#define PIPE_DIRECTIONAL 4 //4 directions: N, S, E, W
+#define PIPE_DIRECTIONAL 4 //4 directions: N, S, E, W
#define PIPE_ONEDIR 5 //1 direction: N/S/E/W
#define PIPE_UNARY_FLIPPABLE 6 //8 directions: N, S, E, W, N-flipped, S-flipped, E-flipped, W-flipped
#define PIPE_TRIN_T 7 //8 directions: N->S+E, S->N+E, N->S+W, S->N+W, E->W+S, W->E+S, E->W+N, W->E+N
@@ -45,6 +45,11 @@
#define PIPING_LAYER_SCRUBBER 3
#define PIPING_LAYER_DEFAULT PIPING_LAYER_REGULAR
+// We offset the layer values of the different pipe types to ensure they look nice
+#define PIPES_SCRUBBER_LAYER (PIPES_LAYER - 0.02)
+#define PIPES_SUPPLY_LAYER (PIPES_LAYER - 0.01)
+#define PIPES_HE_LAYER (PIPES_LAYER + 0.01)
+
// Pipe flags
#define PIPING_ALL_LAYER 1 //intended to connect with all layers, check for all instead of just one.
#define PIPING_ONE_PER_TURF 2 //can only be built if nothing else with this flag is on the tile already.
diff --git a/code/datums/helper_datums/teleport_vr.dm b/code/datums/helper_datums/teleport_vr.dm
index 1cb73d6ad9..eba2570c18 100644
--- a/code/datums/helper_datums/teleport_vr.dm
+++ b/code/datums/helper_datums/teleport_vr.dm
@@ -1,13 +1,17 @@
/datum/teleport/proc/try_televore()
//Destination is in a belly
- if(isbelly(destination.loc))
+ if(isbelly(destination.loc) && isliving(teleatom))
+ var/mob/living/L = teleatom
var/obj/belly/B = destination.loc
-
+
+ if(!L.can_be_drop_prey) //Overloading this as a pref for 'want to be unexpectedly eaten'
+ return FALSE
+
teleatom.forceMove(get_turf(B)) //So we can splash the sound and sparks and everything.
playSpecials(destination,effectout,soundout)
teleatom.forceMove(B)
- return 1
+ return TRUE
//No fun!
- return 0
+ return FALSE
\ No newline at end of file
diff --git a/code/datums/supplypacks/costumes_vr.dm b/code/datums/supplypacks/costumes_vr.dm
new file mode 100644
index 0000000000..fd8921ba77
--- /dev/null
+++ b/code/datums/supplypacks/costumes_vr.dm
@@ -0,0 +1,264 @@
+/datum/supply_packs/costumes/xenowear_vr
+ name = "Xenowear crate"
+ contains = list(
+ /obj/item/clothing/shoes/footwraps,
+ /obj/item/clothing/shoes/boots/jackboots/toeless,
+ /obj/item/clothing/shoes/boots/workboots/toeless,
+ /obj/item/clothing/suit/tajaran/furs,
+ /obj/item/clothing/head/tajaran/scarf,
+ /obj/item/clothing/suit/unathi/robe,
+ /obj/item/clothing/suit/unathi/mantle,
+ /obj/item/clothing/under/permit,
+ /obj/item/clothing/under/vox/vox_casual,
+ /obj/item/clothing/under/vox/vox_robes,
+ /obj/item/clothing/under/harness,
+ /obj/item/clothing/under/skirt/loincloth,
+ /obj/item/clothing/gloves/vox
+ )
+ cost = 100
+ containertype = /obj/structure/closet/crate
+ containername = "Xenowear crate"
+
+/datum/supply_packs/costumes/tesh_smocks_vr
+ name = "Teshari smocks"
+ contains = list(
+ /obj/item/clothing/under/seromi/smock,
+ /obj/item/clothing/under/seromi/smock/rainbow,
+ /obj/item/clothing/under/seromi/smock/red,
+ /obj/item/clothing/under/seromi/smock/white,
+ /obj/item/clothing/under/seromi/smock/yellow
+ )
+ cost = 25
+ containertype = /obj/structure/closet/crate
+ containername = "Teshari smocks crate"
+
+/datum/supply_packs/randomised/costumes/tesh_coats_vr
+ name = "Teshari undercoats"
+ num_contained = 4
+ contains = list(
+ /obj/item/clothing/under/seromi/undercoat/blue_grey,
+ /obj/item/clothing/under/seromi/undercoat/brown_grey,
+ /obj/item/clothing/under/seromi/undercoat/green_grey,
+ /obj/item/clothing/under/seromi/undercoat/lightgrey_grey,
+ /obj/item/clothing/under/seromi/undercoat/orange,
+ /obj/item/clothing/under/seromi/undercoat/orange_grey,
+ /obj/item/clothing/under/seromi/undercoat/pink_grey,
+ /obj/item/clothing/under/seromi/undercoat/purple_grey,
+ /obj/item/clothing/under/seromi/undercoat/rainbow,
+ /obj/item/clothing/under/seromi/undercoat/red_grey,
+ /obj/item/clothing/under/seromi/undercoat/white_grey,
+ /obj/item/clothing/under/seromi/undercoat/yellow_grey
+ )
+ cost = 20
+ containertype = /obj/structure/closet/crate
+ containername = "Teshari undercoats crate"
+
+/datum/supply_packs/randomised/costumes/tesh_coats_b_vr
+ name = "Teshari undercoats (black)"
+ num_contained = 4
+ contains = list(
+ /obj/item/clothing/under/seromi/undercoat/black,
+ /obj/item/clothing/under/seromi/undercoat/black_blue,
+ /obj/item/clothing/under/seromi/undercoat/black_brown,
+ /obj/item/clothing/under/seromi/undercoat/black_green,
+ /obj/item/clothing/under/seromi/undercoat/black_grey,
+ /obj/item/clothing/under/seromi/undercoat/black_lightgrey,
+ /obj/item/clothing/under/seromi/undercoat/black_midgrey,
+ /obj/item/clothing/under/seromi/undercoat/black_orange,
+ /obj/item/clothing/under/seromi/undercoat/black_pink,
+ /obj/item/clothing/under/seromi/undercoat/black_purple,
+ /obj/item/clothing/under/seromi/undercoat/black_red,
+ /obj/item/clothing/under/seromi/undercoat/black_white,
+ /obj/item/clothing/under/seromi/undercoat/black_yellow
+ )
+ cost = 20
+ containertype = /obj/structure/closet/crate
+ containername = "Teshari undercoats crate"
+
+/datum/supply_packs/randomised/costumes/tesh_cloaks_vr
+ name = "Teshari cloaks"
+ num_contained = 4
+ contains = list(
+ /obj/item/clothing/suit/storage/seromi/cloak/blue_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/brown_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/green_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/lightgrey_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/orange,
+ /obj/item/clothing/suit/storage/seromi/cloak/orange_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/pink_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/purple_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/rainbow,
+ /obj/item/clothing/suit/storage/seromi/cloak/red_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/white_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/yellow_grey
+ )
+ cost = 40
+ containertype = /obj/structure/closet/crate
+ containername = "Teshari cloaks crate"
+
+/datum/supply_packs/randomised/costumes/tesh_cloaks_b_vr
+ name = "Teshari cloaks (black)"
+ num_contained = 4
+ contains = list(
+ /obj/item/clothing/suit/storage/seromi/cloak/black,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_blue,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_brown,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_green,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_grey,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_lightgrey,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_midgrey,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_orange,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_pink,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_purple,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_red,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_white,
+ /obj/item/clothing/suit/storage/seromi/cloak/black_yellow
+ )
+ cost = 40
+ containertype = /obj/structure/closet/crate
+ containername = "Teshari cloaks crate"
+
+/datum/supply_packs/costumes/utility_vr
+ name = "Utility uniforms"
+ contains = list(
+ /obj/item/clothing/under/utility,
+ /obj/item/clothing/under/utility/blue,
+ /obj/item/clothing/under/utility/grey
+ )
+ cost = 30
+ containertype = /obj/structure/closet/crate
+ containername = "Utility uniforms crate"
+
+/datum/supply_packs/costumes/skirts_vr
+ name = "Skirts crate"
+ contains = list(
+ /obj/item/clothing/under/skirt,
+ /obj/item/clothing/under/skirt/blue,
+ /obj/item/clothing/under/skirt/denim,
+ /obj/item/clothing/under/skirt/khaki,
+ /obj/item/clothing/under/skirt/outfit,
+ /obj/item/clothing/under/skirt/red,
+ /obj/item/clothing/under/skirt/swept,
+ /obj/item/clothing/under/skirt/outfit/plaid_blue,
+ /obj/item/clothing/under/skirt/outfit/plaid_purple,
+ /obj/item/clothing/under/skirt/outfit/plaid_red
+ )
+ cost = 40
+ containertype = /obj/structure/closet/crate
+ containername = "Skirts crate"
+
+/datum/supply_packs/costumes/varsity_vr
+ name = "Varsity jackets"
+ contains = list(
+ /obj/item/clothing/suit/varsity,
+ /obj/item/clothing/suit/varsity/blue,
+ /obj/item/clothing/suit/varsity/brown,
+ /obj/item/clothing/suit/varsity/green,
+ /obj/item/clothing/suit/varsity/purple,
+ /obj/item/clothing/suit/varsity/red
+ )
+ cost = 60
+ containertype = /obj/structure/closet/crate
+ containername = "Varsity jackets crate"
+
+/datum/supply_packs/randomised/costumes/leathergear_vr
+ name = "Leather gear"
+ num_contained = 5
+ contains = list(
+ /obj/item/clothing/suit/leathercoat,
+ /obj/item/clothing/suit/storage/leather_jacket_alt,
+ /obj/item/clothing/suit/storage/toggle/leather_jacket,
+ /obj/item/clothing/suit/storage/toggle/leather_jacket/sleeveless,
+ /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen,
+ /obj/item/clothing/suit/storage/toggle/leather_jacket/nanotrasen/sleeveless,
+ /obj/item/clothing/under/pants/chaps,
+ /obj/item/clothing/under/pants/chaps/black,
+ /obj/item/clothing/under/harness,
+ /obj/item/clothing/shoes/leather,
+ /obj/item/clothing/shoes/boots/jungle,
+ /obj/item/clothing/shoes/boots/jackboots,
+ /obj/item/clothing/shoes/boots/cowboy,
+ /obj/item/clothing/shoes/boots/cowboy/classic,
+ /obj/item/clothing/shoes/boots/cowboy/snakeskin,
+ /obj/item/clothing/accessory/chaps,
+ /obj/item/clothing/accessory/chaps/black,
+ /obj/item/clothing/accessory/collar/spike,
+ /obj/item/clothing/gloves/fingerless,
+ /obj/item/clothing/gloves/botanic_leather,
+ /obj/item/clothing/head/cowboy_hat,
+ /obj/item/clothing/head/cowboy_hat/black
+ )
+ cost = 50
+ containertype = /obj/structure/closet/crate
+ containername = "Leather gear crate"
+
+/datum/supply_packs/costumes/eyewear_vr
+ name = "Eyewear crate"
+ contains = list(
+ /obj/item/clothing/glasses/eyepatch,
+ /obj/item/clothing/glasses/fakesunglasses,
+ /obj/item/clothing/glasses/fakesunglasses/aviator,
+ /obj/item/clothing/glasses/fluff/science_proper,
+ /obj/item/clothing/glasses/fluff/spiffygogs,
+ /obj/item/clothing/glasses/gglasses,
+ /obj/item/clothing/glasses/monocle,
+ /obj/item/clothing/glasses/regular,
+ /obj/item/clothing/glasses/regular/hipster,
+ /obj/item/clothing/glasses/regular/scanners,
+ /obj/item/clothing/glasses/threedglasses
+ )
+ cost = 50
+ containertype = /obj/structure/closet/crate
+ containername = "Eyewear crate"
+
+/datum/supply_packs/randomised/costumes/gloves_vr
+ name = "Gloves crate"
+ num_contained = 4
+ contains = list(
+ /obj/item/clothing/gloves/black,
+ /obj/item/clothing/gloves/blue,
+ /obj/item/clothing/gloves/botanic_leather,
+ /obj/item/clothing/gloves/brown,
+ /obj/item/clothing/gloves/evening,
+ /obj/item/clothing/gloves/fingerless,
+ /obj/item/clothing/gloves/fyellow,
+ /obj/item/clothing/gloves/green,
+ /obj/item/clothing/gloves/grey,
+ /obj/item/clothing/gloves/light_brown,
+ /obj/item/clothing/gloves/orange,
+ /obj/item/clothing/gloves/purple,
+ /obj/item/clothing/gloves/rainbow,
+ /obj/item/clothing/gloves/red,
+ /obj/item/clothing/gloves/white
+ )
+ cost = 40
+ containertype = /obj/structure/closet/crate
+ containername = "Gloves crate"
+
+/datum/supply_packs/randomised/costumes/boots_vr
+ name = "Boots crate"
+ num_contained = 3
+ contains = list(
+ /obj/item/clothing/shoes/boots/workboots,
+ /obj/item/clothing/shoes/boots/cowboy,
+ /obj/item/clothing/shoes/boots/cowboy/classic,
+ /obj/item/clothing/shoes/boots/cowboy/snakeskin,
+ /obj/item/clothing/shoes/boots/duty,
+ /obj/item/clothing/shoes/boots/jackboots,
+ /obj/item/clothing/shoes/boots/jungle,
+ /obj/item/clothing/shoes/boots/winter
+ )
+ cost = 60
+ containertype = /obj/structure/closet/crate
+ containername = "Boots crate"
+
+/datum/supply_packs/costumes/taurbags
+ name = "Saddlebags crate"
+ contains = list(
+ /obj/item/weapon/storage/backpack/saddlebag_common,
+ /obj/item/weapon/storage/backpack/saddlebag_common/robust,
+ /obj/item/weapon/storage/backpack/saddlebag_common/vest
+ )
+ cost = 60
+ containertype = /obj/structure/closet/crate
+ containername = "Saddlebags crate"
\ No newline at end of file
diff --git a/code/datums/supplypacks/hospitality_vr.dm b/code/datums/supplypacks/hospitality_vr.dm
new file mode 100644
index 0000000000..1f69ef1151
--- /dev/null
+++ b/code/datums/supplypacks/hospitality_vr.dm
@@ -0,0 +1,84 @@
+/datum/supply_packs/randomised/hospitality/burgers_vr
+ num_contained = 5
+ contains = list(
+ /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,
+ /obj/item/weapon/reagent_containers/food/snacks/cheeseburger,
+ /obj/item/weapon/reagent_containers/food/snacks/jellyburger,
+ /obj/item/weapon/reagent_containers/food/snacks/tofuburger,
+ /obj/item/weapon/reagent_containers/food/snacks/fishburger
+ )
+ name = "Burger crate"
+ cost = 25
+ containertype = /obj/structure/closet/crate/freezer
+ containername = "Burger crate"
+/*
+/datum/supply_packs/randomised/hospitality/bakery_vr
+ num_contained = 5
+ contains = list(
+ /obj/item/weapon/reagent_containers/food/snacks/baguette,
+ /obj/item/weapon/reagent_containers/food/snacks/appletart,
+ /obj/item/weapon/reagent_containers/food/snacks/berrymuffin,
+ /obj/item/weapon/reagent_containers/food/snacks/bunbun,
+ /obj/item/weapon/reagent_containers/food/snacks/cherrypie,
+ /obj/item/weapon/reagent_containers/food/snacks/cookie,
+ /obj/item/weapon/reagent_containers/food/snacks/croissant,
+ /obj/item/weapon/reagent_containers/food/snacks/donut/normal,
+ /obj/item/weapon/reagent_containers/food/snacks/donut/jelly,
+ /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly,
+ /obj/item/weapon/reagent_containers/food/snacks/muffin,
+ /obj/item/weapon/reagent_containers/food/snacks/pie,
+ /obj/item/weapon/reagent_containers/food/snacks/plump_pie,
+ /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit,
+ /obj/item/weapon/reagent_containers/food/snacks/poppypretzel,
+ /obj/item/weapon/reagent_containers/food/snacks/sugarcookie,
+ /obj/item/weapon/reagent_containers/food/snacks/waffles
+ )
+ name = "Bakery products crate"
+ cost = 25
+ containertype = /obj/structure/closet/crate/freezer
+ containername = "Bakery products crate"
+
+/datum/supply_packs/randomised/hospitality/cakes_vr
+ num_contained = 2
+ contains = list(
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake,
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake,
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake,
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake,
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake,
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake,
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake,
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake,
+ /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
+ )
+ name = "Cake crate"
+ cost = 100
+ containertype = /obj/structure/closet/crate/freezer
+ containername = "Cake crate"
+
+/datum/supply_packs/randomised/hospitality/mexican_vr
+ num_contained = 5
+ contains = list(
+ /obj/item/weapon/reagent_containers/food/snacks/cheeseburrito,
+ /obj/item/weapon/reagent_containers/food/snacks/enchiladas,
+ /obj/item/weapon/reagent_containers/food/snacks/meatburrito,
+ /obj/item/weapon/reagent_containers/food/snacks/taco
+ )
+ name = "Mexican takeout crate"
+ cost = 50
+ containertype = /obj/structure/closet/crate/freezer
+ containername = "Mexican takeout crate"
+*/
+/datum/supply_packs/randomised/hospitality/asian_vr
+ num_contained = 5
+ contains = list(
+ /obj/item/weapon/reagent_containers/food/snacks/generalschicken,
+ /obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup
+ )
+ name = "Chinese takeout crate"
+ cost = 50
+ containertype = /obj/structure/closet/crate/freezer
+ containername = "Chinese takeout crate"
+
+/datum/supply_packs/randomised/hospitality/pizza
+ cost = 50
\ No newline at end of file
diff --git a/code/datums/supplypacks/recreation_vr.dm b/code/datums/supplypacks/recreation_vr.dm
index e95094428e..8f0d775797 100644
--- a/code/datums/supplypacks/recreation_vr.dm
+++ b/code/datums/supplypacks/recreation_vr.dm
@@ -38,4 +38,33 @@
)
cost = 50
containertype = /obj/structure/closet/crate
- containername = "wolfgirl cosplay crate"
\ No newline at end of file
+ containername = "wolfgirl cosplay crate"
+
+/datum/supply_packs/randomised/recreation/figures_vr
+ name = "Action figures crate"
+ num_contained = 5
+ contains = list(
+ /obj/random/action_figure
+ )
+ cost = 200
+ containertype = /obj/structure/closet/crate
+ containername = "Action figures crate"
+
+/datum/supply_packs/recreation/characters_vr
+ name = "Tabletop miniatures"
+ contains = list(
+ /obj/item/weapon/storage/box/characters
+ )
+ containertype = /obj/structure/closet/crate
+ containername = "Tabletop miniatures crate"
+ cost = 50
+
+/datum/supply_packs/randomised/recreation/plushies_vr
+ name = "Plushies crate"
+ num_contained = 3
+ contains = list(
+ /obj/random/plushie
+ )
+ cost = 60
+ containertype = /obj/structure/closet/crate
+ containername = "Plushies crate"
\ No newline at end of file
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index d4fa56d495..bbecbe5f97 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -282,6 +282,7 @@ area/space/atmosalert()
/area/shuttle/trade
name = "\improper Trade Station"
icon_state = "red"
+ dynamic_lighting = 0
/area/shuttle/trade/centcom
name = "\improper Trade Shuttle CentCom"
diff --git a/code/game/atoms_movable_vr.dm b/code/game/atoms_movable_vr.dm
new file mode 100644
index 0000000000..d529122029
--- /dev/null
+++ b/code/game/atoms_movable_vr.dm
@@ -0,0 +1,2 @@
+/atom/movable/proc/Bump_vr(var/atom/A, yes)
+ return
diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm
index 77ee16063e..84cbb4d904 100644
--- a/code/game/gamemodes/meteor/meteors.dm
+++ b/code/game/gamemodes/meteor/meteors.dm
@@ -140,6 +140,7 @@
SpinAnimation()
/obj/effect/meteor/Bump(atom/A)
+ if(attempt_vr(src,"Bump_vr",list(A))) return //VOREStation Edit - allows meteors to be deflected by baseball bats
if(A)
if(A.handle_meteor_impact(src)) // Used for special behaviour when getting hit specifically by a meteor, like a shield.
ram_turf(get_turf(A))
diff --git a/code/game/gamemodes/meteor/meteors_vr.dm b/code/game/gamemodes/meteor/meteors_vr.dm
new file mode 100644
index 0000000000..6c24416b39
--- /dev/null
+++ b/code/game/gamemodes/meteor/meteors_vr.dm
@@ -0,0 +1,10 @@
+/obj/effect/meteor/Bump_vr(atom/A)//BATTER UP
+ if(istype(A, /mob/living/carbon))
+ var/mob/living/carbon/batter = A
+ var/obj/item/I = batter.get_active_hand()
+ if(!batter.stat && istype(I, /obj/item/weapon/material/twohanded/baseballbat))
+ batter.do_attack_animation(src)
+ batter.visible_message("[batter] deflects [src] with [I]]! Home run!", "You deflect [src] with [I]! Home run!")
+ walk_away(src, batter, 100, 1)
+ return TRUE
+ return
diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index 92004f9afe..84d00eff04 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -1,6 +1,7 @@
/obj/machinery/portable_atmospherics
name = "atmoalter"
use_power = 0
+ layer = OBJ_LAYER // These are mobile, best not be under everything.
var/datum/gas_mixture/air_contents = new
var/obj/machinery/atmospherics/portables_connector/connected_port
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 2f0fce2bd3..bdf4e95fe0 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -271,6 +271,8 @@
/obj/machinery/computer/arcade/battle/emag_act(var/charges, var/mob/user)
if(!emagged)
+ to_chat(user, span("notice","You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Hyper-Lethal Mode."))
+
temp = "If you die in the game, you die for real!"
player_hp = 30
player_mp = 10
@@ -399,18 +401,18 @@
dat += "
You ran out of food and starved."
if(emagged)
user.nutrition = 0 //yeah you pretty hongry
- user << "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor."
+ to_chat(user, span("danger", "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor."))
if(fuel <= 0)
dat += "
You ran out of fuel, and drift, slowly, into a star."
if(emagged)
var/mob/living/M = user
M.adjust_fire_stacks(5)
- M.IgniteMob() //flew into a star, so you're on fire
- user << "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames."
+ M.IgniteMob() //flew into a star, so you're on fire
+ to_chat(user,span("danger", "You feel an immense wave of heat emanate from \the [src]. Your skin bursts into flames."))
dat += "
OK...
"
if(emagged)
- user << "You're never going to make it to Orion..."
+ to_chat(user, span("danger", "You're never going to make it to Orion..."))
user.death()
emagged = 0 //removes the emagged status after you lose
gameStatus = ORION_STATUS_START
@@ -475,20 +477,20 @@
switch(event)
if(ORION_TRAIL_RAIDERS)
if(prob(50))
- usr << "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?"
+ to_chat(usr, span("warning", "You hear battle shouts. The tramping of boots on cold metal. Screams of agony. The rush of venting air. Are you going insane?"))
M.hallucination += 30
else
- usr << "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..."
+ to_chat(usr, span("danger", "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there..."))
M.take_organ_damage(25)
if(ORION_TRAIL_ILLNESS)
var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS
if(severity == 1)
- M << "You suddenly feel slightly nauseous." //got off lucky
+ to_chat(M, span("warning", "You suddenly feel slightly nauseous.")) //got off lucky
if(severity == 2)
- usr << "You suddenly feel extremely nauseous and hunch over until it passes."
+ to_chat(usr, span("warning", "You suddenly feel extremely nauseous and hunch over until it passes."))
M.Stun(3)
if(severity >= 3) //you didn't pray hard enough
- M << "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit."
+ to_chat(M, span("warning", "An overpowering wave of nausea consumes over you. You hunch over, your stomach's contents preparing for a spectacular exit."))
spawn(30)
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
@@ -499,12 +501,12 @@
src.visible_message("A sudden gust of powerful wind slams \the [M] into the floor!", "You hear a large fwooshing sound, followed by a bang.")
M.take_organ_damage(15)
else
- M << "A violent gale blows past you, and you barely manage to stay standing!"
+ to_chat(M, span("warning", "A violent gale blows past you, and you barely manage to stay standing!"))
if(ORION_TRAIL_COLLISION) //by far the most damaging event
if(prob(90) && !hull)
var/turf/simulated/floor/F = src.loc
F.ChangeTurf(/turf/space)
- src.visible_message("Something slams into the floor around \the [src], exposing it to space!", "You hear something crack and break.")
+ src.visible_message(span("danger", "Something slams into the floor around \the [src], exposing it to space!"), "You hear something crack and break.")
else
src.visible_message("Something slams into the floor around \the [src] - luckily, it didn't get through!", "You hear something crack.")
if(ORION_TRAIL_MALFUNCTION)
@@ -573,9 +575,9 @@
event()
if(emagged) //has to be here because otherwise it doesn't work
src.show_message("\The [src] states, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRIFIED.","You hear something say, 'YOU ARE EXPERIENCING A BLACKHOLE. BE TERRFIED'")
- usr << "Something draws you closer and closer to the machine."
+ to_chat(usr, span("warning", "Something draws you closer and closer to the machine."))
sleep(10)
- usr << "This is really starting to hurt!"
+ to_chat(usr, span("danger", "This is really starting to hurt!"))
var i; //spawning a literal blackhole would be fun, but a bit disruptive.
for(i=0;i<4;i++)
var/mob/living/L = usr
@@ -1001,12 +1003,12 @@
/obj/machinery/computer/arcade/orion_trail/emag_act(mob/user)
if(!emagged)
- user << "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode."
+ to_chat(user, span("notice", "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode."))
name = "The Orion Trail: Realism Edition"
desc = "Learn how our ancestors got to Orion, and try not to die in the process!"
newgame()
emagged = 1
-
+ return 1
/obj/item/weapon/orion_ship
name = "model settler ship"
@@ -1021,9 +1023,9 @@
if(!(in_range(user, src)))
return
if(!active)
- user << "There's a little switch on the bottom. It's flipped down."
+ to_chat(user, span("notice", "There's a little switch on the bottom. It's flipped down."))
else
- user << "There's a little switch on the bottom. It's flipped up."
+ to_chat(user, span("notice", "There's a little switch on the bottom. It's flipped up."))
/obj/item/weapon/orion_ship/attack_self(mob/user)
if(active)
@@ -1032,17 +1034,17 @@
message_admins("[key_name_admin(usr)] primed an explosive Orion ship for detonation.")
log_game("[key_name(usr)] primed an explosive Orion ship for detonation.")
- user << "You flip the switch on the underside of [src]."
+ to_chat(user, span("warning", "You flip the switch on the underside of [src]."))
active = 1
- src.visible_message("[src] softly beeps and whirs to life!")
+ src.visible_message(span("notice", "[src] softly beeps and whirs to life!"))
src.audible_message("\The [src] says, 'This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.'")
sleep(20)
- src.visible_message("[src] begins to vibrate...")
+ src.visible_message(span("warning", "[src] begins to vibrate..."))
src.audible_message("\The [src] says, 'Uh, Port? Having some issues with our reactor, could you check it out? Over.'")
sleep(30)
src.audible_message("\The [src] says, 'Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-'")
sleep(3.6)
- src.visible_message("[src] explodes!")
+ src.visible_message(span("danger", "[src] explodes!"))
explosion(src.loc, 1,2,4)
qdel(src)
diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm
index 5ce605afcc..b9bd4a6855 100644
--- a/code/game/machinery/newscaster.dm
+++ b/code/game/machinery/newscaster.dm
@@ -935,20 +935,11 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/machinery/newscaster/proc/scan_user(mob/living/user as mob)
if(istype(user,/mob/living/carbon/human)) //User is a human
var/mob/living/carbon/human/human_user = user
- if(human_user.wear_id) //Newscaster scans you
- if(istype(human_user.wear_id, /obj/item/device/pda)) //autorecognition, woo!
- var/obj/item/device/pda/P = human_user.wear_id
- if(P.id)
- scanned_user = GetNameAndAssignmentFromId(P.id)
- else
- scanned_user = "Unknown"
- else if(istype(human_user.wear_id, /obj/item/weapon/card/id))
- var/obj/item/weapon/card/id/ID = human_user.wear_id
- scanned_user = GetNameAndAssignmentFromId(ID)
- else
- scanned_user ="Unknown"
+ var/obj/item/weapon/card/id/I = human_user.GetIdCard()
+ if(I)
+ scanned_user = GetNameAndAssignmentFromId(I)
else
- scanned_user ="Unknown"
+ scanned_user = "Unknown"
else
var/mob/living/silicon/ai_user = user
scanned_user = "[ai_user.name] ([ai_user.job])"
diff --git a/code/game/machinery/painter_vr.dm b/code/game/machinery/painter_vr.dm
new file mode 100644
index 0000000000..4130194012
--- /dev/null
+++ b/code/game/machinery/painter_vr.dm
@@ -0,0 +1,109 @@
+/obj/machinery/gear_painter
+ name = "Color Mate"
+ desc = "A machine to give your apparel a fresh new color! Recommended to use with white items for best results."
+ icon = 'icons/obj/vending_vr.dmi'
+ icon_state = "colormate"
+ density = 1
+ anchored = 1
+ var/list/processing = list()
+ var/activecolor = "#FFFFFF"
+ var/list/allowed_types = list(
+ /obj/item/clothing,
+ /obj/item/weapon/storage/backpack,
+ /obj/item/weapon/storage/belt
+ )
+
+/obj/machinery/gear_painter/update_icon()
+ if(panel_open)
+ icon_state = "colormate_open"
+ else if(inoperable())
+ icon_state = "colormate_off"
+ else if(processing.len)
+ icon_state = "colormate_active"
+ else
+ icon_state = "colormate"
+
+/obj/machinery/gear_painter/Destroy()
+ for(var/atom/movable/O in processing)
+ O.forceMove(drop_location())
+ processing.Cut()
+ return ..()
+
+/obj/machinery/gear_painter/attackby(obj/item/W as obj, mob/user as mob)
+ if(processing.len)
+ to_chat(user, "The machine is already loaded.")
+ return
+ if(default_deconstruction_screwdriver(user, W))
+ return
+ if(default_deconstruction_crowbar(user, W))
+ return
+ if(default_unfasten_wrench(user, W, 40))
+ return
+
+ if(is_type_in_list(W, allowed_types) && !inoperable())
+ user.visible_message("[user] inserts \the [W] into the Color Mate receptable.")
+ user.drop_from_inventory(W)
+ W.forceMove(src)
+ processing |= W
+ else
+ ..()
+ update_icon()
+
+/obj/machinery/gear_painter/attack_hand(mob/user as mob)
+ if(..())
+ return
+ interact(user)
+
+/obj/machinery/gear_painter/interact(mob/user as mob)
+ if(inoperable())
+ return
+ user.set_machine(src)
+ var/dat = "Color Mate Control Panel
"
+ if(!processing.len)
+ dat += "No item inserted."
+ else
+ for(var/atom/movable/O in processing)
+ dat += "Item inserted: [O]
"
+ dat += "Select new color.
"
+ dat += "Color: ⚫"
+ dat += "Apply new color.
"
+ dat += "Remove paintjob.
"
+ dat += "Eject item.
"
+
+ var/datum/browser/menu = new(user, "colormate","Color Mate Control Panel", 400, 600, src)
+ menu.set_content(dat)
+ menu.open()
+ return
+
+/obj/machinery/gear_painter/Topic(href, href_list)
+ if(..())
+ return
+
+ usr.set_machine(src)
+ add_fingerprint(usr)
+
+ if(href_list["close"])
+ return
+
+ if(href_list["select"])
+ var/newcolor = input(usr, "Choose a color.", "", activecolor) as color|null
+ if(newcolor)
+ activecolor = newcolor
+
+ if(href_list["paint"])
+ for(var/atom/movable/O in processing)
+ O.color = activecolor
+ playsound(src.loc, 'sound/effects/spray3.ogg', 50, 1)
+
+ if(href_list["clear"])
+ for(var/atom/movable/O in processing)
+ O.color = initial(O.color)
+ playsound(src.loc, 'sound/effects/spray3.ogg', 50, 1)
+
+ if(href_list["eject"])
+ for(var/atom/movable/O in processing)
+ O.forceMove(drop_location())
+ processing.Cut()
+
+ update_icon()
+ updateUsrDialog()
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index b66e311d49..13a966f71b 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -862,7 +862,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,
/obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/syringe = 12,
/obj/item/device/healthanalyzer = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2,
- /obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3, /obj/item/stack/medical/splint = 2,
+ /obj/item/stack/medical/advanced/bruise_pack = 6, /obj/item/stack/medical/advanced/ointment = 6, /obj/item/stack/medical/splint = 4,
/obj/item/weapon/storage/pill_bottle/carbon = 2)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/stox = 4,/obj/item/weapon/reagent_containers/pill/antitox = 6)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm
index 2ad51ca887..f1a99a6090 100644
--- a/code/game/objects/items/crayons.dm
+++ b/code/game/objects/items/crayons.dm
@@ -46,11 +46,11 @@
if(colour != "#FFFFFF" && shadeColour != "#000000")
colour = "#FFFFFF"
shadeColour = "#000000"
- to_chat(usr,"You will now draw in white and black with this crayon.")
+ to_chat(user, "You will now draw in white and black with this crayon.")
else
colour = "#000000"
shadeColour = "#FFFFFF"
- to_chat(usr,"You will now draw in black and white with this crayon.")
+ to_chat(user, "You will now draw in black and white with this crayon.")
return
/obj/item/weapon/pen/crayon/rainbow
@@ -72,22 +72,22 @@
switch(drawtype)
if("letter")
drawtype = input("Choose the letter.", "Crayon scribbles") in list("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z")
- to_chat(usr,"You start drawing a letter on the [target.name].")
+ to_chat(user, "You start drawing a letter on the [target.name].")
if("graffiti")
- to_chat(usr,"You start drawing graffiti on the [target.name].")
+ to_chat(user, "You start drawing graffiti on the [target.name].")
if("rune")
- to_chat(usr,"You start drawing a rune on the [target.name].")
+ to_chat(user, "You start drawing a rune on the [target.name].")
if("arrow")
drawtype = input("Choose the arrow.", "Crayon scribbles") in list("left", "right", "up", "down")
- to_chat(usr,"You start drawing an arrow on the [target.name].")
+ to_chat(user, "You start drawing an arrow on the [target.name].")
if(instant || do_after(user, 50))
new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype)
- to_chat(usr,"You finish drawing.")
+ to_chat(user, "You finish drawing.")
target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on.
if(uses)
uses--
if(!uses)
- to_chat(usr,"You used up your crayon!")
+ to_chat(user, "You used up your crayon!")
qdel(src)
return
@@ -158,11 +158,11 @@
if(colour != "#FFFFFF" && shadeColour != "#000000")
colour = "#FFFFFF"
shadeColour = "#000000"
- to_chat(usr,"You will now draw in white and black with this marker.")
+ to_chat(user, "You will now draw in white and black with this marker.")
else
colour = "#000000"
shadeColour = "#FFFFFF"
- to_chat(usr,"You will now draw in black and white with this marker.")
+ to_chat(user, "You will now draw in black and white with this marker.")
return
/obj/item/weapon/pen/crayon/marker/rainbow
@@ -179,7 +179,7 @@
/obj/item/weapon/pen/crayon/marker/attack(mob/M as mob, mob/user as mob)
if(M == user)
- to_chat(usr,"You take a bite of the marker and swallow it.")
+ to_chat(user, "You take a bite of the marker and swallow it.")
user.nutrition += 1
user.reagents.add_reagent("marker_ink",6)
if(uses)
diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm
index eb62b5d674..7a665c0038 100644
--- a/code/game/objects/items/stacks/medical.dm
+++ b/code/game/objects/items/stacks/medical.dm
@@ -111,6 +111,7 @@
user.visible_message("\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].", \
"You place a bandaid over \a [W.desc] on [M]'s [affecting.name]." )
W.bandage()
+ // W.disinfect() // VOREStation - Tech1 should not disinfect
used++
affecting.update_damages()
if(used == amount)
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 4d567019ae..cee423a627 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -138,18 +138,18 @@
/obj/item/weapon/storage/backpack/dufflebag/syndie
name = "black dufflebag"
- desc = "A large dufflebag for holding extra tactical supplies."
+ desc = "A large dufflebag for holding extra tactical supplies. This one appears to be made out of lighter material than usual."
icon_state = "duffle_syndie"
slowdown = 0
/obj/item/weapon/storage/backpack/dufflebag/syndie/med
name = "medical dufflebag"
- desc = "A large dufflebag for holding extra tactical medical supplies."
+ desc = "A large dufflebag for holding extra tactical medical supplies. This one appears to be made out of lighter material than usual."
icon_state = "duffle_syndiemed"
/obj/item/weapon/storage/backpack/dufflebag/syndie/ammo
name = "ammunition dufflebag"
- desc = "A large dufflebag for holding extra weapons ammunition and supplies."
+ desc = "A large dufflebag for holding extra weapons ammunition and supplies. This one appears to be made out of lighter material than usual."
icon_state = "duffle_syndieammo"
/obj/item/weapon/storage/backpack/dufflebag/captain
@@ -417,4 +417,4 @@
else
H.visible_message("\The [src] decides not to unpack \the [src]!", \
"You decide not to unpack \the [src]!")
- return
\ No newline at end of file
+ return
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 762720e390..c1de372dc1 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -107,10 +107,10 @@
if(istype(W,/obj/item/weapon/pen/crayon))
switch(W:colourName)
if("mime")
- to_chat(usr,"This crayon is too sad to be contained in this box.")
+ to_chat(user, "This crayon is too sad to be contained in this box.")
return
if("rainbow")
- to_chat(usr,"This crayon is too powerful to be contained in this box.")
+ to_chat(user, "This crayon is too powerful to be contained in this box.")
return
..()
@@ -149,10 +149,10 @@
if(istype(W,/obj/item/weapon/pen/crayon/marker))
switch(W:colourName)
if("mime")
- to_chat(usr,"This marker is too depressing to be contained in this box.")
+ to_chat(user, "This marker is too depressing to be contained in this box.")
return
if("rainbow")
- to_chat(usr,"This marker is too childish to be contained in this box.")
+ to_chat(user, "This marker is too childish to be contained in this box.")
return
..()
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index 02be9fdfaf..cb376787ab 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -10,6 +10,9 @@
/obj/item/weapon/card,
/obj/item/clothing/mask/smokable/cigarette/,
/obj/item/device/flashlight/pen,
+ /obj/item/device/tape,
+ /obj/item/weapon/cartridge,
+ /obj/item/device/encryptionkey,
/obj/item/seeds,
/obj/item/stack/medical,
/obj/item/weapon/coin,
@@ -18,13 +21,21 @@
/obj/item/weapon/implanter,
/obj/item/weapon/flame/lighter,
/obj/item/weapon/flame/match,
+ /obj/item/weapon/forensics,
+ /obj/item/weapon/glass_extra,
+ /obj/item/weapon/haircomb,
+ /obj/item/weapon/hand,
+ /obj/item/weapon/key,
+ /obj/item/weapon/lipstick,
/obj/item/weapon/paper,
/obj/item/weapon/pen,
/obj/item/weapon/photo,
/obj/item/weapon/reagent_containers/dropper,
+ /obj/item/weapon/sample,
/obj/item/weapon/screwdriver,
/obj/item/weapon/stamp,
- /obj/item/clothing/accessory/permit
+ /obj/item/clothing/accessory/permit,
+ /obj/item/clothing/accessory/badge
)
slot_flags = SLOT_ID
diff --git a/code/game/turfs/flooring/flooring_premade.dm b/code/game/turfs/flooring/flooring_premade.dm
index a83e200b8d..73c4053bfa 100644
--- a/code/game/turfs/flooring/flooring_premade.dm
+++ b/code/game/turfs/flooring/flooring_premade.dm
@@ -68,12 +68,26 @@
icon_state = "wood"
initial_flooring = /decl/flooring/wood
+/turf/simulated/floor/wood/broken
+ icon_state = "wood_broken0" // This gets changed when spawned.
+
+/turf/simulated/floor/wood/broken/initialize()
+ break_tile()
+ return ..()
+
/turf/simulated/floor/wood/sif
name = "alien wooden floor"
icon = 'icons/turf/flooring/wood.dmi'
icon_state = "sifwood"
initial_flooring = /decl/flooring/wood/sif
+/turf/simulated/floor/wood/sif/broken
+ icon_state = "sifwood_broken0" // This gets changed when spawned.
+
+/turf/simulated/floor/wood/sif/broken/initialize()
+ break_tile()
+ return ..()
+
/turf/simulated/floor/grass
name = "grass patch"
icon = 'icons/turf/flooring/grass.dmi'
diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm
index 3c4856cf00..dc49c0d893 100644
--- a/code/game/turfs/simulated/floor_types.dm
+++ b/code/game/turfs/simulated/floor_types.dm
@@ -105,6 +105,7 @@
if(landed_holder && !interior_corner)
var/mutable_appearance/landed_on = new(landed_holder)
landed_on.layer = FLOAT_LAYER //Not turf
+ landed_on.plane = FLOAT_PLANE //Not turf
us.underlays = list(landed_on)
appearance = us
return
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 12c00aa708..772c1886a8 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -6,6 +6,10 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
var/previous_rights = 0
+ //Clear profile access
+ for(var/A in world.GetConfig("admin"))
+ world.SetConfig("APP/admin", A, null)
+
//load text from file
var/list/Lines = file2list("config/admin_ranks.txt")
diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm
index 4f0cba95c4..2d74b43433 100644
--- a/code/modules/admin/holder2.dm
+++ b/code/modules/admin/holder2.dm
@@ -23,6 +23,8 @@ var/list/admin_datums = list()
rank = initial_rank
rights = initial_rights
admin_datums[ckey] = src
+ if(rights & R_DEBUG) //grant profile access
+ world.SetConfig("APP/admin", ckey, "role=admin")
/datum/admins/proc/associate(client/C)
if(istype(C))
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index d4b09bfc21..bf7952ea61 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -425,6 +425,10 @@ Traitors and the like can also be revived with the previous role mostly intact.
//For logging later
var/admin = key_name_admin(src)
var/player_key = picked_client.key
+ //VOREStation Add - Needed for persistence
+ var/picked_ckey = picked_client.ckey
+ var/picked_slot = picked_client.prefs.default_slot
+ //VOREStation Add End
var/mob/living/carbon/human/new_character
var/spawnloc
@@ -471,6 +475,12 @@ Traitors and the like can also be revived with the previous role mostly intact.
antag_data.add_antagonist(new_character.mind)
antag_data.place_mob(new_character)
+ //VOREStation Add - Required for persistence
+ if(new_character.mind)
+ new_character.mind.loaded_from_ckey = picked_ckey
+ new_character.mind.loaded_from_slot = picked_slot
+ //VOREStation Add End
+
//If desired, apply equipment.
if(equipment)
if(charjob)
diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm b/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm
index 56ea7626b0..c6c51f5bbd 100644
--- a/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_gloves_vr.dm
@@ -1,10 +1,10 @@
/datum/gear/gloves/goldring
display_name = "wedding ring, gold"
- path = /obj/item/clothing/gloves/weddingring
+ path = /obj/item/clothing/gloves/ring/wedding
/datum/gear/gloves/silverring
display_name = "wedding ring, silver"
- path = /obj/item/clothing/gloves/weddingring/silver
+ path = /obj/item/clothing/gloves/ring/wedding/silver
/datum/gear/gloves/colored
display_name = "gloves, colorable"
diff --git a/code/modules/clothing/gloves/miscellaneous_vr.dm b/code/modules/clothing/gloves/miscellaneous_vr.dm
index aee86bff27..9507f70046 100644
--- a/code/modules/clothing/gloves/miscellaneous_vr.dm
+++ b/code/modules/clothing/gloves/miscellaneous_vr.dm
@@ -1,20 +1,3 @@
-/obj/item/clothing/gloves/weddingring
- name = "golden wedding ring"
- desc = "For showing your devotion to another person. It has a golden glimmer to it."
- icon = 'icons/obj/clothing/gloves_vr.dmi'
- icon_state = "wedring_g"
- item_state = "wedring_g"
- var/partnername = ""
-
-/obj/item/clothing/gloves/weddingring/attack_self(mob/user)
- partnername = copytext(sanitize(input(user, "Would you like to change the holoengraving on the ring?", "Name your betrothed", "Bae") as null|text),1,MAX_NAME_LEN)
- name = "[initial(name)] - [partnername]"
-
-/obj/item/clothing/gloves/weddingring/silver
- name = "silver wedding ring"
- icon_state = "wedring_s"
- item_state = "wedring_s"
-
/obj/item/clothing/gloves/color
desc = "A pair of gloves, they don't look special in any way."
item_state_slots = list(slot_r_hand_str = "white", slot_l_hand_str = "white")
diff --git a/code/modules/clothing/rings/rings_vr.dm b/code/modules/clothing/rings/rings_vr.dm
new file mode 100644
index 0000000000..56c72cc7c5
--- /dev/null
+++ b/code/modules/clothing/rings/rings_vr.dm
@@ -0,0 +1,17 @@
+/obj/item/clothing/gloves/ring/wedding
+ name = "golden wedding ring"
+ desc = "For showing your devotion to another person. It has a golden glimmer to it."
+ icon = 'icons/obj/clothing/gloves_vr.dmi'
+ icon_state = "wedring_g"
+ item_state = "wedring_g"
+ var/partnername = ""
+
+/obj/item/clothing/gloves/ring/wedding/attack_self(mob/user)
+ partnername = copytext(sanitize(input(user, "Would you like to change the holoengraving on the ring?", "Name your spouse", "Bae") as null|text),1,MAX_NAME_LEN)
+ name = "[initial(name)] - [partnername]"
+
+/obj/item/clothing/gloves/ring/wedding/silver
+ name = "silver wedding ring"
+ desc = "For showing your devotion to another person. It has a silver glimmer to it."
+ icon_state = "wedring_s"
+ item_state = "wedring_s"
diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm
index e50c563aed..67c82dcf79 100644
--- a/code/modules/clothing/under/accessories/accessory.dm
+++ b/code/modules/clothing/under/accessories/accessory.dm
@@ -26,7 +26,9 @@
if(icon_override)
if("[tmp_icon_state]_tie" in icon_states(icon_override))
tmp_icon_state = "[tmp_icon_state]_tie"
- inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH)
+ inv_overlay = image(icon = icon_override, icon_state = tmp_icon_state, dir = SOUTH)
+ else
+ inv_overlay = image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = tmp_icon_state, dir = SOUTH)
return inv_overlay
/obj/item/clothing/accessory/proc/get_mob_overlay()
@@ -387,4 +389,4 @@
/obj/item/clothing/accessory/bracelet/material/glass/New(var/newloc)
..(newloc, "glass")
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm
index 5ffc507888..c6f9503a0a 100644
--- a/code/modules/maps/tg/map_template.dm
+++ b/code/modules/maps/tg/map_template.dm
@@ -13,6 +13,7 @@ var/list/global/map_templates = list()
/datum/map_template
var/name = "Default Template Name"
var/desc = "Some text should go here. Maybe."
+ var/template_group = null // If this is set, no more than one template in the same group will be spawned, per submap seeding.
var/width = 0
var/height = 0
var/mappath = null
@@ -67,7 +68,7 @@ var/list/global/map_templates = list()
admin_notice("Initializing newly created atom(s) in submap.", R_DEBUG)
SSatoms.InitializeAtoms(atoms)
-
+
admin_notice("Initializing atmos pipenets and machinery in submap.", R_DEBUG)
SSmachines.setup_atmos_machinery(atmos_machines)
@@ -190,6 +191,7 @@ var/list/global/map_templates = list()
CHECK_TICK
var/list/loaded_submap_names = list()
+ var/list/template_groups_used = list() // Used to avoid spawning three seperate versions of the same PoI.
// Now lets start choosing some.
while(budget > 0 && overall_sanity > 0)
@@ -210,6 +212,14 @@ var/list/global/map_templates = list()
// Can we afford it?
if(chosen_template.cost > budget)
+ priority_submaps -= chosen_template
+ potential_submaps -= chosen_template
+ continue
+
+ // Did we already place down a very similar submap?
+ if(chosen_template.template_group && chosen_template.template_group in template_groups_used)
+ priority_submaps -= chosen_template
+ potential_submaps -= chosen_template
continue
// If so, try to place it.
@@ -242,14 +252,21 @@ var/list/global/map_templates = list()
CHECK_TICK
+ // For pretty maploading statistics.
if(loaded_submap_names[chosen_template.name])
loaded_submap_names[chosen_template.name] += 1
else
loaded_submap_names[chosen_template.name] = 1
+ // To avoid two 'related' similar submaps existing at the same time.
+ if(chosen_template.template_group)
+ template_groups_used += chosen_template.template_group
+
+ // To deduct the cost.
if(chosen_template.cost >= 0)
budget -= chosen_template.cost
+ // Remove the submap from our options.
if(chosen_template in priority_submaps) // Always remove priority submaps.
priority_submaps -= chosen_template
else if(!chosen_template.allow_duplicates)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 93a293dec6..b7af06c595 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -399,12 +399,9 @@
var/modified = 0
var/perpname = "wot"
- if(wear_id)
- var/obj/item/weapon/card/id/I = wear_id.GetID()
- if(I)
- perpname = I.registered_name
- else
- perpname = name
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
perpname = name
@@ -438,14 +435,11 @@
var/perpname = "wot"
var/read = 0
- if(wear_id)
- if(istype(wear_id,/obj/item/weapon/card/id))
- perpname = wear_id:registered_name
- else if(istype(wear_id,/obj/item/device/pda))
- var/obj/item/device/pda/tempPda = wear_id
- perpname = tempPda.owner
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
- perpname = src.name
+ perpname = name
for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.security)
@@ -468,14 +462,11 @@
var/perpname = "wot"
var/read = 0
- if(wear_id)
- if(istype(wear_id,/obj/item/weapon/card/id))
- perpname = wear_id:registered_name
- else if(istype(wear_id,/obj/item/device/pda))
- var/obj/item/device/pda/tempPda = wear_id
- perpname = tempPda.owner
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
- perpname = src.name
+ perpname = name
for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.security)
@@ -496,14 +487,11 @@
if (href_list["secrecordadd"])
if(hasHUD(usr,"security"))
var/perpname = "wot"
- if(wear_id)
- if(istype(wear_id,/obj/item/weapon/card/id))
- perpname = wear_id:registered_name
- else if(istype(wear_id,/obj/item/device/pda))
- var/obj/item/device/pda/tempPda = wear_id
- perpname = tempPda.owner
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
- perpname = src.name
+ perpname = name
for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.security)
@@ -527,14 +515,11 @@
var/perpname = "wot"
var/modified = 0
- if(wear_id)
- if(istype(wear_id,/obj/item/weapon/card/id))
- perpname = wear_id:registered_name
- else if(istype(wear_id,/obj/item/device/pda))
- var/obj/item/device/pda/tempPda = wear_id
- perpname = tempPda.owner
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
- perpname = src.name
+ perpname = name
for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname)
@@ -566,14 +551,11 @@
var/perpname = "wot"
var/read = 0
- if(wear_id)
- if(istype(wear_id,/obj/item/weapon/card/id))
- perpname = wear_id:registered_name
- else if(istype(wear_id,/obj/item/device/pda))
- var/obj/item/device/pda/tempPda = wear_id
- perpname = tempPda.owner
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
- perpname = src.name
+ perpname = name
for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.medical)
@@ -597,14 +579,11 @@
var/perpname = "wot"
var/read = 0
- if(wear_id)
- if(istype(wear_id,/obj/item/weapon/card/id))
- perpname = wear_id:registered_name
- else if(istype(wear_id,/obj/item/device/pda))
- var/obj/item/device/pda/tempPda = wear_id
- perpname = tempPda.owner
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
- perpname = src.name
+ perpname = name
for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.medical)
@@ -625,14 +604,11 @@
if (href_list["medrecordadd"])
if(hasHUD(usr,"medical"))
var/perpname = "wot"
- if(wear_id)
- if(istype(wear_id,/obj/item/weapon/card/id))
- perpname = wear_id:registered_name
- else if(istype(wear_id,/obj/item/device/pda))
- var/obj/item/device/pda/tempPda = wear_id
- perpname = tempPda.owner
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
- perpname = src.name
+ perpname = name
for (var/datum/data/record/E in data_core.general)
if (E.fields["name"] == perpname)
for (var/datum/data/record/R in data_core.medical)
@@ -1184,7 +1160,7 @@
if(!(gender in species.genders))
gender = species.genders[1]
- icon_state = lowertext(species.name)
+ //icon_state = lowertext(species.name) //Necessary?
species.create_organs(src)
@@ -1615,12 +1591,9 @@
if(hasHUD(user,"security"))
//Try to find their name
var/perpname
- if(wear_id)
- var/obj/item/weapon/card/id/I = wear_id.GetID()
- if(I)
- perpname = I.registered_name
- else
- perpname = name
+ var/obj/item/weapon/card/id/I = GetIdCard()
+ if(I)
+ perpname = I.registered_name
else
perpname = name
//Try to find their record
diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
index 692100d15f..610315275a 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm
@@ -54,7 +54,6 @@
humanform = H
updatehealth()
refactory = locate() in humanform.internal_organs
- verbs |= /mob/living/proc/nano_set_size
verbs |= /mob/living/proc/ventcrawl
verbs |= /mob/living/proc/hide
else
diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm
index 6240c4a44d..7b7304b846 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_powers.dm
@@ -196,10 +196,14 @@
var/substance = matstack.material.name
var/actually_added = refactory.add_stored_material(substance,howmuch*matstack.perunit)
matstack.use(Ceiling(actually_added/matstack.perunit))
- if(actually_added < howmuch)
+ if(actually_added && actually_added < howmuch)
to_chat(src,"Your refactory module is now full, so only [actually_added] units were stored.")
- else
+ visible_message(src,"[src] nibbles some of the [substance] right off the stack!")
+ else if(actually_added)
to_chat(src,"You store [actually_added] units of [substance].")
+ visible_message(src,"[src] devours some of the [substance] right off the stack!")
+ else
+ to_chat(src,"You're completely capped out on [substance]!")
////
// Blob Form
@@ -247,26 +251,28 @@
////
// Change size
////
-/mob/living/proc/nano_set_size()
+/mob/living/carbon/human/proc/nano_set_size()
set name = "Adjust Volume"
set category = "Abilities"
set hidden = TRUE
+ var/mob/living/user = temporary_form || src
+
var/obj/item/organ/internal/nano/refactory/refactory = nano_get_refactory()
//Missing the organ that does this
if(!istype(refactory))
- to_chat(src,"You don't have a working refactory module!")
+ to_chat(user,"You don't have a working refactory module!")
return
var/nagmessage = "Adjust your mass to be a size between 25 to 200%. Up-sizing consumes metal, downsizing returns metal."
- var/new_size = input(src, nagmessage, "Pick a Size", size_multiplier*100) as num|null
+ var/new_size = input(user, nagmessage, "Pick a Size", user.size_multiplier*100) as num|null
if(!new_size || !IsInRange(new_size,25,200))
return
var/size_factor = new_size/100
//Will be: -1.75 for 200->25, and 1.75 for 25->200
- var/sizediff = size_factor - size_multiplier
+ var/sizediff = size_factor - user.size_multiplier
//Negative if shrinking, positive if growing
//Will be (PLSC*2)*-1.75 to 1.75
@@ -276,17 +282,19 @@
//Sizing up
if(cost > 0)
if(refactory.use_stored_material("steel",cost))
- resize(size_factor)
+ user.resize(size_factor)
else
- to_chat(src,"That size change would cost [cost] steel, which you don't have.")
+ to_chat(user,"That size change would cost [cost] steel, which you don't have.")
return
//Sizing down (or not at all)
if(cost <= 0)
cost = abs(cost)
var/actually_added = refactory.add_stored_material("steel",cost)
- resize(size_factor)
+ user.resize(size_factor)
if(actually_added != cost)
- to_chat(src,"Unfortunately, [cost-actually_added] steel was lost due to lack of storage space.")
+ to_chat(user,"Unfortunately, [cost-actually_added] steel was lost due to lack of storage space.")
+
+ user.visible_message("Black mist swirls around [user] as they change size.")
/// /// /// A helper to reuse
/mob/living/proc/nano_get_refactory(obj/item/organ/internal/nano/refactory/R)
@@ -350,7 +358,7 @@
ability_name = "Change Volume"
desc = "Alter your size by consuming steel to produce additional nanites, or regain steel by reducing your size and reclaiming them."
icon_state = "volume"
- to_call = /mob/living/proc/nano_set_size
+ to_call = /mob/living/carbon/human/proc/nano_set_size
/obj/effect/protean_ability/reform_limb
ability_name = "Ref - Single Limb"
diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm
index 80d62c1946..a37a0d921d 100644
--- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm
+++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm
@@ -86,12 +86,13 @@
/mob/living/carbon/human/proc/nano_partswap,
/mob/living/carbon/human/proc/nano_metalnom,
/mob/living/carbon/human/proc/nano_blobform,
- /mob/living/proc/nano_set_size,
+ /mob/living/carbon/human/proc/nano_set_size,
/mob/living/carbon/human/proc/nano_change_fitting, //These verbs are displayed normally,
/mob/living/carbon/human/proc/shapeshifter_select_hair,
/mob/living/carbon/human/proc/shapeshifter_select_hair_colors,
/mob/living/carbon/human/proc/shapeshifter_select_colour,
- /mob/living/carbon/human/proc/shapeshifter_select_eye_colour
+ /mob/living/carbon/human/proc/shapeshifter_select_eye_colour,
+ /mob/living/carbon/human/proc/shapeshifter_select_gender
)
var/global/list/abilities = list()
@@ -204,7 +205,7 @@
// Various modifiers
/datum/modifier/protean
stacks = MODIFIER_STACK_FORBID
- var/material_use = 100
+ var/material_use = 150
var/material_name = DEFAULT_WALL_MATERIAL
/datum/modifier/protean/on_applied()
@@ -217,7 +218,7 @@
if(holder.temporary_form)
to_chat(holder.temporary_form,on_expired_text)
-/datum/modifier/protean/tick()
+/datum/modifier/protean/check_if_valid()
//No origin set
if(!istype(origin))
expire()
@@ -238,7 +239,6 @@
on_created_text = "You feel yourself accelerate, the metallic hydrogen increasing your speed temporarily."
on_expired_text = "Your refactory finishes consuming the metallic hydrogen, and you return to normal speed."
- material_use = 100
material_name = "mhydrogen"
slowdown = -1
@@ -250,7 +250,6 @@
on_created_text = "You feel yourself become nearly impervious to physical attacks as plasteel nanites are made."
on_expired_text = "Your refactory finishes consuming the plasteel, and you return to your normal nanites."
- material_use = 100
material_name = "plasteel"
incoming_brute_damage_percent = 0.5
@@ -262,7 +261,6 @@
on_created_text = "You feel yourself become more reflective, able to resist heat and fire better for a time."
on_expired_text = "Your refactory finishes consuming the diamond, and you return to your normal nanites."
- material_use = 100
material_name = "diamond"
incoming_fire_damage_percent = 0.2
@@ -274,7 +272,6 @@
on_created_text = "You feel new nanites being produced from your stockpile of steel, healing you slowly."
on_expired_text = "Your steel supply has either run out, or is no longer needed, and your healing stops."
- material_use = 100
material_name = "steel"
/datum/modifier/protean/steel/tick()
@@ -303,4 +300,4 @@
src.name += " ([new_name])"
desc += "\nVALID THROUGH END OF: [time2text(world.timeofday, "Month") +" "+ num2text(text2num(time2text(world.timeofday, "YYYY"))+544)]\nREGISTRANT: [new_name]"
-#undef DAM_SCALE_FACTOR
\ No newline at end of file
+#undef DAM_SCALE_FACTOR
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 27b6d55ba8..6425081167 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -6,11 +6,12 @@
if (transforming)
return
+ handle_modifiers() //VOREStation Edit - Needs to be done even if in nullspace.
if(!loc)
return
var/datum/gas_mixture/environment = loc.return_air()
- handle_modifiers() // Do this early since it might affect other things later.
+ //handle_modifiers() // Do this early since it might affect other things later. //VOREStation Edit
handle_light()
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 5c256e235a..2e0db163de 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1060,7 +1060,7 @@ default behaviour is:
if(lying != lying_prev)
lying_prev = lying
update_transform()
-
+
return canmove
// Adds overlays for specific modifiers.
@@ -1088,10 +1088,10 @@ default behaviour is:
/mob/living/proc/is_sentient()
return TRUE
-/* //VOREStation Edit. We have a better system in place.
+
/mob/living/update_transform()
// First, get the correct size.
- var/desired_scale = icon_scale
+ var/desired_scale = size_multiplier //VOREStation edit
for(var/datum/modifier/M in modifiers)
if(!isnull(M.icon_scale_percent))
desired_scale *= M.icon_scale_percent
@@ -1101,8 +1101,8 @@ default behaviour is:
M.Scale(desired_scale)
M.Translate(0, 16*(desired_scale-1))
src.transform = M
- animate(src, transform = M, time = 10)
-*/ //VOREStation Edit
+ //animate(src, transform = M, time = 10) //VOREStation edit
+
// This handles setting the client's color variable, which makes everything look a specific color.
// This proc is here so it can be called without needing to check if the client exists, or if the client relogs.
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 450580fbb4..4c6d9312c4 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -314,6 +314,12 @@
else
ma.icon_state = initial(icon_state)
+ //VOREStation edit start
+ var/vore_icon_state = update_vore_icon()
+ if(vore_icon_state)
+ ma.icon_state = vore_icon_state
+ //VOREStation edit end
+
if(has_hands)
if(r_hand_sprite)
ma.overlays += r_hand_sprite
diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
index 90d899fa08..faae913d44 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
@@ -44,21 +44,21 @@
var/obj/belly/B = belly
for(var/mob/living/M in B)
new_fullness += M.size_multiplier
- new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry.
+ new_fullness = round(new_fullness, 1) // Because intervals of 0.25 are going to make sprite artists cry.
vore_fullness = min(vore_capacity, new_fullness)
-/mob/living/simple_animal/update_icon()
- . = ..() // Call sideways "parent" to decide state
- if(vore_active)
- update_fullness()
- if(!vore_fullness)
- return
- else if(icon_state == icon_living && (vore_icons & SA_ICON_LIVING))
- icon_state = "[icon_state]-[vore_fullness]"
- else if(icon_state == icon_dead && (vore_icons & SA_ICON_DEAD))
- icon_state = "[icon_state]-[vore_fullness]"
- else if(icon_state == icon_rest && (vore_icons & SA_ICON_REST))
- icon_state = "[icon_state]-[vore_fullness]"
+/mob/living/simple_animal/proc/update_vore_icon()
+ if(!vore_active)
+ return 0
+ update_fullness()
+ if(!vore_fullness)
+ return 0
+ else if((stat == CONSCIOUS) && (!icon_rest || !resting || !incapacitated(INCAPACITATION_DISABLED)) && (vore_icons & SA_ICON_LIVING))
+ return "[icon_living]-[vore_fullness]"
+ else if(stat >= DEAD && (vore_icons & SA_ICON_DEAD))
+ return "[icon_dead]-[vore_fullness]"
+ else if(((stat == UNCONSCIOUS) || resting || incapacitated(INCAPACITATION_DISABLED) ) && icon_rest && (vore_icons & SA_ICON_REST))
+ return "[icon_rest]-[vore_fullness]"
/mob/living/simple_animal/proc/will_eat(var/mob/living/M)
if(client) //You do this yourself, dick!
diff --git a/code/modules/mob/living/simple_animal/slime/ai.dm b/code/modules/mob/living/simple_animal/slime/ai.dm
index b35ebb6e03..3a8718c997 100644
--- a/code/modules/mob/living/simple_animal/slime/ai.dm
+++ b/code/modules/mob/living/simple_animal/slime/ai.dm
@@ -5,9 +5,46 @@
return
..()
+/mob/living/simple_animal/slime/Found(mob/living/L)
+ if(isliving(L))
+ if(SA_attackable(L))
+ if(L.faction == faction && !attack_same)
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too.
+ return H // Monkeys are always food.
+ else
+ return
+
+ if(L in friends)
+ return
+
+ if(istype(L, /mob/living/simple_animal/slime))
+ var/mob/living/simple_animal/slime/buddy = L
+ if(buddy.slime_color == src.slime_color || discipline || unity || buddy.unity)
+ return // Don't hurt same colored slimes.
+ else
+ return buddy //do hurt others
+
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too.
+ return H // Monkeys are always food.
+
+ if(issilicon(L) || isbot(L))
+ if(discipline && !rabid)
+ return // We're a good slime. For now at least.
+ return
+ return
+
/mob/living/simple_animal/slime/special_target_check(mob/living/L)
- if(L.faction == faction && !attack_same)
- return FALSE
+ if(L.faction == faction && !attack_same && !istype(L, /mob/living/simple_animal/slime))
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(istype(H.species, /datum/species/monkey)) // istype() is so they'll eat the alien monkeys too.
+ return TRUE // Monkeys are always food.
+ else
+ return FALSE
if(L in friends)
return FALSE
diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm
index 21e7c62820..691b880574 100644
--- a/code/modules/mob/living/simple_animal/slime/life.dm
+++ b/code/modules/mob/living/simple_animal/slime/life.dm
@@ -112,6 +112,11 @@
if(!speaker.client)
return
+ //Are all slimes being referred to?
+ var/mass_order = 0
+ if(findtext(message, "slimes"))
+ mass_order = 1
+
// Say hello back.
if(findtext(message, "hello") || findtext(message, "hi") || findtext(message, "greetings"))
delayed_say(pick("Hello...", "Hi..."), speaker)
@@ -165,13 +170,14 @@
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(special_target_check(L))
- delayed_say("Okay... I attack \the [L]...", speaker)
- LoseFollow()
- set_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)
+ if(!(mass_order && line == "slime")) //don't think random other slimes are target
+ if(special_target_check(L))
+ delayed_say("Okay... I attack \the [L]...", speaker)
+ LoseFollow()
+ set_target(L, 1)
+ 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)
diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm
index 93b1f0e9c6..219074dc6c 100644
--- a/code/modules/mob/living/simple_animal/slime/slime.dm
+++ b/code/modules/mob/living/simple_animal/slime/slime.dm
@@ -356,10 +356,13 @@
baby.mutation_chance = mutation_chance
baby.power_charge = round(power_charge / 4)
baby.resentment = max(resentment - 1, 0)
- baby.discipline = max(discipline - 1, 0)
- baby.obedience = max(obedience - 1, 0)
- baby.unity = unity
+ if(!istype(baby, /mob/living/simple_animal/slime/light_pink))
+ baby.discipline = max(discipline - 1, 0)
+ baby.obedience = max(obedience - 1, 0)
+ if(!istype(baby, /mob/living/simple_animal/slime/rainbow))
+ baby.unity = unity
baby.faction = faction
+ baby.attack_same = attack_same
baby.friends = friends.Copy()
if(rabid)
baby.enrage()
diff --git a/code/modules/mob/living/simple_animal/slime/subtypes.dm b/code/modules/mob/living/simple_animal/slime/subtypes.dm
index 486c04866f..d30bdf0d7d 100644
--- a/code/modules/mob/living/simple_animal/slime/subtypes.dm
+++ b/code/modules/mob/living/simple_animal/slime/subtypes.dm
@@ -120,7 +120,7 @@
/mob/living/simple_animal/slime/dark_purple
desc = "This slime produces ever-coveted phoron. Risky to handle but very much worth it."
- color = "#CC23FF"
+ color = "#660088"
slime_color = "dark purple"
coretype = /obj/item/slime_extract/dark_purple
reagent_injected = "phoron"
diff --git a/code/modules/mob/living/simple_animal/vore/badboi.dm b/code/modules/mob/living/simple_animal/vore/badboi.dm
index 11ede1c105..735d593891 100644
--- a/code/modules/mob/living/simple_animal/vore/badboi.dm
+++ b/code/modules/mob/living/simple_animal/vore/badboi.dm
@@ -51,7 +51,7 @@
vore_active = TRUE
vore_capacity = 1
vore_pounce_chance = 30
- vore_icons = SA_ICON_LIVING
+ vore_icons = SA_ICON_LIVING | SA_ICON_REST
vore_stomach_name = "fuel processor"
vore_stomach_flavor = "You have ended up in the fuel processor of this corrupted machine. This place was definitely not designed with safety and comfort in mind. The heated and cramped surroundings oozing potent fluids all over your form, eager to do nothing less than breaking you apart to fuel its rampage for the next few days... hours... minutes? Oh dear..."
diff --git a/code/modules/mob/living/simple_animal/vore/otie.dm b/code/modules/mob/living/simple_animal/vore/otie.dm
index 26057fc87b..766ed7a4ae 100644
--- a/code/modules/mob/living/simple_animal/vore/otie.dm
+++ b/code/modules/mob/living/simple_animal/vore/otie.dm
@@ -56,7 +56,7 @@
vore_active = 1
vore_capacity = 1
vore_pounce_chance = 20
- vore_icons = SA_ICON_LIVING
+ vore_icons = SA_ICON_LIVING | SA_ICON_REST
/mob/living/simple_animal/otie/feral //gets the pet2tame feature. starts out hostile tho so get gamblin'
name = "mutated feral otie"
diff --git a/code/modules/mob/living/simple_animal/vore/panther.dm b/code/modules/mob/living/simple_animal/vore/panther.dm
index 3e723e68fc..454ef4d927 100644
--- a/code/modules/mob/living/simple_animal/vore/panther.dm
+++ b/code/modules/mob/living/simple_animal/vore/panther.dm
@@ -32,4 +32,4 @@
vore_active = 1
vore_capacity = 2
vore_pounce_chance = 10
- vore_icons = SA_ICON_LIVING
+ vore_icons = SA_ICON_LIVING | SA_ICON_REST
diff --git a/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm b/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm
index c71cc1d36e..a8ce697d64 100644
--- a/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm
+++ b/code/modules/mob/living/simple_animal/vore/zz_vore_overrides.dm
@@ -65,7 +65,7 @@
icon_state = "queen_s"
icon_living = "queen_s"
icon_dead = "queen_dead"
- vore_icons = SA_ICON_LIVING
+ vore_icons = SA_ICON_LIVING | SA_ICON_REST
old_x = -16
old_y = 0
default_pixel_x = -16
@@ -77,6 +77,7 @@
/mob/living/simple_animal/hostile/alien/sentinel/praetorian
icon = 'icons/mob/vore64x64.dmi'
+ vore_icons = SA_ICON_LIVING | SA_ICON_REST
/mob/living/simple_animal/hostile/alien/queen/empress/mother
vore_icons = 0 // NO VORE SPRITES
@@ -226,11 +227,20 @@
/mob/living/simple_animal/hostile/carp/holodeck
vore_icons = 0 // NO VORE SPRITES
+ vore_digest_chance = 0
+ vore_absorb_chance = 0
+
// Override stuff for holodeck carp to make them not digest when set to safe!
+/mob/living/simple_animal/hostile/carp/holodeck/init_vore()
+ . = ..()
+ var/safe = (faction == "neutral")
+ for(var/belly in vore_organs)
+ var/obj/belly/B = belly
+ B.digest_mode = safe ? DM_HOLD : vore_default_mode
+
/mob/living/simple_animal/hostile/carp/holodeck/set_safety(var/safe)
. = ..()
for(var/belly in vore_organs)
var/obj/belly/B = belly
B.digest_mode = safe ? DM_HOLD : vore_default_mode
- B.digestchance = safe ? 0 : vore_digest_chance
- B.absorbchance = safe ? 0 : vore_absorb_chance
+
\ No newline at end of file
diff --git a/code/modules/multiz/pipes.dm b/code/modules/multiz/pipes.dm
index 8d03c8f862..e2796ccff8 100644
--- a/code/modules/multiz/pipes.dm
+++ b/code/modules/multiz/pipes.dm
@@ -201,7 +201,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/scrubbers
desc = "A scrubbers pipe segment to connect upwards."
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -211,7 +211,7 @@ obj/machinery/atmospherics/pipe/zpipe/up/supply
desc = "A supply pipe segment to connect upwards."
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
@@ -221,7 +221,7 @@ obj/machinery/atmospherics/pipe/zpipe/down/scrubbers
desc = "A scrubbers pipe segment to connect downwards."
connect_types = CONNECT_TYPE_SCRUBBER
piping_layer = PIPING_LAYER_SCRUBBER
- layer = 2.38
+ layer = PIPES_SCRUBBER_LAYER
icon_connect_type = "-scrubbers"
color = PIPE_COLOR_RED
@@ -231,6 +231,6 @@ obj/machinery/atmospherics/pipe/zpipe/down/supply
desc = "A supply pipe segment to connect downwards."
connect_types = CONNECT_TYPE_SUPPLY
piping_layer = PIPING_LAYER_SUPPLY
- layer = 2.39
+ layer = PIPES_SUPPLY_LAYER
icon_connect_type = "-supply"
color = PIPE_COLOR_BLUE
diff --git a/code/modules/nifsoft/software/01_vision.dm b/code/modules/nifsoft/software/01_vision.dm
index 2ce33c1c88..b0006888bd 100644
--- a/code/modules/nifsoft/software/01_vision.dm
+++ b/code/modules/nifsoft/software/01_vision.dm
@@ -102,7 +102,7 @@
a_drain = 0.1
access = access_engine
tick_flags = NIF_ACTIVETICK
- planes_enabled = list(VIS_FULLBRIGHT)
+ planes_enabled = list(VIS_FULLBRIGHT, VIS_MESONS)
vision_flags = (NIF_V_MESONS)
incompatible_with = list(NIF_MATERIAL,NIF_THERMALS,NIF_NIGHTVIS)
diff --git a/code/modules/organs/subtypes/diona.dm b/code/modules/organs/subtypes/diona.dm
index cdb963e35b..c0e4e60c98 100644
--- a/code/modules/organs/subtypes/diona.dm
+++ b/code/modules/organs/subtypes/diona.dm
@@ -50,7 +50,7 @@
/obj/item/organ/external/diona/arm
name = "left upper tendril"
- organ_tag = "l_arm"
+ organ_tag = BP_L_ARM
icon_name = "l_arm"
max_damage = 30
min_broken_damage = 20
@@ -61,13 +61,13 @@
/obj/item/organ/external/diona/arm/right
name = "right upper tendril"
- organ_tag = "r_arm"
+ organ_tag = BP_R_ARM
icon_name = "r_arm"
body_part = ARM_RIGHT
/obj/item/organ/external/diona/leg
name = "left lower tendril"
- organ_tag = "l_leg"
+ organ_tag = BP_L_LEG
icon_name = "l_leg"
max_damage = 30
min_broken_damage = 20
@@ -79,50 +79,50 @@
/obj/item/organ/external/diona/leg/right
name = "right lower tendril"
- organ_tag = "r_leg"
+ organ_tag = BP_R_LEG
icon_name = "r_leg"
body_part = LEG_RIGHT
icon_position = RIGHT
/obj/item/organ/external/diona/foot
name = "left foot"
- organ_tag = "l_foot"
+ organ_tag = BP_L_FOOT
icon_name = "l_foot"
max_damage = 25
min_broken_damage = 10
w_class = ITEMSIZE_SMALL
body_part = FOOT_LEFT
icon_position = LEFT
- parent_organ = "l_leg"
+ parent_organ = BP_R_LEG
can_stand = 1
/obj/item/organ/external/diona/foot/right
name = "right foot"
- organ_tag = "r_foot"
+ organ_tag = BP_R_FOOT
icon_name = "r_foot"
body_part = FOOT_RIGHT
icon_position = RIGHT
- parent_organ = "r_leg"
+ parent_organ = BP_R_LEG
joint = "right ankle"
amputation_point = "right ankle"
/obj/item/organ/external/diona/hand
name = "left grasper"
- organ_tag = "l_hand"
+ organ_tag = BP_L_HAND
icon_name = "l_hand"
max_damage = 25
min_broken_damage = 15
w_class = ITEMSIZE_SMALL
body_part = HAND_LEFT
- parent_organ = "l_arm"
+ parent_organ = BP_L_ARM
can_grasp = 1
/obj/item/organ/external/diona/hand/right
name = "right grasper"
- organ_tag = "r_hand"
+ organ_tag = BP_R_HAND
icon_name = "r_hand"
body_part = HAND_RIGHT
- parent_organ = "r_arm"
+ parent_organ = BP_R_ARM
//DIONA ORGANS.
/obj/item/organ/external/diona/removed()
@@ -157,26 +157,32 @@
/obj/item/organ/internal/diona/strata
name = "neural strata"
parent_organ = BP_TORSO
+ organ_tag = O_STRATA
/obj/item/organ/internal/diona/bladder
name = "gas bladder"
parent_organ = BP_HEAD
+ organ_tag = O_GBLADDER
/obj/item/organ/internal/diona/polyp
name = "polyp segment"
parent_organ = BP_GROIN
+ organ_tag = O_POLYP
/obj/item/organ/internal/diona/ligament
name = "anchoring ligament"
parent_organ = BP_GROIN
+ organ_tag = O_ANCHOR
/obj/item/organ/internal/diona/node
name = "receptor node"
parent_organ = BP_HEAD
+ organ_tag = O_RESPONSE
/obj/item/organ/internal/diona/nutrients
name = O_NUTRIENT
parent_organ = BP_TORSO
+ organ_tag = O_NUTRIENT
// These are different to the standard diona organs as they have a purpose in other
// species (absorbing radiation and light respectively)
@@ -191,8 +197,8 @@
/obj/item/organ/internal/diona/node
name = "response node"
- parent_organ = "head"
- organ_tag = "receptor node"
+ parent_organ = BP_HEAD
+ organ_tag = O_RESPONSE
icon = 'icons/mob/alien.dmi'
icon_state = "claw"
diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm
index 35cdc6a51a..449d7c5137 100644
--- a/code/modules/organs/subtypes/standard.dm
+++ b/code/modules/organs/subtypes/standard.dm
@@ -72,7 +72,7 @@
owner.custom_pain("A jolt of pain surges through your [name]!",1)
/obj/item/organ/external/arm
- organ_tag = "l_arm"
+ organ_tag = BP_L_ARM
name = "left arm"
icon_name = "l_arm"
max_damage = 80
@@ -98,13 +98,13 @@
if (. >= 2)
if(prob(.))
owner.custom_pain("A jolt of pain surges through your [name]!",1)
- if(organ_tag == "l_arm") //Specific level 2 'feature
+ if(organ_tag == BP_L_ARM) //Specific level 2 'feature
owner.drop_l_hand()
- else if(organ_tag == "r_arm")
+ else if(organ_tag == BP_R_ARM)
owner.drop_r_hand()
/obj/item/organ/external/arm/right
- organ_tag = "r_arm"
+ organ_tag = BP_R_ARM
name = "right arm"
icon_name = "r_arm"
body_part = ARM_RIGHT
@@ -112,7 +112,7 @@
amputation_point = "right shoulder"
/obj/item/organ/external/leg
- organ_tag = "l_leg"
+ organ_tag = BP_L_LEG
name = "left leg"
icon_name = "l_leg"
max_damage = 80
@@ -142,7 +142,7 @@
owner.Weaken(5)
/obj/item/organ/external/leg/right
- organ_tag = "r_leg"
+ organ_tag = BP_R_LEG
name = "right leg"
icon_name = "r_leg"
body_part = LEG_RIGHT
@@ -151,7 +151,7 @@
amputation_point = "right hip"
/obj/item/organ/external/foot
- organ_tag = "l_foot"
+ organ_tag = BP_L_FOOT
name = "left foot"
icon_name = "l_foot"
max_damage = 50
@@ -159,7 +159,7 @@
w_class = ITEMSIZE_SMALL
body_part = FOOT_LEFT
icon_position = LEFT
- parent_organ = "l_leg"
+ parent_organ = BP_L_LEG
joint = "left ankle"
amputation_point = "left ankle"
can_stand = 1
@@ -186,24 +186,24 @@
owner.Weaken(5)
/obj/item/organ/external/foot/right
- organ_tag = "r_foot"
+ organ_tag = BP_R_FOOT
name = "right foot"
icon_name = "r_foot"
body_part = FOOT_RIGHT
icon_position = RIGHT
- parent_organ = "r_leg"
+ parent_organ = BP_R_LEG
joint = "right ankle"
amputation_point = "right ankle"
/obj/item/organ/external/hand
- organ_tag = "l_hand"
+ organ_tag = BP_L_HAND
name = "left hand"
icon_name = "l_hand"
max_damage = 50
min_broken_damage = 15
w_class = ITEMSIZE_SMALL
body_part = HAND_LEFT
- parent_organ = "l_arm"
+ parent_organ = BP_L_ARM
joint = "left wrist"
amputation_point = "left wrist"
can_grasp = 1
@@ -229,17 +229,17 @@
if (. >= 2)
if(prob(.))
owner.custom_pain("A jolt of pain surges through your [name]!",1)
- if(organ_tag == "l_hand") //Specific level 2 'feature
+ if(organ_tag == BP_L_HAND) //Specific level 2 'feature
owner.drop_l_hand()
- else if(organ_tag == "r_hand")
+ else if(organ_tag == BP_R_HAND)
owner.drop_r_hand()
/obj/item/organ/external/hand/right
- organ_tag = "r_hand"
+ organ_tag = BP_R_HAND
name = "right hand"
icon_name = "r_hand"
body_part = HAND_RIGHT
- parent_organ = "r_arm"
+ parent_organ = BP_R_ARM
joint = "right wrist"
amputation_point = "right wrist"
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 853705abed..5ad1e727da 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -53,7 +53,8 @@ var/list/possible_cable_coil_colours = list(
icon_state = "0-1"
var/d1 = 0
var/d2 = 1
- layer = 2.44 //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4
+ plane = PLATING_PLANE
+ layer = WIRES_LAYER
color = COLOR_RED
var/obj/machinery/power/breakerbox/breaker_box
diff --git a/code/modules/power/cable_ender.dm b/code/modules/power/cable_ender.dm
index 3276855271..d6975091ea 100644
--- a/code/modules/power/cable_ender.dm
+++ b/code/modules/power/cable_ender.dm
@@ -8,7 +8,8 @@
icon = 'icons/obj/power_cond_heavy.dmi'
name = "large power cable"
desc = "This cable is tough. It cannot be cut with simple hand tools."
- layer = 2.39 //Just below pipes, which are at 2.4
+ plane = PLATING_PLANE
+ layer = PIPES_LAYER - 0.05 //Just below pipes
color = null
unacidable = 1
var/id = null
diff --git a/code/modules/power/cable_heavyduty.dm b/code/modules/power/cable_heavyduty.dm
index 99c91a6b74..a286517965 100644
--- a/code/modules/power/cable_heavyduty.dm
+++ b/code/modules/power/cable_heavyduty.dm
@@ -7,7 +7,8 @@
icon = 'icons/obj/power_cond_heavy.dmi'
name = "large power cable"
desc = "This cable is tough. It cannot be cut with simple hand tools."
- layer = 2.39 //Just below pipes, which are at 2.4
+ plane = PLATING_PLANE
+ layer = PIPES_LAYER - 0.05 //Just below pipes
color = null
/obj/structure/cable/heavyduty/attackby(obj/item/W, mob/user)
diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm
index 0e9cf95eb6..94cf0ab21e 100644
--- a/code/modules/projectiles/ammunition/magazines.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -50,6 +50,7 @@
/obj/item/ammo_magazine/s38/rubber
name = "speedloader (.38 rubber)"
+ icon_state = "T38"
ammo_type = /obj/item/ammo_casing/a38r
/obj/item/ammo_magazine/s38/emp
@@ -493,6 +494,23 @@
max_ammo = 9
multiple_sprites = 1
+/obj/item/ammo_magazine/s44
+ name = "speedloader (.44)"
+ icon_state = "44"
+ ammo_type = /obj/item/ammo_casing/a44
+ matter = list(DEFAULT_WALL_MATERIAL = 1260) //metal costs are very roughly based around 1 .45 casing = 75 metal
+ caliber = ".44"
+ max_ammo = 6
+ multiple_sprites = 1
+
+/obj/item/ammo_magazine/s44/empty
+ initial_ammo = 0
+
+/obj/item/ammo_magazine/s44/rubber
+ name = "speedloader (.44 rubber)"
+ icon_state = "R44"
+ ammo_type = /obj/item/ammo_casing/a44r
+
///////// 7.62mm /////////
/obj/item/ammo_magazine/m762
diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm
index 330e11d89b..028d1cac1e 100644
--- a/code/modules/projectiles/ammunition/rounds.dm
+++ b/code/modules/projectiles/ammunition/rounds.dm
@@ -59,6 +59,12 @@
caliber = ".44"
projectile_type = /obj/item/projectile/bullet/pistol/strong
+/obj/item/ammo_casing/a44r
+ icon_state = "r-casing"
+ desc = "A .44 rubber bullet casing."
+ caliber = ".44"
+ projectile_type = /obj/item/projectile/bullet/pistol/rubber/strong
+
/*
* .75 (aka Gyrojet Rockets, aka admin abuse)
*/
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index aa3faa7468..55eefade82 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -58,6 +58,7 @@
var/move_delay = 1
var/fire_sound = 'sound/weapons/Gunshot.ogg'
var/fire_sound_text = "gunshot"
+ var/fire_anim = null
var/recoil = 0 //screen shake
var/silenced = 0
var/muzzle_flash = 3
@@ -492,7 +493,7 @@
if(!(target && target.loc))
target = targloc
//pointblank = 0
-
+
var/target_for_log
if(ismob(target))
target_for_log = target
@@ -533,6 +534,9 @@
//called after successfully firing
/obj/item/weapon/gun/proc/handle_post_fire(mob/user, atom/target, var/pointblank=0, var/reflex=0)
+ if(fire_anim)
+ flick(fire_anim, src)
+
if(silenced)
if(reflex)
user.visible_message(
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index b33cf11950..481530856f 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -118,7 +118,6 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
return 1
-
// Blade Runner pistol.
/obj/item/weapon/gun/projectile/revolver/deckard
name = "\improper Deckard .38"
@@ -259,3 +258,24 @@ obj/item/weapon/gun/projectile/revolver/detective45/verb/rename_gun()
to_chat(user, "\The [src] has a secondary barrel loaded with \a [to_print]")
else
to_chat(user, "\The [src] has a secondary barrel that is empty.")
+
+
+//Ported from Bay
+/obj/item/weapon/gun/projectile/revolver/webley
+ name = "service revolver"
+ desc = "A rugged top break revolver based on the Webley Mk. VI model, with modern improvements. Uses .44 magnum rounds."
+ icon_state = "webley2"
+ item_state = "webley2"
+ caliber = ".44"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
+ handle_casings = CYCLE_CASINGS
+ max_shells = 6
+ ammo_type = /obj/item/ammo_casing/a44
+
+/obj/item/weapon/gun/projectile/revolver/webley/auto
+ name = "autorevolver"
+ icon_state = "mosley"
+ desc = "A shiny Mosley Autococker automatic revolver, with black accents. Marketed as the 'Revolver for the Modern Era'. Uses .44 magnum rounds."
+ fire_delay = 5.7 //Autorevolver. Also synced with the animation
+ fire_anim = "mosley_fire"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index d47e729898..36a93a89b0 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -147,6 +147,14 @@
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
damage = 60
+/obj/item/projectile/bullet/pistol/rubber/strong //"rubber" bullets for revolvers and matebas
+ fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
+ damage = 10
+ agony = 60
+ embed_chance = 0
+ sharp = 0
+ check_armour = "melee"
+
/obj/item/projectile/bullet/pistol/rubber //"rubber" bullets
name = "rubber bullet"
damage = 5
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index fdae51e647..07c8429bfb 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -663,6 +663,7 @@
var/dpdir = 0 // bitmask of pipe directions
dir = 0 // dir will contain dominant direction for junction pipes
var/health = 10 // health points 0-10
+ plane = PLATING_PLANE
layer = DISPOSAL_LAYER // slightly lower than wires and other pipes
var/base_icon_state // initial icon state on map
var/sortType = ""
diff --git a/code/modules/research/designs_vr.dm b/code/modules/research/designs_vr.dm
index b2f21d58c4..de86ebf872 100644
--- a/code/modules/research/designs_vr.dm
+++ b/code/modules/research/designs_vr.dm
@@ -1,11 +1,3 @@
-/datum/design/excavationdrill
- name = "Excavation Drill"
- desc = "Advanced archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The silver tip is adjustable from 1 to 30 cm."
- id = "excavationdrill"
- req_tech = list(TECH_MATERIAL = 4, TECH_POWER = 3, TECH_ENGINEERING = 3, TECH_BLUESPACE = 3) //They were never used before. Now they'll be used. Hopefully.
- build_type = PROTOLATHE
- materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 1000, "silver" = 1000)
- build_path = /obj/item/weapon/pickaxe/excavationdrill
/* Make language great again
/datum/design/item/implant/language
name = "Language implant"
diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/vore/appearance/sprite_accessories_vr.dm
index ecc8dc8ef3..1c8b9c8f12 100644
--- a/code/modules/vore/appearance/sprite_accessories_vr.dm
+++ b/code/modules/vore/appearance/sprite_accessories_vr.dm
@@ -976,7 +976,8 @@
/datum/sprite_accessory/tail/special/seromitailfeathered
name = "seromi tail w/ feathers"
desc = ""
- icon_state = "seromitail_feathers_s"
+ icon_state = "seromitail_s"
+ extra_overlay = "seromitail_feathers_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm
index 466380b828..44c392eb43 100644
--- a/code/modules/vore/fluffstuff/custom_items_vr.dm
+++ b/code/modules/vore/fluffstuff/custom_items_vr.dm
@@ -1448,24 +1448,27 @@
//Destination beacon vore checking
var/atom/real_dest = dT
- var/televored = FALSE //UR GONNA GET VORED
var/atom/real_loc = destination.loc
if(isbelly(real_loc))
real_dest = real_loc
- televored = TRUE
if(isliving(real_loc))
var/mob/living/L = real_loc
if(L.vore_selected)
real_dest = L.vore_selected
- televored = TRUE
else if(L.vore_organs.len)
real_dest = pick(L.vore_organs)
- televored = TRUE
- //Televore fluff stuff
- if(televored)
- to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!")
+ //Confirm televore
+ var/televored = FALSE
+ if(isbelly(real_dest))
+ var/obj/belly/B = real_dest
+ if(!target.can_be_drop_prey && B.owner != user)
+ to_chat(target,"\The [src] narrowly avoids teleporting you right into \a [lowertext(real_dest.name)]!")
+ real_dest = dT //Nevermind!
+ else
+ televored = TRUE
+ to_chat(target,"\The [src] teleports you right into \a [lowertext(real_dest.name)]!")
//Phase-out effect
phase_out(target,get_turf(target))
@@ -1496,7 +1499,7 @@
ready = 1
update_icon()
- logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [televored ? "(Belly: [lowertext(real_loc.name)])" : null]"
+ logged_events["[world.time]"] = "[user] teleported [target] to [real_dest] [televored ? "(Belly: [lowertext(real_dest.name)])" : null]"
/obj/item/device/perfect_tele/proc/phase_out(var/mob/M,var/turf/T)
diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm
index 28f398ff99..9e957955b8 100644
--- a/code/modules/vore/resizing/resize_vr.dm
+++ b/code/modules/vore/resizing/resize_vr.dm
@@ -64,7 +64,7 @@ var/const/RESIZE_A_SMALLTINY = (RESIZE_SMALL + RESIZE_TINY) / 2
/mob/living/proc/resize(var/new_size, var/animate = TRUE)
if(size_multiplier == new_size)
return 1
-
+
size_multiplier = new_size //Change size_multiplier so that other items can interact with them
if(animate)
var/change = new_size - size_multiplier
diff --git a/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm b/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm
index ffdb7dc2c9..3a1ff22b1c 100644
--- a/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm
+++ b/code/modules/xenoarcheaology/tools/tools_pickaxe_vr.dm
@@ -21,47 +21,3 @@
/obj/item/weapon/pickaxe/hand
icon = 'icons/obj/xenoarchaeology_vr.dmi'
-
-/obj/item/weapon/pickaxe/excavationdrill
- name = "excavation drill"
- icon = 'icons/obj/xenoarchaeology_vr.dmi'
- icon_state = "excavationdrill0"
- item_state = "syringe_0"
- excavation_amount = 15
- digspeed = 30
- desc = "Advanced archaeological drill combining ultrasonic excitation and bluespace manipulation to provide extreme precision. The diamond tip is adjustable from 1 to 30 cms."
- drill_sound = 'sound/weapons/thudswoosh.ogg'
- drill_verb = "drilling"
- force = 15.0
- w_class = ITEMSIZE_SMALL
- attack_verb = list("drilled")
- hitsound = 'sound/weapons/circsawhit.ogg'
-
-/obj/item/weapon/pickaxe/excavationdrill/attack_self(mob/user as mob)
- var/depth = input("Put the desired depth (1-30 centimeters).", "Set Depth", 30) as num
- if(depth>30 || depth<1)
- user << "Invalid depth."
- return
- excavation_amount = depth
- user << "You set the depth to [depth]cm."
- if (depth<4)
- icon_state = "excavationdrill0"
- else if (depth >=4 && depth <8)
- icon_state = "excavationdrill1"
- else if (depth >=8 && depth <12)
- icon_state = "excavationdrill2"
- else if (depth >=12 && depth <16)
- icon_state = "excavationdrill3"
- else if (depth >=16 && depth <20)
- icon_state = "excavationdrill4"
- else if (depth >=20 && depth <24)
- icon_state = "excavationdrill5"
- else if (depth >=24 && depth <28)
- icon_state = "excavationdrill6"
- else
- icon_state = "excavationdrill7"
-
-/obj/item/weapon/pickaxe/excavationdrill/examine(mob/user)
- ..()
- var/depth = excavation_amount
- user << "It is currently set at [depth]cms."
diff --git a/config/custom_items.txt b/config/custom_items.txt
index 54b20862a4..d7c2e13450 100644
--- a/config/custom_items.txt
+++ b/config/custom_items.txt
@@ -734,12 +734,6 @@ character_name: Tasy Ruffles
item_path: /obj/item/device/pda/clown
}
-{
-ckey: silvertalismen
-character_name: Camilla
-item_path: /obj/item/toy/plushie/farwa
-}
-
{
ckey: Swat43
character_name: Fortune Bloise
diff --git a/html/changelog.html b/html/changelog.html
index 3796656cc9..e81411a62c 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -53,6 +53,46 @@
-->
+
01 April 2018
+
Anewbe updated:
+
+ - Medical Doctors and EMTs spawn with white medkits.
+
+
Cameron653 updated:
+
+ - Adds a xenoarch excavation tool, craftable in R&D. Allows depth selection of 1-30
+ - Adds a xenoarch multitool, craftable in R&D. Has xenoarch counter, measure tool, and depth scanner all in one.
+
+
Heroman3003 updated:
+
+ - Attaching exosuit equipment with a gripper correctly removes it from the gripper.
+ - Engineering gripper can no longer duplicate frame parts.
+
+
MistyLuminescence updated:
+
+ - Wallets can now hold a wider variety of objects.
+
+
Woodrat updated:
+
+ - Added two 44 cal revolvers.
+ - Added 44 cal speedloader for revolvers.
+ - Added 44 cal rubber rounds.
+ - Fixed the icon_state for 'structure/plushie/carp' and the random first aid kit spawner.
+ - Added a random chance tool spawn for power tools (most of the time it should still just be regular tools).
+ - Adjusted the spawn rate of medkits, combat medkits should be more rare.
+ - Cash split into its own loot item.
+ - Plushies split into large and small plushies.
+ - All the extra plushie spawns added to the random plushie spawn.
+ - Eightball and conch shell added to toy spawns.
+ - Added spawn points for the large plushies, cash, and the power tools to the station.
+
+
battlefieldCommander updated:
+
+ - Added permanent markers, an alternative to crayons.
+ - The chemistry recipe for paint now uses marker ink instead of crayon dust.
+ - Removed crayon boxes from the map. They can still be ordered from cargo in case you need a snack.
+
+
15 March 2018
Anewbe updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 750c450cf0..5f676aa9a4 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -4039,3 +4039,37 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- tweak: Names of the crates for the munitions and security catogory supply packs
have been adjusted slightly. In certain places contents also adjusted.
- bugfix: Holoplant now comes in a crate.
+2018-04-01:
+ Anewbe:
+ - tweak: Medical Doctors and EMTs spawn with white medkits.
+ Cameron653:
+ - rscadd: Adds a xenoarch excavation tool, craftable in R&D. Allows depth selection
+ of 1-30
+ - rscadd: Adds a xenoarch multitool, craftable in R&D. Has xenoarch counter, measure
+ tool, and depth scanner all in one.
+ Heroman3003:
+ - bugfix: Attaching exosuit equipment with a gripper correctly removes it from the
+ gripper.
+ - bugfix: Engineering gripper can no longer duplicate frame parts.
+ MistyLuminescence:
+ - tweak: Wallets can now hold a wider variety of objects.
+ Woodrat:
+ - rscadd: Added two 44 cal revolvers.
+ - rscadd: Added 44 cal speedloader for revolvers.
+ - rscadd: Added 44 cal rubber rounds.
+ - bugfix: Fixed the icon_state for 'structure/plushie/carp' and the random first
+ aid kit spawner.
+ - rscadd: Added a random chance tool spawn for power tools (most of the time it
+ should still just be regular tools).
+ - tweak: Adjusted the spawn rate of medkits, combat medkits should be more rare.
+ - tweak: Cash split into its own loot item.
+ - tweak: Plushies split into large and small plushies.
+ - rscadd: All the extra plushie spawns added to the random plushie spawn.
+ - tweak: Eightball and conch shell added to toy spawns.
+ - rscadd: Added spawn points for the large plushies, cash, and the power tools to
+ the station.
+ battlefieldCommander:
+ - rscadd: Added permanent markers, an alternative to crayons.
+ - tweak: The chemistry recipe for paint now uses marker ink instead of crayon dust.
+ - rscdel: Removed crayon boxes from the map. They can still be ordered from cargo
+ in case you need a snack.
diff --git a/html/changelogs/Billybangles - Markers.yml b/html/changelogs/Billybangles - Markers.yml
deleted file mode 100644
index afab2bf8cb..0000000000
--- a/html/changelogs/Billybangles - Markers.yml
+++ /dev/null
@@ -1,38 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# 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: battlefieldCommander
-
-# 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:
- - rscadd: "Added permanent markers, an alternative to crayons."
- - tweak: "The chemistry recipe for paint now uses marker ink instead of crayon dust."
- - rscdel: "Removed crayon boxes from the map. They can still be ordered from cargo in case you need a snack."
diff --git a/html/changelogs/Cameron - Xenoarch Upgrades.yml b/html/changelogs/Cameron - Xenoarch Upgrades.yml
deleted file mode 100644
index b352e0d3b7..0000000000
--- a/html/changelogs/Cameron - Xenoarch Upgrades.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# 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: Cameron653
-
-# 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:
- - rscadd: "Adds a xenoarch excavation tool, craftable in R&D. Allows depth selection of 1-30"
- - rscadd: "Adds a xenoarch multitool, craftable in R&D. Has xenoarch counter, measure tool, and depth scanner all in one."
diff --git a/html/changelogs/Heroman3003 - Gripper Fixes.yml b/html/changelogs/Heroman3003 - Gripper Fixes.yml
deleted file mode 100644
index c320b73d93..0000000000
--- a/html/changelogs/Heroman3003 - Gripper Fixes.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-author: Heroman3003
-
-delete-after: True
-
-changes:
- - bugfix: "Fixed a bug where same piece of exosuit equipment could be attached several times with exosuit gripper"
- - bugfix: "Fixed a bug where frame parts could dupe frames with engineering gripper"
diff --git a/html/changelogs/Anewbe - Medkits.yml b/html/changelogs/Woodrat - Bugfixes.yml
similarity index 70%
rename from html/changelogs/Anewbe - Medkits.yml
rename to html/changelogs/Woodrat - Bugfixes.yml
index 48624d92bf..9e42ad9edc 100644
--- a/html/changelogs/Anewbe - Medkits.yml
+++ b/html/changelogs/Woodrat - Bugfixes.yml
@@ -22,7 +22,7 @@
#################################
# Your name.
-author: Anewbe
+author: Woodrat
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
@@ -33,4 +33,11 @@ delete-after: True
# 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:
- - tweak: "Medical Doctors and EMTs spawn with white medkits."
\ No newline at end of file
+ - bugfix: "Flashers in brig cells now should work, extra floor flash in communal brig to deal with crims."
+ - bugfix: "Inproper access, SMES rooms."
+ - bugfix: "Trader start point being dark now fixed."
+ - rscadd: "Medical Vendor Plus has more advanced burn and trauma kits."
+ - tweak: "Cell 1 and 2 in the brig can now be accessed by detectives."
+ - tweak: "Additional r-walls next to the engine room to help with rads."
+ - tweak: "Floor decals in a couple areas."
+ - tweak: "RD office now has its telescreen back."
\ No newline at end of file
diff --git a/html/changelogs/Woodrat - Random Changes.yml b/html/changelogs/Woodrat - Random Changes.yml
deleted file mode 100644
index ad03c5bd4a..0000000000
--- a/html/changelogs/Woodrat - Random Changes.yml
+++ /dev/null
@@ -1,43 +0,0 @@
-################################
-# Example Changelog File
-#
-# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
-#
-# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
-# When it is, any changes listed below will disappear.
-#
-# Valid Prefixes:
-# bugfix
-# 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: Woodrat
-
-# 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:
- - bugfix: "Fixed the icon_state for 'structure/plushie/carp' and the random first aid kit spawner."
- - rscadd: "Added a random chance tool spawn for power tools (most of the time it should still just be regular tools)."
- - tweak: "Adjusted the spawn rate of medkits, combat medkits should be more rare."
- - tweak: "Cash split into its own loot item."
- - tweak: "Plushies split into large and small plushies."
- - rscadd: "All the extra plushie spawns added to the random plushie spawn."
- - tweak: "Eightball and conch shell added to toy spawns."
- - rscadd: "Added spawn points for the large plushies, cash, and the power tools to the station."
\ No newline at end of file
diff --git a/html/changelogs/lorwp-pilotfallback.yml b/html/changelogs/lorwp-pilotfallback.yml
new file mode 100644
index 0000000000..eccc2538bb
--- /dev/null
+++ b/html/changelogs/lorwp-pilotfallback.yml
@@ -0,0 +1,13 @@
+# Your name.
+author: lorwp
+
+# 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:
+ - bugfix: "Fixes Pilot headsets not being able to fallback to shortwave radio"
\ No newline at end of file
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
index 18add13d5b..1a830a6e49 100644
Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ
diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi
index 3e96e58040..8a7c74bf3d 100644
Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ
diff --git a/icons/mob/vore.dmi b/icons/mob/vore.dmi
index a7b3569ba0..5d35a39232 100644
Binary files a/icons/mob/vore.dmi and b/icons/mob/vore.dmi differ
diff --git a/icons/mob/vore64x64.dmi b/icons/mob/vore64x64.dmi
index 22b55b1392..1f5522139b 100644
Binary files a/icons/mob/vore64x64.dmi and b/icons/mob/vore64x64.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index 43bb082f57..ceea8bf2b7 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 45fc51fb8e..3ea938e4ee 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/vending_vr.dmi b/icons/obj/vending_vr.dmi
index 6900c7e8b0..a09c061f4a 100644
Binary files a/icons/obj/vending_vr.dmi and b/icons/obj/vending_vr.dmi differ
diff --git a/maps/southern_cross/items/headset_sc.dm b/maps/southern_cross/items/headset_sc.dm
index 515377657d..1c22b751ba 100644
--- a/maps/southern_cross/items/headset_sc.dm
+++ b/maps/southern_cross/items/headset_sc.dm
@@ -2,6 +2,7 @@
name = "pilot's headset"
desc = "A headset used by pilots, has access to supply and explorer channels."
icon_state = "pilot_headset"
+ adhoc_fallback = TRUE
ks2type = /obj/item/device/encryptionkey/pilot
adhoc_fallback = TRUE //VOREStation Edit
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index e45547558a..3208c62d0a 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -2741,7 +2741,7 @@
"baK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/security/prison)
"baL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
"baM" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
-"baN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/prison)
+"baN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/flasher{id = "permflash"; name = "Floor mounted flash"; pixel_x = 0},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/security/prison)
"baO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/security/prison)
"baP" = (/obj/machinery/flasher{id = "permflash"; name = "Floor mounted flash"; pixel_x = 0},/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/prison)
"baQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/security/prison)
@@ -2920,10 +2920,10 @@
"beh" = (/obj/machinery/door/airlock/external{name = "Toxins Test Chamber"},/turf/simulated/floor/airless,/area/rnd/test_area)
"bei" = (/obj/structure/sign/warning/high_voltage,/turf/simulated/wall/r_wall,/area/security/security_cell_hallway)
"bej" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/security/security_cell_hallway)
-"bek" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/window/brigdoor/northright{id = "Cell 2"; name = "Cell 2"; req_access = list(2)},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"bek" = (/obj/machinery/light,/turf/simulated/floor/tiled/airless,/area/rnd/test_area)
"bel" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/security/security_cell_hallway)
"bem" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/security/security_cell_hallway)
-"ben" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/window/brigdoor/northright{id = "Cell 1"; name = "Cell 1"; req_access = list(2)},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"ben" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/window/brigdoor/northright{id = "Cell 2"; name = "Cell 2"; req_access = null; req_one_access = list(2,4)},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"beo" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit"; name = "Brig Exit"; req_access = list(2)},/turf/simulated/floor/tiled/steel_grid,/area/security/prison)
"bep" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit"; name = "Brig Exit"; req_access = list(2)},/turf/simulated/floor/tiled/steel_grid,/area/security/prison)
"beq" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/northright{name = "Visitation"; req_access = list(2)},/obj/item/weapon/book/codex/corp_regs,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Communal Brig Blast Door"; opacity = 0},/turf/simulated/floor/tiled,/area/security/prison)
@@ -2951,12 +2951,12 @@
"beM" = (/obj/structure/closet/emcloset,/turf/simulated/floor/airless,/area/rnd/test_area)
"beN" = (/obj/structure/lattice,/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space)
"beO" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/security/security_cell_hallway)
-"beP" = (/obj/machinery/camera/network/security{c_tag = "SEC - Cell Hallway 1"; dir = 4},/obj/machinery/door_timer/cell_3{id = "Cell 2"; name = "Cell 2"; pixel_y = 32},/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
-"beQ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/button/remote/blast_door{id = "Cell 2"; name = "Cell 2 Door"; pixel_x = -1; pixel_y = 28; req_access = list(2)},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"beP" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/window/brigdoor/northright{id = "Cell 1"; name = "Cell 1"; req_access = null; req_one_access = list(2,4)},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"beQ" = (/obj/machinery/camera/network/security{c_tag = "SEC - Cell Hallway 1"; dir = 4},/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/obj/machinery/door_timer/cell_2{pixel_y = 32; req_access = null; req_one_access = list(2,4)},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"beR" = (/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/security/security_cell_hallway)
"beS" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
-"beT" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/door_timer/cell_3{id = "Cell 1"; name = "Cell 1"; pixel_x = 0; pixel_y = 32},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
-"beU" = (/obj/machinery/button/remote/blast_door{id = "Cell 1"; name = "Cell 1 Door"; pixel_x = -1; pixel_y = 28; req_access = list(2)},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"beT" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/button/remote/blast_door{id = "Cell 2"; name = "Cell 2 Door"; pixel_x = -1; pixel_y = 28; req_access = null; req_one_access = list(2,4)},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner{dir = 1},/obj/machinery/button/flasher{id = "Cell 2"; name = "Cell 2 Flash"; pixel_x = -1; pixel_y = 36; req_access = list(2,4); tag = "Cell 2"},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
+"beU" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/machinery/door_timer/cell_1{pixel_y = 32; req_access = null; req_one_access = list(2,4)},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"beV" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"beW" = (/obj/machinery/computer/security/telescreen{desc = "Big Brother is watching."; layer = 3.4; name = "Brig Monitor"; network = list("Prison"); pixel_x = 0; pixel_y = 28},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"beX" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
@@ -3247,7 +3247,7 @@
"bkw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/security/brig)
"bkx" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northright{name = "Security Delivery"; req_access = list(1)},/turf/simulated/floor/tiled,/area/security/brig)
"bky" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/security)
-"bkz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/engineering{name = "Security Substation"; req_one_access = list(1,11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/security)
+"bkz" = (/obj/machinery/button/remote/blast_door{id = "Cell 1"; name = "Cell 1 Door"; pixel_x = -1; pixel_y = 28; req_access = null; req_one_access = list(2,4)},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner{dir = 1},/obj/machinery/button/flasher{id = "Cell 1"; name = "Cell 1 Flash"; pixel_x = -1; pixel_y = 36; req_access = list(2,4); tag = "Cell 1"},/turf/simulated/floor/tiled,/area/security/security_cell_hallway)
"bkA" = (/turf/simulated/wall/r_wall,/area/engineering/atmos)
"bkB" = (/obj/machinery/atmospherics/pipe/simple/visible/green{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/wall/r_wall,/area/engineering/atmos)
"bkC" = (/obj/machinery/atmospherics/pipe/manifold/visible/green{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/engineering/atmos)
@@ -4289,7 +4289,7 @@
"bEy" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/dark,/area/rnd/storage)
"bEz" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled/dark,/area/rnd/storage)
"bEA" = (/turf/simulated/wall/r_wall,/area/rnd/toxins_launch)
-"bEB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Toxins Launch Room"; req_access = list(7)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/toxins_launch)
+"bEB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/engineering{name = "Security Substation"; req_access = list(1); req_one_access = null},/turf/simulated/floor/plating,/area/maintenance/substation/security)
"bEC" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "eng_port_pump"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_port_sensor"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor,/area/engineering/drone_fabrication)
"bED" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor,/area/engineering/drone_fabrication)
"bEE" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "eng_port_pump"},/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor,/area/engineering/drone_fabrication)
@@ -4352,7 +4352,7 @@
"bFJ" = (/obj/structure/flora/pottedplant/mysterious,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bFK" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bFL" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/white_rd,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/item/clothing/glasses/welding/superior,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
-"bFM" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen/multi,/obj/item/weapon/paper/monitorkey,/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)
+"bFM" = (/turf/simulated/wall,/area/crew_quarters/heads/sc/hor)
"bFN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/wood,/area/rnd/research)
"bFO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/rnd/research)
"bFP" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/wood,/area/rnd/research)
@@ -4360,21 +4360,21 @@
"bFR" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
"bFS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
"bFT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{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/white,/area/rnd/research_lockerroom)
-"bFU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Research Restroom"; req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
-"bFV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
+"bFU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Toxins Launch Room"; req_access = list(7)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/toxins_launch)
+"bFV" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen/multi,/obj/item/weapon/paper/monitorkey,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("Research","Toxins Test Area","Robots","Anomaly Isolation","Research Outpost"); pixel_x = 32; pixel_y = -4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bFW" = (/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/light{dir = 1},/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/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/item/weapon/soap/nanotrasen,/obj/random/soap,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bFX" = (/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bFY" = (/obj/structure/window/basic,/obj/structure/undies_wardrobe,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bFZ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bGa" = (/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"},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research)
-"bGb" = (/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/research{name = "Toxins Storage"; req_access = list(8)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/rnd/storage)
+"bGb" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Research Restroom"; req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/research_restroom_sc)
"bGc" = (/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 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/rnd/storage)
"bGd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage)
"bGe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage)
"bGf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage)
"bGg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/rnd/storage)
"bGh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4,/turf/simulated/floor/tiled,/area/rnd/storage)
-"bGi" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access = list(8)},/turf/simulated/floor/tiled,/area/rnd/storage)
+"bGi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{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/freezer,/area/rnd/research_restroom_sc)
"bGj" = (/obj/machinery/newscaster{pixel_y = 30},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/mixing)
"bGk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/ai_status_display{pixel_y = 32},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/mixing)
"bGl" = (/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/firealarm{dir = 2; pixel_y = 24},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/mixing)
@@ -4442,7 +4442,7 @@
"bHv" = (/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/rnd/research)
"bHw" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/wood,/area/rnd/research)
"bHx" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/rnd/research)
-"bHy" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Research Locker Room"; req_access = list(47)},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"bHy" = (/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/research{name = "Toxins Storage"; req_access = list(8)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/storage)
"bHz" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
"bHA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
"bHB" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/purple/bordercorner,/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
@@ -4591,15 +4591,15 @@
"bKo" = (/obj/structure/ladder/updown,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/fs_emergency)
"bKp" = (/obj/structure/closet/hydrant{pixel_x = 32},/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/fs_emergency)
"bKq" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/floor_decal/industrial/warning/corner,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research)
-"bKr" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Science Substation"; req_one_access = list(11,24,47)},/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bKr" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access = list(8)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/storage)
"bKs" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced/polarized{id = "rdoffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hor)
-"bKt" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/command{id_tag = null; name = "Research Director Quarters"; req_access = list(30)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
+"bKt" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Research Locker Room"; req_access = list(47)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/research_lockerroom)
"bKu" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced/polarized{id = "rdoffice"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hor)
"bKv" = (/obj/machinery/door/firedoor/glass,/turf/simulated/floor/wood,/area/rnd/research)
"bKw" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/rnd/research)
"bKx" = (/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/rnd/research)
"bKy" = (/obj/machinery/ai_status_display,/turf/simulated/wall,/area/rnd/research_restroom_sc)
-"bKz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Research Restroom"},/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"},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
+"bKz" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Science Substation"; req_access = list(47); req_one_access = null},/turf/simulated/floor/plating,/area/maintenance/substation/research)
"bKA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bKB" = (/turf/simulated/wall/r_wall,/area/rnd/mixing)
"bKC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/bombcloset,/obj/machinery/light{dir = 8},/obj/structure/sign/warning/nosmoking_2{pixel_x = -32},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/mixing)
@@ -4796,7 +4796,7 @@
"bOl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bOm" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
"bOn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{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/white,/area/rnd/research)
-"bOo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_research{name = "Toxins Lab"; req_access = list(7)},/turf/simulated/floor/tiled/white,/area/rnd/mixing)
+"bOo" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/command{id_tag = null; name = "Research Director Quarters"; req_access = list(30)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/crew_quarters/heads/sc/hor)
"bOp" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-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/rnd/mixing)
"bOq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/rnd/mixing)
"bOr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/mixing)
@@ -4864,9 +4864,9 @@
"bPB" = (/obj/machinery/status_display,/turf/simulated/wall,/area/assembly/robotics)
"bPC" = (/turf/simulated/wall/r_wall,/area/assembly/robotics)
"bPD" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/rnd/misc_lab)
-"bPE" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room"; req_access = list(); req_one_access = list(7,29)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/misc_lab)
+"bPE" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Research Restroom"},/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"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/research_restroom_sc)
"bPF" = (/turf/simulated/wall/r_wall,/area/rnd/misc_lab)
-"bPG" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/command{name = "Server Room"; req_access = list(30)},/turf/simulated/floor/tiled/dark,/area/server)
+"bPG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_research{name = "Toxins Lab"; req_access = list(7)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/mixing)
"bPH" = (/obj/structure/sign/warning/server_room,/turf/simulated/wall/r_wall,/area/server)
"bPI" = (/turf/simulated/wall/r_wall,/area/server)
"bPJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/purple/border{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research)
@@ -5038,11 +5038,11 @@
"bST" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/lab)
"bSU" = (/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 = 6},/turf/simulated/floor/tiled/white,/area/rnd/lab)
"bSV" = (/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/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/lab)
-"bSW" = (/obj/machinery/door/firedoor/glass,/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/glass_research{name = "Research and Development"; req_access = list(7)},/turf/simulated/floor/tiled/white,/area/rnd/lab)
+"bSW" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room"; req_access = list(); req_one_access = list(7,29)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/rnd/misc_lab)
"bSX" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bSY" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
"bSZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{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/white,/area/rnd/research)
-"bTa" = (/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_research{name = "Robotics Lab"; req_access = list(29,47)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"bTa" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/command{name = "Server Room"; req_access = list(30)},/turf/simulated/floor/tiled/steel_grid,/area/server)
"bTb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{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/white,/area/assembly/robotics)
"bTc" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bTd" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
@@ -5238,7 +5238,7 @@
"bWL" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/rnd/lab)
"bWM" = (/obj/machinery/computer/rdconsole/core,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/lab)
"bWN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/purple/border{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/lab)
-"bWO" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{id_tag = "researchdoor"; name = "Research Division Access"; req_access = list(47)},/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/disposalpipe/segment,/turf/simulated/floor/tiled/dark,/area/rnd/research)
+"bWO" = (/obj/machinery/door/firedoor/glass,/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/glass_research{name = "Research and Development"; req_access = list(7)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/lab)
"bWP" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/green,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"bWQ" = (/obj/machinery/mecha_part_fabricator,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/assembly/robotics)
"bWR" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/table/steel_reinforced,/obj/item/device/robotanalyzer,/obj/item/device/robotanalyzer,/obj/item/device/mmi/digital/robot,/turf/simulated/floor/tiled,/area/assembly/robotics)
@@ -5575,7 +5575,7 @@
"cdk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/research)
"cdl" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/item/weapon/material/shard,/turf/simulated/floor/plating,/area/maintenance/research)
"cdm" = (/turf/simulated/wall/r_wall,/area/rnd/research_foyer)
-"cdn" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Research Access"},/turf/simulated/floor/tiled/white,/area/rnd/research_foyer)
+"cdn" = (/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_research{name = "Robotics Lab"; req_access = list(29,47)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/assembly/robotics)
"cdo" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/rnd/research_foyer)
"cdp" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/recharge_station,/obj/machinery/button/remote/blast_door{dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 0; pixel_y = -26; req_access = list(29)},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled/techmaint,/area/assembly/chargebay)
"cdq" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/techfloor,/area/assembly/chargebay)
@@ -5682,7 +5682,7 @@
"cfn" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/plating,/area/maintenance/research_medical)
"cfo" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
"cfp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
-"cfq" = (/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_research{name = "Workshop"; req_access = list(47)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/rnd/workshop)
+"cfq" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{id_tag = "researchdoor"; name = "Research Division Access"; req_access = list(47)},/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/disposalpipe/segment,/turf/simulated/floor/tiled/steel_grid,/area/rnd/research)
"cfr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled/dark,/area/rnd/workshop)
"cfs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/workshop)
"cft" = (/obj/random/junk,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/workshop)
@@ -5837,7 +5837,7 @@
"cim" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/sign/deck/second{pixel_x = 32},/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/starboard)
"cin" = (/turf/simulated/wall/r_wall,/area/hallway/primary/seconddeck/starboard)
"cio" = (/turf/unsimulated/mask,/area/hallway/primary/seconddeck/starboard)
-"cip" = (/obj/machinery/door/airlock/research{name = "Research Access"; req_access = list(47)},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"cip" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Research Access"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/research_foyer)
"ciq" = (/obj/machinery/ai_status_display,/turf/simulated/wall/r_wall,/area/rnd/workshop)
"cir" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/lime/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
"cis" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/lime/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
@@ -6167,8 +6167,8 @@
"coE" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"coF" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"coG" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/apmaint)
-"coH" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
-"coI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
+"coH" = (/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_research{name = "Workshop"; req_access = list(47)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/workshop)
+"coI" = (/obj/machinery/door/airlock/research{name = "Research Access"; req_access = list(47)},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel_grid,/area/rnd/research)
"coJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/vending/coffee,/obj/structure/sign/deck/second{pixel_x = -32},/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/port)
"coK" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/vending/snack,/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/port)
"coL" = (/obj/structure/sign/directions/bridge{dir = 4; pixel_y = 10},/obj/structure/sign/directions/evac{dir = 4; pixel_y = -10},/obj/structure/sign/directions/cargo{dir = 2},/turf/simulated/wall,/area/maintenance/apmaint)
@@ -6330,9 +6330,9 @@
"crL" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/engineering/engine_smes)
"crM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/apmaint)
"crN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/apmaint)
-"crO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/apmaint)
+"crO" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"crP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/sortjunction/wildcard{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/apmaint)
-"crQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/apmaint)
+"crQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/junction{dir = 1},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"crR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"crS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"crT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/apmaint)
@@ -6495,9 +6495,9 @@
"cuU" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/engineering/engine_room)
"cuV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cuW" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
-"cuX" = (/obj/structure/disposalpipe/segment,/obj/item/stack/tile/floor,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
+"cuX" = (/turf/simulated/floor,/area/maintenance/apmaint)
"cuY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/construction/seconddeck/construction1)
-"cuZ" = (/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor/tiled/steel,/area/construction/seconddeck/construction1)
+"cuZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cva" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cvb" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cvc" = (/obj/machinery/atmospherics/valve/digital/open,/turf/simulated/floor/plating,/area/maintenance/apmaint)
@@ -6603,9 +6603,9 @@
"cwY" = (/obj/effect/floor_decal/industrial/outline/blue,/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/plating,/area/engineering/engine_room)
"cwZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cxa" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
-"cxb" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
+"cxb" = (/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel,/area/construction/seconddeck/construction1)
"cxc" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/construction/seconddeck/construction1)
-"cxd" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/random/maintenance/clean,/turf/simulated/floor/tiled/steel,/area/construction/seconddeck/construction1)
+"cxd" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/random/maintenance/clean,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel,/area/construction/seconddeck/construction1)
"cxe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cxf" = (/obj/machinery/conveyor{dir = 1; id = "packageSort1"},/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/quartermaster/delivery)
"cxg" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled,/area/quartermaster/delivery)
@@ -6696,9 +6696,9 @@
"cyN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/apmaint)
"cyO" = (/turf/simulated/wall,/area/storage/emergency_storage/seconddeck/port_emergency)
"cyP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Emergency Storage"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
-"cyQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
-"cyR" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
-"cyS" = (/turf/simulated/floor/tiled,/area/construction/seconddeck/construction1)
+"cyQ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/construction/seconddeck/construction1)
+"cyR" = (/obj/item/stack/cable_coil/random,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
+"cyS" = (/obj/item/stack/tile/floor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
"cyT" = (/obj/machinery/atmospherics/valve,/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cyU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"cyV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/meter,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/apmaint)
@@ -6787,7 +6787,7 @@
"cAA" = (/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
"cAB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
"cAC" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
-"cAD" = (/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
+"cAD" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/construction/seconddeck/construction1)
"cAE" = (/obj/item/stack/tile/floor,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
"cAF" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/steel,/area/construction/seconddeck/construction1)
"cAG" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/floor/plating,/area/maintenance/apmaint)
@@ -6867,9 +6867,9 @@
"cCc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor,/area/maintenance/apmaint)
"cCd" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
"cCe" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
-"cCf" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/table/rack{dir = 1},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/powercell,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
-"cCg" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
-"cCh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/construction/seconddeck/construction1)
+"cCf" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/powercell,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
+"cCg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/cargo)
+"cCh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/cargo)
"cCi" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor,/area/maintenance/apmaint)
"cCj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/construction/seconddeck/construction1)
"cCk" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "crglockdown"; name = "Cargo Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/apmaint)
@@ -6954,8 +6954,8 @@
"cDL" = (/obj/machinery/conveyor{dir = 4; id = "garbage"},/turf/simulated/floor,/area/maintenance/disposal)
"cDM" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/maintenance/disposal)
"cDN" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/disposal)
-"cDO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/closet/emcloset,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/cargo)
-"cDP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/maintenance/cargo)
+"cDO" = (/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
+"cDP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor,/area/maintenance/cargo)
"cDQ" = (/obj/structure/table/rack,/obj/random/powercell,/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tank,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/catwalk,/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/central)
"cDR" = (/obj/structure/table/standard,/obj/item/device/t_scanner,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
"cDS" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
@@ -7017,7 +7017,7 @@
"cEW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
"cEX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/medbay{c_tag = "MED - Chemistry"; dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/beige/bordercorner,/turf/simulated/floor/tiled/white,/area/medical/chemistry)
"cEY" = (/obj/structure/closet/wardrobe/chemistry_white,/obj/item/device/radio/headset/headset_med,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/item/weapon/storage/box/pillbottles,/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/beige/border{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry)
-"cEZ" = (/obj/machinery/vending/medical,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
+"cEZ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/maintenance/cargo)
"cFa" = (/obj/structure/cable/green{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 = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"cFb" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/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/green{d2 = 8; icon_state = "0-8"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"cFc" = (/obj/structure/table/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/defib_kit/loaded,/obj/item/device/defib_kit/loaded,/turf/simulated/floor/tiled/dark,/area/medical/biostorage)
@@ -7035,8 +7035,8 @@
"cFo" = (/obj/structure/sign/warning/moving_parts,/turf/simulated/wall,/area/maintenance/disposal)
"cFp" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor,/area/maintenance/disposal)
"cFq" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Disposal Access"; req_access = list(12)},/turf/simulated/floor,/area/maintenance/disposal)
-"cFr" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/maintenance/cargo)
-"cFs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/maintenance/cargo)
+"cFr" = (/obj/structure/disposalpipe/segment,/obj/machinery/vending/medical,/turf/simulated/wall,/area/medical/medbay_primary_storage)
+"cFs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor,/area/maintenance/cargo)
"cFt" = (/obj/structure/closet/crate,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/cargo)
"cFu" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/cargo)
"cFv" = (/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/structure/table/rack{dir = 8; layer = 2.9},/turf/simulated/floor/tiled/steel,/area/maintenance/cargo)
@@ -7097,7 +7097,7 @@
"cGy" = (/obj/machinery/door/firedoor/glass,/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/machinery/door/airlock/glass_medical{name = "Chemistry Laboratory"; req_access = list(33)},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel_grid,/area/medical/chemistry)
"cGz" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/medical/medbay_primary_storage)
"cGA" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass_medical{name = "Medbay Equipment"; req_access = list(5)},/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,/turf/simulated/floor/tiled/steel_grid,/area/medical/medbay_primary_storage)
-"cGB" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/medbay_primary_storage)
+"cGB" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/maintenance/cargo)
"cGC" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Secondary Storage"; req_access = list(5)},/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,/turf/simulated/floor/tiled/steel_grid,/area/medical/biostorage)
"cGD" = (/obj/structure/table/glass,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
"cGE" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
@@ -7109,7 +7109,7 @@
"cGK" = (/turf/simulated/floor,/area/maintenance/disposal)
"cGL" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor,/area/maintenance/disposal)
"cGM" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/maintenance/cargo)
-"cGN" = (/obj/machinery/atmospherics/binary/pump/on{dir = 2; target_pressure = 200},/turf/simulated/floor,/area/maintenance/cargo)
+"cGN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/binary/pump/on{dir = 2; target_pressure = 200},/turf/simulated/floor,/area/maintenance/cargo)
"cGO" = (/turf/simulated/floor,/area/maintenance/cargo)
"cGP" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/cargo)
"cGQ" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/maintenance/cargo)
@@ -7208,7 +7208,7 @@
"cIF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/maintenance/disposal)
"cIG" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Disposal Access"; req_access = list(12)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/maintenance/disposal)
"cIH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/cargo)
-"cII" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/maintenance/cargo)
+"cII" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Medbay Substation"; req_access = list(5); req_one_access = null},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
"cIJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/maintenance/cargo)
"cIK" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/cargo)
"cIL" = (/obj/effect/floor_decal/corner/brown{dir = 1},/obj/item/frame/light/small,/turf/simulated/floor/tiled,/area/maintenance/cargo)
@@ -7324,7 +7324,7 @@
"cKR" = (/turf/simulated/wall,/area/storage/emergency_storage/seconddeck/as_emergency)
"cKS" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay)
"cKT" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/medical)
-"cKU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Medbay Substation"; req_one_access = list(11,24,5)},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"cKU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Cargo Substation"; req_one_access = list(11,24,50)},/turf/simulated/floor/plating,/area/maintenance/substation/cargo)
"cKV" = (/turf/simulated/wall,/area/maintenance/substation/medical)
"cKW" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced/polarized{id = "cmooffice"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/cmo)
"cKX" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced/polarized{id = "cmooffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/cmo)
@@ -7633,7 +7633,7 @@
"cQO" = (/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "crglockdown"; name = "Cargo Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/cargo)
"cQP" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/item/clothing/head/soft,/obj/item/clothing/head/soft,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/quartermaster/office)
"cQQ" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled/dark,/area/quartermaster/office)
-"cQR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Cargo Substation"; req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/cargo)
+"cQR" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_medical{name = "Patient Ward"},/turf/simulated/floor/tiled/steel_grid,/area/medical/patient_wing)
"cQS" = (/obj/structure/closet/crate,/obj/random/drinkbottle,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/action_figure,/obj/random/plushie,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar)
"cQT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/maintenance/bar)
"cQU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/bar)
@@ -7933,7 +7933,7 @@
"cWC" = (/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/manifold/hidden/scrubbers{dir = 1},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/white,/area/medical/ward)
"cWD" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/ward)
"cWE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{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/white,/area/medical/ward)
-"cWF" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_medical{name = "Patient Ward"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"cWF" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_medical{name = "Patient Ward"},/turf/simulated/floor/tiled/steel_grid,/area/medical/patient_wing)
"cWG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cWH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cWI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
@@ -8001,7 +8001,6 @@
"cXS" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/ward)
"cXT" = (/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 = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/ward)
"cXU" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/ward)
-"cXV" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_medical{name = "Patient Ward"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cXW" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cXX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cXY" = (/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 = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
@@ -10918,15 +10917,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabbtbbubbvaXMbbwbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbakbaSbbHbbIbbJbbKbbLbbMbbNbbObaobbPbbQbbRbbSbapbaobbTbbUbbVbbWbbXbbXbbYbbZbcabcbbccbcdbcebcdbcfaYjaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWtaWtaWtbaCaWtbcgbaDbchaWtbaEaWtaWtaWtaWsaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaWBaWBbcibcjbckaXhbclbcmbcnaXhbcobcpaXhaXLbcqbcrbcrbcrbcsbctbcubcvbcwbcxbcybczbaobaobcAbaobaobaobcBbcCbcDbcEbcFbbUbcGbbUbcHaYjbcIbcJbcKbcJbcLaYjaaaaaaaaaaadbcMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWsaWtaWtaWtaWtbcgbaDbchaWtaWtaWtaWtaWsaWsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaafaagaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabcNbcObcPbcQbcRbcSbcPbcTbcRbcUbcVaXhbcWbcXbcrbcYbcZbdabdbbdcbcrbddbdebdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqbdrbbUbbUbbUbdsbdtbdubdvbdwbdxbduaYjaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWtaWtaWtaWtbcgbaDbchaWtaWtaWtaWtaWsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJadKaadaaaaaaaafaaaaaaaafaaaaaaaafaaaaafaaaaaaaadaadaadaagaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabcNbdybdzbdAbcRbdBbdzbdAbcRbdCbdDaXhbdEbdFbcrbdGbdHbdIbdJbdKbdLbdMbcxbdNbdObdPbdQbdRbdQbdSbdgbdTbcCbdUbdVbdWbdXbdYbdZbdYbeabebbecbedbeebefaWXaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabegaWsbehaWsaWtaWtbcgbaDbchaWtaWtaWsbehaWsbegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaaaaaaaaaaaaaafaaaaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaafaadaaaaaaaaaaaaaaaaaaaadaafaafaafbeibcNbejbekbelbcRbembenbelbcRbeobepaXhbeqberbcrbesbdHbetbdHbeubevbcwbewbexbeybezbeAbeBbeCbeDbdgbeEbeFbeGbeHbbUbeIbeJbeJbeJbeJbeJbeKbeKbeKbeKbeLbeLaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabegbeMbaDaWsaWsaWsaWtbaDaWtaWsaWsaWsbaDbeMbegaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaafbeNaaaaaaaaabeObePbeQbeRbeSbeTbeUbeRbeVbeWbeXbeYaXhbeZbfabcrbfbbfcbfdbdHbfebffbcwbcxbfgbfhbfibdQbfjbdQbfkbflbfmbfnbfobfpbfqbfrbeJbfsbftbfubfvbfwbfxbfybfzbfAbeLaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabegbaDbfBbegaaaaWsaWsbfCaWsaWsaaabegbfDbfEbegaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJadKaadaaaaaaaafaaaaaaaafaaaaaaaafaaaaafaaaaaaaadaadaadaagaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabcNbdybdzbdAbcRbdBbdzbdAbcRbdCbdDaXhbdEbdFbcrbdGbdHbdIbdJbdKbdLbdMbcxbdNbdObdPbdQbdRbdQbdSbdgbdTbcCbdUbdVbdWbdXbdYbdZbdYbeabebbecbedbeebefaWXaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabegaWsbehaWsaWtbekbcgbaDbchbekaWtaWsbehaWsbegaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaaaaaaaaaaaaaafaaaaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaafaadaaaaaaaaaaaaaaaaaaaadaafaafaafbeibcNbejbenbelbcRbembePbelbcRbeobepaXhbeqberbcrbesbdHbetbdHbeubevbcwbewbexbeybezbeAbeBbeCbeDbdgbeEbeFbeGbeHbbUbeIbeJbeJbeJbeJbeJbeKbeKbeKbeKbeLbeLaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabegbeMbaDaWsaWsaWsaWtbaDaWtaWsaWsaWsbaDbeMbegaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaafbeNaaaaaaaaabeObeQbeTbeRbeSbeUbkzbeRbeVbeWbeXbeYaXhbeZbfabcrbfbbfcbfdbdHbfebffbcwbcxbfgbfhbfibdQbfjbdQbfkbflbfmbfnbfobfpbfqbfrbeJbfsbftbfubfvbfwbfxbfybfzbfAbeLaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabegbaDbfBbegaaaaWsaWsbfCaWsaWsaaabegbfDbfEbegaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaafbfFaafaaaaaaaaaaaaaaaaaabfGaaaaaaaaaaaaaaaabcaaaaaaaaaaaabfHbfIbfJbfKbfLbfMbfNbfObfPbfQbfRbfSaXhbcWbfTbcrbfUbfVbfWbfXbfYbfZbcwbcxbgabgbbgcbgdbgebgfbggbdgbghbghbgibgjbghbgkbeJbglbgmbgnbeJbgobgpbgqbgrbgsbeLaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbegbehbgtbegaaaaafaaaaaaaaaaafaaabegbgtbgubegaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaagaadaafaafaafaafaafaafbgvbgvbgvbgvbgvbgvbgvbgvbgvbgvbgwbgvbgvbgvbgvaafaafaafaafaadaaaaaaaaaaaaaadaaaaaaaaaaaabgxbgybgzbgybcRbgAbcRbgBbcRbcRbgCbgDbgEbgFbgGbcrbgHbgIbgJbgKbgLbcrbgMbgNbgObdgbgPbgQbgRbdgbdgbdgbgSbgTbgUbgVbgWbgXbhXbgYbgZbhabeJbhbbhcbhdbhebhfbeLaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaabhgbhgbhgaaaaaaaafaaaaaaaaaaafaaaaaabhgbhhbhgaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaabgvbhibhjbgvbhkbhlbgvbhmbhnbgvbhobgvbhpbhqbgvaaaaaaaaaaaaaadaaaaaaaaaaaaaadaafaafaafbgxbgxbhrbhsbgybhtbhubcRbhvbhwbcRbhxbhybhzbhAbhBbhCbhDbhEbhFbhGbhHbhIbhJbhKbhLbhIbhMbhNbhObhPbhQbhRbhSbhTbhUbhTbhVbhWbstbhXbhYbhXbeJbhZbiabhZbeKbeKbeLaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaaabgvbibbicbgvbidbiebgvbifbigbgvbgwbgvbihbiibgvaaaaaaaaaaaaaadaadaaaaaaaaaaadaaaaaaaaabgxbijbikbilbgybimbinbcRbiobipbcRbiqbirbisbitbiubivbiwbixbiybizbiAbiBbiCbiDbiEbiFbiGbiHbiIbiJbiKbiLbiKbiKbiMbiKbiNbiObiPbiQbiRbiSbiTbiUbiVbiWbiXbiYbiZaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaafaaaaaaaabaaaaaaaaabgvbjabjbbgvbjabjbbgvbjcbjdbgvbgwbgvbjabjebgvaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaabgxbjfbjgbjhbgybjibjjbcRbjkbjlbcRbjmbjnbjmbjmbjobjpbjqbjmbjrbjsbjtbjubjvbjwbjxbjubjybjsbjzbjAbjBbjCbfgbjDbjEbjFbjGbjHbjIbjJbjKbjLbjMbjNbjObjPbjQbjRbjSaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhbjTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaabjUbgwaaabjUbgwaaabjVbjVaaabgwaaabjUbjWaaaaaaaaaaaaaaaaaaaafbfGaaaaaaaaaaaaaaaaaabgxbjXbjgbjYbgxbcNbcNbcNbcNbcRbcRbjZbkabkbbkcbkdbkebkfbkgbjrbkhbkibkjbkkbklbkmbknbkobkpbkqbkrbksbktbkubkqbkvbkvbkvbkvbkvbkvbkvbkvbkwbkxbkybkybkybkzbkyaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaabjUbgwaaabjUbgwaaabjVbjVaaabgwaaabjUbjWaaaaaaaaaaaaaaaaaaaafbfGaaaaaaaaaaaaaaaaaabgxbjXbjgbjYbgxbcNbcNbcNbcNbcRbcRbjZbkabkbbkcbkdbkebkfbkgbjrbkhbkibkjbkkbklbkmbknbkobkpbkqbkrbksbktbkubkqbkvbkvbkvbkvbkvbkvbkvbkvbkwbkxbkybkybkybEBbkyaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaabkAbkBbkCbkDbkEbkCbkFbkGbkHbkIbkJbkFbkGbkKbkLbkMbkAbkAaaaaaaaaaaaaaadaaaaaaaadaaaaaaaaabgxbgxbkNbgxbgxbkObkPbkQbjrbkRbkSbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhblibljblkbllblmblnbloblpblqbkvblrblsbltblublvblwbkvblxblybkyblzblAblBbkyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhgaafaafaafaafaaaaaaaaaaafaafaafaafbhhaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAblCblDblEblFblGblHblIblJblKblLblMblNblOblPblQblRblSblTbkAaafaafaafaadaafabcaadaafaafaafblUblVblVblVblWblXblYblZbjrbmabmbbmcbmdbmebkZbmfbmgbmhbmibmjbmkbldbmlbmmbmnbmoblcbljbmpbmqbmrbmsbmtbmubmvbkvbmwbmxbmybmzbmAbmBbmCbmDbmEbmFbmGbmHbmIbkyaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmJbhgbmJaaaaaaaafaaaaaaaaaaafaaaaaabmJbhhbmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAbmKbmLbmMbmNbmLbmObmPbmQbmRbmLbmSbmNbmTbmMbmUbmLbmVbmWbkAaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUbmXbmYbmZblWblWbnablWbjrbnbbncbndbnebnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnobnsblkbntbnubnvbnwbnxbnybkvbnzbnAbmAbnBbmAbnCbmCbnDbnEbkybkybkybkybkyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhgaafaafaafaafaaaaaaaaaaafaafaafaafbhhaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10943,52 +10942,52 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJaaaaaaaaaaaaaaaaaaaaaaaaaaabkAbzcbzdbzebkAbkAbzfbzgbzhbzgbzibzjbzkbuvbutbzlbutbuvbuvbuwbuwbzmbuwbuwbuxbznbzobzpbuxbzqbzrbzsbztbuxbymbynbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbzubzvbzwbzxbxhcOBdcSdfrbuWbzAbzBbzCbzDbzEbuWbzFbzGbzHbxqbzIbuZbzJbzKbzLbzMbzNbzNbzNbzNbzNbzNbzObzNbzNbzNbzNbzPbzQbzRbzSbzTbzUbzVbzWbyObyPbzXbyObzYbzZbAabAbbAcbAdbxIaaaaaabhgaaaaaaaaaaaabyWbAebyZbAfbAgbAhbyWbAibyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjaaaaaaaaaaaaaaabAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaafaaaaaaaaaaaaaaaaaabAkbAkbAkbAkbAkbAkbAkbAkbAkbAlbAmbAnbAobApbAqbArbAsbAtbAtbAubAvbAwbAxbAybAzbAAbABbACbvCbADbAEbAFbuxbDJbymbymbymbAGbAHbAIbwUbAJbAKbALbAMbwUbwUbwUbwUbwUbwUbANbAObwUbAPbAQbuxbARbASbATbxhbxhbxhbxhbuWbAVbAWbAXbAYbAZbuWbBabBbbBcbBdbBebuZbBfbxibBgbBhbBibBjbBkbxibxibBlbBlbBlbBlbBlbBlbBlbBmbBnbBobBpbBqbBrbBrbBrbBrbBsbBsbBsbBsbBsbBtbBubBvbBwbBwbBxbBwbBxbBwbBxbBwbBwbBybBzbBAbBBbBCbyWbBDbyWbyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaaaaaabBEbBFbBGbBHbAkbBIbBJbBKbBLbBMbBMbBNbAkbBObBPbBQbBRbBSbBTbBUbBVbBUbBWbBXbBYbBZbCabCbbCcbCdbCebCfbvCbCgbzobChbuxbCibCjbymbymbuxbCkbClbymbCmbCnbuxbuxbCobuxbuxbCpbymbymbAQbCqbymbCrbuxbuxbCsbCtbCubvZbvZbCvbyJbuWbCwbCxbuWbuWbuWbuWbuZbuZbCybuZbuZbuZbBfbxibCzbCAbBibwnbCBbCCbCDbBlbCEbCFbCGbCHbCIbBlbCJbCJbCKbCJbCJbBrbCLbCMbCNbBsbCObBsbCPbBsbCQbCRbCSbBwbCTbCUbCVbCVbCWbCXbCYbBwbCZbDabDbbDcbDdbDebDfbDgbyWaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaadaadaaaaabaaaaaaaaabBEbDhbDhbDibAkbDjbDjbDjbDkbBMbDlbDmbAkbDnbDobDpbDqbDrbDsbDtbCfbDubDvbDwbDxbDubDybDybDzbDAbDBbDybuxbDCbDDbDEbuxbuxbuxbDFbymbuxbCrbDGbDGbDHbDGbDGbDIbymbImbuxbDKbymbDLbuxbvFbymbCrbymbuxbDMbDNbDObvZbxibxibzzbDPbxibDQbAUbAUbAUbAUbBgbDRbDSbDTbDUbDVbDWbDXbDYbvZbDZbDZbDZbDZbEabBlbEbbEcbEdbEebEfbEgbEhbEibEjbEkbElbBrbEmbEnbEobBsbEpbBsbEqbBsbBsbErbEsbEtbEubEvbCVbEwbExbEybEzbBwbEAbEAbEAbEBbEAbEAbEAbEAbEAbEAaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaadaadaadaagaafaaaaafaaaaaaaaaaaaaaaaaaaaabBEbECbEDbEEbAkbEFbEGbEGbEHbEGbEIbEJbAkbEKbELbEMbENbEObEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabFbbFcbuxbFdbFebFfbFgbFhbuxbvGbvFbuxbFibDGbFjbFkbFlbDGbFmbFnbChbuxbzpbymbFobuxbvGbymbFpbFqbFrbFsbFtbFubFvbDTbFwbDTbFxbDTbFybDTbDTbDTbDTbFzbFAbFBbFBbFBbFBbFBbFBbFCbFDbDZbFEbFFbFGbEabFHbFIbFJbFKbFLbFMbEgbFNbFObFPbEjbFQbBrbFRbFSbFTbFUbFVbFWbFXbFYbBsbFZbGabGbbGcbGdbGebGdbGfbGgbGhbGibGjbGkbGlbGmbGnbGobGpbGqbGrbGsaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaabBEbGtbGubGvbAkbGwbEGbEGbGxbGybGzbGAbGBbGCbGDbGEbGFbEObGGbGHbERbGIbGJbGKbGLbGMbEXbGNbGObGPbGQbGRbuxbGSbGTbGUbGVbFhbuxbAQbAQbuxbGWbDGbGXbFkbGYbDGbuxbuxbuxbuxbGZbGZbGZbuxbuxbuxbuxbuxbHabHbbHcbHdbHabvZbvZbvZbvZbvZbvibvibvibvZbvZbvZbvZbFBbHebHfbHgbHhbFBbHibHjbHkbHlbHmbHnbEabHobHpbEcbHqbHrbHsbEgbHtbHubHvbHwbHxbHybHzbHAbHBbBsbHCbHDbHEbHFbBsbHGbHHbBwbHIbHJbHKbHJbHKbHJbHLbEtbHMbHNbHObHPbHQbHRbHSbHTbHUbHVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaadaadaaaaabaaaaaaaaabBEbDhbDhbDibAkbDjbDjbDjbDkbBMbDlbDmbAkbDnbDobDpbDqbDrbDsbDtbCfbDubDvbDwbDxbDubDybDybDzbDAbDBbDybuxbDCbDDbDEbuxbuxbuxbDFbymbuxbCrbDGbDGbDHbDGbDGbDIbymbImbuxbDKbymbDLbuxbvFbymbCrbymbuxbDMbDNbDObvZbxibxibzzbDPbxibDQbAUbAUbAUbAUbBgbDRbDSbDTbDUbDVbDWbDXbDYbvZbDZbDZbDZbDZbEabBlbEbbEcbEdbEebEfbFMbEhbEibEjbEkbElbBrbEmbEnbEobBsbEpbBsbEqbBsbBsbErbEsbEtbEubEvbCVbEwbExbEybEzbBwbEAbEAbEAbFUbEAbEAbEAbEAbEAbEAaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaadaadaadaagaafaaaaafaaaaaaaaaaaaaaaaaaaaabBEbECbEDbEEbAkbEFbEGbEGbEHbEGbEIbEJbAkbEKbELbEMbENbEObEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabFbbFcbuxbFdbFebFfbFgbFhbuxbvGbvFbuxbFibDGbFjbFkbFlbDGbFmbFnbChbuxbzpbymbFobuxbvGbymbFpbFqbFrbFsbFtbFubFvbDTbFwbDTbFxbDTbFybDTbDTbDTbDTbFzbFAbFBbFBbFBbFBbFBbFBbFCbFDbDZbFEbFFbFGbEabFHbFIbFJbFKbFLbFVbFMbFNbFObFPbEjbFQbBrbFRbFSbFTbGbbGibFWbFXbFYbBsbFZbGabHybGcbGdbGebGdbGfbGgbGhbKrbGjbGkbGlbGmbGnbGobGpbGqbGrbGsaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaabBEbGtbGubGvbAkbGwbEGbEGbGxbGybGzbGAbGBbGCbGDbGEbGFbEObGGbGHbERbGIbGJbGKbGLbGMbEXbGNbGObGPbGQbGRbuxbGSbGTbGUbGVbFhbuxbAQbAQbuxbGWbDGbGXbFkbGYbDGbuxbuxbuxbuxbGZbGZbGZbuxbuxbuxbuxbuxbHabHbbHcbHdbHabvZbvZbvZbvZbvZbvibvibvibvZbvZbvZbvZbFBbHebHfbHgbHhbFBbHibHjbHkbHlbHmbHnbEabHobHpbEcbHqbHrbHsbEgbHtbHubHvbHwbHxbKtbHzbHAbHBbBsbHCbHDbHEbHFbBsbHGbHHbBwbHIbHJbHKbHJbHKbHJbHLbEtbHMbHNbHObHPbHQbHRbHSbHTbHUbHVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaafaaabHWbHWbHWbHWbHWbHWbHWbHXbHXbBEbHYbHZbDibAkbIabIabIbbIcbIdbIebIfbAkbIgbIhbIibIjbIkbIlccMbCfbInbIobIpbIqbIrbDybIsbItbIubIvbIwbIxbIxbIybIxbIxbIxbIxbuxbuxbuxbIzbDGbIAbIBbICbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbIEbIFbIGbIHbIIbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbIJbIKbILbILbIMbINbBqbDZbIObIPbIQbEabIRbISbITbIUbIVbIWbEgbEjbHubIXbIYbIZbBrbJabJbbJcbBsbJdbJebJfbJgbBsbJhbJibBwbBwbJjbJkbJlbJjbJmbJjbBwbJnbJobJpbJqbJrbJsbJtbJqbJubJvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafbHWbHWbJwbJxbJybJzbJAbHWbJBbJCbJDbJEbJFbJGbAkbIabIabJHbJIbJJbJKbJLbAkbJMbJNbJObJPbCfbERbJQbCfbJRbJSbJTbJUbJVbDybGNbJWbJXbJYbJZbIxbKabKbbKcbKdbKebIxbKfbKgbuxbCrbDGbKhbKibDGbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbKjbKkbHcbKlbKmbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbFBbKnbKobKpbFBbKqbvZbEabDZbKrbDZbEabBlbEgbKsbKtbKsbKubBlbKvbxIbKwbxIbKxbBrbBrbBrbBrbKybBsbKzbBsbBsbBsbHGbKAbyVbBwbBwbBwbBwbBwbBwbBwbBwbKBbKCbKDbKEbKFbKBbKGbKBbKHbKIbKJbKKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafbHWbHWbJwbJxbJybJzbJAbHWbJBbJCbJDbJEbJFbJGbAkbIabIabJHbJIbJJbJKbJLbAkbJMbJNbJObJPbCfbERbJQbCfbJRbJSbJTbJUbJVbDybGNbJWbJXbJYbJZbIxbKabKbbKcbKdbKebIxbKfbKgbuxbCrbDGbKhbKibDGbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbKjbKkbHcbKlbKmbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbFBbKnbKobKpbFBbKqbvZbEabDZbKzbDZbEabBlbEgbKsbOobKsbKubBlbKvbxIbKwbxIbKxbBrbBrbBrbBrbKybBsbPEbBsbBsbBsbHGbKAbyVbBwbBwbBwbBwbBwbBwbBwbBwbKBbKCbKDbKEbKFbKBbKGbKBbKHbKIbKJbKKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaafbKLbKMbKMbKMbKMbKNbKObKPbKQbKRbKSbKTbKUbHWbKVbKWbKXbKYbKZbBEbAkbAkbAkbAkbAkbAkbAkbAkbAkbLabLbbLcbLdbLebLfbLgbLhbLibLjbLkbLlbLmbEXbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbIxbLybLzbLAbCrbDGbDGbDGbDGaaaaaaaaaaaaaaaaaabLBbLBbLCbLCbLCbLBbLBbLDbLEbHcbLFbLGbLHbLHbIDbIDbIDbLHbLHaaaaaaaaaaaaaaaaaabFBbFBbFBbFBbFBbLIbBqbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbLWbLXbLYbLZbMabMbbMcbMbbMdbMebMfbMgbMhbMibMjbMkbMlbMmbMmbMnbMobMpbMmbMqbMrbJvbMsbMtbMubMvbMwbMxbMybMzbMAbMAbMBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaabaaaaadaadaadaadaadaadaadaagaadaaaaaaaaaaaabMCbMDbMEbKMbMDbKNbMFbMGbMHbMIbMJbMKbMLbMMbMNbMObMPbMQbBEbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbLkbLlbLmbEXbNlbJWbNmbNnbNobIxbNpbNqbNrbNsbNtbIxbNubNvbuxbCrbymbuxaaaaaaaaaaabaaaaaabLCbLCbLBbNwbNxbNybNzbNAbNBbNCbNDbHcbNEbNFbNGbNHbNIbNJbNKbNLbLHbIDbIDaaaaaaaabaaaaaaaaabvZbNMbDXbNNbBqbCKbNObNPbNQbNRbNSbNTbNUbNVbNWbNXbNYbNXbNZbOabObbNXbOabNXbOcbOdbOebNXbOfbOgbNWbNYbOabOhbNZbNXbOibOjbOkbOhbOlbOmbOnbOobOpbOqbOrbOsbOtbOubOvbOwbOxbOxdgpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKLbMDbMDbKMbMDbKNbMFbOybOzbOAbOBbOCbODbHWbOEbKXbOFbOGbOHbOIbOJbOKbOLbOMbONbOObOPbOQbORbOSbOTbOKbOUbOVbLgbNhbOWbNjbOXbOYbOZbPabDybDybDzbPbbDzbDybIxbIxbPcbPdbNsbPebIxbPfbPgbAQbCrbymbuxaaaaaaaaaaaaaaabLCbLCbPhbPibPhbPjbPkbPlbNAbNAbPmbNDbHcbNEbPmbNHbNHbPnbPobPpbPqbPrbPqbIDbIDaaaaaaaaaaaaaaabvZbPsbPtbPubPvbPvbPwbPxbPwbPwbPwbPwbPybPzbCSbPAbPAbPAbPAbPBbPAbPAbPAbPAbPAbPAbPAbPCbPDbPEbPFbPFbPFbPFbPFbPFbPFbPGbPHbPIbPJbPKbPLbJvbPMbPNbMubPObPPbPQbMybPRbPSbPTbMBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaabaaaaadaadaadaadaadaadaadaagaadaaaaaaaaaaaabMCbMDbMEbKMbMDbKNbMFbMGbMHbMIbMJbMKbMLbMMbMNbMObMPbMQbBEbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbLkbLlbLmbEXbNlbJWbNmbNnbNobIxbNpbNqbNrbNsbNtbIxbNubNvbuxbCrbymbuxaaaaaaaaaaabaaaaaabLCbLCbLBbNwbNxbNybNzbNAbNBbNCbNDbHcbNEbNFbNGbNHbNIbNJbNKbNLbLHbIDbIDaaaaaaaabaaaaaaaaabvZbNMbDXbNNbBqbCKbNObNPbNQbNRbNSbNTbNUbNVbNWbNXbNYbNXbNZbOabObbNXbOabNXbOcbOdbOebNXbOfbOgbNWbNYbOabOhbNZbNXbOibOjbOkbOhbOlbOmbOnbPGbOpbOqbOrbOsbOtbOubOvbOwbOxbOxdgpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKLbMDbMDbKMbMDbKNbMFbOybOzbOAbOBbOCbODbHWbOEbKXbOFbOGbOHbOIbOJbOKbOLbOMbONbOObOPbOQbORbOSbOTbOKbOUbOVbLgbNhbOWbNjbOXbOYbOZbPabDybDybDzbPbbDzbDybIxbIxbPcbPdbNsbPebIxbPfbPgbAQbCrbymbuxaaaaaaaaaaaaaaabLCbLCbPhbPibPhbPjbPkbPlbNAbNAbPmbNDbHcbNEbPmbNHbNHbPnbPobPpbPqbPrbPqbIDbIDaaaaaaaaaaaaaaabvZbPsbPtbPubPvbPvbPwbPxbPwbPwbPwbPwbPybPzbCSbPAbPAbPAbPAbPBbPAbPAbPAbPAbPAbPAbPAbPCbPDbSWbPFbPFbPFbPFbPFbPFbPFbTabPHbPIbPJbPKbPLbJvbPMbPNbMubPObPPbPQbMybPRbPSbPTbMBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMCbKMbKMbKMbKMbKNbKObPUbPVbPVbPWbPXbPYbHWbPZbQabQbbQcbDibQdbQebQfbQgbQhbQibQhbQhbQjbQhbQgbQkbQlbQmbQnbQobQpbQkbQqbQrbQsbOZbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbNsbQEbIxbQFbPgbAQbCrbQGbuxaaaaaaaaaaaabLCbLCbQHbQIbQJbQKbQLbQMbQNbQJbQObQPbQQbHcbQRbQPbQSbNEbQTbQUbQVbQWbNEbQXbQYbIDbIDaaaaaaaaaaaabvZbQZbvZbvZbPvbRabRbbRcbRdbRebRfbRgbRhbRibEsbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbPAbPCbRubRvbRwbRxbPFbRybRzbRAbPFbRBbRCbPIbPIbRDbREbRFbRGbRHbRIbRJbKBbKKbKBbKBbKBbKBbKGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabHWbRKbRLbRMbRNbRObRPbHWbRQbRRbQbbRSbDibRTbRUbQgbQgbRVbRWbRXbRYbRZbSabSbbQkbScbSdbSebSfbSgbShbSibSjbSkbEVbSlbSmbSnbSobSpbSqbSrbSsbStbStbSubStbStbStbStbuxbuxbCrbSvbuxaaaaaaaaabLCbLCbQHbQIbSwbSwbSxbSybSzbSAbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSJbSKbSLbSMbSMbQXbQYbIDbIDaaaaaaaaabvZbSNbSObSPbPvbSQbSRbSSbSTbSUbSVbSWbSXbSYbSZbTabTbbTcbTdbTdbTdbTebTfbTgbThbTibTjbPCbTkbTlbTmbTnbTobTobTobTobPFbTpbTqbTrbPIbTsbTtbKBbTubTvbTwbTxbTybTzbTAbTBbJvaaaaaaaabaaaaaaaaaabcaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabHWbRKbRLbRMbRNbRObRPbHWbRQbRRbQbbRSbDibRTbRUbQgbQgbRVbRWbRXbRYbRZbSabSbbQkbScbSdbSebSfbSgbShbSibSjbSkbEVbSlbSmbSnbSobSpbSqbSrbSsbStbStbSubStbStbStbStbuxbuxbCrbSvbuxaaaaaaaaabLCbLCbQHbQIbSwbSwbSxbSybSzbSAbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSJbSKbSLbSMbSMbQXbQYbIDbIDaaaaaaaaabvZbSNbSObSPbPvbSQbSRbSSbSTbSUbSVbWObSXbSYbSZcdnbTbbTcbTdbTdbTdbTebTfbTgbThbTibTjbPCbTkbTlbTmbTnbTobTobTobTobPFbTpbTqbTrbPIbTsbTtbKBbTubTvbTwbTxbTybTzbTAbTBbJvaaaaaaaabaaaaaaaaaabcaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaafaaaaaaaaabKLbTCbKLbTCbKLbTCbKLbTCbKLbTCbKLbTCaafaafbTDbTEbTDbTDbTDbTDbTDbTEbTFbTGbTDbBEbTHbQbbTIbDibTJbTKbQgbTLbTMbTNbTObTPbTQbTRbTSbQkbTTbTUbTVbTWbTXbTYbTZbSjbUabEVbUbbUcbUdbUebUfbUgbUhbUibStbUjbUkbUlbUlbUmbStbUnbymbCrbUobGZaaaaaaaaabLCbUpbQIbSwbUqbUrbUsbUtbUubUvbUwbUxbUybUzbUAbUBbQPbUCbNEbUDbUEbUFbUGbUHbUIbSMbQXbUJbIDaaaaaaaaabvibUKbxibULbPvbUMbUNbUObUPbUQbURbUSbUTbUUbUVbRjbUWbUXbUYbUZbUYbVabTibVbbVcbVdbVebPCbVfbVgbVhbVibVjbVkbTobVlbPFbVmbVnbVobPIbVpbVqbKBbVrbVsbVtbVtbVtbVsbVsbVubHVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabVvbVwbVxbVwbVxbVwbVxbVwbVxbVwbVxbVwbVybVzbVAbVBbVCbVDbVBbVEbVBbVFbVGbVHbVIbBEbVJbVKbVLbVMbVNbVObQgbVPbTMbVQbVRbVSbVTbTRbVUbQkbVVbVWbVXbVYbVZbWabNjbWbbWcbWdbWebWfbWgbWhbWibWjbUhbWkbWlbWmbWnbWobWpbWqbStbWrbymbCrbWsbGZaaaaaabLBbLBbWtbQJbSwbWubWvbWwbWxbWybWxbWxbWzbWAbKjbWBbWCbWDbWDbWEbWFbWGbWDbWDbWHbUHbSMbNEbWIbLHbLHaaaaaabvibUKbxibWJbPvbWKbWLbWMbUPbWNbPvbPvbxHbWObxHbPCbPCbWPbWQbWRbWSbVabWTbWUbWVbWWbWXbPCbWYbWZbXabXbbVjbXcbTobXdbPFbXebXfbXgbPIbXhbBvbKBbVrbXibXjbXkbXlbXmbXnbVubGsaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabVvbVwbVxbVwbVxbVwbVxbVwbVxbVwbVxbVwbVybVzbVAbVBbVCbVDbVBbVEbVBbVFbVGbVHbVIbBEbVJbVKbVLbVMbVNbVObQgbVPbTMbVQbVRbVSbVTbTRbVUbQkbVVbVWbVXbVYbVZbWabNjbWbbWcbWdbWebWfbWgbWhbWibWjbUhbWkbWlbWmbWnbWobWpbWqbStbWrbymbCrbWsbGZaaaaaabLBbLBbWtbQJbSwbWubWvbWwbWxbWybWxbWxbWzbWAbKjbWBbWCbWDbWDbWEbWFbWGbWDbWDbWHbUHbSMbNEbWIbLHbLHaaaaaabvibUKbxibWJbPvbWKbWLbWMbUPbWNbPvbPvbxHcfqbxHbPCbPCbWPbWQbWRbWSbVabWTbWUbWVbWWbWXbPCbWYbWZbXabXbbVjbXcbTobXdbPFbXebXfbXgbPIbXhbBvbKBbVrbXibXjbXkbXlbXmbXnbVubGsaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabMCbKMbKMbKMbKMbKMbKMbKMbKMbKMbKMbKMbVybXobXpbXqbXrbXsbXtbXrbXsbXubXvbXwbXxbBEbXybXzbKZbDibXAbXBbQgbXCbTMbTObXDbXEbTObTRbXFbQkbXGbXHbXIbXJbXKbXLbXMbXNbXObGLbXPbUcbQwbXQbXRbXRbXSbQwbStbXTbXUbXVbXWbXXbStbWrbymbCrbDLbGZaaaaaabLBbXYbXZbYabYbbYcbWwbWwbYdbYebYfbWwbYgbWAbWAbYhbWDbWDbYibYjbYkbYlbYmbWDbWDbYnbYobYpbYqbYrbLHaaaaaabvibUKbYscvCbPvbYtbYubYubYvbYwbUSbYxbYybYzbYAbYBbRjbYCbYDbYDbYDbYEbYFbYFbYGbYHbYFbYIbYJbYKbYLbYMbTobTobTobYNbPFbYObYPbYQbPIbRDbREbKBbYRbKBbKBbKBbKBbKBbKBbKBbKBbYSbYSaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabKLbTCbKLbTCbKLbTCbKLbTCbKLbTCbKLbTCaadbYTbYUbYVbYWbYXbYVbYWbYXbXubYYbYZbZabBEbZbbZcbZbbDibZdbZebQgbZfbZgbZhbZibXEbZhbZjbZkbQkbZlbZmbZnbZobZpbZqbSibOXbEVbEVbSlbZrbZsbQwbQwbQwbQwbZtbStbZubStbZvbStbStbStbuxbymbCrbZwbuxaaaaaabLCbZxbZybZzbZAbZBbZCbZDbZEbZFbZGbWwbZHbZHbZIbZJbWDbZKbZLbZMbZMbZNbZObZPbWDbZQbZRbZSbYqbZTbIDaaaaaabvZbUKbAUbvZbPvbZUbZVbZWbZWbZXbZYbZZcaacabcaccadcaecafcagcagcagcahcaicajcakcalcambYIcancaocapcaqbPFcarcascatbPFcaucavcawbPIbRDbREcaxcaycazcaAcaBcaCcaDcaEcaFcaGcaHcaIcaIcaHcaHcaHcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvbVwbVxbVwbVxbVwbVxbVwbVxbVwbVxbVwbVycaJbTDcaKbYWbYXbYVbYWbYXbXucaLcaMcaMcaMcaMcaMcaMcaMcaNcaObQgcaPcaQcaRcaScaTcaUcaVcaWbQkbQkcaXbQkcaYcaZbQkcbacbbbEVcbccbdbQucbecbfcbgcbhcbicbjbStcbkbStcblbStcbmcbncbobymbCrbymbuxaaaaaabLCcbpcbqcbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcbCcbDbWDcbEcbFcbGcbHcbIbZOcbJcbKcbLcbMcbNcbOcbPbIDaaaaaabvZbUKcbQcbRbPvbPvcbScbTcbUcbVbUScbWcbXcbYcbZccaccbcccccdcceccfccgcaicchcciccjcckbYIbPFcclbPFbPFbPFbPFbPFbPFbPFbPIbPIbPIbPIccmccncaxccoccpccqccrccscctcaCcaFcaFcaHccuccvccwcaHccxccycaHcaHaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvcczccAcczccAcczccAcczccAcczccAcczbVyccBbTDccCbYWccDccEbYWccDbXuccFcaMccGccHccIccJccKcaMbXAccLcaWcaWcaWcaWcaWcaWcaWcaWcaWcCibQkbQkbQkbQkbQkbQkccNccObDxccPccNccQccQccQccQccQccQccQccRccRccRccRbStccSccTbuxccUccVccWbuxaaaaaabLCccXccYccZcdacdbbWwbWwbWwbWwbWwbWwcdccddcddcdebWDbWDbWDbWDbWDcdfbZOcdgbWDcdhcbMcdicbOcdjbIDaaaaaabvZcdkbxibxicdlbPvbPvbPvbPvbPvbPvcdmcdncdocdncdmbPCbPCbPCbPCbPCbPCbYIcdpcdqcdqcdrbYIcdscdscdscdtcducdvcdwcdxcdycdzcdAbxHcdBcdCcdDcdEcdFcdGcdHccrccscdIcaCcdJcaFcdKcdLcdMcdNcaIcdOcdMcdPcaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdQbMCcdQbMCcdQbMCcdQbMCcdQbMCcdQaafaafbTDcdRcdScdTcdUcdVcdTcdWcdXcdYcdZceacebceccedceebXAcefcegcehceicejcekcekcekcekcekcekcekcekcekcelcemcenceocepceqceqcerbuxcescescetbDLceubymbAQbAQbvFbvGbuxcevbuxbuxbymbCrcewbuxaaaaaabLBcexccYbQJceycezceAceBceCceDceEceFceGceHceHceIceHceHceHceJceKceLceMceNbWDbNEceObNEcbObNGbLHaaaaaabvZcePceQceQceQceRceSbxiceTceUbvZceVceWceXceWceYceZcfacfbcfccfdcfebYIbYIcffcfgbYIbYIcfhcficficfjcfkcflcfmcfmcfmcdvcfnbxHcfocfpbOncfqcfrcfscftccrccsccscdIcdIcaFcaHcfucfvcfwcfxcfycfzcfAcfBcfCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvcczccAcczccAcczccAcczccAcczccAcczbVyccBbTDccCbYWccDccEbYWccDbXuccFcaMccGccHccIccJccKcaMbXAccLcaWcaWcaWcaWcaWcaWcaWcaWcaWcCibQkbQkbQkbQkbQkbQkccNccObDxccPccNccQccQccQccQccQccQccQccRccRccRccRbStccSccTbuxccUccVccWbuxaaaaaabLCccXccYccZcdacdbbWwbWwbWwbWwbWwbWwcdccddcddcdebWDbWDbWDbWDbWDcdfbZOcdgbWDcdhcbMcdicbOcdjbIDaaaaaabvZcdkbxibxicdlbPvbPvbPvbPvbPvbPvcdmcipcdocipcdmbPCbPCbPCbPCbPCbPCbYIcdpcdqcdqcdrbYIcdscdscdscdtcducdvcdwcdxcdycdzcdAbxHcdBcdCcdDcdEcdFcdGcdHccrccscdIcaCcdJcaFcdKcdLcdMcdNcaIcdOcdMcdPcaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdQbMCcdQbMCcdQbMCcdQbMCcdQbMCcdQaafaafbTDcdRcdScdTcdUcdVcdTcdWcdXcdYcdZceacebceccedceebXAcefcegcehceicejcekcekcekcekcekcekcekcekcekcelcemcenceocepceqceqcerbuxcescescetbDLceubymbAQbAQbvFbvGbuxcevbuxbuxbymbCrcewbuxaaaaaabLBcexccYbQJceycezceAceBceCceDceEceFceGceHceHceIceHceHceHceJceKceLceMceNbWDbNEceObNEcbObNGbLHaaaaaabvZcePceQceQceQceRceSbxiceTceUbvZceVceWceXceWceYceZcfacfbcfccfdcfebYIbYIcffcfgbYIbYIcfhcficficfjcfkcflcfmcfmcfmcdvcfnbxHcfocfpbOncoHcfrcfscftccrccsccscdIcdIcaFcaHcfucfvcfwcfxcfycfzcfAcfBcfCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaabTDcfDbXrcfEcfFcfGcfHbXucfIcaMcaMcaMcaMcfJcfKcfLcfMcfNcfOcfOcfPcfQcfRcfRcfRcfRcfRcfRcfRcencencencfScfTcfUcfVcfWcfXcfYcfZcgacgbcgacgacgacgacgacgccgccgccgccgdcgccgccgccgecgfbuxbLCbLCbLBcggccYcghcgicgjcgkcglcglcgmceEcgnbWAbWAbWAbWAbWAbWAbWAcgnbWEcgocgpcgqbWDcgrcgscgtcgucgvbLHcgwcgwbvZbUKbxibAUbCCbCDcgxbxicgybxicgzcgAcgBcgCcgDcgAcgEcfacgFcgGcgHcgIcgJcgKcgLcgMcgNcgNcgOcdtcdtcdtcdtcdtcdtcdtcfmcdvcgPbxHcgQcgRcgScaxcgTcgUcgVccrccscdIcgWcgXcaFcaHcgYcgZchacaHcaIchbcaIcaHcaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDchdchechfbXuchgchhchichjchkchlchmchnchochpchqchrchschtcfRchuchuchuchuchuchvchwchxcenchychzchAchBchCchDchEbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxchFchGchHchIbLBchJchKchLchMchNcgkcgkchOchPceEchQbWAchRchRchRchRchRbWAchSbWDchTchUbWDbWDchVchWchVchXchYchZciacibciccidbvgbvZbvZbvZbvZbvZbvZbvZbvZciecifcigcihcieceZceZceZciiceZceZceZceZcijcikcgNcilcimcinciociociociociocdtcdvcdvcaGbxHcipbxHbxHcaxciqcaxcaxccrcaFcaGcaHcaHcaHcaHcircgZciscitciucivciwcixcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDchdchechfbXuchgchhchichjchkchlchmchnchochpchqchrchschtcfRchuchuchuchuchuchvchwchxcenchychzchAchBchCchDchEbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxchFchGchHchIbLBchJchKchLchMchNcgkcgkchOchPceEchQbWAchRchRchRchRchRbWAchSbWDchTchUbWDbWDchVchWchVchXchYchZciacibciccidbvgbvZbvZbvZbvZbvZbvZbvZbvZciecifcigcihcieceZceZceZciiceZceZceZceZcijcikcgNcilcimcinciociociociociocdtcdvcdvcaGbxHcoIbxHbxHcaxciqcaxcaxccrcaFcaGcaHcaHcaHcaHcircgZciscitciucivciwcixcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafciybTDcizciAciBciCciDciEciFciGciHciIciJciKciLciMciNciOciPciQciRcfOciSciTcfRchuchuchuchuchuciUciVciWciXciYciZcjacjbcjccjdcjecjfcjgchCcjdcjhcjicjbcjjcjkcjlcjmcjbcjncjociWcjpcjqcjrcjscjtcjucjvbUwbUwcjwcjxcjycjzcgkceEceEceEcdcbWAchRchRchRchRchRbWAcgnbWDbWDbWDbWDciacjAcjBcjCcjDcjDcjEcjFcjGcjHcjIcjJcjKcjLcjMcjNcjOcjPcjQcjRcjNcjOcjScjTcjUcjVcjWcjXcjTcjYcjZckackbcijckcckdckeckfckgciociociociociocdtckhcdvckickjckkcklcaGckmcknckockpcaCckqckrcaHckscktcaHckucgZcdMcdMcdMcgZcdMckvckwcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackxckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMchnbLgckNcfOcfOckOcencfRchuchuchuchuchuckPckQckRckSckTckUckVckWckXckWckYckUckZckUckUclaclbckUckUclccldcledhndhpdhqclhclicljclkcllclmcllcllcllcllcllclncloclpbYhclqclrceHclsbWAchRchRchRchRchRbWAcltbZJcluclvclwclxclyclzclAclAclAclAclAclBclCclDclEclFclGclHclIclHclHclJclKclHclIclLclHclMclHclHclNclHclHclOclPclJclQclRclSclTclUclVciociociociociocdtclWcdvclXclYclZcmacmbcmccmdcmecmfcmgcmhcmicmjcmkcmlcmmcmncmocmpcmqcmrcmscmtcdMcmucmvaafaafaafaadaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaaabTDcmwciAcmxcmycmzcmAcmBcmCcmDcmEcmFcmGcmHcmIcmJcmKcfOcfOcfOcmLcmMcmNcfRchuchuchuchuchucmOcmPciWciXcmQcmRcmScmTcjccmUcmVcmWcmXchCdhscmYcmZcmTcnacnbcnccndcngdhSdiqcnhcnicnjcnkcnlcnmcnncnobUwbUwcnpcnqcnrcnsbWAcntcnucddcddbWAchRchRchRchRchRbWAcnvcnwcnxcnybWAcnzcnAcnBcnCcnDcnDcnEcnFcnGcnHcnIcnJcjKcjLcjPcnKcjPcjPcnLcnMcnNcnOcnPcnQcnRcnRcnScnTcnLcnRcnUcnVcnWcnXckcckdcnYcnZcoaciociociociociocdtcobcoccaGcodcoecofcaGcogcohcogcoicojcokcolcaHcomconcaHcoocopcoqcdMcorcgZcdMcoscotcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDcoucovcowbXucoxchhcoycozcoAcoBcoCcoDcoEcoFcoGcoHcoIcmLcfRchuchuchuchuchuchvcoJcoKcencencoLchEcoMchCcoNcoOcoPcoPcoPcoPcoPcoPcoQcoQcoRcoScoQdirdwgdwqditcoTcoVcoWchGcoXcnsbLBcoYchKchLcoZchNbLBbWAcgncpacpbcpcbWAchRchRchRchRchRcpdcpdcpecpdcpdcpdcpdcpfchWchVchXcpgchZcphcpiciccpjcpkcpkcpkcplcpmcpncpncpncpncpncpocpncpncpncpncpncpncppcpqcprcnVcpsciecptcgNcpuciecinciociociociociocdtcpvcdvcaGcpwcpxcpycpzcpzcpzcpAcpzcpBcpzcpzcaHcaHcaHcaHcpCcpDcpEcpFcpGcpHcpIcpJcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaabTDcpKcpLcpMcpNchecmDbXucpOcpPcpPcpQcpPcpRcpScpPcoEcmLcmLcpTcpUcmLcfRcfRcfRcfRcfRcfRcfRcencencencpVcpWcpXcpYcpZcqacpXcqbcqccqdcqecqfcqgcqhcqicqjcqkcqlcoQdwTdwWdwTdwUcqncqocoVbLCbLCcqpcqqcqrcqscqtcqubWzcqvcqwcqxcqxcqxcqycqycqzcqAcqBcqpcpdcqCcqDcqEcqFcqGcpdcqHcqIcjCcqJcqKchZcgwcgwcpkcqLcqMcqNcqOcqPcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqZcracracrbcrccrdcrecrfcrgcrhcrhcrhcricdtcdtcdtcdtcdtcdtcdtcfmcdvcrjcpwcrkcrlcrmcrncrocrpcrqcrrcrscrtcrucrvcrvcaHcrwcgZcrxcaHcaIcrycaIcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabKLbTCbKLbTCbKLbTCbKLbTCbKLbTCbKLbTCaafaafbTDcrzbXrcrAcrBcrCcrDcrEcrFcrGcrHcrIcrJcrKcrLcpPcrMcrNcrNcrOcrPcrQcrRcrRcrRcrScrTcrUcrVcpVcpVcrWcpVcencrXcrXcrXcrXcrXcoPcrYcrZcsacsbcsccoQcsdcsecsfcsgcoQdyidypdybdwUcshcqocoVaaaaaacqpcsicqrcsjcskcslbWzcsmcsncqxcsocspcsqcsrcsjcsjcsjcsscstcsucsvcswcsxcsycpdcszcsAcjDcsBcsCchZaaaaaacpkcsDcsEcsFcpkcsGcsHcpncsIcsJcsKcsLcsMcsNcsOcsPcsQcsRcsScpncsTcsUcsVcsVcsWcrhcdvcdvcsXcfmcfmcfmcfmcfmcfmcfmcfmcdvcsYcpwcsZctacrmctbctcctdctectfctgcthcticrvcrvctjctkctlctmcaIctnctoctpcaHaaaaaaaaaaaaaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvbVwbVxbVwbVxbVwbVxbVwbVxbVwbVxbVwbVybVzbTDctqctrctscttctrctuctvctwcpPctxctyctzctActBcpPctCctDctDctEctFctDctDctGctGctHctHctIctJctIctKctIctIctLctLctMctNctMctLctLctOctOctOctPctOctOctQctRctScoQcoQdUPdUQdBMdwUctTcqocoVaaaaaactUctVctWctXcskctYbWzctZcuacubcuccudcuecufcugcuhcsjcuicujcukculcumcuncuocpdcupcsAcuqcurcuscgwaaaaaacpkcutcuucuucuucuvcuwcuucuucuxcuxcuxcuycuzcuAcuzcuzcuzcuzcuBcuCcuDcuEcuFcuCcuGcuGcuGcuGcuGcuGcuGcuHcuHcuHcuHcuIcuIcuIcuIcuJcuKcuLctbcuMcrqcrqcrqcrqcrqcrvcrvcrvcaHcuNcorcuOcaIcdOcdMcdPcaHaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvcczccAcczccAcczccAcczccAcczccAcczbVycaJbTDcaKcuPcuQcuRcuScuQcuTcuUcpPcpPcpPcpPcpPcpPcpPcuVctDcuWcuXcuYcuZctDcvacvbcvccvcctIcvdctIcvecvfcvgcvhcvicvjcvkcvjcvlcvmcvncvocvpcvqcvrctOcvscvtcvucvvcoQdUSdUTdURdwUcvwcqocoVaaaaaactUcvxcvycvzcvAcvBbWzcDQcvDcqxcvEcvFcvGcvHcvIcvJcsjcvKcvLcvMcvNcumcvOcvPcvQcvRcsAcvScvTcvUcgwaaaaaacpkcsDcuucvVcvWcvXcvYcvZcwacwbcwccwdcuycwecwfcwgcwhcwicwjcwkcwlcwmcwncwocwpcwqcwrcwscwtcwucwvcwwcwxcwycwzcwAcwBcwCcwDcwEcwFcwGcrmcwHcwIcwJcrqcrqcrqcwKcwLcwIcrvcaHcwMcwNcwOcaHccxcwPcaHcaHaafaafaafaadaXGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdQbMCcdQbMCcdQbMCcdQbMCcdQbMCcdQaadbYTcwQcwRcwScwTcwUcwScwTcwVcwWcwXcwYbTDcrMcrNcrNcrNcwZctDcxacxbcxccxdctDcvacxectHctHctIcxfcxgcxhcxicxjcxkcxlcxlcxlcxmcxncxocxpcxqcxrcxscxtcxucxvcxwcxxcvvcoQdwUdwUdwUdwUcoVcqocoVaaaaaactUcxycqrcxzcxAcxBbWzcxCcxDcqxcxEcxFcxGcsrcxHcxIcxJcvKcxKcxLcxMcxNcxOcxPcpdcvRcxQcxRcxScxTcgwaaaaaacpkcsDcuucxUcxVcxWcxXcxYcxZcyacybcyccuzcydcyecyfcygcyhcyicyjcykcylcymcyncyocypcyqcyrcyscyrcytcwwcyucyvcywcwAcyxcyycyzcwEcyAcyBcrmcrmcrmcrmcrmcrmcrmcrmcrmcpzcpzcaHcyCcaIcaHcaHcaHcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaadaaaaaaaaabKLbKMbKMbKMbKMbKMbKMbKMcyDbKMbKMbKMbVybXocyEcyFcyGcyHcyIcyJcyHcyKcyLcyLcyMbTDcyNcmLcyOcyOcyPcyOcyOcyQcyRcySctDctDcyTcyUcyVctIcyWcyXcyYcyZczaczbcxlcxlczcczdczeczfctOczgczhcziczjctOcoQcoQczkcoQcoQcqmcqmcqmcqmcoVcqoczlaaaaaacqpcsicqrczmcznczobWAbWAczpcqxcxEczqczrcsrcsjcvAcsjczscpdcztczuczvczwcpdcpdczxczyczzczAczBchZaaaaaaczCcsDcuuczDczEcxWczFczGcxZczHczIczJcuzczKcyeczLczMczNczOczPczQczRczSczTczUczVczWczXczYczXczZcAacAbcAccAdcwAcAecAfcAgcwEcAhcAicAjcAkcAlcAmcAncAocApcAqcArcAsbYScAtcAuaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabVvcczccAcczccAcczccAcczccAcczccAcczbVyccBbTDbTDcAvcAwcAxbVEcAxcAycyLcyLcAzbTDcyNcmLcyOcAAcABcACcyOcuXcADcAEcAFctDcAGcAHcAIctIcAJcAKcALcAMcANcAOcAPcAQcAQcARczecAScATcAUcAVcAWcAXctOcAYcAZcBacBbcBccqmcBdcqmcBecoVcqoczlaaaaaacqpcqpcBfcsjcuhcBgcBhbWAcBicqxcqxcqxcqxcBjcBkcBlcBkcBmcpdcpdcBncBocpdcpdcBpcBqcBrcjDcBschZchZaaaaaaczCcsDcuucuucBtcBucBvcBwcxZcBxcBycBzcuzcBAcBBcBCcBCcBDcBEcBFcBGcBHcBIcwocBJcypcBKcBLcBMcBNcBOcuGcBPcBQcBRcwAcBScBTcBUcwEcBVcBWcBXcBYcBYcAmcBZcCacCbcAmcAmcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabMCcdQbMCcdQbMCcdQbMCcdQbMCcdQbMCcdQaafaafaafbTEbTDbTDbTDbTDbTDbTDbTDbTDbTDbTDcCccencyOcCdcABcCecyOcCfcCgcChcNpcCjcCkcClcCmctIcCncCocCpcCqctIcCrcCscCtcCtcCucCvcCwcxpcCxcCycxrcCzctOcAYcCAcCBcCCcBbcBbcqmcBdcqmcoVcqoczlaaaaaaaaactUcCDcCEcuhcCFcCGcCHcCIcCJcCKcCKcCLcCMcCNcskcCOcCMcCPcnDcCQcCRcCScCTcCUcCVcBrcCWcCXcgwaaaaaaaaaczCcsDcCYcuucCZcDacDbcDccxZcDdcDecDdcuzcDfcyecDgcDhcDicDjcDkcDlcwmcDmcwocDncypcDoczXcDpczXcDqcuGcDrcDscDtcwAcDucDvcDwcwEcDxcDycDzcDAcDBcDCcDDcDEcApcDFcDGcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcDIcDJcDKcDLcDLcDMcDNcDOcDPcPXcyOcDRcDScDTcyOctDctDctDctDcDUcDVcDWcDUctIcDXctIcDYcDZctIcEacEbcEccEccEdcEecEactOcEfcEgcEhcEictOcEjcEjcEjcEkcEjcBbcBbcBbcqmcoVcqocoVaaaaaaaaactUctUcElcCEcuhcuhcEmcEncEocEocEpcEqcErcEscEtcEucErcEvcEwcExcExcEycEzcBrcBrcCWcEAcgwcgwaaaaaaaaacpkcsDcEBcuucuucECcEDcEEcxZcEFcEGcEHcuzcEIcEJcEKcELcEMcENcEOcEPcEQcERcEScETcuGcEUcEVcEWcEXcEYcuGcEZcFacFbcwAcFccFdcFecwEcFfcFgcFhcFicFjcAmcFkcFlcFmcAscAscAsaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcFncFocFpcFqcDHcDHcDHcFrcFscFtcyOcyOcyOcyOcyOcFucFvcFwcFxcDUcFycFzcFAcFBcFCcFDcFEcFFctIcFGcFHcFIcFJcFKcFLcFMctOcxpcFNcxpcFOctOcFPcFQcFRcFScEjcoVcoVcFTcoVcoVcFUcoVaaaaaaaaaaaactUctUcElcCEcsjcFVcFWcFXcFYcsjcFZcGacGbcskcGccGacGdcjDcGecGfcGgcGhcjDcCWcEAcgwcgwaaaaaaaaaaaacpkcsDcGicGjcGkcGlcGmcGncGocGpcGqcGrcuzcGscuzcuzcGtcGucGtcuycuEcGvcuEcGwcuEcuGcwwcGxcGycwwcuGcuGcGzcGAcGBcwAcwEcGCcwEcwEcFfcFgcFhcGDcGEcAmcGFcGGcGHcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacFpcGIcFpcGJcGKcGLcDHcGMcGNcFscGOcGPcGQcGRcGScGTcFucGUcGVcFxcDUcGWcGXcGYcGZcHacDUcHbcHccHdcHecHfcHgcHgcHhcHicHjcHkcHlcHmcHncHocEjcHpcHqcHrcHscEjcHtcHucBbcHvcHwcHxcoVaaaaaaaaaaaaaaactUctUcHycHzcHycHAcHBcHCcHDcHDcHEcslcskcslcHEcHFcHFcHGcHHcHIcHJcHKcHJcgwcgwaaaaaaaaaaaaaaacpkcHLcHMcGjcHNcHOcHPcHQcHRcHScHTcHUcHVcHWcHXcHYcHZcIacHUcIbcIccIdcIecIfcIgcIhcIicIjcIkcIlcImcIncIocIpcIqcIrcIscItcIucIvcIwcIxcIycIzcIAcAmcAmcIBcAmcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaafaafaafaagaadaadaadaadaadaadaagaaaaaaaaacFpcICcIDcIEcGKcIFcIGcIHcIIcIJcGOcIKcGQcGRcGScGTcGTcILcIMcFxcDUcINcIOcIPcIQcIRcIScITcIUcIVcIWcIXcIVcIVcIYcIZcJacJbcJccITcJdcJecJfcJgcJhcJicJjcJkcHtcHucBbcFUcBbcJlcoVaaaaaaaaaaabaaaaaactUctUcqpcJmcJncJocJpcHDcsicJqcslcskcslcJrczBcHFcJscJtcJucJvchZcgwcgwaaaaaaaabaaaaaaaaacpkcJwcJxcGjcGkcJycJzcJAcJBcJCcJDcJEcJFcJGcJHcJIcJJcJIcJEcJKcJLcJMcJNcJOcJPcJQcJRcJScJTcJUcJVcJWcJXcJYdUUcKacJXcKbcJXcKccJXcKdcKecKfcKgcKhcKicKjcKkcKlaaaaaaaabaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaacDHcKmcKncKocGKcKpcDHcKqcKrcKscKtcKtcKucKtcKucKvcKwcKxcIMcIMcDUcKycKzcKzcKAcKBcKCcHgcKDcHgcKEcHgcHgcHgcKDcKFcKGcKGcKGcKGcKGcKGcKHcKIcKJcKKcKLcEjcHtcHucBbcKMcKNcKNcKNcKNcKNaaaaaaaaaaaaaaaaaacqpcqpctUctUctUcqpcqpcqpcKOcKPcKQcqpchZchZcgwcgwcgwchZchZaaaaaaaaaaaaaaaaaacKRcKRcKRcKRcKScKTcKTcKUcKVcKTcKWcKXcKYcKXcKZcLacLbcLccLdcLccLbcLbcLbcLecLfcLgcLbcLhcLicLjcLkcLjcLhcLhcLlcLmcLncLmcLlcAjcLocLpcLqcLrcAjcLscLtcLucLvcLwcLxcLyaaaaaaaaaaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDcoucovcowbXucoxchhcoycozcoAcoBcoCcoDcoEcoFcoGcmLcrQcrOcfRchuchuchuchuchuchvcoJcoKcencencoLchEcoMchCcoNcoOcoPcoPcoPcoPcoPcoPcoQcoQcoRcoScoQdirdwgdwqditcoTcoVcoWchGcoXcnsbLBcoYchKchLcoZchNbLBbWAcgncpacpbcpcbWAchRchRchRchRchRcpdcpdcpecpdcpdcpdcpdcpfchWchVchXcpgchZcphcpiciccpjcpkcpkcpkcplcpmcpncpncpncpncpncpocpncpncpncpncpncpncppcpqcprcnVcpsciecptcgNcpuciecinciociociociociocdtcpvcdvcaGcpwcpxcpycpzcpzcpzcpAcpzcpBcpzcpzcaHcaHcaHcaHcpCcpDcpEcpFcpGcpHcpIcpJcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaabTDcpKcpLcpMcpNchecmDbXucpOcpPcpPcpQcpPcpRcpScpPcoEcmLcmLcmLcpUcpTcfRcfRcfRcfRcfRcfRcfRcencencencpVcpWcpXcpYcpZcqacpXcqbcqccqdcqecqfcqgcqhcqicqjcqkcqlcoQdwTdwWdwTdwUcqncqocoVbLCbLCcqpcqqcqrcqscqtcqubWzcqvcqwcqxcqxcqxcqycqycqzcqAcqBcqpcpdcqCcqDcqEcqFcqGcpdcqHcqIcjCcqJcqKchZcgwcgwcpkcqLcqMcqNcqOcqPcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqZcracracrbcrccrdcrecrfcrgcrhcrhcrhcricdtcdtcdtcdtcdtcdtcdtcfmcdvcrjcpwcrkcrlcrmcrncrocrpcrqcrrcrscrtcrucrvcrvcaHcrwcgZcrxcaHcaIcrycaIcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabKLbTCbKLbTCbKLbTCbKLbTCbKLbTCbKLbTCaafaafbTDcrzbXrcrAcrBcrCcrDcrEcrFcrGcrHcrIcrJcrKcrLcpPcuXcrMcrNcrNcrPcuZcrRcrRcrRcrScrTcrUcrVcpVcpVcrWcpVcencrXcrXcrXcrXcrXcoPcrYcrZcsacsbcsccoQcsdcsecsfcsgcoQdyidypdybdwUcshcqocoVaaaaaacqpcsicqrcsjcskcslbWzcsmcsncqxcsocspcsqcsrcsjcsjcsjcsscstcsucsvcswcsxcsycpdcszcsAcjDcsBcsCchZaaaaaacpkcsDcsEcsFcpkcsGcsHcpncsIcsJcsKcsLcsMcsNcsOcsPcsQcsRcsScpncsTcsUcsVcsVcsWcrhcdvcdvcsXcfmcfmcfmcfmcfmcfmcfmcfmcdvcsYcpwcsZctacrmctbctcctdctectfctgcthcticrvcrvctjctkctlctmcaIctnctoctpcaHaaaaaaaaaaaaaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvbVwbVxbVwbVxbVwbVxbVwbVxbVwbVxbVwbVybVzbTDctqctrctscttctrctuctvctwcpPctxctyctzctActBcpPcuXctCctDctDctFctEctDctGctGctHctHctIctJctIctKctIctIctLctLctMctNctMctLctLctOctOctOctPctOctOctQctRctScoQcoQdUPdUQdBMdwUctTcqocoVaaaaaactUctVctWctXcskctYbWzctZcuacubcuccudcuecufcugcuhcsjcuicujcukculcumcuncuocpdcupcsAcuqcurcuscgwaaaaaacpkcutcuucuucuucuvcuwcuucuucuxcuxcuxcuycuzcuAcuzcuzcuzcuzcuBcuCcuDcuEcuFcuCcuGcuGcuGcuGcuGcuGcuGcuHcuHcuHcuHcuIcuIcuIcuIcuJcuKcuLctbcuMcrqcrqcrqcrqcrqcrvcrvcrvcaHcuNcorcuOcaIcdOcdMcdPcaHaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvcczccAcczccAcczccAcczccAcczccAcczbVycaJbTDcaKcuPcuQcuRcuScuQcuTcuUcpPcpPcpPcpPcpPcpPcpPcuXcuVctDcuWcuYcxbctDcvacvbcvccvcctIcvdctIcvecvfcvgcvhcvicvjcvkcvjcvlcvmcvncvocvpcvqcvrctOcvscvtcvucvvcoQdUSdUTdURdwUcvwcqocoVaaaaaactUcvxcvycvzcvAcvBbWzcDQcvDcqxcvEcvFcvGcvHcvIcvJcsjcvKcvLcvMcvNcumcvOcvPcvQcvRcsAcvScvTcvUcgwaaaaaacpkcsDcuucvVcvWcvXcvYcvZcwacwbcwccwdcuycwecwfcwgcwhcwicwjcwkcwlcwmcwncwocwpcwqcwrcwscwtcwucwvcwwcwxcwycwzcwAcwBcwCcwDcwEcwFcwGcrmcwHcwIcwJcrqcrqcrqcwKcwLcwIcrvcaHcwMcwNcwOcaHccxcwPcaHcaHaafaafaafaadaXGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdQbMCcdQbMCcdQbMCcdQbMCcdQbMCcdQaadbYTcwQcwRcwScwTcwUcwScwTcwVcwWcwXcwYbTDcfRcrMcrNcrNcrNcwZctDcxacxccxdctDcvacxectHctHctIcxfcxgcxhcxicxjcxkcxlcxlcxlcxmcxncxocxpcxqcxrcxscxtcxucxvcxwcxxcvvcoQdwUdwUdwUdwUcoVcqocoVaaaaaactUcxycqrcxzcxAcxBbWzcxCcxDcqxcxEcxFcxGcsrcxHcxIcxJcvKcxKcxLcxMcxNcxOcxPcpdcvRcxQcxRcxScxTcgwaaaaaacpkcsDcuucxUcxVcxWcxXcxYcxZcyacybcyccuzcydcyecyfcygcyhcyicyjcykcylcymcyncyocypcyqcyrcyscyrcytcwwcyucyvcywcwAcyxcyycyzcwEcyAcyBcrmcrmcrmcrmcrmcrmcrmcrmcrmcpzcpzcaHcyCcaIcaHcaHcaHcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaadaaaaaaaaabKLbKMbKMbKMbKMbKMbKMbKMcyDbKMbKMbKMbVybXocyEcyFcyGcyHcyIcyJcyHcyKcyLcyLcyMbTDcfRcyNcmLcyOcyOcyPcyOctDcyRcyQctDctDcyTcyUcyVctIcyWcyXcyYcyZczaczbcxlcxlczcczdczeczfctOczgczhcziczjctOcoQcoQczkcoQcoQcqmcqmcqmcqmcoVcqoczlaaaaaacqpcsicqrczmcznczobWAbWAczpcqxcxEczqczrcsrcsjcvAcsjczscpdcztczuczvczwcpdcpdczxczyczzczAczBchZaaaaaaczCcsDcuuczDczEcxWczFczGcxZczHczIczJcuzczKcyeczLczMczNczOczPczQczRczSczTczUczVczWczXczYczXczZcAacAbcAccAdcwAcAecAfcAgcwEcAhcAicAjcAkcAlcAmcAncAocApcAqcArcAsbYScAtcAuaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabVvcczccAcczccAcczccAcczccAcczccAcczbVyccBbTDbTDcAvcAwcAxbVEcAxcAycyLcyLcAzbTDcfRcyNcmLcyOcAAcABcACctDcAEcyScAFctDcAGcAHcAIctIcAJcAKcALcAMcANcAOcAPcAQcAQcARczecAScATcAUcAVcAWcAXctOcAYcAZcBacBbcBccqmcBdcqmcBecoVcqoczlaaaaaacqpcqpcBfcsjcuhcBgcBhbWAcBicqxcqxcqxcqxcBjcBkcBlcBkcBmcpdcpdcBncBocpdcpdcBpcBqcBrcjDcBschZchZaaaaaaczCcsDcuucuucBtcBucBvcBwcxZcBxcBycBzcuzcBAcBBcBCcBCcBDcBEcBFcBGcBHcBIcwocBJcypcBKcBLcBMcBNcBOcuGcBPcBQcBRcwAcBScBTcBUcwEcBVcBWcBXcBYcBYcAmcBZcCacCbcAmcAmcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabMCcdQbMCcdQbMCcdQbMCcdQbMCcdQbMCcdQaafaafaafbTEbTDbTDbTDbTDbTDbTDbTDbTDbTDbTDcfRcCccencyOcCdcABcCectDcCfcADcNpcCjcCkcClcCmctIcCncCocCpcCqctIcCrcCscCtcCtcCucCvcCwcxpcCxcCycxrcCzctOcAYcCAcCBcCCcBbcBbcqmcBdcqmcoVcqoczlaaaaaaaaactUcCDcCEcuhcCFcCGcCHcCIcCJcCKcCKcCLcCMcCNcskcCOcCMcCPcnDcCQcCRcCScCTcCUcCVcBrcCWcCXcgwaaaaaaaaaczCcsDcCYcuucCZcDacDbcDccxZcDdcDecDdcuzcDfcyecDgcDhcDicDjcDkcDlcwmcDmcwocDncypcDoczXcDpczXcDqcuGcDrcDscDtcwAcDucDvcDwcwEcDxcDycDzcDAcDBcDCcDDcDEcApcDFcDGcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcDIcDJcDKcDLcDLcDMcDNcMXcChcCgcPXcyOcDRcDScDTctDctDctDctDcDUcDVcDWcDUctIcDXctIcDYcDZctIcEacEbcEccEccEdcEecEactOcEfcEgcEhcEictOcEjcEjcEjcEkcEjcBbcBbcBbcqmcoVcqocoVaaaaaaaaactUctUcElcCEcuhcuhcEmcEncEocEocEpcEqcErcEscEtcEucErcEvcEwcExcExcEycEzcBrcBrcCWcEAcgwcgwaaaaaaaaacpkcsDcEBcuucuucECcEDcEEcxZcEFcEGcEHcuzcEIcEJcEKcELcEMcENcEOcEPcEQcERcEScETcuGcEUcEVcEWcEXcEYcuGcDOcFacFbcwAcFccFdcFecwEcFfcFgcFhcFicFjcAmcFkcFlcFmcAscAscAsaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcFncFocFpcFqcDHcDHcDHcMXcEZcDPcFtcyOcyOcyOcyOcGTcFvcFwcFxcDUcFycFzcFAcFBcFCcFDcFEcFFctIcFGcFHcFIcFJcFKcFLcFMctOcxpcFNcxpcFOctOcFPcFQcFRcFScEjcoVcoVcFTcoVcoVcFUcoVaaaaaaaaaaaactUctUcElcCEcsjcFVcFWcFXcFYcsjcFZcGacGbcskcGccGacGdcjDcGecGfcGgcGhcjDcCWcEAcgwcgwaaaaaaaaaaaacpkcsDcGicGjcGkcGlcGmcGncGocGpcGqcGrcuzcGscuzcuzcGtcGucGtcuycuEcGvcuEcGwcuEcuGcwwcGxcGycwwcuGcuGcGzcGAcFrcwAcwEcGCcwEcwEcFfcFgcFhcGDcGEcAmcGFcGGcGHcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacFpcGIcFpcGJcGKcGLcDHcGMcGBcLFcFscGPcGQcGRcGScGTcFucGUcGVcFxcDUcGWcGXcGYcGZcHacDUcHbcHccHdcHecHfcHgcHgcHhcHicHjcHkcHlcHmcHncHocEjcHpcHqcHrcHscEjcHtcHucBbcHvcHwcHxcoVaaaaaaaaaaaaaaactUctUcHycHzcHycHAcHBcHCcHDcHDcHEcslcskcslcHEcHFcHFcHGcHHcHIcHJcHKcHJcgwcgwaaaaaaaaaaaaaaacpkcHLcHMcGjcHNcHOcHPcHQcHRcHScHTcHUcHVcHWcHXcHYcHZcIacHUcIbcIccIdcIecIfcIgcIhcIicIjcIkcIlcImcIncIocIpcIqcIrcIscItcIucIvcIwcIxcIycIzcIAcAmcAmcIBcAmcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaafaafaafaagaadaadaadaadaadaadaagaaaaaaaaacFpcICcIDcIEcGKcIFcIGcIHcGNcKtcIJcIKcGQcGRcGScGTcGTcILcIMcFxcDUcINcIOcIPcIQcIRcIScITcIUcIVcIWcIXcIVcIVcIYcIZcJacJbcJccITcJdcJecJfcJgcJhcJicJjcJkcHtcHucBbcFUcBbcJlcoVaaaaaaaaaaabaaaaaactUctUcqpcJmcJncJocJpcHDcsicJqcslcskcslcJrczBcHFcJscJtcJucJvchZcgwcgwaaaaaaaabaaaaaaaaacpkcJwcJxcGjcGkcJycJzcJAcJBcJCcJDcJEcJFcJGcJHcJIcJJcJIcJEcJKcJLcJMcJNcJOcJPcJQcJRcJScJTcJUcJVcJWcJXcJYdUUcKacJXcKbcJXcKccJXcKdcKecKfcKgcKhcKicKjcKkcKlaaaaaaaabaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaacDHcKmcKncKocGKcKpcDHcKqcKrcGOcKscKtcKucKtcKucKvcKwcKxcIMcIMcDUcKycKzcKzcKAcKBcKCcHgcKDcHgcKEcHgcHgcHgcKDcKFcKGcKGcKGcKGcKGcKGcKHcKIcKJcKKcKLcEjcHtcHucBbcKMcKNcKNcKNcKNcKNaaaaaaaaaaaaaaaaaacqpcqpctUctUctUcqpcqpcqpcKOcKPcKQcqpchZchZcgwcgwcgwchZchZaaaaaaaaaaaaaaaaaacKRcKRcKRcKRcKScKTcKTcIIcKVcKTcKWcKXcKYcKXcKZcLacLbcLccLdcLccLbcLbcLbcLecLfcLgcLbcLhcLicLjcLkcLjcLhcLhcLlcLmcLncLmcLlcAjcLocLpcLqcLrcAjcLscLtcLucLvcLwcLxcLyaaaaaaaaaaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafcLzcLAcDHcLBcLCcLDcDHcKqcLEcLFcLGcLHcLIcLJcLKcLLcGTcLMcIMcIMcDUcLNcLOcKzcLPcLQcDUcLRcLScHgcLTcLUcLUcLUcLScLVcKGcLWcLWcLWcLWcLWcLXcLYcLYcLZcLYcoVcoVcoVcBbcFUcKNcMacMbcMccKNcKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcMdcMecMfcMgcMhctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcKRcMicMjcKRcMkcKVcMlcMmcMncKTcMocMpcMqcMrcMscKZcMtcMucMvcMwcMxcLbcMycMzcMAcMBcMCcLhcMDcMEcMFcMGcMHcMIcMJcMKcMLcMMcMNcMOcMOcMOcMOcMOcMOcMPcMQcMRcMScMTcMUcMVaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaacMWcDHcFpcFpcDHcDHcMXcMYcMYcMXcMZcNacMXcMXcLLcGTcIMcIMcIMcDUcNbcNccNdcNecNfcDUcNgcHgcHgcNhcNicHgcHgcHgcNjcNkcLWcLWcLWcLWcLWcLXcNlcNmcNncLYcNocQkcoVcBbcNqcNrcNscNscNtcNucKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcNvcNwcNxcNycNzctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcNAcNBcNCcKRcNDcKVcNEcNFcNGcKTcNHcNIcNJcNKcNLcNMcNNcNOcNPcNQcNRcLccNScNTcNUcNVcNWcNXcNYcNZcOacObcOccLhcOdcOecOfcOgcOhcMOcOicOjcOkcOlcMOcOmcOncLucOocOpcOqcLyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcOrcOscOtcMXcLLcGTcIMcIMcIMcDUcDUcDUcDUcDUcDUcDUcOucOvcHgcHgcOwcOwcOwcHgcOxcOycLWcLWcLWcLWcLWcLXcOzcOAdUVcLYcOCcBbcODcOEcOFcKNcOGcOHcOIcOJcKNcoVcoVcoVcoVczlczlczlcoVcoVcoVcoVcoVcOKcOLcMfcOMcOKcpkcpkcpkcpkcpkczCczCczCcpkcpkcpkcpkcKRcONcOOcOPcKRcOQcKVcORcOScOTcKTcOUcOVcOWcOXcOYcKZcOZcPacPbcPccPdcLfcNScNTcPecPfcPgcPhcPicPjcPkcPlcPmcLhcPncPocPpcPqcPrcMOcPscPtcPtcPucMOcPvcPwcPxcPycPzcPAcKlaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcPBcPCcPDcMXcLLcGTcGTcPEcIMcFucFucIMcIMcIMcPFcGTcEacPGcEacEacPHcPIcPJcPKcPLcPMcLWcLWcLWcLWcLWcLXcPNcPOcPPcLYcPQcPRcoVcPScPTcKNcKNcKNcKNcKNcKNcPUcPVcPWcQZcPYcPZcQacQacQacQacQacQacQbcQccQdcQecQfcQgcQgcQgcQgcQgcQgcQhcQicpkcQjcSpcQlcKRcQmcOOcQncKRcQocKVcKVcQpcKVcKTcQqcQrcQscQtcQucKXcQvcQwcQxcQycPdcLccNScQzcQAcQBcQCcQDcQEcQFcQGcQHcQIcLhcLlcLlcLlcLlcLlcMOcPscQJcQKcPucMOcQLcQMcKlcKlcKlcKlcKlaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaafaaaaaaaaaaaacMXcQNcQNcMXcMXcLLcIMcGTcGTcFucFucGTcGTcGTcGTcGTcGTcQOcQOcQOcEacEacEacEacQPcQQcKGcLWcLWcLWcLWcLWcLXcLYcQRcLYcLYcoVcoVcoVcQScQTcQUcHwcQVcQWcQXcHwcQacQYdFLcRacRbcRccPUcAYcPUcPUcRdcRecoVcRfcRgcRhcpkcRicRjcRicRkcRlcRmcRncQocRmcsFcsFcRocKRcKRcRpcKRcKRcQocpkcGjcRqcRrcLacRscRtcRucRvcRwcKZcRxcRycRzcRAcRBcLbcRCcRDcREcRFcRGcRHcRIcRJcRKcRLcRMcRNcROcRPcRQcRRcRScMOcRTcRUcPtcRVcMOcRWcRXcpwaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaafaaaaaaaaaaaacMXcQNcQNcMXcMXcLLcIMcGTcGTcFucFucGTcGTcGTcGTcGTcGTcQOcQOcQOcEacEacEacEacQPcQQcKGcLWcLWcLWcLWcLWcLXcLYcKUcLYcLYcoVcoVcoVcQScQTcQUcHwcQVcQWcQXcHwcQacQYdFLcRacRbcRccPUcAYcPUcPUcRdcRecoVcRfcRgcRhcpkcRicRjcRicRkcRlcRmcRncQocRmcsFcsFcRocKRcKRcRpcKRcKRcQocpkcGjcRqcRrcLacRscRtcRucRvcRwcKZcRxcRycRzcRAcRBcLbcRCcRDcREcRFcRGcRHcRIcRJcRKcRLcRMcRNcROcRPcRQcRRcRScMOcRTcRUcPtcRVcMOcRWcRXcpwaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaadaadaaaaaaaaacMXcRYcRZcSacMXcSbcKvcSccSdcSecSfcSgcShcIMcSicIMcSjcSkcSkcSkcSlcSmcSmcEacEacEacKGcKGcKGcKGcKGcKGcKGcQOcSncQOcGTcSocGTdTdcBbcFUcBbcSqcSrcPScSscBbcPUcPUcRdcPUcPUcStcAYcSucSvcSwcSucSucSucSxcSycSzcSAcSAcSAcSAcSAcSAcSAcSBcSCcSDcSDcSDcSEcSFcSGcSHcSDcSDcSIcSJcSKcSLcSMcLacLacLacLacLacLacLacSNcLbcLbcLbcSOcLbcSPcSQcSRcSScSPcLhcSTcLhcLhcLhcMIcSUcSVcSWcSXcSYcSZcTacPtcTbcTccTdcTecTfcTgcpwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfGaafaafaafaafaaaaaaaaacMXcMXcSbcKucKucKucThcTicTicTicTjcTicTicTicTkcKucKucKucKucThcKucKucKucKucKucKucKucKucTlcTmcTncTocTpcKucTqcTrcTscTtcTucTucTucTucTucTucTucSucSucSucSucSucSucSucTvcTwcTxcTycSucTzcTAcTBcSAcTCcTDcTEcTFcTGcSAcTHcsFcsEcsFcsFcTIcTJcTJcTJcTJcTJcTJcTKcTLcsFcTMcTNcTOcTPcTQcTQcTRcTScTTcTUcTVcTWcTXcSRcTYcTZcUacUbcUccSRcUdcTWcTVcTUcUecSUcUfcUgcUhcUicUjcMOcUkcUlcUmcUncUocUpcUqcpwaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaacMXcMXcMYcMYcMYcMXcMXcMXcMYcMYcMYcMXcMXcMXcMXcMXcMXcMXcMXcIMcIMcIMcIMcIMcIMcIMcIMcIMcIMcIMcMXcMXcMXcMXcUrcUscUtcTucUucUvcUwcUxcUycTucUzcUAcUBcUCcUDcUEcUFcUGcUGcUHcUIcSucUJcUKcULcUMcUNcUOcUPcUQcURcSAcUScUTcpkcUUcUVcRmcTJcUWcUXcUYcUZcVacsFcTLcVbcVccVdcVecVfcVgcVhcGjcTScVicUacVjcVkcVlcSRcVmcVncVocVpcVqcSRcVrcVkcVjcUacVscSUcSUcSUcSUcVtcSUcMOcMOcMOcMOcMOcMOcVucVvcVwaafaafaafabcaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacMXcMXcVxcVycVzcVAcVBcVCcVDcVEcVFcMXcMXaaaaaaaaaczlcVGcVHcTucTucTucVIcVJcVKcTucVLcVMcVNcVOcVPcVQcSucVRcVScVTcVUcSucVVcVWcVXcSAcVYcVZcWacWbcWccSAcWdcWecTJcTJcTJcTJcTJcWfcWgcWhcWicWjcqMcWkcWlcWmcWmcWlcWncWocWpcWqcWrcWscWtcWucWvcWwcWxcWycWzcWAcWycWycWxcWAcWBcWCcWycWDcWEcWFcWGcWHcWIcWJcWKcWLcWMcWNcWOcWPcWQcWRcWSaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaacMXcMXcMXcMYcMYcMYcMYcMYcMXcMXcMXaaaaaaaaaaaaczlcWTcWUcTucWVcWWcWXcWYcWZcTucXacXbcXccXdcXecXfcSucSucXgcSucSucSucXhcUKcXicSAcSAcXjcXkcXlcXmcSAcXncXocXpcXqcXrcXscTJcXtcXucXvcXwcTJcXxcQocXycXzcXAcXBcXCcXCcXDcGjcTScXEcXFcXGcXHcXIcXJcXKcXLcXMcXNcXKcXOcXPcXQcXRcXScXTcXUcXVcXWcXXcXYcXZcYacYbcYccYdcYecYfcYgcYhcYiaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacMXcMXcVxcVycVzcVAcVBcVCcVDcVEcVFcMXcMXaaaaaaaaaczlcVGcVHcTucTucTucVIcVJcVKcTucVLcVMcVNcVOcVPcVQcSucVRcVScVTcVUcSucVVcVWcVXcSAcVYcVZcWacWbcWccSAcWdcWecTJcTJcTJcTJcTJcWfcWgcWhcWicWjcqMcWkcWlcWmcWmcWlcWncWocWpcWqcWrcWscWtcWucWvcWwcWxcWycWzcWAcWycWycWxcWAcWBcWCcWycWDcWEcQRcWGcWHcWIcWJcWKcWLcWMcWNcWOcWPcWQcWRcWSaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaacMXcMXcMXcMYcMYcMYcMYcMYcMXcMXcMXaaaaaaaaaaaaczlcWTcWUcTucWVcWWcWXcWYcWZcTucXacXbcXccXdcXecXfcSucSucXgcSucSucSucXhcUKcXicSAcSAcXjcXkcXlcXmcSAcXncXocXpcXqcXrcXscTJcXtcXucXvcXwcTJcXxcQocXycXzcXAcXBcXCcXCcXDcGjcTScXEcXFcXGcXHcXIcXJcXKcXLcXMcXNcXKcXOcXPcXQcXRcXScXTcXUcWFcXWcXXcXYcXZcYacYbcYccYdcYecYfcYgcYhcYiaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaabaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrcVGcVHcTucTucTucTucYjcTucYkcYlcYlcYmcYlcYlcYncYocYpcYqcYrcYscYtcYucUKcYvcYwcYxcYycYzcYAcYBcYCcYDcYEcYFcYGcYHcYIcTJcTJcTJcYJcTJcTJcpkcYKcYLcYMcYNcYOcTRczCczCcTRcTScTScYPcYQcYRcYScYRcSPcYTcYUcYVcSPcYWcYXcYYcYZcYYcZacZbcZbcZbcZccZdcZccZecZfcZgcZfcZhcZicZjcZicWSaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaagaadaadabcaagaagaadaadaadaadaafaaeaaaaafaagaadaadaadaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrcUscZkcZlcZmcZncSucZocTwcZpcZqcZqcZrcZqcZqcZscTwcZtcZucZvcZwcYtcZxcZycZzcZAcZBcZCcXocZDcZEcXocZFcZGcZHcZIcZJcZKcZLcZMcZNcZOcZPcTJcZQcZRcZScZTcZTcTRaaaaaaaafaaaaaaaaacYPcZUcZVcZWcZXcZYcZYcZZcZYcZYdaadabdacdaddaedafdagdahcZbdaidajdakcZedaldamdancZhcWScYicWScVwaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacUrcUrdaodapdaqdaqdaqdardasdatdatdaudatdavdatdawdaxdaydazdaAdazdaBdaCdaDdaEdaFdaGdaHdaIdaJdaKdaJdaJdaLdaMdaNdaOdaPdaQdaRdaQdaQdaSdaTcTJdaUcZRdaVdaWdaXdaYaaaaaaaafaaaaaaaaacYPdaZdbadbbdbcdbddbedbfdbgdbhdbidbjdbkdblcYYdbmdbndbocZbdbpdbqdbrcZedbsdbtdbucZhaaaaaaaaaaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm b/maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm
new file mode 100644
index 0000000000..231a7ec958
--- /dev/null
+++ b/maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm
@@ -0,0 +1,56 @@
+"a" = (/turf/template_noop,/area/template_noop)
+"b" = (/turf/simulated/wall/wood,/area/submap/DJOutpost1)
+"c" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/obj/item/weapon/material/shard{tag = "icon-shardmedium"; icon_state = "shardmedium"},/obj/item/stack/rods,/turf/simulated/floor,/area/submap/DJOutpost1)
+"d" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/DJOutpost1)
+"e" = (/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"f" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"g" = (/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/broken,/area/submap/DJOutpost1)
+"h" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/loot_pile/maint/technical,/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"i" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"k" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/DJOutpost1)
+"l" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"m" = (/obj/structure/table/steel_reinforced,/obj/item/device/radio/phone,/turf/simulated/floor/outdoors/dirt,/area/submap/DJOutpost1)
+"n" = (/obj/item/stack/rods,/turf/template_noop,/area/template_noop)
+"o" = (/turf/simulated/floor/outdoors/dirt,/area/submap/DJOutpost1)
+"p" = (/obj/structure/loot_pile/surface/bones,/turf/simulated/floor/outdoors/dirt,/area/submap/DJOutpost1)
+"q" = (/obj/structure/table/steel_reinforced,/obj/item/device/radio,/obj/structure/cable/yellow,/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"r" = (/turf/simulated/floor/outdoors/rocks,/area/submap/DJOutpost1)
+"s" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor{outdoors = 1},/area/submap/DJOutpost1)
+"u" = (/obj/effect/decal/cleanable/ash,/turf/simulated/floor/outdoors/dirt,/area/submap/DJOutpost1)
+"w" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{tag = "icon-shardmedium"; icon_state = "shardmedium"},/turf/simulated/floor,/area/submap/DJOutpost1)
+"x" = (/obj/structure/girder,/turf/simulated/floor/outdoors/rocks,/area/submap/DJOutpost1)
+"y" = (/obj/structure/table/steel_reinforced,/obj/item/device/radio/intercom/syndicate{desc = "Talk through this."; name = "station intercom (General)"},/turf/simulated/floor/outdoors/dirt,/area/submap/DJOutpost1)
+"A" = (/obj/item/stack/rods,/turf/simulated/floor/outdoors/dirt,/area/submap/DJOutpost1)
+"B" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/floor/outdoors/rocks,/area/submap/DJOutpost1)
+"C" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/submap/DJOutpost1)
+"D" = (/obj/item/weapon/material/shard{tag = "icon-shardmedium"; icon_state = "shardmedium"},/turf/template_noop,/area/template_noop)
+"F" = (/obj/item/device/transfer_valve,/turf/simulated/floor/outdoors/rocks,/area/submap/DJOutpost1)
+"G" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor,/area/submap/DJOutpost1)
+"H" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/template_noop,/area/template_noop)
+"I" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"J" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/template_noop)
+"K" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 15; tag = "icon-sink (EAST)"},/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"L" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/outdoors/rocks,/area/submap/DJOutpost1)
+"M" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "medium"},/obj/item/stack/rods,/turf/simulated/floor,/area/submap/DJOutpost1)
+"N" = (/obj/structure/grille/broken,/obj/item/stack/rods,/turf/simulated/floor,/area/submap/DJOutpost1)
+"O" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/dirt,/area/submap/DJOutpost1)
+"P" = (/obj/effect/decal/cleanable/ash,/turf/simulated/floor/wood/broken,/area/submap/DJOutpost1)
+"S" = (/obj/structure/girder,/turf/simulated/floor/outdoors/dirt,/area/submap/DJOutpost1)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaa
+aaabcbbbbbdbaaaaaa
+aabbeekffefbbaaaaa
+abbePOSoOeegbbaaaa
+nweeOooroOiPhCsoaa
+DbeporxrrooOlSruoa
+abeOrrrrrLmyqxrroa
+abbkxrrFrrxbbkrAoa
+abPorrrrrroOfbouaa
+abeOorrrropeeboaaa
+ndeOokxBxkOPfMHaaa
+abbeOkOoOkeKbbaaaa
+aabbObePebfbbaaaaa
+aaabNbbIbbGbaaaaaa
+aaaaJaaaaaaaaaaaaa
+"}
diff --git a/maps/submaps/surface_submaps/wilderness/wilderness.dm b/maps/submaps/surface_submaps/wilderness/wilderness.dm
index 0ef6ace495..c10f45c6ad 100644
--- a/maps/submaps/surface_submaps/wilderness/wilderness.dm
+++ b/maps/submaps/surface_submaps/wilderness/wilderness.dm
@@ -17,6 +17,7 @@
#include "Lab1.dmm"
#include "Rocky4.dmm"
#include "DJOutpost1.dmm"
+#include "DJOutpost2.dmm"
#include "Rockybase.dmm"
#include "MHR.dmm"
#include "GovPatrol.dmm"
@@ -132,6 +133,14 @@
name = "DJOutpost1"
desc = "Home of Sif Free Radio, the best - and only - radio station for miles around."
mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost1.dmm'
+ template_group = "Sif Free Radio"
+ cost = 5
+
+/datum/map_template/surface/wilderness/deep/DJOutpost2
+ name = "DJOutpost2"
+ desc = "The cratered remains of Sif Free Radio, the best - and only - radio station for miles around."
+ mappath = 'maps/submaps/surface_submaps/wilderness/DJOutpost2.dmm'
+ template_group = "Sif Free Radio"
cost = 5
/datum/map_template/surface/wilderness/deep/Boombase
diff --git a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm
index 3751fa3be6..8e37e52da4 100644
--- a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm
+++ b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm
@@ -54,6 +54,9 @@
/area/submap/DJOutpost1
name = "DJOutpost1"
+/area/submap/DJOutpost2
+ name = "DJOutpost2"
+
/area/submap/MHR
name = "Manhack Rock"
diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm
index 8c6e41fefa..b094ae7f3c 100644
--- a/maps/tether/tether-06-station2.dmm
+++ b/maps/tether/tether-06-station2.dmm
@@ -8938,6 +8938,7 @@
/area/ai_monitored/storage/eva)
"pa" = (
/obj/machinery/door/airlock/glass_command{
+ id_tag = "evadoors";
name = "E.V.A.";
req_one_access = list(18)
},
@@ -8958,6 +8959,7 @@
/area/ai_monitored/storage/eva)
"pc" = (
/obj/machinery/door/airlock/glass_command{
+ id_tag = "evadoors";
name = "E.V.A.";
req_one_access = list(18)
},
diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm
index e634268e31..3bd52b461c 100644
--- a/maps/tether/tether-07-station3.dmm
+++ b/maps/tether/tether-07-station3.dmm
@@ -14692,11 +14692,6 @@
/obj/structure/bed/psych,
/turf/simulated/floor/carpet/blue,
/area/medical/psych)
-"yo" = (
-/obj/item/weapon/clipboard,
-/obj/structure/table/woodentable,
-/turf/simulated/floor/carpet/blue,
-/area/medical/psych)
"yp" = (
/turf/simulated/floor/carpet/blue,
/area/medical/psych)
@@ -15598,6 +15593,11 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
+/obj/item/device/flashlight/lamp/green{
+ dir = 2;
+ pixel_x = -5;
+ pixel_y = 4
+ },
/turf/simulated/floor/carpet/blue,
/area/medical/psych)
"Ae" = (
@@ -22828,6 +22828,11 @@
/obj/effect/landmark/map_data/virgo3b,
/turf/space,
/area/space)
+"LV" = (
+/obj/structure/table/woodentable,
+/obj/item/weapon/clipboard,
+/turf/simulated/floor/carpet/blue,
+/area/medical/psych)
"Nw" = (
/obj/structure/table/standard,
/obj/item/device/healthanalyzer,
@@ -22877,6 +22882,10 @@
},
/turf/simulated/floor/tiled/white,
/area/medical/surgery)
+"St" = (
+/obj/structure/closet/crate/bin,
+/turf/simulated/floor/wood,
+/area/medical/psych)
"Uc" = (
/obj/effect/floor_decal/industrial/loading,
/turf/simulated/floor/tiled/white,
@@ -30276,7 +30285,7 @@ uV
sx
vK
uX
-ym
+LV
zk
zZ
ua
@@ -30520,7 +30529,7 @@ uX
vV
uX
uX
-yo
+ym
zl
Aa
ua
@@ -31004,7 +31013,7 @@ rD
ss
td
ua
-va
+vb
vW
vW
vW
@@ -31126,7 +31135,7 @@ rE
st
te
ua
-vb
+St
vX
wP
xG
diff --git a/maps/tether/tether-10-colony.dmm b/maps/tether/tether-10-colony.dmm
index 1764cceff1..282e8542b5 100644
--- a/maps/tether/tether-10-colony.dmm
+++ b/maps/tether/tether-10-colony.dmm
@@ -16866,6 +16866,13 @@
icon_state = "white"
},
/area/centcom/medical)
+"Rc" = (
+/obj/structure/table/glass,
+/obj/item/device/defib_kit/compact/loaded,
+/turf/unsimulated/floor/steel{
+ icon_state = "white"
+ },
+/area/centcom/medical)
(1,1,1) = {"
aa
@@ -23038,7 +23045,7 @@ jK
jK
nV
oR
-po
+Rc
kv
kv
qM
diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm
index b41ede7b5e..292533fa86 100644
--- a/maps/tether/tether_shuttles.dm
+++ b/maps/tether/tether_shuttles.dm
@@ -190,11 +190,15 @@
current_area = /area/shuttle/excursion/tether
docking_controller_tag = "expshuttle_docker"
web_master_type = /datum/shuttle_web_master/excursion
- var/abduct_chance = 1 //Prob
+ var/abduct_chance = 0.5 //Prob
/datum/shuttle/web_shuttle/excursion/long_jump(var/area/departing, var/area/destination, var/area/interim, var/travel_time, var/direction)
if(prob(abduct_chance))
abduct_chance = 0
+ var/list/occupants = list()
+ for(var/mob/living/L in departing)
+ occupants += key_name(L)
+ log_and_message_admins("Shuttle abduction occuring with (only mobs on turfs): [english_list(occupants)]")
//Build the route to the alien ship
var/obj/shuttle_connector/alienship/ASC = new /obj/shuttle_connector/alienship(null)
ASC.setup_routes()
diff --git a/vorestation.dme b/vorestation.dme
index 070421534e..5445f1b708 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -314,9 +314,11 @@
#include "code\datums\supplypacks\contraband.dm"
#include "code\datums\supplypacks\contraband_vr.dm"
#include "code\datums\supplypacks\costumes.dm"
+#include "code\datums\supplypacks\costumes_vr.dm"
#include "code\datums\supplypacks\engineering.dm"
#include "code\datums\supplypacks\engineering_vr.dm"
#include "code\datums\supplypacks\hospitality.dm"
+#include "code\datums\supplypacks\hospitality_vr.dm"
#include "code\datums\supplypacks\hydroponics.dm"
#include "code\datums\supplypacks\hydroponics_vr.dm"
#include "code\datums\supplypacks\materials.dm"
@@ -389,6 +391,7 @@
#include "code\defines\procs\statistics.dm"
#include "code\game\atoms.dm"
#include "code\game\atoms_movable.dm"
+#include "code\game\atoms_movable_vr.dm"
#include "code\game\base_turf.dm"
#include "code\game\periodic_news.dm"
#include "code\game\response_team.dm"
@@ -526,6 +529,7 @@
#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_networking.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
+#include "code\game\gamemodes\meteor\meteors_vr.dm"
#include "code\game\gamemodes\mixed\conflux.dm"
#include "code\game\gamemodes\mixed\infestation.dm"
#include "code\game\gamemodes\mixed\intrigue.dm"
@@ -681,6 +685,7 @@
#include "code\game\machinery\OpTable.dm"
#include "code\game\machinery\overview.dm"
#include "code\game\machinery\oxygen_pump.dm"
+#include "code\game\machinery\painter_vr.dm"
#include "code\game\machinery\partslathe_vr.dm"
#include "code\game\machinery\pda_multicaster.dm"
#include "code\game\machinery\portable_turret.dm"
@@ -1518,6 +1523,7 @@
#include "code\modules\clothing\masks\voice.dm"
#include "code\modules\clothing\rings\material.dm"
#include "code\modules\clothing\rings\rings.dm"
+#include "code\modules\clothing\rings\rings_vr.dm"
#include "code\modules\clothing\shoes\boots.dm"
#include "code\modules\clothing\shoes\colour.dm"
#include "code\modules\clothing\shoes\leg_guards.dm"